← Back to Integration & Data
INTG-026 Integration & Data 20 min read For: Salesforce Architects & Tech Leaders

Salesforce Data Pipelines: From Ingestion to CRM Analytics

Data Pipelines is Salesforce's native ETL layer within CRM Analytics — it handles ingestion, transformation, scheduling, and writeback without requiring an external tool. Understanding how pipelines work, and where they fall short, determines whether your analytics architecture is sustainable at scale.

VS

Vishal Sharma

Salesforce Architecture Specialist · Updated May 2026

What you will learn...
  • What Salesforce Data Pipelines are and how they fit within CRM Analytics
  • Data Streams: the ingestion mechanism for Salesforce objects and external data
  • Transformations: filtering, joining, aggregating, and enriching data within a pipeline
  • Writeback Datasets: pushing analytics output back into Salesforce objects
  • Scheduling, incremental refresh, and orchestration patterns
  • Error handling, data quality gates, and pipeline monitoring
  • Where Data Pipelines hit limits and when to bring in external tooling

What Data Pipelines Do in Salesforce

CRM Analytics (formerly Tableau CRM, formerly Einstein Analytics) stores its data in datasets — structured columnar stores optimised for fast aggregation and filter queries. Those datasets need to be populated, refreshed, and kept current. Before Data Pipelines, this was done exclusively through dataflows: JSON-based transformation definitions that extracted Salesforce objects, joined them, computed derived fields, and wrote output datasets. Dataflows were powerful but brittle — large JSON files with no visual editor, no version control integration, and no incremental refresh capability.

Data Pipelines replaced and extended the dataflow model. A pipeline is a directed acyclic graph of nodes — each node performs one data operation — connected visually in the Pipeline Builder. The key capabilities added over dataflows are: incremental refresh (only processing new or changed records rather than full extracts), a visual builder that maps operations as nodes rather than raw JSON, and tighter integration with Data Cloud for unified data ingestion.

Understanding Data Pipelines matters not just for analytics teams but for integration architects, because pipelines sit at the junction between Salesforce transactional data, external data sources, and the analytics layer. A poorly designed pipeline creates refresh latency, storage bloat, and governance gaps that affect the entire analytics programme.

💡
Pipelines vs Dataflows: Legacy dataflows still exist and run alongside pipelines. Many orgs have both. When inheriting a CRM Analytics implementation, audit whether the refresh jobs are pipeline-based or dataflow-based — the two have different performance characteristics, monitoring surfaces, and incremental refresh support. Migrating dataflows to pipelines is worth doing but requires re-testing all transformation logic.

Data Streams: The Ingestion Layer

A Data Stream is the entry point for data into a CRM Analytics pipeline. Each stream connects to a data source — a Salesforce object, a CSV upload, a Data Cloud segment, or an external connection via Salesforce Connect — and defines what fields to bring in, with what filters, and on what schedule. The stream maintains a local cache of the ingested data that the pipeline can read from without re-querying the source at every pipeline run.

For Salesforce object streams, the field-level selection matters operationally. Selecting all fields from a large object like Opportunity or Case — with dozens of custom fields, long text areas, and formula fields — bloats the stream cache and extends refresh time. For analytics, you usually need a fraction of the fields the object contains. Being selective at the stream level reduces storage consumption and improves refresh performance significantly.

Incremental sync, when enabled on a stream, reads only records created or modified since the last sync timestamp. This uses the SystemModStamp field (or a specified date field) as the high-water mark. The implication is that deletions are not captured by incremental sync — a record deleted in Salesforce remains in the stream cache until a full refresh runs. For use cases where deletions matter (active pipeline reporting, customer churn), schedule periodic full refreshes to keep the stream cache aligned with the source.

-- Example: Filtering a Data Stream for active opportunities only
-- In Pipeline Builder, apply a Filter node after the Opportunity stream:

Filter:
  Source: Opportunity_Stream
  Condition: IsClosed = false AND StageName != 'Closed Lost'
  Output: Active_Opportunities

-- This dramatically reduces dataset size for a pipeline
-- focused on in-flight pipeline health, vs importing all
-- historical closed opportunities unnecessarily.

Transformations: Filtering, Joining, Aggregating, Enriching

Transformation nodes sit between ingestion streams and output datasets, reshaping data to match the analytics use case. The primary transformation types in Pipeline Builder are: Filter (row-level selection), Formula (computed columns), Join (combining two streams on a key field), Append (row-union of two compatible streams), Aggregate (group-by summarisation), Flatten (hierarchy traversal for role hierarchies and territory hierarchies), and Bucket (value binning for segmentation).

