Linking Meta Ads as a source
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.

Contents
You can sync data from Meta Ads reports by configuring it as a source in PostHog. The supported reports that can be synced include Adsets, Campaigns, Ads, Adset Report, Campaign Report, and Ad Report, as described here:
- Adsets
- Campaigns
- Ads
- Adset Insight: filtered by level =
adset - Campaign Insight: filtered by level =
campaign - Ad Insight: filtered by level =
ad
Additional reports will be added based on user feedback we receive via our in-app support form.
Requirements
- A Meta Ads account with permission to access data from accounts you want to sync.
Tip: If you need to find your account ID manually, go to Ads Manager > Menu > Campaigns. You'll see a dropdown next to the title where you can find the ID, or check the URL:
https://adsmanager.facebook.com/adsmanager/manage/campaigns?act=YOUR_ID
Configuring PostHog
Connect PostHog to your Meta Ads account using a Meta account. The Meta account must have permission to access data.
- In PostHog, go to the Data pipelines tab.
- Open the + New drop-down menu in the top-right and select Source.
- Find Meta Ads in the sources list and click Link.
- Select an existing Meta Ads integration, or create a new one by clicking Connect.
- Select the Account ID of the Meta Ads account you want to sync from the dropdown. Each account displays its status (Active, Disabled, or Closed). If your account doesn't appear, you can enter the account ID manually.
- (Optional) Add a prefix for the table name.
Configuration
| Option | Type | Required |
|---|---|---|
Meta Ads account | oauth | Yes |
Account ID | oauth-account-select | Yes |
Sync history for insights (days) - applies to every stats table | number | No |
Supported tables
| Table | Description | Sync method | Incremental field | Primary key |
|---|---|---|---|---|
campaigns | An advertising campaign in Meta Ads, defining the objective for its ad sets and ads. | Full refresh | — | — |
campaign_stats | Daily performance metrics (Insights) at the campaign level in Meta Ads. | Incremental, Full refresh | date_start | — |
adsets | An ad set in Meta Ads, grouping ads that share a budget, schedule, and targeting. | Full refresh | — | — |
adset_stats | Daily performance metrics (Insights) at the ad set level in Meta Ads. | Incremental, Full refresh | date_start | — |
ads | An individual ad in Meta Ads, pairing a creative with its ad set. | Full refresh | — | — |
ad_stats | Daily performance metrics (Insights) at the ad level in Meta Ads. | Incremental, Full refresh | date_start | — |
ad_account | The Meta ad account this source syncs, including its currency, timezone and spend limits. | Full refresh | — | — |
ad_creatives | An ad creative in Meta Ads: the copy, imagery and call to action an ad is built from. | Full refresh | — | — |
ad_images | An image in the ad account's image library, referenced by ad creatives via its hash. | Full refresh | — | — |
ads_pixels | A Meta pixel owned by the ad account, used to track website conversions. | Full refresh | — | — |
custom_conversions | A custom conversion defined on the ad account, mapping pixel or offline events to an outcome. | Full refresh | — | — |
campaign_stats_by_age_gender | Daily campaign Insights split by the age and gender of the people reached. | Incremental, Full refresh | date_start | — |
campaign_stats_by_country | Daily campaign Insights split by the country the ads were delivered in. | Incremental, Full refresh | date_start | — |
campaign_stats_by_region | Daily campaign Insights split by the region, such as a state or province, the ads were delivered in. | Incremental, Full refresh | date_start | — |
campaign_stats_by_platform | Daily campaign Insights split by where the ads appeared and what device they were seen on. | Incremental, Full refresh | date_start | — |
campaign_stats_hourly | Campaign Insights split by hour of the day in the advertiser's timezone. Meta does not report unique metrics such as reach and frequency with hourly breakdowns, so this table omits them. | Incremental, Full refresh | date_start | — |