OpenAI Ads connector: sync campaigns, insights, and conversions from ChatGPT ads to your data warehouse

Erathos syncs campaigns, insights, conversions, and feeds from OpenAI Ads (ChatGPT ads) into BigQuery, Redshift, and other warehouses.

New Connector OpenAI Ads

Managed connector to sync ad accounts, campaigns, ad groups, ads, performance insights, conversions, custom audiences, product feeds, and spend limits from OpenAI Ads to BigQuery, Redshift, Databricks, ClickHouse, PostgreSQL, Azure SQL Server, S3 Iceberg, Supabase, Snowflake, and Azure Synapse. Create your account and try it now.

Every data team supporting a performance media operation hits the same wall sooner or later: campaign data lives in OpenAI Ads, the rest of the analytics stack lives in the warehouse, and joining the two turns into an engineering project nobody planned for. What starts as a Python script running on an EC2 cron job turns, three months later, into a pipeline nobody understands, that fails silently, and that no engineer wants to inherit.

Erathos is launching the managed connector for OpenAI Ads. Twenty five endpoints available, ten supported destinations, zero pipeline code to write or maintain.

The problem with hand built OpenAI Ads pipelines

The OpenAI Ads API is authenticated with a bearer token issued in Ads Manager, scoped to a single ad account. The pattern is simple enough to convince any engineer to build their own integration in an afternoon. The real cost shows up later, and it is predictable.

Metrics across four levels, with numbers that change on their own. Delivery metrics (impressions, clicks, spend, conversions) need to be pulled separately at the account, campaign, ad group, and ad level, each with its own date window and pagination. And attributed metrics change over time: conversions keep arriving after the click, and attribution windows mature over several days, so yesterday's number is not the same as last week's. An incremental pipeline that never reprocesses what already ran freezes the history at an outdated version, and ROAS starts drifting from the dashboard with no error logged anywhere. Across multiple accounts, each one has its own currency: summing spend from accounts in different currencies without converting is the kind of mistake that only shows up in the consolidated report.

Silent rate limiting. In a normal incremental extraction, for medium sized volumes, you stay under the limit. When you run a historical backfill or pull insights for an entire account in parallel, the API starts returning 429s. If your retry logic is not built with exponential backoff, you lose entire windows of data and never find out.

Schema evolution with no warning. New fields show up, existing fields become nullable, nested structures change. Your dbt model that used to run clean starts failing in production, or worse: it keeps running, but calculating revenue on a field that no longer exists. The inconsistency lands on the media team's dashboard before it ever reaches your monitoring.

Observability that does not exist. A 200 OK on the HTTP call does not mean the data arrived correctly. Without a record count per endpoint per run, without comparison against the previous window, and without a volume drop alert, you are flying blind. The pipeline that ran successfully may have brought in zero new insights because the cursor got stuck.

The worst case scenario is not the pipeline that breaks and sends an alert. It is the pipeline that runs successfully and delivers wrong data, and the ROAS that lands on the media team's dashboard is already calculated on a rotten base.

What becomes possible once OpenAI Ads data lands in the warehouse

Before getting into the connector itself, it is worth documenting what you actually gain once this data leaves the SaaS and lands modeled alongside the rest of your stack.

Consolidated performance across media channels. With campaign_insights, ad_group_insights, ad_insights, and ad_account_insights in the warehouse, you get impressions, clicks, spend, and conversions as raw data, record by record, instead of the pre aggregated numbers from native reports. Cross referencing this with your Google Ads, Meta Ads, TikTok Ads, and LinkedIn Ads pipelines running on the same platform, you build a single view of ROAS, CPL, and cost per conversion across every channel, with one currency rule and one conversion definition. That consolidated report does not exist in any single native dashboard, it only exists once every media channel lives in the same database.

Delivery diagnostics through the campaign hierarchy. The campaigns, ad_groups, and ads tables bring objective, status, daily_budget, lifetime_budget, and bid_strategy, and each level has its own matching insights table. With the full hierarchy in the warehouse, joined through the campaign_id and ad_group_id keys, you can pinpoint exactly where performance breaks down: a healthy campaign with one ad group burning through budget, or a specific ad with declining CTR dragging the whole group down. In native dashboards, this diagnosis turns into manual, level by level navigation with no comparable history.

Attributed revenue cross referenced with CRM and finance. The conversions_insights endpoint brings conversions and conversion value aggregated by event, and conversions_events brings the raw event with timestamp, value, currency, and source URL. With this in the warehouse, you cross reference conversions from ChatGPT ads with deals in your CRM (HubSpot, Pipedrive) and with your finance system, and answer questions that no single system can answer on its own: which conversion event generates the highest average order value? How many conversions reported by the pixel does finance actually recognize as billed revenue? Where is the gap between media attribution and billing?

Catalog and product feed auditing. The feeds, feed_uploads, and feed_products_query endpoints bring the catalog running in your ads: title, price, currency, availability, and brand, plus the upload history with status and items processed. Cross referencing this with your ecommerce or ERP product base, you catch out of stock products still being advertised, price mismatches between the catalog and your site, and you can correlate delivery drops with problematic feed uploads. This kind of cross reference requires the live catalog and the real catalog to sit in the same warehouse.

Budget pacing and spend limits. The spend_limit_windows endpoint brings the account's spend limit windows and, together with campaign and ad group budgets, lets you model pacing: how much should have been spent in each window versus how much actually was, by account and by campaign. For anyone running multiple accounts in different currencies, a consolidated view of pacing and limit consumption is a warehouse model, not a native report.

