Integration

How to Choose a Salesforce Integration Pattern — Decision Framework and Official Rankings (Summer '26)

By Rishabh Panwar · Published 15 September 2026 · 9 min read · Advanced

Who calls whom? That question sounds too simple to matter, yet skipping it is behind most bad integration designs. Someone says “let’s use Platform Events” in the first five minutes, and the team spends a week bending the requirement to fit. Choosing a Salesforce integration pattern goes much better when you start from four questions, let the answers narrow the tools, and then check the choice against how Salesforce’s own Integration Patterns guide rates it. Everything below is current to Summer ‘26.

New to the building blocks? Read the integration patterns overview first; it introduces REST, SOAP and events.

The four questions

Ask these in order. By the fourth, the tool usually picks itself.

  1. Direction. Is Salesforce the caller (outbound) or the one being called (inbound)?
  2. Timing. Does the caller need a response right now (synchronous), or can it move on (asynchronous)?
  3. Volume. Is this one record, a few dozen, or millions?
  4. Ownership. Does the data need to live in Salesforce, or can it stay in the source system?

In a design review or an interview, saying those four questions out loud before naming anything shows you are designing from requirements. It also stops the most common configuration mistake, which is setting up inbound components for an outbound integration. The Named Credentials guide covers that trap in detail.

Inbound: an external system calls Salesforce

ToolHow it worksGood fitPoor fit
REST APIJSON, resource-based, synchronousThe default for modern integrations, mobile apps and lightweight CRUDVery high volume
SOAP APIXML with a WSDL contract, synchronousLegacy consumers and middleware that expects typed contractsNew builds
Bulk API 2.0Asynchronous, job-based, CSVLoads and extracts above roughly 2,000 recordsAnything that needs an immediate response
CompositeUp to 25 subrequests that can reference earlier resultsSeveral dependent steps in one round tripLarge independent workloads
Composite GraphUp to 500 nodes per graph; each graph saves or rolls back as a unitA parent record and its children saved togetherSimple flat operations
sObject CollectionsUp to 200 records of one operation per callBulk-style CRUD without the overhead of a jobAnything above 200 records
GraphQL APIClient chooses the fields through a single endpointUI-driven reads that would otherwise over-fetchHigh-volume writes
Pub/Sub APIgRPC publish and subscribeNew event-based integrationsRequest and reply

The Composite family deserves its own look because the three variants behave very differently. The Composite API comparison covers subrequest limits, API call counting and the HTTP 200 trap.

Outbound: Salesforce calls another system

ToolHow it worksGood fit
Apex calloutHTTP or SOAP from Apex, sync or asyncFull control over logic and error handling
External ServicesInvocable actions generated from an OpenAPI specLow-code orchestration from Flow
HTTP Callout action in FlowDeclarative REST call without a full External Services registrationSimple REST calls from Flow
Outbound MessagesSOAP XML sent on a field change, with retries for 24 hoursExisting legacy integrations only
Event RelayForwards Platform Events and Change Data Capture to Amazon EventBridgePushing events into AWS

A few callout rules come up constantly:

  • You can’t make a callout after uncommitted DML in the same transaction. The platform throws CalloutException.
  • Triggers can’t call out directly, so the work has to move to async Apex.
  • A transaction allows 100 callouts and 120 seconds of cumulative callout time.
  • A synchronous transaction can enqueue 50 async jobs. Enqueue one job per batch of records, and never one per record.

Data virtualization: leave the data where it lives

Salesforce Connect surfaces external data as External Objects (usually over OData). The records show up in the UI and in SOQL, but nothing is copied and no Salesforce storage is used.

It fits when the source system stays the system of record. It fits poorly when you need large-scale reporting or offline access. External Objects also come with real constraints: limited SOQL support, no roll-up summaries, and the __x suffix on every object name.

The Salesforce guidance is plain: don’t copy data into Salesforce unless it truly has to live there.

Event-driven options

ToolPayload and retentionGood fit
Platform EventsCustom payload up to 1 MB, 72-hour replayCustom notification contracts and loose coupling
Change Data CaptureFixed record-change payload up to 1 MB, 72-hour replayStreaming record changes without designing a payload
Pub/Sub APIgRPC access to Platform Events, CDC and Real-Time Event MonitoringAll new code-based publish and subscribe work
Streaming API (PushTopic, generic events)LegacyExisting subscribers only

Events are asynchronous and loosely coupled, which is what makes them attractive. The Platform Events deep dive explains the publish and subscribe model. Their delivery guarantees are weaker than most people assume, though. The Platform Events reliability guide explains exactly where messages can go missing.

Enterprise tooling

If the company already runs MuleSoft, route integrations through it instead of adding more point-to-point links; you get API management, orchestration and monitoring in one place. Without an existing ESB landscape, the extra licence is usually hard to justify. Salesforce’s guidance now names Informatica alongside it, with MuleSoft covering integration and APIs and Informatica covering enterprise data management and ETL.

A few other tools solve narrower problems. Heroku Connect keeps Salesforce and Heroku Postgres in two-way sync, including large volumes and org-to-org setups. Data 360 (formerly Data Cloud) harmonises data from many sources, resolves identities and offers zero-copy access across orgs. And Flow Orchestration runs long, multi-step processes natively, mixing background, interactive and MuleSoft steps, which can remove the need for middleware altogether.

The official selection matrix

The Salesforce Integration Patterns guide classifies each pattern by type and timing. Process integration covers a business flow that spans systems. Data integration covers the information those systems share. Virtual integration means Salesforce works with external data without storing it.

When Salesforce calls another system

TypeTimingPattern
ProcessSynchronousRemote Process Invocation — Request and Reply
ProcessAsynchronousRemote Process Invocation — Fire and Forget
DataSynchronousRemote Process Invocation — Request and Reply
DataAsynchronousUI Update Based on Data Changes
VirtualSynchronousData Virtualization

When another system calls Salesforce

TypeTimingPattern
ProcessSynchronous or asynchronousRemote Call-In
DataSynchronousRemote Call-In
DataAsynchronousBatch Data Synchronization

How the official guide ranks each solution

The guide grades each technology for each pattern. The rankings are worth memorising because a few of them surprise people.

Request and Reply

SolutionRatingNotes
External Services calling a REST APIBestDeclarative; needs an OpenAPI 2.0 or 3.0 spec
Lightning component or page calling a synchronous Apex calloutBestUse a Continuation when the endpoint may be slow
HTTP Callout action in FlowGoodREST from Flow without a full External Services setup
Trigger calling an async calloutSuboptimalThis is really Fire and Forget
Batch Apex making synchronous calloutsSuboptimalPer-batch callout limits get in the way

A Continuation lets a Lightning component wait on a slow callout without holding a server thread, so a sluggish endpoint doesn’t eat into synchronous Apex limits.

Fire and Forget

SolutionRatingNotes
Flow-driven Platform EventsBestRated above Apex-driven events
Pub/Sub APIBestThe recommended route for external consumers
Change Data CaptureBestFully declarative
Event RelayBestServerless stream to Amazon EventBridge
OmniStudio Integration ProceduresGood
Apex-driven Platform EventsGood
Flow-driven Outbound MessagingSuboptimalLegacy; new work should use Flow with Pub/Sub API
Async callout from Lightning or a triggerSuboptimalYou have to build guaranteed delivery yourself

Remote Call-In

SolutionRatingNotes
Composite API, Composite Graph, REST API, Pub/Sub API, Platform EventsBest
Bulk API 2.0Best for bulkAbove roughly 2,000 records
GraphQL APIBest for complex readsMulti-object queries with selective fields
SOAP APISuboptimal
Apex web services and Apex REST servicesSuboptimalOnly when you need full transactional control or custom pre-commit logic

That last row catches a lot of teams. A custom @RestResource endpoint feels like the flexible choice, but the standard APIs are rated higher unless you have a specific reason to own the transaction.

Facts that change designs

  • Salesforce can’t join a transaction that spans systems. It rolls back only its own work, so multi-system rollback logic belongs in middleware.
  • Salesforce Private Connect (on Hyperforce) gives callouts a private network path when traffic shouldn’t cross the public internet.
  • Salesforce uses optimistic locking for edits. It notes when you read a record and warns you at save time if someone else changed it in the meantime.
  • Batch data sync has its own rulebook. Record locking, change detection and load ordering are covered in the incremental sync guide.

Quick scenario answers

A nightly sync of 2 million records. Bulk API 2.0. It chunks the data for you and runs as an async job. If the company already has MuleSoft, orchestrate and monitor the job there.

An external system must create an Account and three Contacts atomically. Composite Graph. It works out the parent-before-child order and each graph saves or rolls back as a unit. Plain Composite with @{ref} references also works, but Graph lets each order succeed or fail independently of the others in the same payload.

Real-time inventory from an ERP. Start with no replication. Salesforce Connect keeps the ERP as the system of record with no storage cost. Replicate only if you need reporting at scale, offline access, or the ERP can’t take the query load.

“We can’t lose a single message.” Events alone won’t meet that bar. Store the replay ID of the last event processed, make the subscriber safe to run twice on the same event, and add reconciliation or a middleware queue for anything replay can’t reach.

Answering integration questions well

  • Count the requirements in the question before you answer. Multi-part questions are where points are lost.
  • Name two or three candidate tools, then commit to one and give the reason. A list without a decision earns half credit.
  • Before you finish, check that you addressed every stated constraint: authentication, volume, atomicity and latency.

Frequently asked questions

How do I choose the right Salesforce integration pattern?

Answer four questions in order: who initiates the call (direction), whether the caller needs an answer immediately (timing), how many records move (volume), and whether the data has to live in Salesforce at all (ownership). Those four answers narrow the choice to one or two tools.

What are the six Salesforce integration patterns?

Remote Process Invocation — Request and Reply, Remote Process Invocation — Fire and Forget, Batch Data Synchronization, Remote Call-In, UI Update Based on Data Changes, and Data Virtualization.

When should I use Salesforce Connect instead of copying data into Salesforce?

Use Salesforce Connect when the external system remains the system of record and users only need to see or query the data. Replicate only when you need reporting at scale, offline access, or the source system cannot handle the query load.

Which Salesforce API should I use for more than 2,000 records?

Bulk API 2.0. The official Integration Patterns guide rates it the best fit for bulk inbound work above roughly 2,000 records, because it runs asynchronously and chunks the data for you.

Are Apex REST services a good choice for inbound integrations?

The official guide rates custom Apex web services and Apex REST services as suboptimal for Remote Call-In. Use them only when you need full transactional control or custom logic that must run before the commit; otherwise the standard REST, Composite, or Bulk APIs are the better fit.

Can Salesforce take part in a distributed transaction across several systems?

No. Salesforce can roll back only its own work. If a multi-system process must roll everything back on failure, that coordination has to live in middleware.