ChatGPT Ads

Creating the data source

Requirements

  • Admin access (or permission to generate API keys) on the ChatGPT Ads account.

How to connect

  1. Go to ads.openai.com and sign in to the ads account you want to connect.
  2. Open Settings in the menu.
  3. Generate (or copy) the account's API key.
  4. In Kondado, create a new ChatGPT Ads data source and paste the value into the API Key field.
  5. Save and create the integration you need.

Each API key belongs to a single ads account. If you manage several accounts, create a separate data source with each account's own key.

Pipelines

Summary

Relationship chart

Click to expand

Ad account metadata

This pipeline is free

Replication type: Full

Campo Tipo

id

text

[en] Ad account identifier.

name

text

[en] Ad account name.

url

text

[en] Main website associated with the account.

preview_url

text

[en] Account preview link.

status

text

[en] Ad account status.

timezone

text

[en] Account time zone. Defines how report days are cut.

currency_code

text

[en] Account currency. Every monetary value in this data source is in this currency.

review_status

text

[en] Account review status.

review_reason

text

[en] Reason given in the account review.

Ad group metadata

This pipeline is free

Replication type: Full

Relationships:

Campo Tipo

id

text

[en] Ad group identifier.

campaign_id

text

[en] Campaign identifier.

    Campaign metadata > > id

name

text

[en] Ad group name.

description

text

[en] Ad group description.

status

text

[en] Ad group status.

created_at

timestamp

[en] Record creation date and time.

updated_at

timestamp

[en] Date and time of the last change to the record.

context_hints

text

[en] Context signals used to target the ad group.

product_set_product_feed_id

text

[en] Product feed associated with the ad group.

bidding_config_billing_event_type

text

[en] Billed event of the ad group.

bidding_config_strategy

text

[en] Ad group bidding strategy (for example, maximize conversions).

max_bid

float

[en] Ad group maximum bid, in the account currency.

user_external_id

text

[en] External identifier of the ad group set by the advertiser or by the tool that created it.

Ad performance

Replication type: Incremental with update window

Parameters:

  • Update window (days): How many days back are reprocessed on each run. Conversions may be attributed up to 30 days after the click.
  • Breakdown: Optional segmentation of the metrics. With a breakdown, revenue metrics are not available.
  • Grouping period: Hour, day or month. Hour accepts neither breakdown nor conversion/revenue metrics.
  • Start date: Read data from this date on. The API only serves the last 5 years.
  • Ad account: Ad account reached by the API key set on the data source.
  • Entity: Level at which metrics are aggregated. Each level also carries the ids and names of the levels above it.

Relationships:

Campo Tipo

ad_account_id

text

[en] Ad account identifier.

    Ad account metadata > > id

metric_date

date

[en] Day the row refers to, in the ad account time zone. On monthly grouping it is the first day of the month.

campaign_id

text

[en] Campaign identifier.

    Campaign metadata > > id

ad_group_id

text

[en] Ad group identifier.

    Ad group metadata > > id

ad_id

text

[en] Ad identifier.

    Ad metadata > > id

product_feed_id

text

[en] Product feed identifier.

item_id

text

[en] Item identifier inside the product feed.

product_title

text

[en] Product title.

product_description

text

[en] Short product description.

product_body

text

[en] Long product description.

product_target_url

text

[en] Product destination link.

product_image_url

text

[en] Product image.

product_brand

text

[en] Product brand.

product_seller_name

text

[en] Product seller name.

product_price

text

[en] Product price, as formatted text (not numeric).

product_availability

text

[en] Product availability in the feed.

hour

int

[en] Hour of day (0 to 23) the row refers to, in the ad account time zone. Present only on hourly grouping.

timezone

text

[en] Ad account time zone, in which the dates and hours of this report are expressed.

ad_account_name

text

[en] Ad account name.

ad_account_url

text

[en] Main website associated with the ad account.

campaign_name

text

[en] Campaign name.

campaign_description

text

[en] Campaign description.

campaign_status

text

[en] Campaign status (enabled, paused, archived).

campaign_start_time

timestamp

[en] Scheduled campaign start.

campaign_end_time

timestamp

[en] Scheduled campaign end.

campaign_budget_lifetime

float

[en] Campaign lifetime spend limit, in the account currency. Empty when the campaign only has a daily limit.

campaign_budget_daily

float

[en] Campaign daily spend limit, in the account currency. Useful to track spend pacing against the cap.

ad_group_name

text

[en] Ad group name.

ad_group_description

text

[en] Ad group description.

ad_group_status

text

[en] Ad group status.

ad_name

text

[en] Internal ad name.

ad_title

text

[en] Displayed ad title.

ad_copy

text

[en] Ad copy text.

ad_link

text

[en] Ad destination link.

ad_status

text

[en] Ad status.

ad_review_status

text

[en] Ad review outcome (in review, approved or rejected). An ad only serves once approved and with campaign and ad group enabled.

impressions

int

[en] Impressions — number of times the ad was shown.

clicks

int

[en] Clicks — number of clicks on the ad. Only populated when explicitly requested in the projection.

