Apollo.io

Sync contacts and accounts from your warehouse to Apollo.io, the sales intelligence and engagement platform. Keep your sales team’s prospecting data up to date by pushing enriched profiles and account information directly into Apollo.

Prerequisites

  • An Apollo.io account (any paid plan recommended for higher API rate limits)
  • An Apollo.io API key with read/write permissions
  • A master API key is recommended for full access to all endpoints

Permissions

Your API key must have access to the following:

  • Contacts: Create and update contacts
  • Accounts: Create and update accounts
  • Contact Stages: Read access (used for connection testing)

To generate an API key, navigate to Settings > Integrations > API in your Apollo.io account.

Authentication

Apollo.io uses API Key authentication.

  1. Log in to your Apollo.io account
  2. Navigate to Settings > Integrations > API
  3. Click Connect to generate a new API key (or copy an existing one)
  4. Paste the API key into the API Key field in Zeotap

Your API key is sent via the x-api-key HTTP header with each request.

Configuration

Apollo.io does not require additional configuration fields beyond authentication.

Target Settings

FieldTypeRequiredDescription
Object TypeSelectYesThe Apollo.io object to sync to: Contacts or Accounts

Supported Operations

Sync Modes

ModeSupported
UpsertYes
InsertYes
UpdateYes
Mirror

Audience Sync Modes

Apollo.io does not have a list or audience membership API, so audience sync modes are not supported.

ModeSupported
Add
Remove
Mirror
Upsert

Features

  • Field Mapping: Yes
  • Schema Introspection: No

Required Mapping Fields

ObjectRequired FieldsDescription
ContactsemailContact email address
AccountsdomainAccount website domain (e.g., example.com)

Default Destination Fields

Contacts

FieldTypeDescription
first_namestringContact’s first name
last_namestringContact’s last name
emailstringContact email address
titlestringJob title
organization_namestringCompany name
phone_numberstringPhone number
owner_idstringApollo user ID of the contact owner
contact_stage_idstringContact stage identifier

Accounts

FieldTypeDescription
namestringAccount/company name
domainstringWebsite domain
phone_numberstringCompany phone number
industrystringIndustry vertical
raw_addressstringCompany address
owner_idstringApollo user ID of the account owner

How It Works

Insert Mode

Zeotap uses the Apollo.io Bulk Create endpoint (POST /api/v1/contacts/bulk_create or /api/v1/accounts/bulk_create) to create records in batches of up to 100. Apollo applies intelligent deduplication: if a record already exists, it is returned in the existing_contacts or existing_accounts array without modification.

Update Mode

Each row is sent individually to the Apollo.io Update endpoint:

  • Contacts: PATCH /api/v1/contacts/{contact_id}
  • Accounts: PUT /api/v1/accounts/{account_id}

The primary key column must contain the Apollo.io record ID for each row.

Upsert Mode

Zeotap first sends rows to the Bulk Create endpoint. Records that already exist (returned in the existing_* response array) are then updated individually via the Update endpoint. This two-step approach ensures new records are created efficiently in bulk while existing records are updated with the latest data.

Error Handling

  • Requests are retried up to 3 times with exponential backoff on transient errors (429, 5xx)
  • Rate limit responses (HTTP 429) respect the Retry-After header when present
  • Per-record failures are tracked and reported in sync run details

Rate Limits

Apollo.io uses a fixed-window rate limiting strategy:

PlanRequests per MinuteDaily Limit
Free50600
Basic / Pro2002,000

Bulk endpoints count as a single API call regardless of the number of records in the batch (up to 100).

Best Practices

  • Use bulk operations: Insert and upsert modes use the bulk API, which is significantly more efficient than individual record creation
  • Map the email field for contacts: Apollo uses email as the primary deduplication key for contacts
  • Map the domain field for accounts: Apollo uses domain as the primary deduplication key for accounts
  • Use a master API key: Some endpoints require a master API key for full access. Generate one in Settings > Integrations > API
  • Monitor rate limits: On the free plan, rate limits are restrictive (50 req/min). Consider upgrading for higher throughput
  • Provide Apollo record IDs for updates: Update mode requires the Apollo.io record ID as the primary key

Troubleshooting

Authentication failed: invalid API key

Verify your API key in Apollo.io under Settings > Integrations > API. Ensure the key has not been revoked or regenerated. If you recently regenerated the key, update it in Zeotap.

Insufficient permissions: API key does not have required access

Some Apollo.io endpoints require a master API key. Navigate to Settings > Integrations > API and generate a master key if you have not already.

Records not updating during upsert

Apollo.io’s bulk create endpoint does not update existing records. During upsert, Zeotap creates new records in bulk and then updates existing ones individually. Ensure the email field (for contacts) or domain field (for accounts) is mapped so Apollo can match existing records.

Rate limited (HTTP 429)

You have exceeded Apollo.io’s rate limits. Free plans allow 50 requests per minute; paid plans allow 200. Zeotap automatically retries with backoff, but sustained high volumes may require a plan upgrade.

Update failed: primary key required

When using update sync mode, every row must include the Apollo.io record ID as the primary key. Ensure your source data contains the Apollo record IDs and that the primary key column is correctly configured.

Records created as duplicates

By default, Apollo.io does not deduplicate on bulk create unless records match exactly. Ensure the email field for contacts (or domain for accounts) is populated correctly, as Apollo uses these for deduplication matching.