Choosing Data Stream Ingestion Patterns

Each source can reach Data Cloud in several ways. Choosing the right pattern per source decides freshness, cost, effort and how easy failures are to spot.

Type
Article
Topic
Data Cloud
Reading time
5 min
Updated
Author
GeekMidst Team
Reviewed by
Site owner
Banner for the GeekMidst article “Choosing Data Stream Ingestion Patterns”, covering The main ingestion patterns and Matching pattern to need

Data Cloud offers several ways to bring a source in, and most programmes end up using three or four of them at once. The trouble starts when the choice is made by habit: everything through flat files because that is what the warehouse team knows, or everything through an API because it sounds modern. The right pattern depends on how fresh the data must be, how much of it there is, where it already lives, and who will support the pipe after go-live.

Diagram showing CRM, Marketing Cloud, ecommerce and ERP sources reaching Data Cloud through the CRM connector, Marketing Cloud connector, Ingestion API and cloud storage, landing in profile or engagement data streams
Match each source to a pattern by freshness, volume and where the data lives, then choose the stream category and primary key before you build. View full size

The main ingestion patterns

Data streams are the mechanism; connectors are the way each stream reaches its source. The common options are:

  • Salesforce CRM connector. Native ingestion of objects such as Contact, Lead, Account and custom objects from connected Salesforce orgs. Usually the first stream configured, and the lowest effort for CRM data.
  • Marketing Cloud Engagement connector. Brings in data extensions and engagement data from connected business units. Useful for email engagement history and subscriber data already curated in Marketing Cloud.
  • Ingestion API. A REST interface with a streaming pattern for small, frequent payloads and a bulk pattern for larger files. You define the schema, and your systems or middleware push data in.
  • Cloud storage connectors. Scheduled pickup of files from storage such as Amazon S3, Google Cloud Storage or Azure. A pragmatic fit for nightly extracts from systems you cannot connect to directly.
  • Web and mobile SDKs. Capture behavioural events from sites and apps against device identifiers, linked to known people when they identify themselves.
  • Zero copy and federation. Query data where it already lives in supported warehouses and lakehouses, rather than copying it. Supported platforms and features change, so check the current list in Salesforce Help.
  • MuleSoft and other middleware. When a source needs orchestration, transformation or error handling beyond what a direct connector gives you.

Connector availability, refresh frequencies and limits vary by edition and release. Treat any number you see quoted, including here, as something to confirm for your org.

Matching pattern to need

FreshnessEffort to buildBest for
CRM connectorScheduled sync, frequentLowSalesforce objects in connected orgs
Marketing Cloud connectorScheduledLowData extensions and engagement already in Marketing Cloud
Ingestion API (streaming)Near real time, in micro-batchesMedium to highEvents and profile changes from apps you control
Ingestion API (bulk)When you pushMediumLarge periodic loads from your own jobs
Cloud storageScheduled file pickupLow to mediumNightly extracts from ERP, POS or legacy systems
Zero copyQueried in placeMediumLarge warehouse tables you do not want duplicated

Decisions to make per source

What category is the data?

When you create a data stream you choose a category, such as Profile, Engagement or Other. Engagement data needs an event date-time field because it is time-series by nature: clicks, page views, orders as events. Profile data describes people and their attributes. Choosing the wrong category is awkward to undo, so decide before you build.

What is the primary key?

Every stream needs a field that uniquely identifies a row. For profile data that is usually the source customer ID. For engagement it might be an event ID. If the source has no natural key, build one before ingestion, for example by concatenating order ID and line number in your extract job. A weak key causes silent overwrites.

Upsert or full refresh?

Many file-based streams let you choose between updating changed rows and replacing the full data set. Upsert is efficient but needs reliable keys and a way to handle deletions. Full refresh is simple and self-correcting but heavier. For small reference tables, full refresh is often the safer choice.

How fresh does it really need to be?

Ask what decision depends on the data and how quickly. A browse-abandonment journey needs minutes. A monthly loyalty statement needs a nightly file. Remember the downstream chain too: data that arrives in seconds but waits hours for identity resolution and segment publishing is not real-time in practice.

A worked example: one retailer, four patterns

Picture a retailer with Salesforce CRM for service, Marketing Cloud Engagement for email, a custom ecommerce platform, and an ERP holding store sales.

  1. CRM connector for Contacts and Cases.
  2. Marketing Cloud connector for email engagement and the master subscriber data extension.
  3. Ingestion API streaming from the ecommerce platform for cart and order events, so abandoned-cart journeys can act quickly.
  4. Cloud storage for a nightly ERP extract of in-store transactions.

The ecommerce team defines a schema for the Ingestion API connector, then posts events. A streaming payload is a JSON object with a data array of records that match the schema.

json
{
  "data": [
    {
      "event_id": "evt-000184",
      "customer_id": "C-102938",
      "email": "shopper@example.com",
      "event_type": "cart_updated",
      "cart_value": 2450.00,
      "currency": "INR",
      "event_datetime": "2026-10-12T09:41:22Z"
    }
  ]
}
Sample streaming payload; field names must match the schema you uploaded for the connector

Note the explicit event ID as the primary key, the UTC timestamp for the engagement event time, and a customer ID that matches the identifier the ecommerce platform uses elsewhere, so the event can be linked to a person after mapping.

Common mistakes

  • Ingesting everything. Bringing every column "in case" adds cost, slows mapping and spreads personal data further than needed. Ingest what a use case needs.
  • Time zones left implicit. Store and send timestamps in UTC with an explicit offset. Mixed local times break recency logic.
  • No plan for deletions. If a customer is deleted in the source, decide how that reaches Data Cloud. Upsert-only streams will keep the record.
  • Schema drift. A source team renames a column and the stream fails or nulls a field. Agree change control with source owners.
  • Assuming streaming means instant activation. Check the whole chain, including resolution and segment publish timing.

Checklist per source

  • Use case and freshness requirement written down.
  • Category chosen (profile, engagement or other) with an event time where needed.
  • Primary key confirmed unique.
  • Refresh mode and deletion handling agreed.
  • Field list trimmed to what is used.
  • Owner and monitoring in place for failures.

Planning how your sources reach Data Cloud?

We can review each source, recommend an ingestion pattern with the trade-offs spelt out, and build the streams with monitoring from day one.

Plan your ingestion design →

Tell us what you are trying to fix.

Share your Salesforce setup, goals and constraints. A practitioner reads every message and replies with questions, first thoughts or an honest view of whether you need outside help at all.

Talk to a Salesforce Expert
Book a Consultation