Salesloft
Sync data from your warehouse to Salesloft, the leading sales engagement platform. Keep your Salesloft People and Accounts enriched with the latest data from your data warehouse, enabling sales teams to work with up-to-date contact and company information.
Prerequisites
- A Salesloft account with API access enabled
- For OAuth: Admin-level access to authorize the integration
- For API Key: A personal API key generated in Salesloft Settings
- Appropriate scopes for the objects you plan to sync (people, accounts)
Authentication
Salesloft supports two authentication methods:
OAuth 2.0 (Recommended)
- Click Connect with OAuth in Zeotap
- Sign in to your Salesloft account
- Authorize the requested permissions
- You are redirected back to Zeotap
OAuth scopes requested: people:read, people:write, accounts:read, accounts:write, cadences:read, cadences:write.
OAuth access tokens expire after 2 hours (7200 seconds). Zeotap automatically refreshes tokens using the stored refresh token.
API Key
- In Salesloft, go to Settings > API Keys (or visit your Personal Settings)
- Click Generate API Key
- Copy the generated key
- Paste it into the API Key field in Zeotap
API keys are tied to your personal Salesloft account and inherit your permissions.
Configuration
This destination does not require any additional configuration fields beyond authentication.
Target Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Salesloft Object | Select | Yes | The object to sync to: People or Accounts |
| Upsert Key | Select | No | The field used to match existing records during upsert. Defaults to email_address for People and domain for Accounts. |
Upsert Key Options
| Key | Applicable Object | Description |
|---|---|---|
email_address | People | Match people by email address (default for People) |
domain | Accounts | Match accounts by company domain (default for Accounts) |
id | Both | Match by Salesloft internal record ID |
Supported Operations
Sync Modes
| Mode | Supported |
|---|---|
| Upsert | Yes |
| Insert | Yes |
| Update | Yes |
| Mirror | — |
Audience Sync Modes
| Mode | Supported |
|---|---|
| Add | — |
| Remove | — |
| Mirror | — |
| Upsert | — |
Salesloft does not have a native list or audience membership API, so audience sync modes are not supported.
Features
- Field Mapping: Yes
- Schema Introspection: No
Required Mapping Fields
| Object | Required Fields | Description |
|---|---|---|
| People | email_address | Person’s email address, used as the primary identifier |
| Accounts | domain | Account domain (e.g., example.com), used as the primary identifier |
Default Destination Fields
People
| Field | Type | Description |
|---|---|---|
email_address | string | Email address |
first_name | string | First name |
last_name | string | Last name |
phone | string | Phone number |
title | string | Job title |
city | string | City |
state | string | State or province |
country | string | Country |
linkedin_url | string | LinkedIn profile URL |
company_name | string | Company name |
Accounts
| Field | Type | Description |
|---|---|---|
name | string | Account name |
domain | string | Company domain |
description | string | Account description |
phone | string | Phone number |
website | string | Website URL |
linkedin_url | string | LinkedIn company URL |
street | string | Street address |
city | string | City |
state | string | State or province |
country | string | Country |
industry | string | Industry |
company_type | string | Company type |
You can also map to custom fields defined in your Salesloft account by entering the custom field name directly in the field mapping editor.
How It Works
- Record Processing: Zeotap sends each record individually to the Salesloft API v2. Records are processed in chunks of 50 for progress tracking.
- Upsert Logic: When using upsert mode, Salesloft matches existing records using the configured upsert key (e.g.,
email_addressfor people,domainfor accounts). If a match is found, the record is updated; otherwise, a new record is created. - Insert Logic: New records are created via
POST /v2/peopleorPOST /v2/accounts. - Update Logic: Existing records are updated via
PUT /v2/people/{id}orPUT /v2/accounts/{id}. This requires the Salesloft record ID. - Error Handling: Failed records are tracked individually. Transient errors (429 rate limits, 5xx server errors) are automatically retried with exponential backoff.
- Token Refresh: OAuth access tokens are automatically refreshed before expiration using the stored refresh token.
Rate Limits
Salesloft enforces a 600 cost per minute rate limit at the team level:
- Each API request costs 1 point by default
- The rate limit applies across all integrations for a given Salesloft team
- Zeotap automatically handles rate limiting with exponential backoff and respects
Retry-Afterheaders - Response headers
x-ratelimit-remaining-minuteandx-ratelimit-endpoint-costindicate current usage
If you have a high volume of records, consider scheduling syncs during off-peak hours to avoid competing with other integrations for API capacity.
Best Practices
- Use upsert mode for most use cases to avoid creating duplicate records
- Map
email_addressfor People syncs to ensure accurate record matching - Map
domainfor Account syncs (e.g.,example.com, nothttps://www.example.com) - Schedule syncs during off-peak hours if your team has other Salesloft integrations consuming API capacity
- Use OAuth authentication for production workflows as it provides automatic token refresh
- Keep field mappings minimal to reduce API payload size and improve throughput
Troubleshooting
Authentication failed: invalid or expired token
Re-authenticate via OAuth or generate a new API key in Salesloft Settings. OAuth tokens expire every 2 hours and are automatically refreshed by Zeotap.
Insufficient permissions
Ensure your Salesloft account has the required permissions for the objects you are syncing. For OAuth, reconnect and verify all requested scopes are granted. For API keys, the key inherits your account’s permissions.
Rate limiting (429 errors)
Salesloft enforces a 600 cost/minute team-level rate limit. Zeotap automatically retries rate-limited requests with exponential backoff. If errors persist, reduce sync frequency or coordinate with other integrations sharing the same team.
Record not found on update
When using update sync mode, the Salesloft record ID must be provided as the primary key. Ensure your source data includes the Salesloft ID for each record. Use upsert mode instead if you want to match by email or domain.
Duplicate records created
Verify your upsert key is correctly configured. For People, use email_address to prevent duplicates. For Accounts, use domain. Ensure the mapped field values match existing records exactly.
Custom fields not syncing
Custom field names in Salesloft may differ from their display labels. Use the internal field name (visible in Salesloft Settings > Custom Fields) when configuring field mappings.
Domain format mismatch for accounts
Ensure domains are formatted consistently (e.g., example.com not www.example.com or https://example.com). Mismatched formats prevent the upsert endpoint from finding existing accounts.
API connectivity failed
Check that your network allows outbound HTTPS connections to api.salesloft.com. If you are behind a firewall or proxy, ensure the Salesloft API domain is allowlisted.