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:
| Object | Purpose |
|---|---|
| contact | Individual lead or customer record |
| company | Organization associated with contacts and deals |
| deal | Revenue opportunity or pipeline record |
| event | Activity such as a call, meeting, email, or note |
| lead | Prospect record prior to becoming a contact |
| pipeline | Sales 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:
- Your product launches the Unified Connect authorization component.
- The user selects a provider such as Salesforce or HubSpot.
- After authorization, the user is redirected back to your application.
- 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 timestampcompany_id– return records associated with a specific companycontact_id– retrieve records linked to a contactuser_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.
| Object | Create | Update | Delete |
|---|---|---|---|
| Contact | POST /crm/{connection_id}/contact | PUT /crm/{connection_id}/contact/{id} | DELETE /crm/{connection_id}/contact/{id} |
| Company | POST /crm/{connection_id}/company | PUT /crm/{connection_id}/company/{id} | DELETE /crm/{connection_id}/company/{id} |
| Deal | POST /crm/{connection_id}/deal | PUT /crm/{connection_id}/deal/{id} | DELETE /crm/{connection_id}/deal/{id} |
| Event | POST /crm/{connection_id}/event | PUT /crm/{connection_id}/event/{id} | DELETE /crm/{connection_id}/event/{id} |
| Lead | POST /crm/{connection_id}/lead | PUT /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 dealscontact_ids[]on deals and companiesdeal_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_idcontact_iddeal_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:
- Create a metadata definition describing the custom field.
- Attach values to CRM records through the metadata array.
- 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.contactorcrm.deal) - event type (
created,updated, ordeleted) - 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.