Join nodes are the most computationally expensive and the most commonly misused. A pipeline that joins Opportunity to Account to User to Territory to a custom scoring object — five sequential joins — processes the full cartesian product at each step before the filter reduces it. The correct pattern is to apply filters as early as possible in the pipeline graph, before the first join, so each join operates on the smallest possible input. Filtering after joining is functionally correct but operationally wasteful.

The Flatten node deserves particular attention. CRM Analytics supports role hierarchy traversal in formulas and dashboards, but the underlying data structure requires a flattened lookup table that maps every user to every ancestor role. The Flatten node generates this table from the UserRole object. Without a Flatten node, dashboards using hierarchy-based filtering show only the current user's direct data, not their subordinates'. Include Flatten in any pipeline that feeds dashboards with manager-level views.

⚠️
Formula node limitations: Pipeline formula nodes do not support all Salesforce formula functions. Date arithmetic, string functions like CONTAINS or FIND, and complex conditional logic work differently in the pipeline formula editor than in Salesforce formula fields. Test formula nodes against representative data early — a formula that works on a small test dataset may fail or produce wrong results on production data with nulls, mixed types, or edge-case values.

Writeback Datasets

Writeback Datasets allow CRM Analytics dashboards to push data back into Salesforce objects. An analyst reviews a scored lead list in a dashboard, selects records, assigns them to reps, and saves — that assignment is written back to the Lead object via the Writeback Dataset mechanism. This closes the loop between insight and action without requiring the user to leave the analytics interface.

Writeback operates via the Salesforce REST API and is subject to the same governor limits as any API-based DML operation. For high-volume writebacks — hundreds of records simultaneously — the REST calls are batched, but the underlying Salesforce triggers, workflow rules, and validation rules still fire for each written record. A validation rule that blocks record updates when certain fields are missing will block writeback with the same error. Writeback failures surface in the CRM Analytics debug log, not the Salesforce debug log — teams supporting writeback integrations need to monitor both.

The field mapping between a Writeback Dataset and the target Salesforce object must be maintained manually. If a field is removed from the dataset schema (because it was removed from the source stream) but the writeback configuration still references it, the writeback silently drops that field's updates. Schema changes to underlying objects must be traced through every pipeline and writeback configuration that references them.

Scheduling and Orchestration

Each Data Stream has its own refresh schedule — hourly, daily at a specific time, or on-demand. Pipeline runs are triggered by stream completion or on an independent schedule. The dependency chain matters: if Pipeline A depends on Stream B completing, and Stream B is scheduled to run at 2:00 AM while Pipeline A is scheduled to run at 2:15 AM, a slow Stream B refresh can cause Pipeline A to run on stale data without any error — it simply uses the previous refresh's data.

For complex analytics implementations with many pipelines and streams, dependency-aware scheduling is essential. Salesforce does not provide a native DAG orchestrator for pipeline runs — there is no equivalent of Airflow within CRM Analytics. The workaround is to use Pipeline chaining (running subsequent pipelines on completion of a preceding one) or to use a generous buffer in schedule timings based on empirical refresh durations. Monitor pipeline run times regularly — a pipeline that reliably runs in 8 minutes will eventually take 45 minutes when data volume grows, and the schedule buffer that worked initially will stop working silently.

// Monitoring Data Pipeline runs via REST API
GET /services/data/v60.0/wave/dataflowjobs?licenseType=EinsteinAnalytics
// Returns recent pipeline and dataflow job runs with:
// {
//   "id": "02K...",
//   "status": "Success" | "Failed" | "Running",
//   "startDate": "2026-05-15T02:00:00.000Z",
//   "duration": 487,  // seconds
//   "type": "dataflow"
// }

// Set up Scheduled Apex to alert when duration exceeds threshold:
List<Wave_Dataflow_Job__c> slowJobs = [
    SELECT Name, Duration__c, Status__c
    FROM Wave_Dataflow_Job__c
    WHERE Duration__c > 900 AND RunDate = TODAY
];
if (!slowJobs.isEmpty()) {
    // Send alert via Platform Event or email
}

Error Handling and Data Quality Gates

Pipeline failures surface in the CRM Analytics Monitor (Setup → Analytics → Monitor). Failures come in two forms: hard failures that stop the pipeline run entirely, and soft failures where individual records are skipped and logged. A join node that references a field which no longer exists in the source stream causes a hard failure. A formula that produces a null for a specific record causes a soft skip with a log entry.

