No native way to export the Columns tab from a Recipe Dataset Output node and you WANT THE SOURCE? Here's a console script that does it.
This downlaods a csv with the node name as the file name, all the columns (Name,API Name, Type,
and Source!!!) and all field rows.
I'm a Business/Data Systems Analyst,
nota developer. I hit a wall building a field-level data dictionary across too many CRMA recipes: there's no export button on the Recipe Output node's Columns tab, and the old trick of highlighting the table, finding the sweet spot to drag it into Excel doesn't seem to work anymore (and was frustrating and time consuming anyway even if it does).
Querying the dataset via Workbench or the API gets you Name, API Name, and Type easily. It does not get you Source
(which Salesforce object a column originated from), at least not without manually tracing the recipe's own JSON node graph, join by join. If you actually need that Source column the way it displays on screen, querying alone won't get you there quickly. This makes it difficult to audit for duplicate fields in more complex recipes with loops. I mean, going to the output node and searching by field name and working backwards one by one .... UGH.
So I used Claude AI to build a browser console script instead, worked through screenshot by screenshot, since I don't code. A few things that helped it actually go somewhere if anyone else wants to use AI to solve similar problems:
- Describing what I used to be able to do, not what I thought the tool should be called: "You could drag and drop it all into Excel if all highlighted and you you found the exact “sweet spot” on the screen to do so, but that must have been prevented or I can’t find the sweet spot anymore."
- Sending screenshots of DevTools and error messages instead of typing out what I thought they meant
- Saying flatly when something didn't work or I didn't understand a step, no guessing
- Giving real scale before automating anything further: "We are at about XXX datasets across XX recipes and that is likely to grow", that's what got me steered away from clicking through the UI programmatically and toward a safer read-only approach
- Asking directly: "Are there any security risks to doing this?" before trusting it enough to run, test, refine, and share
End result:
paste into DevTools Console while on a Recipe Output node's Columns tab, no coding needed. It reads the visible table and downloads a CSV named after the output node. Read-only, doesn't touch the org, doesn't call any API, just reads what's already rendered on your screen. Still manual, but much quicker.
You do need to be on the Output Node with the Columns Preview selected (and preview loaded).
#CRMAnalytics #Data Management #IdeaExchange
@Melissa Loudon Please follow the below steps:
- Open your CRM Analytics Recipe.
- Navigate to the Dataset Output node.
- Open the Columns tab.
- Wait until the preview has fully loaded.
- Press F12 (Developer Tools).
- Open the Console tab.
- Paste the script below.
- Press Enter.
- A CSV file will automatically download.
Below is the script:
(() => {
// Get output node name
let nodeName = "Recipe_Output";
const title =
document.querySelector('[data-testid="recipe-node-title"]') ||
document.querySelector('.recipe-node-title') ||
document.querySelector('h1,h2,h3');
if (title) {
nodeName = title.textContent.trim().replace(/[\\/:*?"<>|]/g, "_");
}
// Find table
const table = document.querySelector("table");
if (!table) {
alert("Columns table not found. Make sure the Output Node > Columns tab is open and fully loaded.");
return;
}
const rows = [...table.querySelectorAll("tr")];
const csv = rows.map(row => {
return [...row.querySelectorAll("th,td")]
.map(cell =>
`"${cell.innerText.replace(/"/g, '""').trim()}"`
)
.join(",");
}).join("\n");
const blob = new Blob([csv], {
type: "text/csv;charset=utf-8;"
});
const link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.download = `${nodeName}.csv`;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
console.log(`Downloaded ${nodeName}.csv`);
})();