spend

float

[en] Amount spent in the period, in the account currency.

ctr

float

[en] Click-through rate — clicks divided by impressions. Ratio of the row itself: not additive — when aggregating days or entities, recompute from the sums of spend, clicks, impressions and conversions. On the current day it may diverge from the totals until the day closes.

cpc

float

[en] Cost per click — spend divided by clicks. Ratio of the row itself: not additive — when aggregating days or entities, recompute from the sums of spend, clicks, impressions and conversions. On the current day it may diverge from the totals until the day closes.

cpm

float

[en] Cost per thousand impressions — spend divided by impressions, times a thousand. Ratio of the row itself: not additive — when aggregating days or entities, recompute from the sums of spend, clicks, impressions and conversions. On the current day it may diverge from the totals until the day closes.

conversions

int

[en] Conversions attributed in the period. Equals click-through conversions — do not add it to the other conversion columns.

cpa

float

[en] Cost per conversion: spend divided by number of conversions. Empty when there were no conversions. Ratio of the row itself: not additive — when aggregating days or entities, recompute from the sums of spend, clicks, impressions and conversions. On the current day it may diverge from the totals until the day closes. Available only for dates from 2026-04-15 on (a limit set by the ads platform, subject to change); earlier periods are empty.

post_click_cvr

float

[en] Post-click conversion rate: conversions divided by clicks. Ratio of the row itself: not additive — when aggregating days or entities, recompute from the sums of spend, clicks, impressions and conversions. On the current day it may diverge from the totals until the day closes. Available only for dates from 2026-04-15 on (a limit set by the ads platform, subject to change); earlier periods are empty.

roas

float

[en] Return on ad spend: attributed revenue divided by spend. Ratio of the row itself: not additive — when aggregating days or entities, recompute from the sums of spend, clicks, impressions and conversions. On the current day it may diverge from the totals until the day closes. Available only for dates from 2026-04-15 on (a limit set by the ads platform, subject to change); earlier periods are empty.

attributed_sales_amount

float

[en] Value of sales attributed to the ads in the period. Available only for dates from 2026-04-15 on (a limit set by the ads platform, subject to change); earlier periods are empty.

attributed_sales_count

int

[en] Number of sales attributed to the ads in the period. Available only for dates from 2026-04-15 on (a limit set by the ads platform, subject to change); earlier periods are empty.

attributed_sales_currency

text

[en] Currency of the attributed sales value (ISO code, e.g. BRL). Available only for dates from 2026-04-15 on (a limit set by the ads platform, subject to change); earlier periods are empty.

order_created_attributed_sales

float

[en] Value of attributed sales counted on the order-created event. Available only for dates from 2026-04-15 on (a limit set by the ads platform, subject to change); earlier periods are empty.

order_created_attributed_sales_currency

text

[en] Currency of the order-created attributed sales value (ISO code). Available only for dates from 2026-04-15 on (a limit set by the ads platform, subject to change); earlier periods are empty.

order_created_roas

float

[en] Return on ad spend computed from order-created sales. Available only for dates from 2026-04-15 on (a limit set by the ads platform, subject to change); earlier periods are empty.

view_through_conversions

int

[en] Conversions attributed to a view of the ad (no click), with a one-day window. Complementary to the conversions column — which already counts click-through only — and must not be added to it for cost-per-acquisition purposes. Available on daily grouping without breakdown.

country_name

text

[en] Country the impression originated from.

device_type

text

[en] Device type the impression occurred on.

platform

text

[en] Platform the ad was shown on (Android app, iOS app or web).

Ad preview

Replication type: Full

Relationships:

Campo Tipo

ad_id

text

[en] Identifier of the ad this preview refers to.

    Ad metadata > > id

body

text

[en] HTML snippet with an iframe that renders the ad preview. NOTE: the address inside the iframe EXPIRES 24 HOURS after it was generated — after that the frame renders empty. The table is fully rewritten on every run precisely because of this; for the preview to keep working, the integration must run at least once a day.

fetched_at

timestamp

[en] When this preview was generated. Use it to tell whether the iframe is still valid: 24 hours after this timestamp it has expired.

Ad metadata

This pipeline is free

Replication type: Full

Relationships:

Campo Tipo

id

text

[en] Ad identifier.

ad_group_id

text

[en] Ad group identifier.

    Ad group metadata > > id

campaign_id

text

[en] Campaign identifier.

    Campaign metadata > > id

name

text

[en] Internal ad name.

status

text

[en] Ad status.

review_status

text

[en] Ad review outcome (in review, approved or rejected). An ad only serves once approved and with campaign and ad group enabled.

review_status_detail

text

[en] Detailed ad review status.

review_reason

text

[en] Reason given in the ad review.

creative_type

text

[en] Creative format (for example, chat card or product ad template).

creative_title

text

[en] Headline shown in the ad.

creative_body

text

[en] Main text shown in the ad.

creative_target_url

text

[en] Ad destination URL, including the configured tracking (UTM) parameters.

creative_file_id

text

[en] Internal identifier of the image file uploaded for the ad; not an image URL.

