Data Analysis and Reporting in Marketing

How to Connect GA4 to Google Sheets: 3 Methods Compared (2026)

Adela
April 20, 2026

Most marketing teams still pull GA4 reports by hand: open the UI, set the date range, change the dimension, download the CSV, clean the headers, paste into the weekly deck. The cost is roughly 20 minutes per property per pull, and that's before anyone starts analyzing. At five properties a week, you burn half a day every Monday.


This guide walks through the three methods to automate GA4 in Google Sheets in 2026: the free official add-on from Google, the Google Apps Script route, and Dataslayer. Compare setup time, refresh options, and scheduling, and pick the one that matches your workload.

Which method should you choose?

Before we dive into each method, here is the decision matrix. Pick the row that matches your constraints.

Criterion GA4 Reports Builder Apps Script Dataslayer
Setup time 5 minutes 1–2 hours 2 minutes
Cost Free Free Free plan + paid tiers
Refresh frequency Manual (click Run) Scheduled via triggers Hourly, daily, weekly, or every X hours (plan-based)
Multi-property in one sheet No Yes (code) Yes (native)
Skill level needed Basic JavaScript None
Custom metrics / dimensions Limited Full API access Full UI picker
Best for Solo marketers, one property Analysts, custom pipelines Agencies, teams, recurring reports


Rule of thumb:
if you have one GA4 property and refresh weekly, the free add-on is enough. If you manage multiple clients, several properties, or run automated dashboards, a scheduled connector removes the recurring manual work.

Method 1: GA4 Reports Builder (free official add-on)

This is Google's own spreadsheet add-on. It queries the GA4 Data API under the hood but hides the code from you.

Setup

  1. Open a new Google Sheet.
  2. Go to Extensions → Add-ons → Get add-ons.
  3. Search for GA4 Reports Builder for Google Analytics and install it.
  4. Grant access to your GA4 accounts when prompted.
  5. Go to Extensions → GA4 Reports Builder → Create new report.
  6. Pick the property, dimensions, metrics, and date range.
  7. Click Create reports, then Run reports.


The add-on writes the query config to one sheet and the results to another. You can re-run any time from the menu.

What it does well

  • Zero cost.
  • Built by Google, so the metric definitions always match the GA4 UI.
  • Perfect for ad hoc pulls.

Where it breaks

  • No scheduled refresh. If you want Monday morning data, you need to open the sheet and click Run.
  • One property per report block. Comparing 4 clients in one sheet means 4 separate report configs.
  • Sampling and cardinality limits apply just like in the GA4 explorations. High-cardinality dimensions (page_path with query strings, full URLs) silently return partial data.
  • No error recovery. If the API throws quota errors, the sheet shows empty cells with no explanation.


If any of those constraints hurt, the next two methods solve them differently. The first requires JavaScript. The second is an add-on built for recurring multi-property reporting. More on that in Method 3.

Skip the manual re-runs

GA4 Reports Builder works for one property with patient refresh. But if you track multiple GA4 properties, or want to combine GA4 with Google Ads, Meta, and LinkedIn in the same sheet, Dataslayer pulls all of them on a schedule. No manual re-runs, no broken CSV exports.

Install Free Add-on

Method 2: Google Apps Script + GA4 Data API

If you are comfortable with JavaScript, Apps Script gives you full control. You call the GA4 Data API directly, decide exactly which fields to pull, apply your own transformations, and schedule the script to run automatically.

Setup outline

  1. In Google Sheets, open Extensions → Apps Script.
  2. Enable the Google Analytics Data API v1beta in Services.
  3. Authenticate with OAuth 2.0 scopes for analytics.readonly.
  4. Write a function that calls AnalyticsData.Properties.runReport() with your property ID, metrics, dimensions, and date range.
  5. Parse the response and write rows to the sheet.
  6. Add an installable time-driven trigger under Triggers to run it every hour, every day, or on a specific weekday.

Minimal example

function pullGA4() {
 const request = {
   dateRanges: [{ startDate: '7daysAgo', endDate: 'yesterday' }],
   dimensions: [{ name: 'sessionDefaultChannelGrouping' }],
   metrics: [{ name: 'sessions' }, { name: 'keyEvents' }]
 };
 const report = AnalyticsData.Properties.runReport(request, 'properties/YOUR_PROPERTY_ID');
 const sheet = SpreadsheetApp.getActiveSheet();
 sheet.clear();
 sheet.appendRow(['Channel', 'Sessions', 'Key events']);
 report.rows.forEach(r => sheet.appendRow([
   r.dimensionValues[0].value,
   r.metricValues[0].value,
   r.metricValues[1].value
 ]));
}

