Collect Google Ads data. Deliver reports. Automate AI Insights.
Easily collect Google Ads data with OWOX Data Marts, store in your data warehouse, automate reporting across major BI Tools and AI Insights (the ones that matter) delivered straight to corporate messengers on a schedule.

Data Partner You Can Trust
users
175K
Executives and data analysts across 20+ industries
G2 rating
4.9★
“A trusted data analytics partner” — verified review
Customers
Available connectors
Google Ads endpoints
9 Google Ads endpoints you can import. Each lands in its own table in your warehouse.
Ad Group Ads Stats
Daily performance for individual ads — impressions, clicks, cost, and conversions.
26 fieldsTime seriesAd Groups
Your ad group settings — type, status, and bid configuration within each campaign.
9 fieldsAd Groups Stats
Daily ad group performance — impressions, clicks, cost, and conversions.
24 fieldsTime seriesCampaigns
Your campaign settings — channel type, bidding strategy, budget, and scheduling.
11 fieldsCampaigns Stats
Daily campaign performance — impressions, clicks, cost, and conversions.
28 fieldsTime seriesCriterion
Ad group targeting criteria — keywords, placements, and negative exclusions with bid settings.
17 fieldsGeo Stats
Daily performance by country and targeting type — impressions, clicks, cost, and conversions.
18 fieldsTime seriesGeo Target Constants
Reference table of geographic targets — join with geo_stats on country_criterion_id to resolve country names.
7 fieldsKeywords Stats
Daily keyword performance — impressions, clicks, cost, conversions, and quality score.
26 fieldsTime series
Google Ads Ad Group Ads Stats schema
26 fieldsTime seriesgoogle_ads_ad_group_ads_statsSchema on GitHub
Daily performance for individual ads — impressions, clicks, cost, and conversions.
| Field | Type | Description |
|---|---|---|
ad_id | STRING | Ad ID |
ad_status | STRING | Ad Status (ENABLED, PAUSED, REMOVED) |
ad_final_urls | ARRAY | Final URLs for the Ad |
ad_group_id | STRING | Ad Group ID |
campaign_id | STRING | Campaign ID |
date | STRING | Date for time series data |
impressions | NUMBER | Number of Impressions |
clicks | NUMBER | Number of Clicks |
cost_micros | NUMBER | Cost in Micros |
conversions | NUMBER | Number of Conversions |
ctr | NUMBER | Click-Through Rate |
average_cpc | NUMBER | Average Cost Per Click |
conversions_value | NUMBER | Total Conversion Value |
cost_per_conversion | NUMBER | Cost Per Conversion |
ad_type | STRING | Ad Type (TEXT_AD, EXPANDED_TEXT_AD, RESPONSIVE_SEARCH_AD, etc.) |
ad_name | STRING | Ad Name |
ad_group_name | STRING | Ad Group Name |
campaign_name | STRING | Campaign Name |
conversion_rate | NUMBER | Conversion Rate |
view_through_conversions | NUMBER | View-Through Conversions |
all_conversions | NUMBER | All Conversions |
all_conversions_value | NUMBER | All Conversions Value |
average_cost | NUMBER | Average Cost |
average_cpm | NUMBER | Average CPM |
interactions | NUMBER | Number of Interactions |
interaction_rate | NUMBER | Interaction Rate |
Google Ads Ad Groups schema
9 fieldsgoogle_ads_ad_groupsSchema on GitHub
Your ad group settings — type, status, and bid configuration within each campaign.
| Field | Type | Description |
|---|---|---|
ad_group_id | STRING | Ad Group ID |
ad_group_name | STRING | Ad Group Name |
ad_group_status | STRING | Ad Group Status (ENABLED, PAUSED, REMOVED) |
ad_group_type | STRING | Ad Group Type (SEARCH_STANDARD, DISPLAY_STANDARD, etc.) |
campaign_id | STRING | Campaign ID |
campaign_name | STRING | Campaign Name |
ad_group_cpc_bid_micros | NUMBER | Ad Group CPC Bid in Micros |
ad_group_cpm_bid_micros | NUMBER | Ad Group CPM Bid in Micros |
ad_group_target_cpa_micros | NUMBER | Ad Group Target CPA in Micros |
Google Ads Ad Groups Stats schema
24 fieldsTime seriesgoogle_ads_ad_groups_statsSchema on GitHub
Daily ad group performance — impressions, clicks, cost, and conversions.
| Field | Type | Description |
|---|---|---|
ad_group_id | STRING | Ad Group ID |
ad_group_name | STRING | Ad Group Name |
ad_group_status | STRING | Ad Group Status (ENABLED, PAUSED, REMOVED) |
campaign_id | STRING | Campaign ID |
date | STRING | Date for time series data |
impressions | NUMBER | Number of Impressions |
clicks | NUMBER | Number of Clicks |
cost_micros | NUMBER | Cost in Micros |
conversions | NUMBER | Number of Conversions |
ctr | NUMBER | Click-Through Rate |
average_cpc | NUMBER | Average Cost Per Click |
conversions_value | NUMBER | Total Conversion Value |
cost_per_conversion | NUMBER | Cost Per Conversion |
conversion_rate | NUMBER | Conversion Rate |
view_through_conversions | NUMBER | View-Through Conversions |
all_conversions | NUMBER | All Conversions |
all_conversions_value | NUMBER | All Conversions Value |
cost_per_all_conversions | NUMBER | Cost Per All Conversions |
average_cost | NUMBER | Average Cost |
average_cpm | NUMBER | Average CPM |
interactions | NUMBER | Number of Interactions |
interaction_rate | NUMBER | Interaction Rate |
engagement_rate | NUMBER | Engagement Rate |
engagements | NUMBER | Number of Engagements |
Google Ads Campaigns schema
11 fieldsgoogle_ads_campaignsSchema on GitHub
Your campaign settings — channel type, bidding strategy, budget, and scheduling.
| Field | Type | Description |
|---|---|---|
campaign_id | STRING | Campaign ID |
campaign_name | STRING | Campaign Name |
campaign_status | STRING | Campaign Status (ENABLED, PAUSED, REMOVED) |
campaign_advertising_channel_type | STRING | Advertising Channel Type (SEARCH, DISPLAY, VIDEO, etc.) |
campaign_start_date | STRING | Campaign Start Date |
campaign_end_date | STRING | Campaign End Date |
campaign_bidding_strategy_type | STRING | Bidding Strategy Type (MANUAL_CPC, TARGET_CPA, TARGET_ROAS, etc.) |
campaign_budget_amount_micros | NUMBER | Campaign Budget Amount in Micros |
campaign_target_cpa_micros | NUMBER | Target CPA in Micros (if using Target CPA bidding) |
campaign_target_roas | NUMBER | Target ROAS (if using Target ROAS bidding) |
campaign_advertising_channel_sub_type | STRING | Advertising Channel Sub Type |
Google Ads Campaigns Stats schema
28 fieldsTime seriesgoogle_ads_campaigns_statsSchema on GitHub
Daily campaign performance — impressions, clicks, cost, and conversions.
| Field | Type | Description |
|---|---|---|
campaign_id | STRING | Campaign ID |
campaign_name | STRING | Campaign Name |
campaign_status | STRING | Campaign Status (ENABLED, PAUSED, REMOVED) |
date | STRING | Date for time series data |
impressions | NUMBER | Number of Impressions |
clicks | NUMBER | Number of Clicks |
cost_micros | NUMBER | Cost in Micros |
conversions | NUMBER | Number of Conversions |
ctr | NUMBER | Click-Through Rate |
average_cpc | NUMBER | Average Cost Per Click |
conversions_value | NUMBER | Total Conversion Value |
cost_per_conversion | NUMBER | Cost Per Conversion |
conversion_rate | NUMBER | Conversion Rate |
view_through_conversions | NUMBER | View-Through Conversions |
all_conversions | NUMBER | All Conversions |
all_conversions_value | NUMBER | All Conversions Value |
cost_per_all_conversions | NUMBER | Cost Per All Conversions |
average_cost | NUMBER | Average Cost |
average_cpm | NUMBER | Average CPM |
engagement_rate | NUMBER | Engagement Rate |
engagements | NUMBER | Number of Engagements |
interactions | NUMBER | Number of Interactions |
interaction_rate | NUMBER | Interaction Rate |
search_impression_share | NUMBER | Search Impression Share |
search_budget_lost_impression_share | NUMBER | Search Budget Lost Impression Share |
search_rank_lost_impression_share | NUMBER | Search Rank Lost Impression Share |
video_views | NUMBER | Video Views (for Video campaigns) |
video_view_rate | NUMBER | Video View Rate |
Google Ads Criterion schema
17 fieldsgoogle_ads_criterionSchema on GitHub
Ad group targeting criteria — keywords, placements, and negative exclusions with bid settings.
| Field | Type | Description |
|---|---|---|
criterion_id | STRING | Criterion ID |
criterion_type | STRING | Criterion Type (KEYWORD, PLACEMENT, etc.) |
criterion_status | STRING | Criterion Status (ENABLED, PAUSED, REMOVED) |
keyword_text | STRING | Keyword Text |
keyword_match_type | STRING | Keyword Match Type (EXACT, PHRASE, BROAD) |
ad_group_id | STRING | Ad Group ID |
campaign_id | STRING | Campaign ID |
quality_score | NUMBER | Quality Score |
final_urls | ARRAY | Final URLs |
negative | BOOLEAN | Whether to target (false) or exclude (true) the criterion |
cpc_bid_micros | NUMBER | CPC Bid in Micros |
effective_cpc_bid_micros | NUMBER | Effective CPC Bid in Micros (includes bid modifiers) |
position_estimates_first_page_cpc_micros | NUMBER | Estimated CPC Bid needed to appear on first page |
position_estimates_top_of_page_cpc_micros | NUMBER | Estimated CPC Bid needed to appear at top of page |
position_estimates_first_position_cpc_micros | NUMBER | Estimated CPC Bid needed to appear in first position |
ad_group_name | STRING | Ad Group Name |
campaign_name | STRING | Campaign Name |
Google Ads Geo Stats schema
18 fieldsTime seriesgoogle_ads_geo_statsSchema on GitHub
Daily performance by country and targeting type — impressions, clicks, cost, and conversions.
| Field | Type | Description |
|---|---|---|
country_criterion_id | STRING | Criterion ID for the country (maps to geo_target_constant_id in geo_target_constants table) |
location_type | STRING | Geo targeting type: AREA_OF_INTEREST (user searched for this location) or LOCATION_OF_PRESENCE (user was physically in this location) |
date | STRING | Date for time series data |
campaign_id | STRING | Campaign ID |
campaign_name | STRING | Campaign Name |
campaign_status | STRING | Campaign Status (ENABLED, PAUSED, REMOVED) |
impressions | NUMBER | Number of Impressions |
clicks | NUMBER | Number of Clicks |
cost_micros | NUMBER | Cost in Micros |
conversions | NUMBER | Number of Conversions |
conversions_value | NUMBER | Total Conversion Value |
ctr | NUMBER | Click-Through Rate |
average_cpc | NUMBER | Average Cost Per Click |
all_conversions | NUMBER | All Conversions (includes cross-device and view-through) |
all_conversions_value | NUMBER | All Conversions Value |
view_through_conversions | NUMBER | View-Through Conversions |
cost_per_conversion | NUMBER | Cost Per Conversion |
conversion_rate | NUMBER | Conversion Rate |
Google Ads Geo Target Constants schema
7 fieldsgoogle_ads_geo_target_constantsSchema on GitHub
Reference table of geographic targets — join with geo_stats on country_criterion_id to resolve country names.
| Field | Type | Description |
|---|---|---|
geo_target_constant_id | STRING | Criterion ID - join key with country_criterion_id in geo_stats |
name | STRING | English name of the geo target (e.g. United States, California, New York) |
country_code | STRING | ISO-3166-1 alpha-2 country code (e.g. US, GB, DE) |
target_type | STRING | Type of geo target (e.g. Country, Region, City, MetroArea, PostalCode) |
status | STRING | Status of the geo target constant (ENABLED or REMOVAL_PLANNED) |
canonical_name | STRING | Fully qualified name including parent targets (e.g. New York,New York,United States) |
parent_geo_target | STRING | Resource name of the parent geo target constant |
Google Ads Keywords Stats schema
26 fieldsTime seriesgoogle_ads_keywords_statsSchema on GitHub
Daily keyword performance — impressions, clicks, cost, conversions, and quality score.
| Field | Type | Description |
|---|---|---|
keyword_id | STRING | Keyword Criterion ID |
keyword_text | STRING | Keyword Text |
keyword_match_type | STRING | Keyword Match Type (EXACT, PHRASE, BROAD) |
keyword_status | STRING | Criterion Status (ENABLED, PAUSED, REMOVED) |
ad_group_id | STRING | Ad Group ID |
campaign_id | STRING | Campaign ID |
date | STRING | Date for time series data |
impressions | NUMBER | Number of Impressions |
clicks | NUMBER | Number of Clicks |
cost_micros | NUMBER | Cost in Micros |
conversions | NUMBER | Number of Conversions |
ctr | NUMBER | Click-Through Rate |
average_cpc | NUMBER | Average Cost Per Click |
conversions_value | NUMBER | Total Conversion Value |
cost_per_conversion | NUMBER | Cost Per Conversion |
quality_score | NUMBER | Quality Score |
conversion_rate | NUMBER | Conversion Rate |
view_through_conversions | NUMBER | View-Through Conversions |
all_conversions | NUMBER | All Conversions (including cross-device, store visits, etc.) |
all_conversions_value | NUMBER | All Conversions Value |
average_cost | NUMBER | Average Cost Per Interaction |
average_cpm | NUMBER | Average CPM (Cost Per Thousand Impressions) |
search_impression_share | NUMBER | Search Impression Share |
search_rank_lost_impression_share | NUMBER | Search Rank Lost Impression Share |
top_impression_percentage | NUMBER | Top Impression Percentage |
absolute_top_impression_percentage | NUMBER | Absolute Top Impression Percentage |
Why collect Google Ads data into your warehouse with OWOX?
Your Google Ads data shouldn’t be trapped in a platform you can’t query. OWOX collects it into your warehouse on autopilot — no per-connector fees, no vendor lock-in. The entire platform is open-source on GitHub, so you can self-host it today and never worry about losing access to your own data pipelines.

