Skip to main content
Connectors

Apple Ads connector

Set up the Apple Ads connector in Kaivo: authentication, configuration, the 8 BigQuery tables it syncs, and answers to common questions.

Written By Lauri Raivio

Last updated 16 days ago

Kaivo is a fully managed data platform that syncs your Apple Ads data into a Google BigQuery warehouse and keeps it up to date automatically. There is no pipeline to build and no infrastructure to run, so you can spend your time analysing your marketing and sales data instead of moving it.

What is the Apple Ads connector

Sync your Apple Ads campaign data into BigQuery with Kaivo to track App Store ad spend and performance alongside your other channels.

CategoryMarketing & Sales
AuthenticationAPI key
SetupSelf-service

Getting started with the Apple Ads connector

  1. Sign up for Kaivo and create a workspace.
  2. Connect your Apple Ads account.
  3. Choose which tables to sync.
  4. Wait for the initial sync to finish.
  5. Query your data in BigQuery or your favourite AI or BI tool.

Authenticating Apple Ads

Authenticate with your Apple Ads credentials. You provide:

FieldDescription
Client Id

A user identifier for the token request. See here

Client Secret

A string that authenticates the user’s setup request. See here

Configuring the Apple Ads connector

When you set up the connector, you provide:

FieldDescription
Org Id

The identifier of the organization that owns the campaign. Your Org Id is the same as your account in the Apple Search Ads UI.

Start Date

Any data before this date will not be fetched.

Lookback Window

Attribution window in days (1–30). Smaller values shorten sync durations at the cost of missing late attributions.

Time Zone

The timezone for the reporting data. Use 'ORTZ' for Organization Time Zone or 'UTC' for Coordinated Universal Time. Default is UTC.

Tables and columns synced from Apple Ads