Audit trail for bulk operations. The bulk_mutation_job and bulk_mutation_job_operations endpoints log every bulk creation and edit job, with status, operation count, and error message per operation. Once materialized in the warehouse, these tables become an account changelog: what changed, when it changed, and which operation failed, exactly the history that today lives in a spreadsheet or in the memory of whoever ran the media.

What the connector includes

The OpenAI Ads connector delivers twenty five endpoints ready to be materialized in your destination warehouse. The five insights endpoints support incremental sync with a cursor on updated_at, the rest run as a full refresh on every execution. Entities come with their relationship keys preserved: campaigns link to ad_groups, which link to ads, and each level has its own matching insights table.

Endpoint

What it contains

ad_account

The connected ad account: name, status, currency, country, timezone, and business_id

ad_accounts

List of ad accounts accessible with the token

ad_account_insights

Account level aggregated metrics: impressions, clicks, spend, conversions, and currency, with a cursor on updated_at

campaigns

Campaigns: objective, status, daily_budget, lifetime_budget, and delivery window

campaign_insights

Delivery metrics per campaign: impressions, clicks, spend, and conversions, with a cursor on updated_at

ad_groups

Ad groups: daily budget, bid_strategy, and delivery window

ad_group_insights

Delivery metrics per ad group, with a cursor on updated_at

ads

Ads: name, format, status, and source ad group

ad_insights

Delivery metrics per individual ad, with a cursor on updated_at

conversions_pixels

Measurement pixels configured to track conversions

conversions_events

Raw conversion events: event name, timestamp, source URL, value, and currency

conversions_event_settings

Conversion event configuration: name, status, default value, and currency

conversions_insights

Conversions and conversion value aggregated by event, with a cursor on updated_at

custom_audiences

Custom audiences: name, type, description, approximate size, and status

custom_audience_operations

Load and update operations for custom audiences

feeds

Product catalogs (feeds): type, status, and item count

feed_products_query

Catalog products: title, price, currency, availability, and brand

feed_sftp_access

Feed SFTP access credentials

feed_uploads

Feed upload history: status, items processed, and duration

bulk_mutation_job

Bulk creation and edit jobs for campaigns, ad groups, and ads

bulk_mutation_job_operations

Operations within each bulk job, with status and error message per operation

geo_lookup_search

Geographic codes available for country and region targeting

lead_sync_subscriptions

Lead sync subscriptions for the ad account

partner_data_upload

Partner data uploads: file, record count, and status

spend_limit_windows

Spend limit windows configured on the ad account

Supported destinations are Azure SQL Server, BigQuery, ClickHouse, Databricks, PostgreSQL, Redshift, S3 Iceberg, Supabase, Snowflake, and Azure Synapse.

How to authenticate

The connector's authentication requires a single field:

Token: the OpenAI Ads API key, a bearer token scoped to a single ad account, used to authenticate every request the connector makes to the API.

To generate the token, log into the ad account you want to sync and go to Settings > Integrations > API Keys, where you create a new API key. Each key is issued from a single ad account: generate the key from the account whose data you want to bring into Erathos. Copy the generated key, store it securely, paste it into the platform's Token field, and click Save and close to finish setup.

The authentication scheme is also described in the official API reference, where you can check your key's scopes and permissions. The full connector setup process is documented in the OpenAI Ads connector guide.

Why outsource ingestion to Erathos

The premise behind the connector is straightforward: the engineering work of maintaining ingestion should not be your data team's responsibility. Pagination, rate limiting, retry with backoff, schema evolution, failure alerts, volume drop alerts, backfills. All of that is the responsibility of whoever operates the ingestion platform.

Once the connector is set up, the platform delivers:

End to end visibility into every run. Extraction time per endpoint, record counts per window, which windows were processed, where retries happened. When a ROAS metric shifts on the dashboard and the media team opens a ticket with the data team, you have the full trail to find the root cause.

Alerts configured out of the box. Execution failures, volume drops per endpoint, and window delays are detected and routed through the alerting integrations your team already uses. You do not write that code.

Reprocessing as a supported operation. When you need to reprocess a window, because your dbt model logic changed or because attribution metrics were restated by the source, that is a platform operation, not an improvised DELETE plus INSERT sequence in the warehouse.

Correct pagination, rate limit management, schema evolution, and backfills are the platform's responsibility. The data team focuses on the model, not the plumbing.

Available pipelines

The OpenAI Ads connector is available with the following destinations:

OpenAI Ads to Azure SQL Server
OpenAI Ads to Azure Synapse
OpenAI Ads to BigQuery
OpenAI Ads to ClickHouse
OpenAI Ads to Databricks
OpenAI Ads to PostgreSQL
OpenAI Ads to Redshift
OpenAI Ads to S3 Iceberg
OpenAI Ads to Snowflake
OpenAI Ads to Supabase

Get started now

Create your Erathos account and connect OpenAI Ads to your warehouse in minutes. With the API token issued in Ads Manager, your first data lands at the destination with zero pipeline code to write, maintain, or monitor.

Ad data generated every day should not stay locked inside a SaaS, disconnected from the rest of your analytics model. Or worse: stuck in a homegrown pipeline that will keep costing your team's attention every month, forever.

See the full connector documentation.