← Back to Documentation

CRM Integrations

Automatically sync missed-call leads to your CRM. Create contacts, deals, and log activity — zero manual entry.

🔗 Supported CRMs

🟠

HubSpot

Full CRM with marketing, sales, and service hubs

Create/update contacts with lead data
Create deals in default pipeline
Log SMS/email activity on timeline
Custom field mapping
OAuth or API key auth
Setup: ~5 minOAuth 2.0 (preferred) or Private App API Key
🔵

Pipedrive

Sales-focused CRM with visual pipeline management

Create/update persons (contacts)
Create deals in specified pipeline/stage
Add notes/activities to deals
Custom field mapping
API token authentication
Setup: ~3 minAPI Token (Personal or Company)
🔴

Zoho CRM

Enterprise CRM with sales, marketing, and service modules

Create/update contacts with phone dedup
Create deals linked to contacts
Upsert via duplicate check fields
Custom field mapping
OAuth 2.0 access token auth
Setup: ~5 minOAuth 2.0 Access Token (self-client)
🔧

Custom Webhook

Send lead data to any endpoint (Zapier, Make, internal API)

POST JSON payload on lead creation
Configurable URL and headers
Retry with exponential backoff
HMAC signature for verification
Test payload button in UI
Setup: ~2 minBearer token or custom header

🔄 How CRM Sync Works

1

Missed Call Received

Ringback captures caller ID, creates lead with status='new'

2

Lead Created in Ringback

Lead record inserted, sequence triggered, webhook queued for CRM

3

CRM Sync Job Runs

Background job (within 30s) sends lead data to configured CRM

4

Contact Created/Updated

CRM finds existing contact by phone/email or creates new

5

Deal Created

Deal/opportunity created in default pipeline with lead info

6

Activity Logged

SMS/email sends logged as activities on contact/deal timeline

7

Reply Received

Lead replies → Ringback updates status → CRM deal stage can auto-advance

🗂️ Default Field Mappings

Customize these in Settings → CRM after connecting. All mappings are configurable.

Ringback FieldHubSpotPipedriveZohoDescription
lead.namefirstname + lastnamenameFirst_Name + Last_NameLead's full name
lead.phone_e164phonephonePhonePhone in E.164 format
lead.idringback_lead_id (custom)ringback_lead_id (custom)DescriptionRingback internal ID
lead.sourcelead_sourcesource_nameLead_Sourcemissed_call / manual / demo
lead.created_atcreatedateadd_timeCreated_TimeLead creation timestamp
business_namecompany (associated)org_name (associated)Account_NameYour business name

📋 Setup Walkthrough

1

Open Settings → CRM

Navigate to /settings/crm

2

Choose Provider

Select HubSpot, Pipedrive, or Custom Webhook

3

Authenticate

OAuth flow (HubSpot) or paste API token (Pipedrive/Webhook)

4

Map Fields

Choose which Ringback fields map to which CRM fields

5

Select Pipeline/Stage

Pick default pipeline and starting deal stage

6

Test Sync

Click 'Test Connection' — creates a test lead in CRM

7

Enable

Toggle 'Active' — all new missed calls now sync automatically

🔒 Security & Data Handling

  • API credentials encrypted at rest using AES-256-GCM (lib/encryption.ts)
  • OAuth tokens refreshed automatically before expiry
  • Webhook payloads signed with HMAC-SHA256 — verify on your endpoint
  • No CRM data stored in Ringback beyond field mapping config
  • Revoke access anytime from CRM settings or Ringback CRM page

🔧 Common Issues

OAuth popup blocked

Allow popups for your domain. HubSpot requires popup for OAuth consent.

Test sync succeeds but real leads don't sync

Check CRM sync job logs in Supabase (ring_crm_sync_log table). Look for rate limits or field validation errors.

Duplicate contacts in CRM

CRM deduplicates by phone/email. Ensure lead phone_e164 matches CRM contact format exactly.

Deal not created

Verify pipeline ID and stage ID exist in your CRM. Pipeline must be 'open' type.

Custom webhook returns 4xx/5xx

Check webhook URL accepts POST with JSON. Respond 2xx within 10s. Retries: 1m, 5m, 15m, 1h, 6h.

Field mapping not saving

Ensure target fields exist in CRM and are writable via API. Some CRM fields are read-only.