Apollo.io

Datafly Signal writes high-intent lead events (lead captures, demo requests and sign-ups) to Apollo.io as CRM contacts using Apollo’s server-side Create a Contact API. Each qualifying event becomes a deduplicated Apollo contact your revenue team can sequence, enrich and route automatically — no client-side Apollo script required.

Apollo is a sales-intelligence and CRM platform; it does not expose an event or conversion API. Signal therefore delivers only lead-shaped events to Apollo, and sends them server-to-server with your API key so identifiers never pass through the browser.

Prerequisites

  • An Apollo.io account on a plan that includes API access.
  • An Apollo API key with the Create a Contact endpoint enabled. Apollo keys are scoped per-endpoint, so the key you use must explicitly grant access to contact creation.
  • Lead events flowing into Signal that carry contact traits (first_name, last_name, email). Apollo requires a first and last name to create a contact.

Configuration

Create the API key in Apollo:

  1. In Apollo, go to Settings → Integrations → API Keys.
  2. Click API Keys → Create new key.
  3. Give the key a name and description.
  4. Under endpoint access, enable Create a Contact.
  5. Copy the generated key.

Configure in Signal

  1. In the Signal management UI, open Integrations and add Apollo.io.
  2. Paste your Apollo API Key.
  3. Leave Deduplicate contacts enabled (recommended) so repeated lead events update the same contact instead of creating duplicates.
  4. Attach the Apollo integration to the pipeline that carries your lead events and save.
FieldRequiredDescription
API KeyYesApollo key with the Create a Contact endpoint enabled. Sent in the X-Api-Key header.
Deduplicate contactsNoWhen on, sends run_dedupe=true so Apollo upserts on a match. Defaults to on.

API Endpoint

Signal delivers each contact with a single request:

POST https://api.apollo.io/api/v1/contacts
X-Api-Key: <your API key>
Content-Type: application/json

Authentication is the X-Api-Key header only. Apollo does not accept the key in the query string or request body.

Identity Signals

Apollo is a CRM that matches and enriches contacts against cleartext identifiers, so Signal sends email and phone in plaintext — they are not hashed. Signal normalises them first: email is trimmed and lowercased, and phone is converted to E.164 format. The fields Signal maps to a contact are:

Apollo fieldSource trait
first_namefirst_name
last_namelast_name
emailemail
organization_namecompany
titletitle
mobile_phonephone
website_urlwebsite
label_names[]lead source / sign-up method, plus a marketing-opt-in label when marketing consent is granted

Event Mapping

The default blueprint maps three high-intent Signal events to Apollo contact creation. All other events are dropped.

Signal eventApollo action
Lead GeneratedCreate / upsert contact
Demo RequestedCreate / upsert contact
Signed UpCreate / upsert contact

Each event must carry the contact’s traits. Example Datafly.js call:

datafly.identify({
  first_name: "Tim",
  last_name: "Zheng",
  email: "tim@apollo.io",
  company: "Apollo",
  title: "Head of Growth",
  phone: "+15553031234",
  website: "https://www.apollo.io/"
});
 
datafly.track("Demo Requested", {
  lead_source: "Website demo form"
});

With marketing consent granted, Signal delivers:

{
  "first_name": "Tim",
  "last_name": "Zheng",
  "email": "tim@apollo.io",
  "organization_name": "Apollo",
  "title": "Head of Growth",
  "mobile_phone": "+15553031234",
  "website_url": "https://www.apollo.io/",
  "label_names": ["Signal - Marketing Opt-in", "Website demo form"],
  "run_dedupe": true
}

Contact creation is gated on marketing consent. Signal reads the canonical marketing-consent flag and only delivers the event to Apollo when consent is granted; when consent is absent or denied, the event is dropped before it reaches Apollo. A Signal - Marketing Opt-in label is added so opted-in contacts are easy to segment in Apollo.

Testing

  1. Trigger a Demo Requested (or Lead Generated / Signed Up) event from a page that has marketing consent granted, with first_name, last_name and email populated.
  2. In Signal’s Event Debugger, confirm the event delivered to Apollo with a 200 response.
  3. In Apollo, open Search → People / Contacts and find the new contact by email. Confirm name, company, title and phone landed and that the lead-source / opt-in labels are attached.
  4. Re-trigger the same event for the same person and confirm Apollo updates the existing contact rather than creating a duplicate (deduplication enabled).

Troubleshooting

SymptomLikely causeFix
401 / 403Invalid key, or the key lacks the Create a Contact scopeRecreate the key in Apollo with the Create a Contact endpoint enabled.
404Wrong endpoint pathConfirm the request targets /api/v1/contacts (with the /api segment).
422 / 400Missing first_name or last_nameEnsure lead events carry both name traits; Apollo rejects contacts without them.
Duplicate contacts in ApolloDeduplication disabledEnable Deduplicate contacts so run_dedupe=true is sent.
Event never reaches ApolloMarketing consent not granted, or event not in the mapped listThe blueprint only delivers Lead Generated, Demo Requested and Signed Up with marketing consent granted; everything else is dropped by design.
429Apollo rate limit hitSignal retries automatically; raise the limit on your Apollo plan if it persists.