Unified.to
All articles

How to Build CRM Sync Across Salesforce, HubSpot, and 47+ CRMs with a CRM API


March 4, 2026

SaaS products often need to synchronize CRM data between customer platforms and their own application.

Customers may use Salesforce, HubSpot, Pipedrive, or dozens of other CRMs, but your product still needs access to contacts, companies, deals, and activities in order to power features like:

  • sales automation
  • RevOps analytics
  • customer success dashboards
  • AI sales assistants

The challenge is that every CRM platform exposes different APIs, authentication models, and data schemas.

Building direct integrations across each provider requires constant maintenance and vendor-specific logic.

Unified solves this by providing a normalized CRM API that supports 47 CRM platforms. Your product integrates once and can read and write CRM data across Salesforce, HubSpot, and dozens of other systems through a consistent interface.

When to Use CRM Sync

Products typically build CRM synchronization when they need to:

Sync contacts and accounts

Keep customer profiles synchronized between your application and a user's CRM.

Update pipeline records

Create or update opportunities when actions occur in your product.

Ingest leads

Automatically send new leads captured in your product into the user's CRM.

Build CRM analytics

Pull contacts, companies, deals, and activities into your own database for reporting and dashboards.

In each of these cases, the product needs a reliable way to read and write CRM data across many different providers.

Unified CRM API Overview

Unified's CRM API standardizes core CRM objects across dozens of platforms.

The API normalizes authentication, endpoints, and schemas so developers can interact with contacts, companies, deals, and activities without writing provider-specific code.

The primary CRM objects include:

ObjectPurpose
contactIndividual lead or customer record
companyOrganization associated with contacts and deals
dealRevenue opportunity or pipeline record
eventActivity such as a call, meeting, email, or note
leadProspect record prior to becoming a contact
pipelineSales pipeline and stages

These objects provide the foundation for synchronizing CRM records between your product and customer CRMs.

Connecting Customer CRM Accounts

Customers authorize their CRM accounts through Unified Connect.

The authorization flow works the same across all CRM providers.

Typical flow:

  1. Your product launches the Unified Connect authorization component.
  2. The user selects a provider such as Salesforce or HubSpot.
  3. After authorization, the user is redirected back to your application.
  4. The redirect URL includes a connection_id identifying the CRM account.

Your application stores the mapping:

user_id → connection_id

All future API calls use the connection_id to access the customer's CRM data.

Retrieving CRM Records

CRM records are retrieved through normalized list endpoints.

Example requests:

GET /crm/{connection_id}/contact
GET /crm/{connection_id}/company
GET /crm/{connection_id}/deal
GET /crm/{connection_id}/event

These endpoints return standardized records regardless of whether the underlying system is Salesforce, HubSpot, or another CRM.

Common filters used for syncing and analytics include:

  • updated_gte – retrieve records updated after a specific timestamp
  • company_id – return records associated with a specific company
  • contact_id – retrieve records linked to a contact
  • user_id – filter records owned by a specific salesperson

Using these filters allows applications to retrieve incremental updates rather than reloading entire datasets.

Writing Updates Back to CRM Platforms

CRM synchronization requires the ability to create and update records.

Unified provides consistent write endpoints for the primary CRM objects.

ObjectCreateUpdateDelete
ContactPOST /crm/{connection_id}/contactPUT /crm/{connection_id}/contact/{id}DELETE /crm/{connection_id}/contact/{id}
CompanyPOST /crm/{connection_id}/companyPUT /crm/{connection_id}/company/{id}DELETE /crm/{connection_id}/company/{id}
DealPOST /crm/{connection_id}/dealPUT /crm/{connection_id}/deal/{id}DELETE /crm/{connection_id}/deal/{id}
EventPOST /crm/{connection_id}/eventPUT /crm/{connection_id}/event/{id}DELETE /crm/{connection_id}/event/{id}
LeadPOST /crm/{connection_id}/leadPUT /crm/{connection_id}/lead/{id}DELETE /crm/{connection_id}/lead/{id}

Updates use full object replacement through PUT, so applications should send the complete record payload when modifying objects.

