Keep your CRM in sync automatically
Sync contacts and deals with Salesforce, HubSpot, and other CRMs. Bidirectional sync with field mapping and conflict resolution in one API call.
import { Stack0 } from '@stack0/sdk'const stack0 = new Stack0({ apiKey: process.env.STACK0_API_KEY })// Sync a contact to your CRMexport async function syncContact(contact: Contact) {const result = await stack0.integrations.crm.syncContact({provider: 'salesforce',data: {email: contact.email,firstName: contact.firstName,lastName: contact.lastName,company: contact.company,phone: contact.phone,customFields: {lead_source: 'website',signup_date: contact.createdAt,},},options: {upsert: true,matchOn: 'email',},})return result // { id, provider, status, externalId }}// Sync a deal with field mappingexport async function syncDeal(deal: Deal) {const result = await stack0.integrations.crm.syncDeal({provider: 'hubspot',data: {name: deal.title,amount: deal.value,stage: deal.stage,contactEmail: deal.contactEmail,closeDate: deal.expectedCloseDate,customFields: {product_line: deal.product,},},options: {conflictResolution: 'latest_wins',},})return result}
What's included
Bidirectional Sync
Push and pull data between your app and CRM. Changes flow both ways automatically.
Field Mapping
Map your schema to CRM fields. Supports custom fields and complex objects.
Conflict Resolution
Latest wins, source wins, or custom rules. Never lose data during sync.
Batch Sync
Sync thousands of records efficiently. Parallel processing with per-record status.
Real-time Webhooks
Get notified when CRM records change. Trigger syncs on create, update, or delete.
Custom Objects
Sync beyond contacts and deals. Support for any CRM object type.
Built for production
Bidirectional sync
Push data to your CRM and pull changes back. Keep both systems in sync without manual work.
Field mapping
Map your data to any CRM field, including custom fields. Configure mappings once and sync forever.
Conflict resolution
Choose how to handle conflicts: latest wins, source wins, or per-field rules. No data loss.
Batch operations
Sync up to 1,000 records per call. Process your entire pipeline in seconds.
TypeScript SDK
Full type safety for contacts, deals, and custom objects. Catch errors at compile time.
Simple pricing
$1 per 1,000 API calls. No per-record fees or monthly minimums.
Common implementations
Sales Pipeline
Keep deal stages, values, and contacts in sync between your app and CRM.
Marketing Automation
Sync lead scores, campaign responses, and engagement data to your CRM.
Customer Onboarding
Push new signups to your CRM with account details and onboarding status.
Support Integration
Sync ticket data and customer health scores to give sales full context.
FAQ
Frequently asked questions
We support Salesforce, HubSpot, Pipedrive, Zoho CRM, and Microsoft Dynamics. Each provider uses the same unified API, so switching CRMs requires only changing the provider parameter.
When a record exists in both systems, you choose the strategy: 'latest_wins' uses the most recently updated record, 'source_wins' always overwrites the CRM, and 'crm_wins' keeps the CRM version. You can also set per-field resolution rules.
Yes. Use the customFields property to map any data to your CRM's custom fields. Field mappings can also be configured in the dashboard for automatic translation between your schema and the CRM's field names.
Yes. You can push data to your CRM and pull changes back. Set up webhooks to receive notifications when records change in your CRM, enabling real-time bidirectional sync.
Use the batch sync endpoint to sync up to 1,000 records per call. Batch operations are processed in parallel and return detailed results for each record, including any that failed.