> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt # Linking Campaign Monitor as a source Canonical URL: https://posthog.com/docs/data-pipelines/sources/campaign-monitor > **Cloud region:** This page uses US Cloud hosts. For an EU Cloud project, use `https://eu.posthog.com` instead of `https://app.posthog.com` (app host for links). ## On this page - [Adding a data source](#adding-a-data-source) - [Available tables](#available-tables) - [Sync limitations](#sync-limitations) - [Configuration](#configuration) - [Supported tables](#supported-tables) ![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_9608fcca70) ![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_dark_a92b0e022d) Let AI connect your sources for you Skip the manual setup — run this in your project and the wizard auto-detects your databases and APIs and connects them to PostHog. `npx @posthog/wizard warehouse` ![PostHog Wizard hedgehog](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png) ![](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png)Let AI connect your sources for you The Campaign Monitor (CreateSend) connector syncs your email marketing data – clients, campaigns, lists, segments, templates, suppression lists, subscriber states, and campaign performance reports – into PostHog. ## Adding a data source 1. Go to the [sources tab](https://app.posthog.com/data-management/sources) of the data pipeline section in PostHog. 2. Click **\+ New source** and then click **Link** next to Campaign Monitor. 3. Next, you need two credentials from Campaign Monitor: - **API key** – Create one in your [Campaign Monitor account settings](https://www.campaignmonitor.com/api/) under **Account settings → API keys**. - **Client ID** – This identifies the client whose data you want to sync. You can find it on the client's **Settings** page, or by calling the `clients.json` API endpoint. 4. Back in PostHog, enter the credentials and click **Next**. 5. Select the tables you want to sync, set the sync method and frequency, then click **Import**. Once the syncs are complete, you can start using Campaign Monitor data in PostHog. ## Available tables | Table | Description | Sync method | | --- | --- | --- | | `clients` | Clients in your Campaign Monitor account | Full refresh | | `campaigns` | Sent campaigns for the selected client | Full refresh | | `scheduled_campaigns` | Campaigns scheduled to send | Full refresh | | `draft_campaigns` | Draft campaigns | Full refresh | | `lists` | Subscriber lists for the client | Full refresh | | `segments` | Segments defined on the client's lists | Full refresh | | `templates` | Email templates for the client | Full refresh | | `suppression_list` | The client's suppression list | Full refresh | | `active_subscribers` | Active subscribers across the client's lists | Full refresh | | `unsubscribed_subscribers` | Unsubscribed subscribers across the client's lists | Full refresh | | `bounced_subscribers` | Bounced subscribers across the client's lists | Full refresh | | `campaign_summary` | Aggregate performance summary per sent campaign (recipients, opens, clicks, unsubscribes, bounces, spam complaints) | Full refresh | | `campaign_opens` | Individual open events for each sent campaign | Full refresh | | `campaign_clicks` | Individual link click events for each sent campaign | Full refresh | | `campaign_unsubscribes` | Recipients who unsubscribed from each sent campaign | Full refresh | | `campaign_bounces` | Recipients whose email bounced for each sent campaign | Full refresh | | `campaign_spam_complaints` | Recipients who marked each sent campaign as spam | Full refresh | **Incremental** tables sync only new or updated records on each run. **Full refresh** tables reload all data on each sync. ## Sync limitations All Campaign Monitor tables currently sync via full refresh. Incremental sync is not yet available for this source. ## Configuration | Option | Type | Required | | --- | --- | --- | | `API key` | password | Yes | | `Client ID` | text | Yes | ## Supported tables | Table | Description | Sync method | Incremental field | Primary key | | --- | --- | --- | --- | --- | | `clients` | A Campaign Monitor client — an account that owns lists, campaigns, and subscribers. | Full refresh | — | — | | `campaigns` | A sent email campaign belonging to the client. | Full refresh | — | — | | `scheduled_campaigns` | A campaign that is scheduled to be sent at a future date. | Full refresh | — | — | | `draft_campaigns` | A draft campaign that has not yet been sent or scheduled. | Full refresh | — | — | | `lists` | A subscriber list belonging to the client. | Full refresh | — | — | | `segments` | A segment — a saved subset of a subscriber list defined by rules. | Full refresh | — | — | | `templates` | An email template available to the client for building campaigns. | Full refresh | — | — | | `suppression_list` | Email addresses suppressed for the client (will not receive campaigns). | Full refresh | — | — | | `active_subscribers` | Subscribers currently active (subscribed) on a list. | Full refresh | — | — | | `unsubscribed_subscribers` | Subscribers who have unsubscribed from a list. | Full refresh | — | — | | `bounced_subscribers` | Subscribers whose email to a list has bounced. | Full refresh | — | — | | `list_custom_fields` | Custom fields defined on a subscriber list — the lookup resolving the custom field keys carried on every subscriber row. | Full refresh | — | — | | `list_stats` | Subscriber counters for a list — active, unsubscribed, deleted, and bounced totals plus today, yesterday, this week, this month, and this year breakdowns. A snapshot taken at sync time, not a history. | Full refresh | — | — | | `campaign_summary` | Aggregate performance summary for a sent campaign — one row per campaign with recipient, open, click, unsubscribe, bounce, and spam complaint totals. | Full refresh | — | — | | `campaign_opens` | Individual open events for a sent campaign — one row per recorded open, including repeat opens by the same recipient. | Full refresh | — | — | | `campaign_clicks` | Individual link click events for a sent campaign — one row per recorded click. | Full refresh | — | — | | `campaign_unsubscribes` | Recipients who unsubscribed as a result of a sent campaign — one row per recipient per campaign. | Full refresh | — | — | | `campaign_bounces` | Recipients whose email bounced for a sent campaign — one row per recipient per campaign. | Full refresh | — | — | | `campaign_spam_complaints` | Recipients who marked a sent campaign as spam — one row per recipient per campaign. | Full refresh | — | — | | `campaign_recipients` | Subscribers a campaign was sent to — one row per recipient per list, the denominator for every open, click, and bounce rate. | Full refresh | — | — | | `campaign_lists` | Lists a campaign was sent to — one row per campaign and list, the join table between campaigns and lists. | Full refresh | — | — | | `campaign_segments` | Segments a campaign was sent to — one row per campaign and segment, the join table between campaigns and segments. | Full refresh | — | — | | `campaign_email_client_usage` | Email clients subscribers used to open a campaign — one row per campaign, client family, and client version. | Full refresh | — | — | | `journeys` | An automated journey (marketing automation) belonging to the client. | Full refresh | — | — | | `journey_email_summary` | Aggregate performance summary for each email in a journey — one row per journey email with vendor-computed send and engagement totals. Also the lookup resolving the EmailID carried on every journey\_email\_\* table. | Full refresh | — | — | | `journey_email_recipients` | Subscribers a journey email was sent to — one row per send, the denominator for that email's engagement rates. | Full refresh | — | — | | `journey_email_opens` | Individual open events for a journey email — one row per recorded open, including repeat opens by the same recipient. | Full refresh | — | — | | `journey_email_clicks` | Individual link click events for a journey email — one row per recorded click. | Full refresh | — | — | | `journey_email_bounces` | Sends of a journey email that bounced — one row per recorded bounce. | Full refresh | — | — | | `journey_email_unsubscribes` | Recipients who unsubscribed from a journey email — one row per recorded unsubscribe. | Full refresh | — | — |