When this makes sense

  • You need a transformation no add-on supports, like joining GA4 sessions with a custom cost table from BigQuery.
  • You are building an internal tool and code ownership matters.
  • You want zero recurring cost.

The tradeoff

You own the code, which means you also own the breakage. API changes, OAuth token refresh edge cases, and quota handling are all your problem. Most marketing teams do not have time to maintain this long-term.

Method 3: Dataslayer for Google Sheets

Dataslayer is a Google Sheets add-on built for marketers and agencies who pull from many sources, not just GA4. The point is scheduled, multi-account, multi-source reporting without writing code.


We built Dataslayer partly to solve this for ourselves: we track our own production and test GA4 properties through the add-on, in a single workbook alongside our ad sources. The setup below is the same one we document for our users.

Setup

  1. In Google Sheets, open Extensions → Add-ons → Get add-ons.
  2. Search for Dataslayer and install it.
  3. Open Extensions → Dataslayer → Launch sidebar.
  4. Connect your GA4 account (one-time OAuth).
  5. Pick the property, metrics, dimensions, filters, and date range in the sidebar.
  6. Click Run query. Data lands in the sheet.
  7. (Optional) Set a refresh schedule for the document from the sidebar: hourly, daily, weekly, or every X hours, depending on your plan. The schedule applies at document level, so all queries in the sheet refresh together. You can skip this step and re-run manually whenever you need fresh data.

