How to Connect Google Ads to BigQuery for a Dataset You Can Actually Query

Your Google Ads account tells you what you spent and what converted, but it can’t show you whether those conversions turned into actual revenue. For that, you need ad spend and CRM data in the same place, like BigQuery. Here you can compare Google Ads against Meta or GA4 side by side or keep years of historical performance that Google would otherwise age out.

Getting the data there is the straightforward part, but how it lands matters. Google’s free Data Transfer Service, for example, splits a single campaign performance report across nine separate tables. As a result, you need SQL joins before anyone can read them. Coupler.io takes the opposite approach to connect Google Ads to BigQuery: one query-ready table that refreshes on a schedule, no code required. I start with that setup below, then cover the Data Transfer Service and Google Ads Scripts for teams with different requirements.

Coupler.ioData Transfer ServiceGoogle Ads Scripts
Setup time5–10 minutes30–60 min (requires Google Cloud project admin)1–3 hours (JavaScript)
Refresh frequencyHourly to every 15 minutes, depending on planOnce every 24 hoursCustom (cron-triggered)
TransformationsFilter, rename, aggregate, join, SQL. All applied before data reaches BigQueryNone. Data arrives as-is across multiple tablesWhatever you code in the script
Data format in BigQuerySingle query-ready table (or multiple, your choice)9+ separate tables per report. You join them yourselfCustom table structure you define
Historical backfillFull history available through the connector180 days per backfill request, one request at a timeDepends on your script and Google Ads API limits
Other sources in the same datasetYes. 420+ sources, same data flowGoogle sources onlyGoogle Ads only
Technical skills neededNoneGoogle Cloud admin access, BigQuery SQL for any analysisJavaScript, Google Ads API
AI analysisBuilt in: AI Agent, AI integrations (Claude, ChatGPT, etc.), SkillsNot includedNot included

How to set up a no-code Google Ads BigQuery integration with Coupler.io

Coupler.io is a data integration platform and AI analytics tool that connects to 420+ sources, including Google Ads. It lets you prepare datasets for analysis or reporting and load them to BigQuery and other destinations. You can just type in the Coupler AI agent that you want to connect Google Ads to BigQuery, and it will build the data flow for you. You’ll only need to authorize your Google account and complete the BigQuery project connection per the instructions.

Let Coupler AI do the data work for you

Tell Coupler AI what you need to know, from which source, and how often. It connects your account, sets up the data flow, keeps it refreshed, and lets you analyze the results inside Coupler.io or another AI tool.

Try for free
Let Coupler AI do the data work for you

At the same time, it’s not mandatory to delegate the Google Ads BigQuery integration setup to AI. You can configure it yourself with three simple steps:

Step 1. Extract data from Google Ads