Collect to your warehouse
No per-connector pricing — connect as many sources as you need, all included

Zero-maintenance syncs
Fully open-source on GitHub — self-host anytime, no vendor lock-in, your data stays yours

Full-funnel joins
Full transparency and control — every query, every schema, every schedule is visible and auditable

R01 · Collect
Collect all your Google Ads data with zero engineering
Pull everything your company needs from Google Ads without touching code, dealing with API, or maintaining custom scripts. OWOX Data Marts handle the heavy lifting.
- Your Google Ads data is stored in one place – your own infrastructure. OWOX Data Marts automatically land your data directly into BigQuery, Snowflake, or Redshift.
- Your Google Ads data lands on a schedule: clean, complete, and ready to re-use across reports, dashboards, BI tools, and spreadsheets.
- No API maintenance, no broken scripts — just reliable daily syncs

R02 · Report
Build reports with Google Ads data that everyone trusts
Once your Google Ads data lands in your warehouse, OWOX Data Marts make it instantly reusable across spreadsheets and BI tools. No manual stitching, no inconsistent metrics.
- Pre-built data marts for campaign performance, spend, and ROAS
- Join Google Ads with CRM, GA4, and revenue data in one query
- Self-serve reporting for marketing teams — no analyst tickets needed

R03 · Visualize
Visualize Google Ads data instantly in your BI tools
With OWOX Data Marts, your Google Ads data becomes instantly available for charts, dashboards, pivots, and spreadsheets.
- Whether you use Google Sheets, Looker Studio, Excel, or Power BI, OWOX delivers clean, scheduled Google Ads data that just works.
- Deliver to Looker Studio, Google Sheets, Power BI, or Excel automatically
- Same numbers everywhere — one source of truth for all stakeholders
Why use OWOX connectors to collect your Google Ads data?
Eight outcomes you get the moment your data marts go live.
Full picture, one screen
Send Google Ads cost, clicks, and conversions into dashboards and pivots from one governed source — a clear view of paid search you can analyze fast.
Beyond native dashboards
Google Ads reports in its own currency and timezone; in your warehouse OWOX normalizes both so numbers reconcile across accounts and markets.
Your questions, your reports
Build reports that answer your questions — true CPA, ROAS, and blended CAC — on your definitions, not Google’s default conversion counting.
Faster decisions, better data
Join Google Ads cost to actual revenue from Shopify or your CRM, so spend decisions rest on profit, not platform-reported conversions.
Always fresh, always complete
OWOX Data Marts automate Google Ads collection on a schedule — campaigns, keywords, and spend — with no manual exports and no broken scripts.
All sources, one warehouse
Merge Google Ads with every other channel to see one blended acquisition picture instead of comparing tabs that never quite match.
Zero manual work
Automate transfer into BigQuery, Snowflake, or Redshift — governed and reusable across every report, saving time and removing copy-paste errors.
Blended reports
Once Google Ads lands in governed Data Marts, anyone can ask in their own AI chat — “which campaigns actually drove profit last month?” — every number tracing to analyst-written SQL.
Not testimonials. Comment threads.
Real things real customers said — each quote pinned to a specific claim, straight from the quotes database.
“AI, by the nature of the models, will hallucinate. And because of that, you need something which will create guardrails to ensure that there are no hallucinations, that you can trust your data.”
“We had six or seven different channels and no single source of truth — it was almost impossible, a lot of guesswork.”
“We regained time. And time is the one resource that never comes back.”
Start collecting Google Ads data for free
Set up your Google Ads connector in minutes. No credit card, no engineering team required.