For regulated or high-stakes analytics (revenue forecasting, compliance reporting), soft failures are dangerous because the pipeline reports as "Success" while quietly omitting records with quality issues. Build explicit data quality gates using Filter nodes that check for null key fields, out-of-range values, or referential integrity violations, and route failing records to a separate error dataset rather than dropping them silently. Monitoring the error dataset size as part of pipeline health checks provides early warning of upstream data quality degradation.

The most common pipeline failure mode in production is schema drift: a Salesforce admin renames a field, changes a picklist value, or removes a custom object that a pipeline references. Unlike hardcoded field names in Apex or SOQL, pipeline configurations reference fields by API name — if the field is renamed, the pipeline breaks on the next run. Governance controls on field deletion and renaming in production orgs directly protect pipeline reliability.

🔑
Row count monitoring as a quality signal: Track the output row count of key datasets across pipeline runs. A dataset that normally produces 45,000 rows and suddenly produces 3,000 rows without a business reason is a data quality failure — a filter condition changed, a join lost its keys, or a stream's incremental sync accumulated skips. Row count dashboards built in CRM Analytics itself are the simplest early-warning system for pipeline health.

Where Data Pipelines Hit Limits

Data Pipelines are well-suited for Salesforce-to-CRM-Analytics ETL at mid-market scale. They become constrained when: data volumes exceed tens of millions of rows per dataset (refresh times grow prohibitively); transformation logic requires procedural computation that declarative nodes cannot express; data freshness requirements are sub-hourly (pipelines do not support streaming or near-real-time refresh); or when data sources are entirely external and do not have a Salesforce Connect integration.

At enterprise scale, organisations supplement Data Pipelines with external ETL tools (Informatica, Talend) or cloud data platforms (Snowflake, Databricks, BigQuery) that perform the heavy transformation work, then push pre-aggregated or pre-joined datasets into CRM Analytics via the External Data API. This hybrid approach uses CRM Analytics for visualisation and distribution while offloading complex computation to platforms designed for it.

Key Takeaways

  • Data Pipelines are the visual ETL layer within CRM Analytics, replacing legacy dataflows with a node-based builder that supports incremental refresh and is easier to maintain.
  • Data Streams are the ingestion entry points — be selective about fields and use incremental sync for large objects, but schedule periodic full refreshes to capture deletions.
  • Apply Filter nodes before Join nodes in your pipeline graph to minimise the data volume processed at each join step and reduce overall refresh time.
  • Writeback Datasets close the loop between insight and action, but are subject to Salesforce API limits and trigger-based validation rules that fire on every write.
  • Pipeline scheduling has no native DAG orchestrator — buffer schedule times generously and monitor run durations as data volumes grow over time.
  • Schema drift (field renames, deletions) is the most common production failure mode. Governance controls on org changes directly protect pipeline reliability.
  • For sub-hourly freshness, large-volume transformation, or fully external data sources, supplement Data Pipelines with external ETL tools pushing data via the External Data API.

Test Your Understanding

1. A CRM Analytics pipeline refreshes an Opportunity dataset that should contain 42,000 active records. After enabling incremental sync on the Opportunity stream, the dataset shrinks to 38,000 records over the following two weeks with no business explanation. What is the most likely cause?

The Filter node downstream of the stream is applying a stricter filter than intended
Incremental sync does not capture deletions — Opportunities closed or deleted since incremental sync was enabled remain missing until a full refresh runs
The incremental sync high-water mark is set too far in the past, causing recent records to be excluded

2. A Data Pipeline runs at 3:00 AM daily and completes in 12 minutes normally. The source stream is scheduled to refresh at 2:45 AM. In January, stream refresh time grows to 28 minutes due to increased data volume. What happens to the pipeline run?

The pipeline automatically waits for the stream to complete before starting
The pipeline runs at 3:00 AM on the previous run's cached data and completes successfully — but the output datasets are 24 hours stale rather than current
The pipeline fails with a dependency error and sends an alert notification

3. A writeback dataset pushes analyst-assigned territory changes back to the Account object. A validation rule on Account requires that Territory_Region__c is populated whenever Territory__c is set. Analysts report that the writeback succeeds for some records and silently fails for others. Where should the support team look first?

The Salesforce debug log for the integration user running the writeback
The CRM Analytics Monitor debug log — writeback failures surface there, not in the standard Salesforce debug log, and will show the validation rule error for affected records
The CRM Analytics dataset schema to check whether Territory_Region__c is included in the writeback field mapping

Discussion & Feedback