Collect Google Ads data in Google BigQuery
Load Google Ads campaigns, ad groups, ads and keywords into your own BigQuery tables with OWOX Data Marts: one table per endpoint, a business-friendly schema, refreshed on a schedule. Join search spend with web analytics and CRM to see which campaigns become deals.
Google Ads Endpoints
9 Google Ads endpoints you can import. Each lands in its own table in your data warehouse.
Ad Group Ads Stats
Daily performance for individual ads — impressions, clicks, cost, and conversions.
27 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.
18 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
Why join Google Ads with your web analytics and CRM
Google Ads reports clicks and the conversions it counted. It cannot show which campaign led to a deal that closed months later. For that, search spend, website touch points and CRM deals have to sit in one warehouse. Google's BigQuery Data Transfer Service copies Google Ads reports into BigQuery once a day, as raw report tables for each Customer ID. The joining, with Facebook, TikTok and your CRM, is still yours to build.
- Compare Google Ads spend with Facebook, Microsoft and TikTok in one table
- Trace a click on a campaign to the deal it became
- Keep conversions and conversion value in tables you own
Step 1: Connect Google Ads and pick the fields
Create a Data Mart, choose Google Ads as the source, authorize with Google or a service account, enter the Customer ID and tick only the fields you need.
- 9 endpoints and 166 fields: campaigns, ad groups, ads, keywords and geo
- Stats endpoints read an ad account Customer ID; structure endpoints can read a manager account
Step 2: Load Google Ads into a BigQuery table
The dataset and table in your storage are pre-filled, and you can change them. Run it and the first load lands in your own BigQuery project.
- Each endpoint gets its own table, such as google_ads_campaigns_stats
- Cost arrives in micros as cost_micros; convert it once in your model
- Every run is logged in Run History
Step 3: Get a business-friendly output schema
After the first run you get the output schema: every field with a readable description, not an API identifier. Your quality checks can read it too.
- The schema spells out units, such as cost_micros being cost in micros
- Statuses read as plain values: ENABLED, PAUSED, REMOVED
Step 4: Keep the Google Ads tables linked
Campaigns, ad groups, ad stats and campaign stats stay separate tables, joined by ids. Together they become one Google Ads model.
- campaign_id and ad_group_id repeat across tables, so a stats row always finds its campaign and ad group
- Join the model to web analytics and CRM on the campaign
Step 5: Schedule the refresh and backfill history
Set it once. A scheduled refresh keeps the tables current, and a manual backfill loads any past period.
- Each incremental run reloads today plus a lookback window you set
- Backfill a custom start and end date
Step 6: Reuse the same table everywhere
One table feeds your model, , , assistants like Claude and ChatGPT, and scheduled AI insights in Slack or email.
- Blend Google Ads with Facebook and Microsoft spend once
- Every report reads the same table
- 0.43.0Parallel reads of a SQL Data Mart on Google BigQuery no longer fail with a rate limit error
- 0.41.0Rotating a warehouse key is one change: Storages share reusable Credentials
- 0.41.0Shared SQL logic stays in one place: build a Data Mart on top of another
- 0.41.0Rotating a connector key is one change: Sources share reusable Credentials
- 0.39.0Reload a year of history in one backfill, not twelve
Why OWOX for Google Ads in BigQuery
Google's BigQuery Data Transfer Service copies Google Ads reports once a day, with no incremental loads, into dozens of report tables named per Customer ID. OWOX loads the same data on your schedule, in tables made to be joined with the rest of your marketing data.
- Google Ads and every other source. The Data Transfer Service serves Google Ads in BigQuery only. OWOX loads Facebook, TikTok, Microsoft and the rest the same way, and into Snowflake, Redshift, Athena or Databricks too, so blended ad spend stays one model.
- No architect needed. Authorize with Google or a service account, enter the Customer ID, tick the fields and run. There is no transfer configuration and no per-account table set to design first.
- You choose endpoints and fields. Pick campaign, ad group, ad, keyword or geo stats and tick only the columns you need, instead of a full set of report tables and views for every Customer ID.
- Your schedule, any period. Run on the schedule you set, with a lookback window for late changes, and backfill a custom period whenever you need it.
- Ready for a data model. Separate tables joined by campaign, ad group and ad ids, built to connect to web analytics and CRM.
- Free to self-host. The open-source OWOX Data Marts runs in your own infrastructure.
You are booked. The invitation is on its way to , with the calendar invite and the meeting link.