Use the form below to create a data flow for Google Ads to BigQuery and get started with Coupler.io for free (no credit card required.

  • Connect your Google Ads account, then select the required Ad accounts and specify the Report type. For this example, I’ve chosen the Campaign performance report.
google ads source coupler
  • Optionally, you can select the Report period, as well as choose how to split data by periods. Then, finish the source setup and proceed.

To export data from more Google Ads accounts, select Google Ads as an additional data source and connect it as described above. You can also add other sources to the same data flow, such as Meta Ads or LinkedIn Ads, and merge all datasets into a single one before loading them to BigQuery.

google ads bigquery multiple source coupler

Step 2. Organize Google Ads data set

This step lets you turn Google Ads data into a dataset before it reaches BigQuery. You can start from a data set template for Google Ads that already has the fields organized for reporting, or configure the columns yourself. Either way, the transformations you apply here determine whether the table is ready for SQL queries and AI analysis or still needs cleanup after landing.

  • Rename, rearrange, hide, or add columns. Hiding columns with PII or internal IDs is especially useful if you plan to share this dataset with an AI tool later.
  • Sort data in ascending or descending order.
  • Filter data to extract it based on specific criteria.
  • Create new columns with custom formulas.
  • Aggregate data using operations like sum, avg., count, min., or max.
  • If you’ve connected several sources, blend data in the chosen manner:
    • Append: merge datasets with similar structures and columns matched by name.
    • Join: combine datasets with different structures and at least one matched column.
google ads data set coupler

Step 3. Load data to BigQuery and schedule refresh

Connect your BigQuery account. You’ll first need to generate a Google Cloud JSON key. See these instructions on how to get it. Once done, upload it in the connection form. The Project ID and Connection name will be filled in automatically.

With the BigQuery account connected, specify the dataset and table where Coupler.io should load your Google Ads data set. You can create a new dataset and table by typing new names.

If you’ve created multiple data sets, such as joins or aggregations, you’ll need to select the appropriate data set to load into BigQuery. You can’t import multiple data sets into the same BigQuery table. But you can add multiple BigQuery destinations for separate data sets within the same data flow.

BigQuery isn’t the only destination available within the same data flow. You can also load Google Ads data to PostgreSQL, Google Sheets, Excel, Data Studio, Power BI, and other destinations without creating a separate pipeline.

google ads bigquery multiple destinations coupler

Toggle on Automatic data refresh and set the schedule to automate data loads from Google Ads to BigQuery. Coupler.io can refresh data as frequently as every 15 minutes!

18. create from scratch schedule

Coupler.io will replace the Google Ads dataset in your BigQuery table with its updated version during each data refresh. This is the logic of the default Replace import mode. If you change it to Append, the updated version will be below the previous one. This is useful for tracking changes chronologically.

Bonus step. Analyze Google Ads data with AI

The dataset you just loaded into BigQuery is already connected to Coupler AI. You can query it in plain language through the AI Agent without writing SQL. Ask questions like “which campaigns had the highest cost per conversion last month” or “show me spend vs. conversions by device for the past quarter,” and get answers based on your actual data. Calculations are verified, not generated, so the numbers in the response match what’s in BigQuery.

For repeatable analysis, Coupler.io has a library of pre-built Google Ads skills that run on your data. For example, the Waste And Scale skill finds where budget goes without conversions and which campaigns to scale; the Budget Pacing skill tells you whether you’ll overspend or underspend this month. There are also skills for Performance Max transparency, keyword and quality score analysis, conversion tracking audits, and client reporting. Each one runs against your live Google Ads data with no prompting from scratch.

For complex data set preparation, like joining Google Ads with Meta Ads into a cross-channel CPA table or computing rolling performance trends, Coupler AI will generate a SQL-based data set. It persists in the data flow and refreshes automatically with each run, so the prepared dataset is always up to date. See how AI data analysis works with SQL transformations for detailed examples.

Your Google Ads dataset is also available to external AI tools. Through AI Integrations (MCP), you can connect it to Claude, ChatGPT, or Cursor and query it from there. The data stays filtered and controlled on Coupler.io’s side. The AI tool never connects to your Google Ads account directly.

See how to connect Google Ads to Claude for conversational analysis of your PPC performance.

Connect Google Ads to BigQuery right away for free

Try Coupler.io

Why connect Google Ads data to BigQuery with Coupler.io

The three steps above automate data load from Google Ads into BigQuery, but that’s not the only reason to choose Coupler.io. It provides an all-in-one solution for the full path from raw ad data to a finished analysis. You won’t need to assemble separate tools for the pipeline, data cleanup, reporting, and AI. Everything runs in the same place on the same data.

All your ad channels in one BigQuery dataset

Google Ads data in BigQuery is useful on its own, but the bigger payoff comes when it’s not the only source in your dataset. With Coupler.io, you can add Meta Ads, GA4, HubSpot, or Salesforce data into the same BigQuery dataset within the same data flow. That means one pipeline gives you a cross-channel view instead of maintaining separate exports for each platform.

Same prepared data in BigQuery, Data Studio, and Power BI

The same data flow can send your Google Ads data to multiple destinations. If your team works in Data Studio or Power BI alongside BigQuery, you can connect the same prepared dataset there without duplicating the setup or building a separate pipeline for each tool.

AI analysis without writing SQL

Coupler AI gives you a way to manage your Google Ads BigQuery data set and ask questions about it without composing queries in BigQuery. Type a question, get an answer based on verified calculations. The AI capabilities covered in the bonus step above all work on the dataset you already built.

Pre-built templates for Google Ads reporting

Data set templates for Google Ads pre-organize fields into a reporting-ready data sets. So you don’t configure columns from scratch. The dashboard templates do something similar, but they provide a finished report in Coupler.io or external BI tools as soon as the data flow runs.

Ready-to-use Google Ads dashboards

These dashboards are built by Coupler.io and equipped with the Google Ads data connector to pull data from your account. Follow the setup instructions inside each template to connect your data and start using them.

Google Ads dashboard tracks campaign performance and monthly dynamics of key metrics: spend, impressions, clicks, CPC, CTR, conversions, and cost per conversion. Includes breakdowns by campaign type, device, region, age, and gender. Available for Data Studio, Power BI, and Google Sheets.

Coupler.io Google Ads dashboard | Google Sheets | Data Studio | Power BI

Google Ads network performance dashboard breaks down performance by ad network, device, and geography. Includes impression share audit, Performance Max asset quality ratings, and video creative retention rates. Available for Data Studio.

Keyword performance dashboard shows Google Ads performance by keyword with metrics like impressions, CTR, CPC, conversions, and cost per conversion. Helps spot seasonal trends and top-performing keywords. Available for Data Studio.

Google Ads creatives dashboard tracks creative performance including impressions, clicks, video views, CPC, and conversions. Breaks down impressions by ad type: image, responsive search, responsive display, TrueView, and expanded dynamic search. Available for Data Studio.


Explore other Google Ads dashboard templates by Coupler.io

Get started for free

Other ways to load Google Ads data to BigQuery

Coupler.io covers most use cases for connecting Google Ads data to BigQuery, but other methods fit better in some situations.

A manual CSV export is the fastest path when you need to upload a specific report once for a quick analysis. No setup is needed, but you won’t be able to automate the process – just download and upload every time manually.

The Data Transfer Service is Google’s free, native option for teams already deep in the Google Cloud ecosystem. It automates daily loads, but it comes with limitations worth understanding before you commit. I cover those in detail below.

Google Ads Scripts give you full control through JavaScript. They make sense when you need a custom data extract that none of the standard report types cover, or when you want to transform the data with your own logic before it reaches BigQuery.

Let’s review these methods for getting data from Google Ads to BigQuery as alternatives you may consider.

How to transfer Google Ads data to BigQuery using the Data Transfer Service

The BigQuery Data Transfer Service (DTS) is Google’s free, built-in way to automate Google Ads data loads into BigQuery. For teams that have already invested in Google Cloud, the zero cost is quite appealing. However, the service moves your data rather than making it usable, and you should know its limitations before you set it up.

What to expect from the Data Transfer Service

You’ll always be looking at yesterday. The service refreshes once every 24 hours. There is no setting to make it more frequent. If you’re monitoring spend mid-campaign, you’re monitoring it a day late.

Loading your history is a manual chore. Backfill brings in 180 days at a time, one batch at a time, and you have to wait for each batch to finish before starting the next. Two years of data means five rounds of this.

What arrives isn’t a single report. Ask for campaign performance, and you get nine separate tables: spend in one, conversions in another, campaign names in a third. Someone has to write SQL joins to stitch them together before anyone can read a campaign report. I show what that looks like in the SQL comparison below.

Your campaign names can go stale while the numbers look fresh. Campaign names, statuses, and budgets only update once a day and don’t get corrected when you reload historical data. A report can look current and quietly show the wrong campaign details.

It requires Google Cloud admin access. Setting it up requires the BigQuery Admin IAM role on your Google Cloud project. Most marketing teams have to file a ticket and wait.

Performance Max is hidden by default. You have to know to switch it on, and switching it on quietly removes some ad group detail from your location and shopping reports.

It only does one thing. Google Ads data into BigQuery, exactly as it comes. No cleaning it up on the way in, no adding Meta or LinkedIn alongside it, and no sending the same data anywhere else.

Click to expand technical details for reference

  • Maximum transfer frequency is once every 24 hours. No incremental transfers: a date partition is always re-transferred in full.
  • Refresh window defaults to 7 days, maximum 30.
  • Backfill is limited to 180 days per request. Simultaneous backfill requests are not supported. Google’s documentation advises chunking and waiting.
  • The campaign performance report lands across multiple tables: p_ads_Campaign, p_ads_CampaignStats, p_ads_CampaignConversionStats, p_ads_CampaignCrossDeviceStats, p_ads_CampaignCookieStats, p_ads_HourlyCampaignStats, and corresponding views.
  • Setting up the transfer requires the BigQuery Admin IAM role, plus 2-Step Verification or a service account.
  • Enabling Performance Max tables removes ad_group fields from GeoStats and ShoppingProductStats.
  • Custom reports use GAQL (Google Ads Query Language), but WHERE, ORDER BY, and LIMIT are not supported in this context. Maximum 100 custom reports per transfer configuration.
  • Limit of 8,000 customer IDs per manager account. Run history is deleted after 90 days.
  • The Data Transfer Service now supports around 30 sources (including Salesforce, Facebook Ads, Shopify, MySQL, and others), several in Preview.

SQL: what querying the transfer actually looks like

To get a basic campaign performance report from the Data Transfer Service tables, you need to join at least three tables and filter by partition date. Here is the SQL required just to see campaign name, spend, and conversions together:

SELECT
  c.campaign_name,
  c.campaign_status,
  cs.date,
  cs.cost_micros / 1000000 AS cost,
  cs.impressions,
  cs.clicks,
  ccs.conversions,
  ccs.conversions_value
FROM
  `project.dataset.p_ads_Campaign` c
JOIN
  `project.dataset.p_ads_CampaignStats` cs
  ON c.campaign_id = cs.campaign_id
  AND c._PARTITIONTIME = cs._PARTITIONTIME
LEFT JOIN
  `project.dataset.p_ads_CampaignConversionStats` ccs
  ON cs.campaign_id = ccs.campaign_id
  AND cs.date = ccs.date
  AND cs._PARTITIONTIME = ccs._PARTITIONTIME
WHERE
  cs._PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
ORDER BY
  cs.date DESC, cost DESC;

This query assumes you already know the table names, the join keys, the partition filter syntax, and that cost is stored in micros (divide by 1,000,000). Adding conversion action breakdowns or cross-device stats means joining more tables.

With Coupler.io, the data lands in BigQuery as a single, pre-joined table with human-readable field names, so a basic campaign report doesn’t require any SQL. When you do need something more complex, like combining Google Ads with Meta Ads data or building custom aggregations, you describe the result to Coupler AI and it creates a SQL transformation for you. That transformation persists in the data flow, refreshes automatically, and stays available for dashboards or further AI analysis.

Connect Google Ads to BigQuery with Coupler.io

Get started for free

Campaign performance report: what the Data Transfer Service actually delivers

When you set up a Google Ads transfer for campaign data, the service creates separate tables for different aspects of the report. Here are the key fields across the main tables:

p_ads_Campaign (campaign metadata): campaign_id, campaign_name, campaign_status, advertising_channel_type, bidding_strategy_type, campaign_budget

p_ads_CampaignStats (daily performance): campaign_id, date, cost_micros, impressions, clicks, interactions, active_view_impressions

p_ads_CampaignConversionStats (conversion data): campaign_id, date, conversions, conversions_value, conversion_action_name, conversion_action_category

Each table is partitioned by date. To build what most people think of as a “campaign performance report,” you join all three on campaign_id and date, then convert cost_micros to your currency by dividing by 1,000,000.

How to set up the Data Transfer Service to export Google Ads reports to BigQuery

If the limitations above work for your situation, here is how to configure the transfer. Make sure you have BigQuery Admin permissions and read access to the appropriate Google Ads account or Google Ads Manager account. 

  1. Go to the Google Cloud Platform and open your BigQuery console.
  2. From the left pane, choose Data Transfers.
12. Navigating to Data Transfers in BigQuery Console.png
  1. Select Create transfer.
13. Creating a data transfer in BigQuery
  1. In the Source field, select the Google Ads option.
14. Choosing Google Ads as the source for the data transfer being created in BigQuery
  1. Give a distinctive name to the transfer (e.g., *** Ads Transfer).
15. Specifying the name for the data transfer being created in BigQuery
  1. Schedule your transfer by selecting the frequency and start time. We suggest running the transfer daily.
16. Specifying the repeat frequency, start date, and run time for the data transfer being created in BigQuery
  1. Select (or create) your dataset under which all the tables will be made.
17. Selecting or creating a dataset for the data transfer being created in BigQuery
  1. Provide the customer ID of the Google Ads account (e.g., 1231231234). The service accepts both standard and manager accounts, so if you need multiple accounts for one transfer, you can add the manager account ID.
18. Providing the Customer ID for the data transfer being created in BigQuery.png
  1. You can add a customized Refresh window (from 0 to 30) which means that on each transfer, the services will import and update the last X days of data. If you leave it blank, the default is set to 7 days. Toggle on Email notifications and click Save.
19. Enabling email notifications and saving the data transfer in BigQuery

The transfer will generate a set of tables containing your Google Ads data. Through backfilling, it will keep your data updated on the schedule you configured.

Send data from Google Ads to BigQuery using Google Ads Scripts

While the Data Transfer Service provides a fast and easy way to transfer all your data to Google BigQuery, there are times when you need only specific reports or to manipulate the data before uploading.

In this case, and if you’re familiar with coding, Google Ads scripts can be your best friend. Google Ads Scripts let you write custom JavaScript that queries Google Ads data through the API and loads it directly into BigQuery. This method to send Google Ads data to BigQuery makes sense when you need a specific data extract that none of the standard report types cover, or when you want to reshape the data before import.

  1. Open Google Ads and navigate to the account of preference. Hover the pointer over Tools in the left sidebar. Select Scripts from the Bulk actions category.
20. Selecting Scripts from the Bulk actions category in Google Ads
  1. Click on the + sign to create a new script.
21. Adding a new script in Google Ads
  1. Give a name to the script (e.g., Google Ads to BigQuery). Click on Advanced APIs.
22. Clicking Advanced APIs when creating a script in Google Ads
  1. Enable BigQuery and click Save.
23. Enabling BigQuery when creating a script in Google Ads

With these settings, Google Ads Scripts can connect directly to both Google Ads API and BigQuery. Writing your own scripts, you can access and manipulate Google Ads reports and load them to Google BigQuery. 

The official documentation contains everything related to Google Ads Script. Then, you can start building your custom scripts to upload any required data.

How you can enrich Google Ads data in BigQuery with extra data sources

Google Ads data in BigQuery becomes more useful when you add a second source to the same dataset. Comparing ad spend against actual revenue or matching conversions across channels requires data from more than one platform in one place.

With the Data Transfer Service or Google Ads Scripts, adding a second source means setting up a separate pipeline for each one. Meta Ads, for example, has no equivalent of the Data Transfer Service for BigQuery. You would need to build a custom integration or find another tool.

With Coupler.io, adding Meta Ads or GA4 to the same BigQuery dataset is part of the same data flow you already set up. You simply need to select an additional source, configure the account connection, and ask Coupler AI (or choose manually) how you want to blend this data with Google Ads. For example, the append mode works for Facebok Ads, Linkedin Ads, and other sources with similar structures. If you want to enrich Google Ads with GA4 or anything else, use the join. Also, you can always keep them as separate tables in BigQuery and join them there.

Coupler.io data blending features

This is the practical reason most teams end up using Coupler.io. For example, a marketing agency ClaritySeed automated multichannel reporting from GA4, Facebook Ads, and Google Ads in the same pipeline, saving over 40 hours per month on manual data work.

Get multi-source ad reporting set up with Coupler.io

Book a demo

Troubleshooting common BigQuery issues with Google Ads data

These are the issues that come up most often when loading Google Ads data into BigQuery, regardless of which method you use.

Permission errors during setup. BigQuery requires specific IAM roles depending on the method. The Data Transfer Service needs BigQuery Admin. Coupler.io needs a Google Cloud JSON key with BigQuery Editor permissions. If the transfer fails immediately after setup, check the IAM role assigned to the account or service account you’re using.

Dataset location is locked at creation. BigQuery sets the dataset location (US, EU, etc.) when you create it, and it cannot be changed afterward. BigQuery also cannot join tables across datasets in different locations. If your Google Ads data is in a US dataset and your CRM data is in an EU dataset, you cannot query them together. Plan the location before creating your first dataset.

Missing _PARTITIONTIME in Data Transfer Service queries. The DTS tables are partitioned by ingestion time, not by the date field in the data. Queries that filter on the date column without also filtering on _PARTITIONTIME will scan the entire table and cost more. Always include a _PARTITIONTIME filter when querying DTS tables.

Schema changes after a Google Ads API version update. Google periodically updates the Ads API, which can change field names or table structures in the Data Transfer Service. If a query that worked last week suddenly fails, check whether a new API version was deployed. Coupler.io handles schema changes on the connector side, so your destination table structure stays stable.

Which option to choose to connect Google Ads to BigQuery

The right method to connect Google Ads data to BigQuery depends on what you need from the data after it lands.

A CSV upload works for a one-time transfer of a specific report for quick analysis. For more on exporting Google Ads data to other formats, see our guide on Google Ads to JSON.

Google Ads Scripts make sense when you need a custom extract that no standard report type covers, or when you want to reshape the data with your own JavaScript before it reaches BigQuery.

Data Transfer Service is a good fit if you’re already in Google Cloud, only need Google Ads data, and have someone on the team who can write the SQL joins to assemble the raw tables into reports.

Coupler.io covers the widest range of use cases with the least setup: scheduled refreshes, a query-ready table, cross-channel data in the same dataset, and AI analysis without writing SQL.

Choose wisely, and good luck with your data!

Try Coupler.io today