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.io | Data Transfer Service | Google Ads Scripts | |
|---|---|---|---|
| Setup time | 5–10 minutes | 30–60 min (requires Google Cloud project admin) | 1–3 hours (JavaScript) |
| Refresh frequency | Hourly to every 15 minutes, depending on plan | Once every 24 hours | Custom (cron-triggered) |
| Transformations | Filter, rename, aggregate, join, SQL. All applied before data reaches BigQuery | None. Data arrives as-is across multiple tables | Whatever you code in the script |
| Data format in BigQuery | Single query-ready table (or multiple, your choice) | 9+ separate tables per report. You join them yourself | Custom table structure you define |
| Historical backfill | Full history available through the connector | 180 days per backfill request, one request at a time | Depends on your script and Google Ads API limits |
| Other sources in the same dataset | Yes. 420+ sources, same data flow | Google sources only | Google Ads only |
| Technical skills needed | None | Google Cloud admin access, BigQuery SQL for any analysis | JavaScript, Google Ads API |
| AI analysis | Built in: AI Agent, AI integrations (Claude, ChatGPT, etc.), Skills | Not included | Not 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
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.

- 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.

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.

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.

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!

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.ioWhy 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.
Google Ads network performance dashboard
Preview dashboard
Google Ads network performance dashboard
Preview dashboardKeyword 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 keywords performance dashboard
Preview dashboard
Google Ads keywords performance dashboard
Preview dashboardGoogle 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.
Google Ads creatives template in Data Studio
Preview dashboard
Google Ads creatives template in Data Studio
Preview dashboardExplore other Google Ads dashboard templates by Coupler.io
Get started for freeOther 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.
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 freeCampaign 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.
- Go to the Google Cloud Platform and open your BigQuery console.
- From the left pane, choose Data Transfers.

- Select Create transfer.

- In the Source field, select the Google Ads option.

- Give a distinctive name to the transfer (e.g., *** Ads Transfer).

- Schedule your transfer by selecting the frequency and start time. We suggest running the transfer daily.

- Select (or create) your dataset under which all the tables will be made.

- 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.

- 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.

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.
- 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.

- Click on the + sign to create a new script.

- Give a name to the script (e.g., Google Ads to BigQuery). Click on Advanced APIs.

- Enable BigQuery and click Save.

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.

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 demoTroubleshooting 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!