
Salesforce integration engineering
We integrate Salesforce over the REST API for transactional work, Bulk API 2.0 for backfill, and Platform Events or Change Data Capture for change notification — designed around API limits, with field-level ownership rules and reconciliation instead of last-write-wins.
Request a scoping callSalesforce integrations are constrained less by capability than by limits and org customisation. A design that ignores the daily API allocation works in a sandbox and fails in production during the first backfill.
We separate real-time and bulk lanes, use Change Data Capture where available rather than polling, and keep the mapping declarative so an org customisation does not require a code release.
What we build against in Salesforce
REST and Composite API
Transactional reads and writes with composite requests to reduce call count against the org's allocation.
Bulk API 2.0
Backfill and large-volume operations on a separate, checkpointed lane with a capped share of the request budget.
Platform Events / Change Data Capture
Push-based change notification, avoiding the polling patterns that consume allocation and still miss updates.
OAuth 2.0 connected apps
Scoped server-side credentials with rotation and per-integration user attribution in the audit trail.
Work we are typically engaged for
Salesforce to system of record sync
Accounts, contacts, and opportunities synchronised with declared ownership per field, so finance-owned values are never overwritten by pipeline edits.
Reporting extraction
Immutable raw extraction into the warehouse with change history captured as slowly changing dimensions, so historical pipeline questions remain answerable.
Quote-to-cash automation
Closed-won events driving provisioning, invoicing, and entitlement with idempotent execution and compensating actions on failure.
What every build includes
- API allocation treated as a shared budget with named consumers.
- Push-based change capture in preference to polling.
- Declarative mapping so org customisation is configuration, not a release.
- Reconciliation sweeps with per-field drift reporting.
Salesforce integration questions
How do you avoid hitting Salesforce API limits?
Separate real-time and bulk lanes with a shared request budget, use composite requests to reduce call count, prefer Change Data Capture over polling, and cap backfills so they cannot starve production traffic.
Can Salesforce sync bidirectionally with an internal system?
Yes, provided field ownership is declared per attribute and writes are idempotent. Without those, both sides overwrite each other and the record oscillates.
Engineering notes on this topic
Bidirectional sync: conflict resolution strategies that hold up in audit
Field-level ownership, vector clocks, CRDT-style convergence, and reconciliation sweeps — how to keep two systems agreeing without last-write-wins data loss.
CRM to data warehouse: getting numbers your board will trust
Extraction patterns, slowly changing dimensions, metric ownership, freshness monitoring, and lineage when moving CRM data into Snowflake, BigQuery, or Postgres.
Designing for API rate limits: budgets, back-off, and backfills that do not starve production
Token buckets, shared request budgets, exponential back-off with jitter, priority lanes, and why naive retries make outages worse.
Planning a Salesforce integration?
Send us the systems involved and the direction data needs to move. We will come back with an architecture outline, the risks worth pricing, and an indicative schedule.
Start a conversation