OmniStudio in Salesforce: Components and Build Guide
OmniStudio is a Salesforce toolset for building guided screens, reusable cards, and server-side data processes without writing a full custom Lightning Web Component stack. Teams use it when a process needs conditional screens, JSON-based data mapping, service calls, and Salesforce Industries-style user experiences that admins can change after release.
This guide explains the main components, when to use each one, how a Salesforce implementation team should design a build, and which security and deployment checks matter in production. It also points readers to official Salesforce Help, Developer Docs, and OmniStudio Trailhead resources for validation.
What Is OmniStudio Used For in Salesforce?
OmniStudio is used for guided transactions where the user needs to enter, review, or update data across several screens. It is common in service intake, insurance quoting, public sector applications, customer onboarding, benefits enrollment, and industry console workspaces where the screen must show record data and make calls to backend services.
What is omnistudio used for in an enterprise org?
In an enterprise org, the better question is not only what is omnistudio used for, but where it reduces custom code without hiding business logic. A good fit is a process that has stable steps, uses Salesforce records, needs server-side orchestration, and benefits from a JSON payload that can be tested outside the screen.
Use OmniStudio when the process has one or more of these traits:
- Guided data capture: An internal user, partner, or customer must complete a sequence of screens with conditional fields.
- Record summary cards: A console page needs compact cards with account, case, policy, order, or member information.
- Data orchestration: The screen must read or write data from Salesforce and external systems before the next step appears.
- Industry templates: The org uses Salesforce Industries products and needs to extend packaged components without replacing them.
- Admin-maintained UX: The business expects screen labels, validation, branching, and mappings to change often after go-live.
OmniStudio Components and When to Use Them
OmniStudio has four core building blocks: OmniScripts, FlexCards, Data Mappers, and Integration Procedures. Older training and managed package orgs may still use the term DataRaptor; current Salesforce documentation also uses Data Mapper in many places. Confirm the terminology in your org before writing runbooks because mixed labels can confuse support teams.
| Component | Primary job | Use it when | Do not use it when |
|---|---|---|---|
| OmniScript | Creates a guided flow of screens and actions | A user must complete a transaction in steps | The process is a simple record edit page with no branching |
| FlexCard | Displays contextual record data and actions | A console, portal, or workspace needs a reusable data card | The page needs a custom component with complex client-side JavaScript |
| Data Mapper / DataRaptor | Maps, reads, writes, or transforms data | You need declarative JSON mapping for Salesforce data | The logic needs loops, external callouts, or multi-step orchestration |
| Integration Procedure | Runs server-side orchestration | You need to call Data Mappers, Apex, REST services, or multiple actions in order | A single direct record read is enough |
OmniScripts for guided work
An OmniScript is the user-facing sequence. It can show steps, input fields, messages, conditional blocks, and actions. In production, design one OmniScript around one business transaction, such as “capture a claim,” “update account contact details,” or “submit a service request.” Avoid turning a single script into a whole application because versioning and testing become harder.
FlexCards for record summaries and actions
A FlexCard works well when users need a compact view of data with actions. For example, a service agent may need a card that shows customer tier, open cases, entitlement status, and a button to start an OmniScript. FlexCards can use data sources such as Integration Procedures, and Salesforce Help documents how to configure those sources for card rendering.
Data Mappers for JSON mapping
Data Mappers handle read, write, and transform operations. In many projects you still hear “DataRaptor Extract,” “DataRaptor Load,” “DataRaptor Transform,” and “Turbo Extract.” The practical design rule is simple: keep Data Mappers focused on mapping. Move branching, callout ordering, and response assembly into an Integration Procedure.
Integration Procedures for server-side orchestration
An Integration Procedure runs on the server and can coordinate several actions. Salesforce Help states that Integration Procedures can interact with REST APIs, Apex classes, and other data steps, which makes them a better fit than a direct Data Mapper when the process has multiple reads, writes, transforms, or service calls.
OmniStudio Salesforce Architecture
A stable OmniStudio Salesforce design separates the user interface, data mapping, orchestration, and record security. The UI should not know every backend detail. The backend process should not depend on a field label from a screen. This separation helps administrators adjust the experience while developers and architects keep integration behavior testable.
Omnistudio salesforce data flow
A typical omnistudio salesforce data flow looks like this:
- A Lightning page, FlexCard, Experience Cloud page, or console action starts an OmniScript.
- The OmniScript passes a context value such as
recordId,accountId, orcaseId. - An Integration Procedure validates the input and calls one or more Data Mappers.
- The Data Mapper reads or writes Salesforce data and returns JSON.
- The Integration Procedure shapes the response for the OmniScript or FlexCard.
- The UI renders fields, conditional blocks, messages, or next-step actions from that JSON.
{
"input": {
"recordId": "0015g00000ABCDeAAH",
"requestedAction": "viewAccountSummary"
},
"output": {
"account": {
"Id": "0015g00000ABCDeAAH",
"Name": "Acme Services",
"Phone": "+1 415 555 0100",
"Type": "Customer"
},
"caseSummary": {
"openCaseCount": 3,
"highestPriority": "High"
}
}
}
Salesforce omnistudio runtime choices
Salesforce OmniStudio implementations can involve standard runtime or managed package runtime, depending on the org, industry product, and migration history. Salesforce Help notes that standard runtime enforces field-level security more strictly than managed package runtime, so teams migrating older components must test CRUD and FLS behavior before switching runtime settings.
For production architecture, document these runtime details in the solution design:
- Which runtime the org uses for OmniScripts and FlexCards.
- Whether components come from standard OmniStudio or managed package namespaces.
- Which permission sets grant access to OmniStudio components, objects, and fields.
- Which integration user or named credential runs external service calls.
- Which deployment path moves activated component versions between environments.
How to Build an OmniStudio Account Update Pattern
The following pattern is a small, production-shaped example. It reads Account data, displays editable fields, validates the payload, and saves selected changes. It avoids a large custom LWC while still keeping the data operations behind an Integration Procedure.
Prerequisites before you build
- Confirm that OmniStudio is enabled and that you can access OmniScripts, FlexCards, Integration Procedures, and Data Mappers.
- Use a sandbox or OmniStudio-enabled developer environment for the first build.
- Confirm object permissions and field-level security for
Account.Name,Account.Phone, andAccount.Type. - Confirm whether your org uses standard runtime or managed package runtime.
- Decide a naming convention before creating components. For example:
Acct_UpdateContactDetails_OS,Acct_GetSummary_IP, andAcct_LoadAccount_DR.
Create the read Data Mapper
Create a Data Mapper Extract that receives recordId and returns the fields that the screen needs. Keep the output JSON small. Do not return every field on Account because large payloads slow rendering and increase troubleshooting time.
SELECT Id, Name, Phone, Type
FROM Account
WHERE Id = :recordId
LIMIT 1
In the Data Mapper output, map the selected Account fields into one predictable node:
{
"account": {
"Id": "%Account:Id%",
"Name": "%Account:Name%",
"Phone": "%Account:Phone%",
"Type": "%Account:Type%"
}
}
Governor limit note: the Data Mapper abstracts the query, but the transaction still runs on Salesforce resources. Filter by a selective key such as record Id, avoid unbounded extracts, and return only fields required by the UI.
Create the save Data Mapper
Create a Data Mapper Load for updates. Map only the fields that the user can change. Do not let the client payload update fields such as owner, approval status, or integration-only attributes unless the business process requires it and the user has permission.
{
"account": {
"Id": "0015g00000ABCDeAAH",
"Phone": "+1 415 555 0199",
"Type": "Customer"
}
}
For validation, prefer OmniScript input validation for simple field checks and server-side validation for rules that depend on current record state or external systems. If the same rule protects multiple channels, keep it outside the screen so API and UI calls behave consistently.
Create the Integration Procedure
Build an Integration Procedure that accepts recordId and action. Use one branch for read and one branch for save. This keeps the UI simple and gives architects a single service boundary to test.
| Step | Action type | Purpose |
|---|---|---|
| ValidateInput | Set Values / Conditional logic | Reject blank or malformed record identifiers before data access |
| ReadAccount | Data Mapper Extract | Return Account fields for the screen |
| SaveAccount | Data Mapper Load | Persist allowed changes when the user submits |
| Response | Response Action | Return a small JSON payload with success, errors, and updated fields |
{
"success": true,
"message": "Account details were updated.",
"account": {
"Id": "0015g00000ABCDeAAH",
"Phone": "+1 415 555 0199",
"Type": "Customer"
}
}
Create the OmniScript screen
Create one step named AccountDetails. Add input elements for Name, Phone, and Type. Set Name to read-only if the user should not change legal or master-data values from this process. Load values when the script starts, and call the save branch only after the user confirms the change.
In enterprise orgs, do not rely only on labels for mapping. Element names, JSON paths, and Data Mapper output paths must match. A common issue is a field that renders blank because the screen expects account.Phone while the service returns Account.Phone. Pick one casing style and use it across all components.
Add a FlexCard entry point
Add a FlexCard to an Account Lightning record page or console workspace. The card can display current phone, type, open cases, or last interaction date, and include an action that launches the OmniScript. This gives users a visible entry point instead of hiding the transaction in a menu.
Best Practices for OmniStudio Security and Performance
The toolset does not remove the need for Salesforce security design. Treat every screen input as untrusted, especially when the component runs in Experience Cloud or can be launched with a URL parameter.
Security checks
- CRUD and FLS: Test object and field access for each profile or permission set group that launches the component.
- Sharing: Confirm whether the user should see the target record under org-wide defaults, role hierarchy, sharing rules, teams, or sharing sets.
- Input validation: Validate record identifiers, picklist values, dates, and numbers before running load actions.
- External callouts: Use Named Credentials or External Credentials where supported by your integration design. Do not hardcode secrets in component configuration.
- Error messages: Show users a safe message. Log technical details for administrators, not on the public screen.
Performance checks
- Use Integration Procedures as a service layer when the screen needs more than one data operation.
- Return small JSON payloads. Avoid sending unused fields or large child lists to the browser.
- Filter Data Mapper extracts by indexed or selective fields when possible.
- Cache read-only reference data where your runtime and business rules allow it.
- Measure Integration Procedure response time in preview and again with production-like data volume.
Governance Model for Production Teams
A production implementation needs clear ownership. Treat each guided transaction as a product owned by the business process team, with technical review from the platform team. The business owner should approve labels, screen order, required fields, and exception messages. The architect should approve data access, integration boundaries, and deployment dependencies.
Use a lightweight design record for every transaction. Include the launch location, input parameters, components called, objects touched, external systems called, permission sets required, and rollback plan. This record helps support teams answer basic questions after release: which service reads the data, which version is active, which users can run it, and where errors should be checked.
For regulated orgs, add approval checkpoints for data classification. Do not place restricted data in browser-visible JSON unless the user is allowed to see it and the channel is approved for that data. If a screen only needs a masked value, return the masked value from the server instead of sending the full value and hiding part of it in the UI.
Define a naming standard before the first build. A practical format is domain, action, component type, and purpose, such as Acct_UpdateContactDetails_OS or Case_GetEntitlement_IP. Consistent names make logs, exports, and release notes easier to read.
Review ownership again after go-live. If administrators will change screen text or mappings, give them a documented promotion path and a checklist for regression testing. If developers own the service layer, require pull requests or change records for any action that affects integration behavior. This split prevents small label changes from being blocked by code review while still protecting data operations.
OmniStudio vs Flow vs LWC
OmniStudio, Flow, and Lightning Web Components solve different problems. The right choice depends on how much UI control, data orchestration, and developer ownership the process needs.
| Requirement | Use OmniStudio | Use Flow | Use LWC |
|---|---|---|---|
| Guided industry transaction with JSON mapping | Yes | Sometimes | Only if custom UI is required |
| Simple record automation | Usually no | Yes | No |
| Pixel-level client-side behavior | Limited | Limited | Yes |
| Server-side orchestration with declarative data mapping | Yes | Sometimes | Requires Apex or API layer |
| Admin maintenance after go-live | Good fit when team is trained | Good fit for platform automation | Requires developer workflow |
For many Salesforce Industries projects, the final design uses all three. A FlexCard starts an OmniScript, an Integration Procedure handles data operations, a Flow runs a standard automation task, and a custom LWC fills a gap where the declarative screen cannot meet the UX requirement.
Deployment, Versioning, and Testing
OmniStudio components have lifecycle concerns that differ from Apex or standard metadata. Always define how the team activates versions, packages dependencies, and rolls back a change before the first sprint ends.
Versioning rules
- Do not edit an active production component directly. Clone or create a new version, test it, then activate it through the agreed release path.
- Keep component names stable and encode business purpose, not sprint number.
- Track dependencies between OmniScripts, FlexCards, Integration Procedures, Data Mappers, Integration Procedure actions, and custom labels.
- Export and store component definitions in source control when your delivery process supports it.
Testing checklist
- Test with users who have full access and users with restricted field access.
- Test with missing optional fields, blank picklists, inactive records, and large related lists.
- Test standard runtime behavior separately if the org recently moved from managed package runtime.
- Run preview tests for Integration Procedures and Data Mappers using production-like JSON.
- Validate Experience Cloud behavior if guest users, external users, or sharing sets are involved.
Common Errors with OmniStudio Builds
| Error pattern | Likely cause | Fix |
|---|---|---|
| Screen field is blank | JSON path mismatch between Data Mapper output and OmniScript element | Compare preview JSON with the element data binding and casing |
| Data saves in preview but fails for users | Missing CRUD, FLS, sharing, or runtime permission | Test with the user’s profile or permission set group |
| Integration Procedure is slow | Too many actions, large payload, nonselective queries, or external latency | Reduce output, split calls, cache safe reference data, and inspect response timing |
| Component works in one sandbox but not another | Missing dependency or inactive component version | Deploy dependencies together and verify activated versions after migration |
| Picklist values do not show | Record type, field access, or option source configuration issue | Check record type assignments, field access, and the input element option source |
OmniStudio Trailhead and Official Documentation
The best omnistudio trailhead path depends on your role. Admins should start with OmniScript and FlexCard modules. Developers and architects should add Data Mapper, Integration Procedure, runtime, and deployment topics. The official Trailhead modules are useful because they use Salesforce-supported terminology and show the expected component flow.
Use these official Salesforce references when validating a design:
- Salesforce Help: OmniStudio standard documentation
- Salesforce Help: Data Mapper or Integration Procedure guidance
- Trailhead: Discover DataRaptor types and functions
Related SalesforceTutorial Resources
Continue with these related SalesforceTutorial guides when you need the platform concepts around an OmniStudio build:
- Salesforce Flow automation patterns
- Lightning Web Components development guide
- Salesforce integration patterns for REST and async processing
- Salesforce Data Cloud architecture basics
- Salesforce security model and sharing design
Frequently Asked Questions
What is OmniStudio used for in Salesforce?
OmniStudio is used to build guided Salesforce experiences, data cards, JSON mappings, and server-side integration processes. It fits processes where users move through screens and the system must read, transform, or save data during the transaction.
Is OmniStudio the same as Salesforce Flow?
No. Flow is the core Salesforce automation tool for record-triggered automation, screen flows, approvals, and platform processes. OmniStudio is better suited to Salesforce Industries-style guided experiences, FlexCards, Data Mappers, and Integration Procedures. Some solutions use both: Flow for platform automation and OmniStudio for the guided user interface and orchestration layer.
What are the main OmniStudio components?
The main OmniStudio components are OmniScripts, FlexCards, Data Mappers, and Integration Procedures. OmniScripts guide the user, FlexCards show contextual data, Data Mappers map and transform data, and Integration Procedures coordinate server-side actions.
What is the difference between a Data Mapper and an Integration Procedure?
A Data Mapper handles focused read, write, or transform work. An Integration Procedure coordinates multiple steps, such as calling Data Mappers, Apex, REST services, or response actions. Use a Data Mapper for mapping and use an Integration Procedure when the process needs orchestration.
Where should I start with OmniStudio Trailhead?
Start with OmniStudio Trailhead modules that explain OmniScripts, FlexCards, Data Mappers, and Integration Procedures. Admins should focus on the builders first. Developers and architects should add runtime, security, integration, and deployment topics before working on production components.
Does OmniStudio require Apex?
OmniStudio does not require Apex for many guided screens, Salesforce reads and writes, or JSON transforms. Apex becomes useful when logic cannot be expressed safely in configuration, when the org needs a shared service layer, or when a custom integration pattern requires code.
How do I make Salesforce OmniStudio components production-ready?
Make Salesforce OmniStudio components production-ready by testing CRUD, FLS, sharing, runtime behavior, data volume, error handling, and deployment dependencies. Also confirm that the active versions in production match the versions tested in the release environment.