Kaivo syncs 8 tables from Apple Ads into a dedicated dataset in your BigQuery warehouse. Click any table to see its columns and types.

ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
automated_keywords_opt_inBOOL
campaign_idINT64
cpa_goalJSON
creation_timeSTRING
default_bid_amount__amountSTRING
default_bid_amount__currencySTRING
deletedBOOL
display_statusSTRING
end_timeJSON
idINT64
modification_timeSTRING
nameSTRING
org_idINT64
pricing_modelSTRING
serving_state_reasonsJSON
serving_statusSTRING
start_timeSTRING
statusSTRING
targeting_dimensions__admin_areaJSON
targeting_dimensions__ageJSON
targeting_dimensions__app_categories__excludedJSON
targeting_dimensions__app_categories__includedJSON
targeting_dimensions__countryJSON
targeting_dimensions__daypartJSON
targeting_dimensions__genderJSON
targeting_dimensions__localityJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: adgroups__targeting_dimensions__app_downloaders__excluded

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: adgroups__targeting_dimensions__app_downloaders__included

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: adgroups__targeting_dimensions__device_class__included

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
countryorregionSTRING
metadata__ad_group_display_statusSTRING
metadata__ad_group_idINT64
metadata__ad_group_nameSTRING
metadata__ad_group_serving_state_reasonsJSON
metadata__ad_group_serving_statusSTRING
metadata__ad_group_statusSTRING
metadata__automated_keywords_opt_inBOOL
metadata__campaign_idINT64
metadata__country_or_regionSTRING
metadata__cpa_goalJSON
metadata__default_bid_amount__amountSTRING
metadata__default_bid_amount__currencySTRING
metadata__deletedBOOL
metadata__end_timeJSON
metadata__modification_timeSTRING
metadata__org_idINT64
metadata__pricing_modelSTRING
metadata__start_timeSTRING
ad_group_idINT64
dateSTRING
otherBOOL
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: adgroups_report_daily__granularity

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
avg_cpm__amountSTRING
avg_cpm__currencySTRING
avg_cpt__amountSTRING
avg_cpt__currencySTRING
dateSTRING
impressionsINT64
lat_off_installsINT64
lat_on_installsINT64
local_spend__amountSTRING
local_spend__currencySTRING
tap_install_cpi__amountSTRING
tap_install_cpi__currencySTRING
tap_install_rateFLOAT64
tap_installsINT64
tap_new_downloadsINT64
tap_redownloadsINT64
tapsINT64
ttrFLOAT64
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
ad_group_idFLOAT64
campaign_idFLOAT64
creation_timeSTRING
creative_idFLOAT64
creative_typeSTRING
deletedBOOL
idFLOAT64
modification_timeSTRING
nameSTRING
org_idFLOAT64
serving_statusSTRING
statusSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: ads__serving_state_reasons

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
metadata__ad_display_statusSTRING
metadata__ad_group_idFLOAT64
metadata__ad_idFLOAT64
metadata__ad_nameSTRING
metadata__ad_statusSTRING
metadata__campaign_idFLOAT64
metadata__country_or_regionSTRING
metadata__creation_timeSTRING
metadata__creative_idFLOAT64
metadata__creative_typeSTRING
metadata__deletedBOOL
metadata__modification_timeSTRING
metadata__org_idFLOAT64
metadata__product_page_idSTRING
metadata__statusSTRING
ad_idFLOAT64
countryorregionSTRING
dateSTRING
otherBOOL
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: ads_report_daily__granularity

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
avg_cpt__amountSTRING
avg_cpt__currencySTRING
dateSTRING
impressionsFLOAT64
local_spend__amountSTRING
local_spend__currencySTRING
tap_install_cpi__amountSTRING
tap_install_cpi__currencySTRING
tap_install_rateFLOAT64
tap_installsFLOAT64
tap_new_downloadsFLOAT64
tap_redownloadsFLOAT64
tapsFLOAT64
total_avg_cpi__amountSTRING
total_avg_cpi__currencySTRING
total_install_rateFLOAT64
total_installsFLOAT64
total_new_downloadsFLOAT64
total_redownloadsFLOAT64
ttrFLOAT64
view_installsFLOAT64
view_new_downloadsFLOAT64
view_redownloadsFLOAT64
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
ad_channel_typeSTRING
adam_idINT64
billing_eventSTRING
budget_amountJSON
creation_timeSTRING
daily_budget_amount__amountSTRING
daily_budget_amount__currencySTRING
deletedBOOL
display_statusSTRING
end_timeJSON
idINT64
loc_invoice_details__billing_contact_emailSTRING
loc_invoice_details__buyer_emailSTRING
loc_invoice_details__buyer_nameSTRING
loc_invoice_details__client_nameSTRING
loc_invoice_details__order_numberSTRING
modification_timeSTRING
nameSTRING
org_idINT64
payment_modelSTRING
sapin_law_responseSTRING
serving_state_reasonsJSON
serving_statusSTRING
start_timeSTRING
statusSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: campaigns__budget_orders

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: campaigns__countries_or_regions

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: campaigns__supply_sources

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
countryorregionSTRING
metadata__ad_channel_typeSTRING
metadata__app__adam_idINT64
metadata__app__app_nameSTRING
metadata__billing_eventSTRING
metadata__campaign_idINT64
metadata__campaign_nameSTRING
metadata__campaign_statusSTRING
metadata__country_or_regionSTRING
metadata__daily_budget__amountSTRING
metadata__daily_budget__currencySTRING
metadata__deletedBOOL
metadata__display_statusSTRING
metadata__modification_timeSTRING
metadata__org_idINT64
metadata__serving_state_reasonsJSON
metadata__serving_statusSTRING
metadata__total_budgetJSON
campaign_idINT64
dateSTRING
otherBOOL
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: campaigns_report_daily__metadata__countries_or_regions

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: campaigns_report_daily__metadata__supply_sources

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: campaigns_report_daily__granularity

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
avg_cpm__amountSTRING
avg_cpm__currencySTRING
avg_cpt__amountSTRING
avg_cpt__currencySTRING
dateSTRING
impressionsINT64
lat_off_installsINT64
lat_on_installsINT64
local_spend__amountSTRING
local_spend__currencySTRING
tap_install_cpi__amountSTRING
tap_install_cpi__currencySTRING
tap_install_rateFLOAT64
tap_installsINT64
tap_new_downloadsINT64
tap_redownloadsINT64
tapsINT64
ttrFLOAT64
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
ad_group_idINT64
bid_amount__amountSTRING
bid_amount__currencySTRING
campaign_idINT64
creation_timeSTRING
deletedBOOL
idINT64
match_typeSTRING
modification_timeSTRING
statusSTRING
textSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
countryorregionSTRING
metadata__ad_group_deletedBOOL
metadata__ad_group_idINT64
metadata__ad_group_nameSTRING
metadata__bid_amount__amountSTRING
metadata__bid_amount__currencySTRING
metadata__country_or_regionSTRING
metadata__deletedBOOL
metadata__keywordSTRING
metadata__keyword_display_statusSTRING
metadata__keyword_idINT64
metadata__keyword_statusSTRING
metadata__match_typeSTRING
metadata__modification_timeSTRING
dateSTRING
insights__bid_recommendation__bid_maxJSON
insights__bid_recommendation__bid_minJSON
insights__bid_recommendation__suggested_bid_amountJSON
keyword_idINT64
otherBOOL
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: keywords_report_daily__granularity

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
avg_cpt__amountSTRING
avg_cpt__currencySTRING
dateSTRING
impressionsINT64
lat_off_installsINT64
lat_on_installsINT64
local_spend__amountSTRING
local_spend__currencySTRING
tap_install_cpi__amountSTRING
tap_install_cpi__currencySTRING
tap_install_rateFLOAT64
tap_installsINT64
tap_new_downloadsINT64
tap_redownloadsINT64
tapsINT64
ttrFLOAT64
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

