CRM Integration Setup
Connect Cleanlist with your CRM to automatically sync and enrich leads without manual imports and exports. This guide walks through the setup process.
Supported CRMs
Currently supported:
- β HubSpot (Full integration)
- β Salesforce (Full integration)
Coming soon:
- Pipedrive
- Zoho CRM
- Microsoft Dynamics
- Close.com
HubSpot Integration
Prerequisites
- HubSpot account (any tier)
- Admin access to HubSpot
- Cleanlist subscription
Step 1: Connect HubSpot
- Navigate to Integrations page in Cleanlist
- Find HubSpot card
- Click Connect HubSpot
- OAuth login window opens
- Log in to HubSpot if not already logged in
- Review permissions Cleanlist is requesting
- Click Grant Access
- Redirected back to Cleanlist
- Connection status shows Connected β
Step 2: Configure Field Mapping
Map Cleanlist fields to HubSpot properties:
Default mappings (auto-configured):
Cleanlist β HubSpot
--------------------------------
first_name β firstname
last_name β lastname
email β email
phone β phone
company β company
job_title β jobtitle
linkedin_url β linkedin_url
city β city
state β state
country β countryCustom field mapping:
- Click Edit Field Mapping
- Add mappings for custom fields
- Map Smart Columns to HubSpot custom properties
- Save configuration
Step 3: Set Sync Direction
Choose how data flows:
Option 1: HubSpot β Cleanlist (Import only)
- Import contacts from HubSpot
- Enrich in Cleanlist
- Manual export back to HubSpot
Option 2: Two-Way Sync (Recommended)
- Import contacts from HubSpot
- Enrich in Cleanlist
- Auto-sync enriched data back
- Keep both systems updated
Configure:
- Select sync direction
- Choose update frequency:
- Real-time (instant sync)
- Hourly
- Daily (recommended for most)
- Manual only
- Set conflict resolution:
- HubSpot wins
- Cleanlist wins
- Newest wins (recommended)
- Save settings
Step 4: Configure Sync Rules
Import filters:
- Which HubSpot lists to sync
- Lifecycle stage filters
- Date range (e.g., created in last 90 days)
- Custom properties
Example filters:
Import contacts where:
- Lifecycle stage = "Lead" or "MQL"
- Created date > 90 days ago
- Email is known
- NOT in "Do Not Enrich" listAuto-enrichment:
- β Enrich new contacts automatically
- β Enrich email only
- β Enrich phone only
- β Enrich both email and phone
Step 5: Initial Sync
First-time sync:
- Review sync configuration
- Click Start Initial Sync
- System imports contacts matching filters
- Preview shows count: "Ready to import 1,250 contacts"
- Confirm import
- Monitor progress
Sync status dashboard:
- Total contacts synced
- Successful imports
- Errors/skipped
- Last sync time
- Next scheduled sync
Step 6: Test and Verify
- Check synced contacts in Cleanlist
- Verify field mappings are correct
- Test enrichment on sample contact
- Verify sync back to HubSpot
- Review HubSpot for updated properties
Common test:
- Create test contact in HubSpot
- Wait for sync (or trigger manual)
- Enrich in Cleanlist
- Verify enriched data appears in HubSpot
Salesforce Integration
Prerequisites
- Salesforce account (any edition)
- System Administrator permissions
- Cleanlist subscription
Step 1: Connect Salesforce
- Navigate to Integrations page
- Find Salesforce card
- Click Connect Salesforce
- Choose Salesforce environment:
- Production (login.salesforce.com)
- Sandbox (test.salesforce.com)
- OAuth login window opens
- Log in to Salesforce
- Review permissions
- Click Allow
- Redirected back to Cleanlist
- Connection status shows Connected β
Step 2: Choose Objects to Sync
Salesforce has multiple objects:
Select which to sync:
- β Leads: Unqualified prospects
- β Contacts: Qualified contacts (associated with Account)
- β Campaign Members: Contacts in campaigns
Most common: Sync both Leads and Contacts
Step 3: Configure Field Mapping
Standard field mappings (auto-configured):
Cleanlist β Salesforce Lead
-----------------------------------
first_name β FirstName
last_name β LastName
email β Email
phone β Phone
company β Company
job_title β Title
linkedin_url β LinkedIn_URL__c (custom field)
city β City
state β State
country β CountryCustom field mapping:
- Click Add Custom Mapping
- Select Cleanlist field (or Smart Column)
- Select Salesforce field
- Set update permission (read-only or read-write)
- Save mapping
Step 4: Set Sync Rules
Lead/Contact filters:
Sync Leads where:
- Status != "Converted"
- Created Date >= 90 days ago
- Email is not empty
Sync Contacts where:
- Account is not null
- Last Activity < 180 days agoEnrichment settings:
- Auto-enrich new leads: Yes/No
- Skip leads with phone: Yes/No (avoid re-enriching)
- Default enrichment: Email, Phone, or Both
Duplicate handling:
- Use Salesforce duplicate rules
- Skip duplicates
- Update existing records
Step 5: Initial Sync
- Review configuration
- Estimate sync size: "~2,500 Leads, ~1,800 Contacts"
- Start sync
- Monitor progress:
- Leads imported: 2,500/2,500
- Contacts imported: 1,800/1,800
- Errors: 15 (view log)
- Review error log if any
- Verify in Cleanlist
Step 6: Configure Sync Back
Update Salesforce with enriched data:
Options:
- Update immediately after enrichment
- Batch updates hourly
- Manual sync only
What to sync back:
- Newly found emails
- Newly found phones
- Smart Column data (to custom fields)
- Enrichment timestamps
- Validation status
Field permissions:
- Configure which fields Cleanlist can update
- Respect field-level security
- Audit trail in Salesforce
Sync Monitoring
Sync Dashboard
View real-time sync status:
Metrics:
- Total records synced
- Last sync time
- Next scheduled sync
- Success rate (%)
- Error count
Charts:
- Sync volume over time
- Success vs. error rate
- Credits used per sync
- Data quality trends
Sync Logs
Detailed logs for troubleshooting:
Log entries show:
- Timestamp
- Operation (import, export, update)
- Records affected
- Status (success, failed, skipped)
- Error message (if failed)
- Credits used
Filter logs by:
- Date range
- Operation type
- Status
- Record ID
Error Handling
Common errors:
Insufficient permissions:
Error: User does not have permission to edit field 'Phone'
Solution: Grant edit permission in CRM or remove field from syncDuplicate records:
Error: Duplicate record found
Solution: Enable duplicate handling or merge duplicatesInvalid data format:
Error: Phone number format invalid for Salesforce
Solution: Enable auto-formatting in sync settingsAdvanced Features
Webhook Triggers
Set up webhooks for real-time enrichment:
Example: New lead in CRM β Auto-enrich
- CRM creates new lead
- Webhook fires to Cleanlist
- Cleanlist enriches lead automatically
- Syncs enriched data back to CRM
- Total time: <10 seconds
Setup:
- Enable webhooks in integration settings
- Configure trigger events (create, update)
- Set enrichment rules
- Test with sample record
Campaign Syncing
Sync specific CRM campaigns:
HubSpot Lists:
- Sync specific lists only
- Map lists to Cleanlist lead lists
- Auto-enrich list members
Salesforce Campaigns:
- Sync campaign members
- Map campaigns to lead lists
- Track enrichment per campaign
Scheduled Enrichment
Set up automatic enrichment schedules:
Example workflow:
Every Monday at 9 AM:
1. Sync new leads from CRM (last 7 days)
2. Enrich emails automatically
3. Sync enriched data back
4. Send summary email reportConfigure:
- Go to integration settings
- Enable "Scheduled Enrichment"
- Set schedule (cron or UI)
- Choose enrichment options
- Set notification preferences
Best Practices
Data Quality
-
Clean CRM data first:
- Remove obvious duplicates
- Standardize company names
- Fix formatting issues
-
Use filters wisely:
- Don't sync entire CRM (unnecessary)
- Focus on active leads/contacts
- Exclude unqualified records
-
Map fields carefully:
- Test mappings on sample first
- Verify data types match
- Use custom fields for Smart Columns
Cost Management
-
Avoid re-enriching:
- Skip records with existing data
- Set "last enriched" date filter
- Only enrich when needed
-
Use selective enrichment:
- Enrich MQLs/SQLs only
- Email-only for most leads
- Phone for qualified leads only
-
Monitor credit usage:
- Set up low credit alerts
- Review sync reports weekly
- Adjust filters to reduce volume
Performance
-
Optimize sync frequency:
- Don't sync more often than needed
- Daily is sufficient for most
- Hourly for high-velocity teams
-
Batch large syncs:
- Initial sync during off-hours
- Split large syncs into chunks
- Use async processing for 10,000+
-
Leverage caching:
- Recently synced data is cached
- Faster subsequent syncs
- Reduces API calls to CRM
Troubleshooting
Sync Not Working
Check:
- Integration still connected (re-auth if needed)
- Sync is enabled (not paused)
- Filters aren't too restrictive
- CRM API limits not exceeded
- Permissions still valid
Data Not Updating
Check:
- Sync direction configured correctly
- Field mappings are correct
- Field-level permissions in CRM
- Conflict resolution settings
- Two-way sync enabled
Missing Records
Check:
- Records match sync filters
- Not marked as duplicate
- Not in exclusion list
- Created after last sync time
- Review sync logs for errors
Disconnecting Integration
To disconnect CRM:
- Go to Integrations page
- Find connected CRM
- Click Disconnect
- Choose what to do with synced data:
- Keep in Cleanlist
- Delete from Cleanlist
- Confirm disconnection
Note: This revokes Cleanlist's access to your CRM. Data already in CRM remains unchanged.