It’s hard to show just how important Resources and Variables are to Salesforce Flow. They are what I like to call the ‘behind-the-scenes’ building blocks that give flows their memory and flexibility – helping them tap into their full potential.
When you first open Flow Builder, most of your attention naturally goes to the elements in the toolbox, because they’re the visible parts you drag onto the canvas. But resources are a little different. They don’t appear as shapes in your flow, but they quietly power what happens in the background. I like to think of them as seasoning ingredients you add while cooking. You might not see them on the plate, but without them, the dish wouldn’t come together.
Types of Resources
Variables
Remember back in school when x and y were used in algebra to represent unknown numbers? Using x and y in equations means you don’t know the value yet, and it can change as you solve the problem.
Variables in Salesforce work the same way – they store data you can use and reuse in your flow. You set them because you don’t know the exact value right now, so they serve as placeholders for values you expect to change or pass between elements.
The kinds of data you can put in a variable include Text, Record, Number, Currency, Boolean, Date, Time, Date/Time, Picklist, and Multi-Select Picklist.
For example, in this screenshot, I created a variable named accountID. It acts as the “container” for a source Account ID that I want to use in my flow. Since record IDs are made up of alphanumeric characters, the data type I chose is Text.

Collection Variables
If variables are like single containers, collections are like a basket that holds many of those containers. A collection variable is essentially a list of values or records. When creating a new variable, just check the box for “Allow multiple values (collection)” to turn it into a collection variable.
One important detail to note is that a collection can only hold values of the same type. For example, a text collection can only hold text values, and a record collection can only hold records of the same object (all Accounts, all Contacts, etc.). You can’t mix different objects or data types in the same collection.
These are powerful when your flow needs to handle multiple records at once. For example, you might gather all Cases related to an Account into a collection, then loop through them to update their statuses.
Constants
Just like constants in algebra represent fixed values, constants in Flow also store values that don’t change. They’re similar to variables, but with one key difference: their value stays the same. You set it once, and then use it anywhere in your flow. If you ever need to update it, you only have to change it once, and it updates everywhere it appears in the flow.
For example, imagine you want to use your company’s standard support email address in multiple places within a flow. Instead of hardcoding it each time, you could store it as a constant called SupportEmail with a data type of Text. That way, if the email address ever changes, you only need to update the constant once.

Formulas
Formulas in Flow work just like the formula fields you know in Salesforce. They calculate values dynamically based on other data, so instead of typing in a fixed number or string, you can make your flow “do the math” for you.
For example, you could create a formula that adds 30 days to the date the flow was run, helping you calculate a follow-up date automatically. Or maybe you want to multiply a discount rate by an Opportunity Amount – a formula can handle that computation for you.

The beauty of formulas is that they’re not static, and they adapt depending on the data your flow is working with.
Text Templates
Text templates are resources that let you create and reuse blocks of text. They’re really handy when sending emails (though the newer enhanced Send Email flow action can handle your email content for you directly!) or setting descriptions in a record update, for example.
Instead of typing out a long body of text every time you need it, you can build it once as a text template. You can even insert merge fields (like {!Contact.FirstName}), so the message feels personalized. This keeps your flow cleaner and makes text easier to manage if you need to edit it later on.

Stages
Stages are used in Screen Flows to show users where they are in a guided process. Since we can now display progress indicators on a Screen element, Stage resources with progress indicators keep users informed about which stage they’re currently in and how they’ve progressed in a flow so far.
While they don’t change the actual logic of the flow, by representing the steps in your flow, it’s easier to determine how the sorting goes among other steps.
Choices
Choices are resources that represent an option for users when they’re filling out a screen in your flow. You can configure them as individual choices in radio buttons or picklists.
But if you’d like to configure your screen’s choices as a set from other sources instead of individually, check out these other types of choice resources:
- Picklist Choice Set: Pulls values directly from an existing picklist field. For example, the screenshot below shows a picklist choice set that can be called out on a Screen Flow component to display values from the custom
Expense__cpicklist field in a Reimbursement Request record.

- Record Choice Set: Generate a set of choices by using a filtered list of records. To determine which records are included in the choice set, filters can be set directly from the resource’s configuration, and then, for each record that meets the filter conditions, the flow creates a choice using values from the record.
- Collection Choice Set: Also generates a set of choices by using a list of records (like record choice set above), but this time, the record list comes from a record collection variable or external data.
Final Thoughts
Yes, elements are your building blocks, but they don’t stand alone. Resources may not be the flashiest part of Flow Builder, but they’re what bring your automations to life. Elements can handle the “what to do”, but resources handle the “how” and “with what?”
By learning to work with these and how to use them together, you can create dynamic and flexible processes that can adapt to real business needs.