creative_image_url

text

[en] Address of the image used in the ad. Empty when the image was uploaded rather than referenced by address.

creative_price

text

[en] Price text shown in the ad, when the format uses a price.

serving_issues

text

[en] Reasons why the ad is not being shown, as JSON (list). Empty when there is no impediment.

created_at

timestamp

[en] Record creation date and time.

updated_at

timestamp

[en] Date and time of the last change to the record.

Campaign metadata

This pipeline is free

Replication type: Full

Campo Tipo

id

text

[en] Campaign identifier.

name

text

[en] Campaign name.

description

text

[en] Campaign description.

status

text

[en] Campaign status.

mode

text

[en] Campaign operating mode.

created_at

timestamp

[en] Record creation date and time.

updated_at

timestamp

[en] Date and time of the last change to the record.

start_time

timestamp

[en] Scheduled campaign start.

end_time

timestamp

[en] Scheduled campaign end.

bidding_type

text

[en] Campaign bidding strategy.

billing_event_type

text

[en] Event the campaign is billed on (for example, click).

objective

text

[en] Campaign objective (for example, clicks or conversions).

product_feed_id

text

[en] Identifier of the product catalog used by the campaign, when it advertises products.

budget_lifetime_spend_limit

float

[en] Campaign lifetime spend limit, in the account currency.

budget_daily_spend_limit

float

[en] Campaign daily spend limit, in the account currency.

conversion_event_setting_ids

text

[en] Ids of the conversion events associated with the campaign, as JSON (list of strings).

targeting_locations

text

[en] Countries included in the campaign targeting, as JSON (list of country codes).

Conversion event metadata

This pipeline is free

Replication type: Full

Relationships:

Campo Tipo

id

text

[en] Conversion event setting identifier.

name

text

[en] Conversion event setting name.

event_type

text

[en] Conversion event type.

custom_event_name

text

[en] Custom event name, when present.

attribution_window_days

int

[en] Attribution window in days configured for the event.

view_through_attribution_window_days

int

[en] View-through attribution window in days: how many days after seeing the ad (without clicking) a conversion is still attributed to it.

ad_account_id

text

[en] Ad account identifier.

    Ad account metadata > > id

source_ids

text

[en] Ids of the sources (pixels or integrations) feeding the event, as JSON (list of strings).

sources

text

[en] Conversion data sources (pixel or server-to-server integration) linked to this event, as JSON (list of objects with id and name).

campaigns

text

[en] Campaigns linked to this conversion event setting, as JSON (list of objects with id and name).

archived

boolean

[en] Whether the setting is archived.

version

int

[en] Version of the event setting.

Custom audience metadata

This pipeline is free

Replication type: Full

Campo Tipo

id

text

[en] Custom audience identifier.

name

text

[en] Custom audience name.

description

text

[en] Custom audience description.

status

text

[en] Custom audience status.

created_at

timestamp

[en] Record creation date and time.

updated_at

timestamp

[en] Date and time of the last change to the record.

hash_spec_version

text

[en] Hash specification version used when uploading identifiers.

uploaded_identifier_count_range

text

[en] Approximate range of the number of uploaded identifiers (e.g. '1000-5000'). The exact number is not disclosed, for privacy.

matched_identifier_count_range

text

[en] Range of matched identifiers. Also a text range, not a number.

matched_user_count_range

text

[en] Range of matched users. Also a text range, not a number.

invalid_identifier_count_range

text

[en] Range of invalid identifiers. Also a text range, not a number.

membership_revision

int

[en] Current revision number of the audience membership list.

Notes

Important notes about ChatGPT Ads data:

  • The API only serves the last 5 years of data.
  • What each grouping period returns: daily, every metric (media, conversions, revenue and ROAS); monthly, media and revenue/ROAS without the conversions column (the API only computes conversions per day); hourly, media metrics only (impressions, clicks, spend, CTR, CPC, CPM), no conversions and no revenue.
  • Hourly grouping also accepts no breakdown (product, country, device or platform).
  • With any breakdown, revenue and ROAS metrics are not returned. The conversions column stays available only on the country and device breakdowns, and only with daily grouping; product and platform keep media metrics only.
  • Revenue and ROAS metrics (CPA, attributed sales, orders) have their own date floor: they only exist from 2026-04-15 on (a limit set by the ads platform, subject to change), unlike the general 5-year limit that applies to media and conversions. Periods before that floor carry these columns empty.
  • There is no age or gender breakdown in the ChatGPT Ads API.
  • Same-day rates (CTR, CPC, CPM, CPA, ROAS) are ratios of the row itself, are not additive and only settle at end of day. To aggregate, recompute from the sums of spend, clicks, impressions and conversions.
  • Conversions can be attributed up to 30 days after the click, which is why the default update window is 30 days.
  • The ad preview table returns an HTML iframe that expires after 24 hours; the integration must run at least once a day for the preview to stay valid.
  • Part of this documentation was automatically generated by AI and may contain errors. We recommend verifying critical information

Written by·Published 2026-09-11·Updated 2026-09-17