Apollo.io
Apollo.io is a sales engagement platform combining a B2B contact database with sequencing, analytics, and CRM. Advanced Form Integration creates or updates contacts and companies (accounts) in Apollo.io from your WordPress form submissions, so every lead capture, demo request, or sign-up lands directly in your sales pipeline.
What you’ll need
- An active Apollo.io account.
- An Apollo.io API Key (see below).
- The Advanced Form Integration plugin installed and activated.
Get your Apollo.io API key
Apollo.io authenticates API requests with a key sent in the X-Api-Key header.
- Sign in to your Apollo.io dashboard.
- Go to Settings → Integrations → API and click Connect.
- Go to API Keys and click Create.
- Enter a name for the key and copy the generated API Key.
- In WordPress, go to AFI → Settings → Apollo.io.
- Click Add New Account, paste the API Key, and give the account a name.
- Click Save.
Create the integration
- Go to AFI → Add New.
- Give the integration a name, for example
Lead form to Apollo.io. - Under Trigger, pick the form plugin and the specific form you want to listen on.
- Under Action → Platform, select Apollo.io.
- In Task, choose Add Contact.
- Pick the saved account in the Apollo.io Account dropdown.
- Optional: select an Owner to assign the contact and company to a specific Apollo.io user.
- Map your form fields onto the Apollo.io fields listed below.
- Optional: open Conditional Logic to limit which submissions are sent.
- Click Save Integration.
The action works in a specific order: it first creates or updates a company (account) if any company fields are mapped, then creates or updates the contact and links it to that company. AFI searches Apollo.io for existing records by email (contacts) or company name (accounts) before deciding whether to create or update, preventing duplicates.
Tasks supported
Add Contact
Creates or updates a contact in Apollo.io. AFI searches for an existing contact by email via POST /contacts/search. If a match is found, the contact is updated via PUT /contacts/{id}. If no match exists, a new contact is created via POST /contacts. The company (account) is created or updated first, then the contact is linked to it via account_id.
Contact fields
| Field | Field key | Required | Notes |
|---|---|---|---|
email |
Yes | Used as the search key for upsert | |
| First Name | first_name |
No | |
| Last Name | last_name |
No | |
| Job Title | title |
No | |
| Contact Stage ID | contact_stage_id |
No | Stage IDs are listed in the field description (loaded from contact_stages API) |
| Website URL | website_url |
No | |
| Address | present_raw_address |
No | |
| Phone | direct_phone |
No | |
| Corporate Phone | corporate_phone |
No | |
| Mobile Phone | mobile_phone |
No | |
| Other Phone | other_phone |
No | |
| Contact Lists | label_names |
No | Comma-separated label names (loaded from labels API). Stored as an array. |
Company (account) fields
These fields create or update the linked company. If Company Name is empty, no company is created.
| Field | Field key | Required | Notes |
|---|---|---|---|
| Company Name | company__name |
No | Used as the search key for company upsert |
| Company Domain | company__domain |
No | |
| Company Stage ID | company__account_stage_id |
No | Stage IDs listed in the field description |
| Company Phone | company__phone |
No | |
| Company Address | company__raw_address |
No |
Owner assignment
Select an Owner in the integration to assign both the contact and company to a specific Apollo.io user. Owner IDs are loaded from the users/search API. The owner is applied to the company record as owner_id.
Pro features
The Pro integration extends the free version with auto-loaded custom fields for both contacts and companies. Pro uses the same Apollo.io account connection and the same task, so your existing integrations keep working when you upgrade.
Custom fields
Pro fetches all typed custom fields from your Apollo.io instance via GET /typed_custom_fields and presents them in the mapper with their real names. Contact custom fields (modality: contact) and company custom fields (modality: account) are both included. Each custom field value is sent under the typed_custom_fields object in the API payload.
Feature comparison
| Feature | Free | Pro |
|---|---|---|
| Create/update contact (upsert by email) | ✅ | ✅ |
| Create/update company (upsert by name) | ✅ | ✅ |
| Standard contact fields | ✅ | ✅ |
| Standard company fields | ✅ | ✅ |
| Contact lists (labels) | ✅ | ✅ |
| Owner assignment | ✅ | ✅ |
| Auto-loaded contact custom fields | No | ✅ |
| Auto-loaded company custom fields | No | ✅ |
Conditional logic example
Only create contacts for leads interested in a demo. Add a condition: Interested in Demo is Yes. Other submissions are skipped, keeping your Apollo.io contact database focused on qualified leads.
Troubleshooting
Nothing arrives in Apollo.io
Open AFI → Log and find the most recent entry for this integration. AFI stores the request it sent and the raw response it got back, so the Apollo.io error message is right there. If there is no log entry at all, the trigger never fired: re-check the form selection and submit a real test entry from the front end rather than the form builder preview.
API key rejected (401)
Copy the API key directly from Settings → Integrations → API Keys in Apollo.io. If the key was revoked or regenerated, update it in AFI → Settings → Apollo.io.
Contact created but not linked to company
The company is only created when Company Name (company__name) is mapped and non-empty. If the name is blank, AFI skips company creation and the contact is created without an account_id link.
Contact lists not applying
The Contact Lists field accepts comma-separated label names (not IDs). The available labels are listed in the field description, loaded from your Apollo.io labels API. Make sure the label names match exactly, including spaces and capitalization.