How the Apple Ads sync works

After the first load, Kaivo keeps your BigQuery warehouse up to date for you. Where Apple Ads supports it, each sync pulls only new and changed records so it stays fast; otherwise it refreshes the whole table. Every record keeps its original ID, so you won't get duplicate rows.

Frequently asked questions

How long does the initial sync take for Apple Ads?

It depends on how much history is in your Apple Ads account. Most initial syncs finish within minutes, while large accounts can take a few hours. After that, syncs only fetch new and changed records, so they're much faster.

Can I sync only some tables or columns?

Yes. You pick which tables to sync when you set up the connection and can change the selection later. Tables you don't select are never copied to your warehouse.

What happens when Apple Ads's schema changes?

New fields are never added automatically. You choose which fields to sync, so data you haven't selected (sensitive personal data, for example) never lands in your warehouse. When a new field appears, it becomes available for you to add. What happens to removed or renamed fields depends on a table's sync mode: full-refresh tables always match what's currently in Apple Ads, so dropped fields disappear, while incremental tables keep their existing columns and history, so an old field stays and newly added fields fill in over time.

How do I handle GDPR or data deletion requests?

Your data lives in your own Kaivo-managed BigQuery warehouse, so the most direct option is to delete or anonymise specific records right in BigQuery. If you delete data in Apple Ads instead, full-refresh tables drop it on the next sync, while incremental tables keep it, so you would remove the row in BigQuery or ask us to run a full refresh. To remove everything, delete the Apple Ads connector in Kaivo and all of its synced data is deleted with it.

Common use cases for Apple Ads data

Cross-channel reporting

Combine Apple Ads spend with your other ad platforms to compare cost and results on one dashboard.

Campaign performance

Use campaigns_report_daily and adgroups_report_daily to track impressions, taps, and installs over time.

Keyword analysis

Join keywords with keywords_report_daily to find which terms drive installs and which waste budget.

Spend pacing

Monitor daily spend by campaign to catch overspend or underspend early.

Use Apple Ads data in your AI and BI tools

Once Apple Ads data lands in your Kaivo-managed BigQuery warehouse, you can explore it with AI tools or any BI tool that connects to BigQuery. Here's how the most common destinations work with Apple Ads data.

Claude

Use Kaivo's MCP server to give Claude secure, workspace-scoped access to your data. Setup guide →

Power BI

Microsoft's BI tool with a native BigQuery connector. Supports direct query and scheduled refresh. Setup guide →

Data Studio

Free Google BI tool with native BigQuery support. One-click connection to your Kaivo warehouse; great for SMB teams on Google Workspace. Setup guide →

Tableau

The premium analytics standard, with native BigQuery integration. Setup guide →

Google Sheets

Use Connected Sheets to query BigQuery directly from a spreadsheet, with no SQL. Setup guide →

Excel

Connect via Power Query's BigQuery connector. Setup guide →

Metabase

Open-source BI tool with strong BigQuery support. Setup guide →

See our pricing page for Apple Ads connector pricing and plan details.

Was this helpful?

Still need help? Share an idea