Linking Instantly as a source

Alpha release

This source is currently in alpha. The interface and available tables may change.

The Instantly connector syncs your cold email outreach data – campaigns, leads, emails, sending accounts, lead lists, and campaign analytics – from Instantly into PostHog.

Prerequisites

You need an Instantly workspace on the Growth plan or above (the Instantly API v2 is only available from Growth up) and an API key. The optional real-time webhook event stream additionally requires the Hypergrowth plan or above.

Adding a data source

  1. In PostHog, go to the Sources tab of the data pipeline section.
  2. Click + New source and click Link next to this source.
  3. Enter your credentials (see Configuration below) and click Next.
  4. Select the tables you want to sync, choose a sync method and frequency, then click Import.

Once the syncs are complete, you can start querying this data in PostHog.

To get an API key, go to Settings → Integrations → API keys in Instantly and create a key.

Instantly API keys are scope-gated. The key needs a read scope for every table you sync: all:read covers everything, or use narrower scopes like campaigns:read, leads:read, emails:read, and accounts:read for just the tables you want. Tables your key can't access are flagged in the table picker so you can deselect them. Automatic webhook creation additionally needs the webhooks:all (or all:all) scope.

Sync modes

Each table can be synced in one of several modes, depending on what the source supports:

  • Webhook (when available) – the source pushes changes to PostHog in real time. Fastest freshness, lowest ongoing cost, and the only mode that reliably captures updates and deletes.
  • Incremental – only new or updated rows are synced on each run, using a cursor field (such as an updated_at timestamp). Cheaper than a full refresh, but deletes aren't captured.
  • Append only – new rows are appended using a cursor field; existing rows are never updated. Ideal for immutable, append-only tables like event logs.
  • Full refresh – the whole table is reloaded on every sync. Use it when a table has no reliable cursor or when you need deletions reflected.

See sync methods for a full explanation of how each mode works and how to choose between them.

The emails table supports incremental sync on timestamp_created, so scheduled syncs only fetch emails created since the last run. Instantly rate-limits the emails endpoint to 20 requests per minute, so incremental sync is strongly recommended there – a full refresh of a large inbox can take a while.

The other tables have no "updated since" filter in the Instantly API, so they sync as full refreshes. They are typically small (campaigns, accounts, lead lists), with leads being the largest.

Webhooks for real-time events

The webhook_events table is fed entirely by Instantly webhooks: it captures the raw event stream (sends, opens, replies, bounces, unsubscribes, lead status changes, and custom labels) as events happen. When you enable the webhook sync method for it, PostHog creates the webhook in your Instantly workspace automatically, subscribed to all events and secured with a generated secret header that PostHog verifies on every delivery.

To set the webhook up manually instead: create a webhook in Instantly targeting the webhook URL shown in PostHog, set the event type to All events, and add a custom header named x-posthog-webhook-secret whose value matches the webhook secret you configure in PostHog.

Instantly webhooks require the Hypergrowth plan or above. Without webhooks, the webhook_events table stays empty – all other tables are unaffected.

Configuration

OptionTypeRequired
API keypasswordYes

Supported tables

TableDescriptionSync methodIncremental fieldPrimary key
campaigns

Email outreach campaigns with their schedules, sequences, and sending settings.

Full refresh
accounts

Sending email accounts connected to the workspace, including warmup status and limits.

Full refresh
leads

Leads across campaigns and lead lists, with contact details and engagement counts.

Full refresh
emails

Sent and received emails from campaigns and the unified inbox (Unibox).

Incremental, Full refreshtimestamp_created
lead_lists

Lead lists used to organize leads outside campaigns.

Full refresh
lead_labels

Custom lead interest labels configured in the workspace.

Full refresh
custom_tags

Custom tags that can be assigned to campaigns and accounts.

Full refresh
campaign_analytics

Aggregate per-campaign analytics: sends, opens, replies, clicks, bounces, and opportunities.

Full refresh
campaign_daily_analytics

Workspace-wide daily campaign analytics: sends, opens, replies, and clicks per day.

Full refresh
webhook_events

Raw Instantly webhook event stream (sends, opens, replies, bounces, lead status changes). Requires the webhook to be enabled — Hypergrowth plan or above.

Webhook only

Troubleshooting

  • Instantly rejected your API key: check the key is copied correctly and has not been revoked in Settings → Integrations → API keys.
  • Workspace does not have an active paid plan: the Instantly API requires the Growth plan or above; webhooks require Hypergrowth or above.
  • A table shows a permission error: your API key is missing that table's read scope. Create a key with all:read, or add the matching scope (e.g. emails:read) and reconnect.
  • The emails table syncs slowly: Instantly limits the emails endpoint to 20 requests per minute and PostHog throttles to stay under it. Use incremental sync so only new emails are fetched on each run.
  • webhook_events is empty: the table is webhook-only. Check the webhook exists in Instantly, points at the URL shown in PostHog, and that your plan includes webhooks.

If your sync is failing or data looks wrong, see the Data warehouse troubleshooting guide. If that doesn't help, contact support – we're happy to help.

Community questions

Was this page useful?