These endpoints allow your product to create new contacts, update deal stages, record activities, and remove records across all supported CRM platforms.

Linking CRM Records Across Platforms

CRM objects include normalized association fields that define relationships between records.

Key association fields include:

  • company_ids[] on contacts and deals
  • contact_ids[] on deals and companies
  • deal_ids[] on contacts and companies

These arrays allow developers to build deterministic relationships between objects.

For example:

  • a deal references its contacts through contact_ids[]
  • a company references all related deals through deal_ids[]
  • an activity references contacts, companies, and deals through relationship arrays

Because these association fields are consistent across integrations, developers can link records without writing vendor-specific logic.

List endpoints also expose relationship filters such as:

  • company_id
  • contact_id
  • deal_id

These parameters allow applications to retrieve related records directly from the API.

Handling Custom CRM Fields

Most CRM systems allow organizations to define custom properties or custom objects.

Unified supports these through its Metadata API and provider-specific field access.

Developers can define custom field schemas using the metadata_metadata object by specifying:

  • a unique slug
  • a human-readable name
  • a field type such as TEXT, NUMBER, DATE, or SELECT

These metadata definitions act as a schema registry for custom fields.

Custom values can then be attached to records through the metadata array when creating or updating objects.

Example workflow:

  1. Create a metadata definition describing the custom field.
  2. Attach values to CRM records through the metadata array.
  3. Retrieve those values when reading CRM objects.

If an application needs access to original CRM platform fields, it can request provider-specific data by including raw in the fields parameter. This returns the underlying platform payload, allowing access to fields not included in the normalized schema.

This approach allows developers to maintain a consistent data model while still supporting organization-specific CRM configurations.

Data Flow for CRM Sync

A reliable CRM synchronization pipeline typically follows this pattern.

1 Initial backfill

Retrieve all records using paginated list endpoints.

Endpoints return up to 100 records per page. Applications iterate using limit and offset until all records are retrieved.

During the backfill process, store the highest updated_at value for each object.

2 Save incremental checkpoints

Store the most recent updated_at timestamp for each object type.

Separate checkpoints should be maintained for contacts, companies, deals, and events.

3 Incremental updates

Subsequent sync runs request only records updated after the checkpoint.

Example:

GET /crm/{connection_id}/contact?updated_gte=timestamp

The returned records are applied to the local data store and the checkpoint is advanced.

4 Choose polling or webhooks

Applications can retrieve updates through incremental polling or subscribe to webhook events.

Polling periodically requests updates using updated_gte.

Webhooks deliver changes automatically.

5 Subscribe to webhooks

Webhook subscriptions specify:

  • object type (for example crm.contact or crm.deal)
  • event type (created, updated, or deleted)
  • callback URL

Unified supports both native and virtual webhooks.

Native webhooks deliver immediate events when supported by the provider. Virtual webhooks simulate real-time updates through managed polling.

6 Process events

Webhook payloads include the changed records along with metadata such as signatures and nonces.

Applications should validate the signature, update their local database, and advance their checkpoints.

7 Periodic reconciliation

Even with webhooks enabled, occasional full syncs ensure that missed events or integration edge cases do not cause data drift.

Supported CRM Platforms

Unified's CRM API supports 47 CRM integrations, including:

  • Salesforce
  • HubSpot
  • Pipedrive
  • Zoho CRM
  • Microsoft Dynamics 365
  • Copper
  • Close
  • Freshsales
  • Insightly

Integrating once with the Unified CRM API allows your product to read and write CRM data across all supported providers.

Why Product Teams Choose Unified

Building CRM integrations directly requires separate connectors for each platform.

Unified simplifies this by providing:

  • normalized CRM objects across 47 platforms
  • consistent read and write endpoints
  • unified webhook events across providers
  • built-in OAuth authorization flows
  • support for custom fields and custom objects

Instead of maintaining dozens of vendor integrations, your team can focus on building product features powered by CRM data.

Start building CRM synchronization across Salesforce, HubSpot, and dozens of other platforms today.

→ Start your 30-day free trial

→ Book a demo

All articles