Skip to content
Salesforce Dictionary - Free Salesforce GlossarySalesforce Dictionary

How to build a Data Prep recipe

Recipes are built in Data Prep rather than Setup, so the path starts in Data Manager. Get the graph right first, then worry about scheduling.

Steps
5
Steps
Level
Intermediate
Level
Category
Analytics
Category
By Dipojjal Chakrabarti · Founder & Editor, Salesforce DictionaryLast updated Aug 22, 2026

Recipes are built in Data Prep rather than Setup, so the path starts in Data Manager. Get the graph right first, then worry about scheduling.

  1. Open Data Prep from Data Manager

    In CRM Analytics, go to Data Manager and click Recipes, or Dataflows and Recipes if your org shows the combined tab. Click Create Recipe.

  2. Select your input data

    Choose the datasets, connected objects, or direct data you want. Data Prep adds one Input node per selection. Only 50 columns are selected by default, so pick All Columns if future fields should follow.

  3. Add nodes along the graph

    Hover the line between two nodes to reveal the Add Node button, then choose a type. Flatten any hierarchy before you join, or the flatten will not produce what you expect.

  4. Preview at every step

    Select a node, or one transformation step inside a Transform node, to see the resulting rows. Sort, freeze the left columns, or search to confirm a specific record.

  5. Finish with an Output node and save

    Add one or more Output nodes to set where results land, then save with a name and description. Check the target API name before the first run.

Input noderemember

A dataset, connected object, or direct data reference.

Transform noderemember

Holds the individual transformations.

Join noderemember

Adds related columns from another source.

Aggregate noderemember

Rolls rows up to a coarser grain.

Update noderemember

Swaps values where key pairs match.

Output noderemember

Writes the result to a target.

Gotchas
  • A trended dataset cannot be used as recipe input, a limit people hit mid-build.
  • Filter values are case sensitive, so a filter on Expired returns nothing when the stored value is EXPIRED.
  • A Filter node placed right after a direct data Input node shortens the run by cutting records pulled in.

Go deeper