What changes vs the two previous methods

  • Multi-property in one sheet. Pull several GA4 properties into the same workbook, one query each (5, 10, or more, depending on your plan's query limit). All of them refresh together on the document schedule.
  • Cross-source joining. In the same sheet, combine GA4 sessions with Google Ads cost and Meta Ads impressions. Build a blended ROAS view without leaving Sheets.
  • Backfill. Fetch up to 14 months of historical GA4 data in a single run (the GA4 Data API maximum for standard properties).
  • Error visibility. When the API returns a quota error, the sidebar tells you instead of leaving blank cells.
  • Google Sheets is where it starts. The same queries work in Excel and Looker Studio if your workflow moves there.

When Dataslayer isn't the right fit

  • You track a single GA4 property and refresh once a week. The free GA4 Reports Builder does that job with no add-on cost.
  • You need a custom transformation pipeline (joining GA4 with an internal database, running ML models on top). Apps Script gives you more flexibility at the code level.
  • You have zero tolerance for paid tools, even at the free tier. Use the free add-on.

Common GA4 reports you can build in Google Sheets

Once the connection works, the next question is what to pull. Five reports cover 80% of what marketing teams need.


Weekly traffic by channel
. Dimensions: sessionDefaultChannelGrouping, date. Metrics: sessions, totalUsers, keyEvents, averageSessionDuration. Use it as the first tab of every client deck. (Note: GA4 renamed "conversions" to "key events" in 2025. Same concept, new name.)


Landing page performance
. Dimensions: landingPage, sessionDefaultChannelGrouping. Metrics: sessions, engagementRate, keyEvents, totalRevenue. Filter to top 50 landing pages by sessions. This is where content ROI lives.


Custom event tracking
. Dimensions: eventName, date. Metrics: eventCount, keyEvents. Use it to monitor custom events marked as key events: signups, demo requests, file downloads.


E-commerce funnel
. Dimensions: date. Metrics: sessions, addToCarts, checkouts, ecommercePurchases, purchaseRevenue. Calculate step-to-step conversion rates in Sheets using simple formulas.


Source/medium attribution
. Dimensions: sessionSource, sessionMedium. Metrics: sessions, keyEvents, totalRevenue. Combine with Google Ads cost data in a second tab to get a manual ROAS view.


If you would rather not build these from scratch, copy one of the free GA4 + Google Sheets templates we publish and plug in your own property.

Automate your GA4 reporting in Google Sheets

Dataslayer connects GA4 plus 50+ marketing and ad platforms to Google Sheets, Looker Studio, Excel, and BigQuery. Schedule refreshes, combine sources in one sheet, and stop exporting CSVs. Free 15-day trial, no credit card required.

Try Dataslayer Free

Troubleshooting: the four errors you will hit

Quota exceeded. The GA4 Data API has per-property daily quotas. If you pull large reports hourly across many properties, you will hit the cap. Fix: lower the refresh frequency to daily, or split queries across days so the quota resets between runs.


Sampling warnings.
GA4 samples when you combine high-cardinality dimensions over long date ranges. Fix: narrow the date range, remove one dimension, or use the (other) row as a signal to simplify the query.


Data thresholding
. Small properties with Google Signals enabled see rows hidden by thresholdApplied. Fix: if you are the property owner, turn off Google Signals for the reporting identity in GA4 admin. Only do this if your privacy policy allows it.


Row limits.
The GA4 Data API limits how many rows you can fetch per call. The free Reports Builder returns whatever fits in one call and stops. Apps Script and Dataslayer can paginate across multiple calls, but you have to configure it. Fix: split the query by month, or aggregate at a higher dimension level.

GA4 to Google Sheets vs Looker Studio: when to use each

Both tools pull from the same GA4 Data API. Pick based on the end use, not the data source.

Use case Google Sheets Looker Studio
Ad hoc analysis Better Clunky
Weekly stakeholder deck Better (export to PDF) Good
Live client dashboard Limited Better
Custom calculations and pivots Better Limited
Sharing with non-technical stakeholders Neutral Better (visual)
Joining with CRM or warehouse data Better (formulas + IMPORTRANGE) Possible, complex

The honest answer: most marketing teams need both. Sheets for analysis and exports, Looker Studio for live dashboards. Dataslayer supports both without rewriting queries.


If you want the dashboard version of what we just built, see our guide to the 10 free Looker Studio templates and the Google Sheets automation guide for formulas that turn raw GA4 exports into clean reports.

FAQ

Is it free to connect GA4 to Google Sheets?

Yes. Google's own GA4 Reports Builder add-on is free forever. Google Apps Script is free as long as you stay within the daily execution quotas. Dataslayer has a free tier that covers small teams and paid tiers for higher volume and more sources.

How often does the data refresh?

The free GA4 Reports Builder refreshes only when you click Run. Apps Script refreshes on whatever schedule you code. Dataslayer supports hourly, daily, weekly, or every X hours at document level, depending on your plan. The schedule is optional; you can also re-run queries manually whenever you need fresh data.

Can I connect multiple GA4 properties to one sheet?

Not natively with the GA4 Reports Builder, since each report block handles one property. Apps Script can loop over property IDs if you write the code. Dataslayer supports multiple GA4 properties in the same workbook out of the box, which is why agencies use it for client reporting.

Does it work with GA4 360?

Yes, all three methods work with GA4 360. The 360 API has higher quotas and more metric granularity, which means you can pull more data without hitting sampling.

Can I use this for client reporting?

Yes, and it is one of the most common use cases. Agencies build a master template in Sheets, connect each client's GA4 property, and duplicate the sheet per client. Dataslayer speeds this up because the same query definition can point at different accounts.

Why is my GA4 data different in Sheets than in the GA4 interface?

Three common causes. First, the GA4 UI uses the standard reporting identity (Blended by default), while the Data API uses the identity you pick in the query. Second, sampling and data thresholding can produce different row counts between the UI and the API. Third, the GA4 UI applies a default 30-minute window of data processing, so very recent data may show in one place and not the other. For reconciliation, match the reporting identity and the date range exactly.

Conclusion

Three methods, three use cases. The free GA4 Reports Builder covers solo marketers with one property and patience to refresh manually. Apps Script is for analysts who want full control and can write JavaScript. Dataslayer fits teams, agencies, and anyone who needs GA4 data in Google Sheets on a schedule, alongside Google Ads, Meta, LinkedIn, and the rest of the stack.


The real question is which method matches your recurring workload. If you pull GA4 data more than once a week, the time you spend on manual exports has a cost that is easy to underestimate.


Track GA4, Google Ads, Meta and the rest of your stack in one Google Sheet, on a schedule. Try Dataslayer free for 15 days. No credit card required.

CONTACT FORM

RELATED POST

How to Connect GA4 to Google Sheets: 3 Methods Compared (2026)

How to Connect Shopify to BigQuery: Methods, Setup, and What You Can Build

Meta Attribution Change 2026: What Engage-Through Attribution Is and Why Your Numbers Look Different

Our Partners