TL;DR: Connect your CRM in under 5 minutes via OAuth. Cleanlist supports HubSpot, Salesforce, Pipedrive, and Microsoft Dynamics with two-way sync, auto field mapping, and automatic enrichment of new contacts.
CRM Integration Setup
Connect Cleanlist.ai 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.ai subscription
Step 1: Connect HubSpot
- Navigate to Integrations page in Cleanlist.ai
- Find HubSpot card
- Click Connect HubSpot
- OAuth login window opens
- Log in to HubSpot if not already logged in
- Review permissions Cleanlist.ai is requesting
- Click Grant Access
- Redirected back to Cleanlist.ai
- Connection status shows Connected ✓
Step 2: Configure Field Mapping
Map Cleanlist.ai fields to HubSpot properties:
Default mappings (auto-configured):
Cleanlist.ai → 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 Agents to HubSpot custom properties
- Save configuration
Step 3: Set Sync Direction
Choose how data flows:
Option 1: HubSpot → Cleanlist.ai (Import only)
- Import contacts from HubSpot
- Enrich in Cleanlist.ai
- Manual export back to HubSpot
Option 2: Two-Way Sync (Recommended)
- Import contacts from HubSpot
- Enrich in Cleanlist.ai
- 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.ai 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.ai
- 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.ai
- Verify enriched data appears in HubSpot
Salesforce Integration
Prerequisites
- Salesforce account (any edition)
- System Administrator permissions
- Cleanlist.ai 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.ai
- 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.ai → 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.ai field (or Smart Agent)
- 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.ai
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 Agent data (to custom fields)
- Enrichment timestamps
- Validation status
Field permissions:
- Configure which fields Cleanlist.ai 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.ai
- Cleanlist.ai 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.ai 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 Agents
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.ai
- Delete from Cleanlist.ai
- Confirm disconnection
Note: This revokes Cleanlist.ai's access to your CRM. Data already in CRM remains unchanged.