The GA4 + BigQuery setup most agencies can’t build

Smart Bidding is only as smart as the signals you feed it.

I fix that.

You already pay Google to export GA4 to BigQuery. You’re probably using 5% of what’s in there. Meanwhile your campaigns bid on “converted / didn’t convert” like it’s 2016. Your ROAS tells you the rest.

No pitch. I’ll open your account, tell you what’s leaking, and send you the notes.

The data’s already there. Most agencies just can’t read it.

Clicks, sessions, add-to-carts, product performance, LTV, churn. It’s all sitting in Google Ads, GA4, and BigQuery (unlikely) right now. Most agencies can’t touch it past the UI. So they bid on the same default conversion every competitor bids on, blame iOS, and ask you for more budget.

There’s a better version of this.

What I actually do

One source of truth (GA4 + Google Ads + BigQuery)

  • Stop arguing about which number is right (GA4 event-level data, cleanly modeled in BigQuery)
  • Reports that reconcile across Shopify, GA4, and Google Ads (custom dbt-style models tied to your business logic)
  • You own the data, the schema, and the queries forever (full client retention, no black box)
  • Scales when you do (built for acquisition-stage catalogs, not SMB dashboards)

Product & Revenue Intelligence (Merchant Center + Ads + GA4)

  • Know which SKUs actually make money, not just which ones sell (margin-weighted performance, not GMV vanity)
  • Spot demand you’re not meeting, plus supply you’re wasting spend on (demand vs. revenue gap analysis)
  • Catch price creep before it kills conversion rate (competitor price monitoring)
  • Get a shortlist of SKUs to push, cut, or re-merchandise (quarterly product strategy memo)

Google Ads that learn from your customers

  • Bid on buyers (custom conversions weighted by margin and LTV)
  • See the full funnel, including assisted paths (GA4 data-driven attribution + BigQuery joins)
  • Feed better signals back into Google Ads (Enhanced Conversions, Customer Match from first-party segments)
  • Creative and bidding running off the same product data (feed optimization + campaign structure that match)

Attribution that isn’t lying to you

  • Know which channels start deals, not just which ones close them (conversion lag + first-touch analysis)
  • Stop over-crediting brand search (new vs. returning channel splits)
  • See the real cross-channel path (cross-platform customer journey modeling)
  • Make budget decisions on influence, not just last-click (marginal ROAS by channel)

Executive Dashboard

One dashboard. Four questions you actually ask.

Forty KPIs is just noise. The four questions below are what actually drive decisions:

  • Where is revenue coming from, really?
  • Where should the next $10K of spend go?
  • What’s underperforming and why?
  • Where can we scale without the ROAS collapsing?


That’s the dashboard you get. Built in Looker Studio on top of your BigQuery models. Refreshed daily. Readable in under 90 seconds.

National consumer brand, upper-funnel campaign incrementality


The client was under internal pressure to cut Demand Gen and YouTube spend because last-click reporting made the campaigns look weak. We built a measurement framework in GA4 + BigQuery to test actual incrementality.

Featured product line: +67% revenue post-launch. Rest of the site: flat. Sitewide traffic: ~10% lift. Exposed users converted at 2x the rate of matched unexposed users. Budget was renewed at a higher level the following quarter.

[Read the full case study.]

Behavioral Modeling That Grew Revenue 33% on Flat Traffic


An ecommerce client had solid baseline performance on paid media but no way to scale without raising spend. Platform signals told us what happened. They didn’t tell us which users were going to buy before they did, or which products deserved the push.

We pulled GA4 event data into BigQuery, built a propensity model off product views, add-to-cart behavior and recency, and rebuilt Google Ads audiences and product priorities around the output.

Over a 30-day before/after test on the same set of high-value products:
– Revenue: +33%
– ROAS: +42%
– Spend: -7%
-Conversions: +40%
-Traffic: roughly flat

Hot users converted at ~30%. Warm users converted at ~6%. Hot users drove about 6x the revenue per user.
The growth came from targeting the right people and prioritizing the right products, not from buying more clicks.
[Read the full case study.]

Raw, event-level data. Every click, form submit, scroll, transaction, with every parameter attached.

GA4’s reports are sampled and aggregated. You see summaries. In BigQuery you see the actual rows, timestamped and joinable against anything else you own.

That’s the part that matters. Once the data is in BigQuery I can join it against Google Ads, Merchant Center, your CRM, server logs. Then I can answer the questions GA4 can’t: which SKUs drive first-time vs. repeat revenue, how long the real path to purchase is, which campaigns are profitable after returns.

GA4 tells you what happened. BigQuery lets you ask why.

Honestly, not everyone does. If you’re spending under $10K/month on ads and running a simple lead-gen site, standard GA4 is probably fine.

It starts paying for itself once you’re spending meaningful money (roughly $30K+/month), selling products with different margins, or running a buying cycle that’s longer than a few days. At that point the questions you need to answer sit below the surface GA4 shows you.

The other signal: if your attribution has ever looked off and you couldn’t explain why, BigQuery is usually where the answer is.

Two ways.

Better signals going in. Most accounts bid against whatever conversion pixel fires. Fine until you notice not all conversions are worth the same. With BigQuery I can push actual profit, LTV, or new-customer revenue back into Ads as the bidding input. The algorithm gets smarter because what you’re feeding it is smarter.

Better decisions coming out. Instead of trusting PMax’s “Insights” tab (which I don’t, much), I can see exactly which products, placements, and audiences are actually producing revenue. Then cut what isn’t and double down on what is.

Expect cleaner ROAS and less waste. How much of that shows up depends on where you’re starting.

Everything, if you run Shopping.

Shopping and PMax bid on your product feed. Bad feed, bad performance. I pull Merchant Center data into BigQuery alongside Ads and GA4 so I can see the full loop in one place: feed quality, impression share by product, clicks, conversions, margin.

That’s where the interesting finds tend to live. Products that are invisible because of a broken attribute. Disapprovals nobody’s noticed for months. Pricing that’s out of the competitive range for a specific category.

I wrote a book on data feed optimization about 10 years ago. The underlying problems haven’t changed much.

A few weeks for most setups. Longer if tracking is broken, which it usually is when I start.

Rough shape of it:

  • Week 1. Audit the current GA4, Ads, and Merchant Center setup. Confirm conversion tracking is actually firing correctly, not just showing green. This is the step most agencies skip.
  • Week 2. Wire up the BigQuery export, the Google Ads data transfer, the Merchant Center transfer. Backfill whatever’s missing.
  • Week 3+. Models, reports, and the analysis the account actually needs.

You’ll start getting useful answers in week 3. The deeper work (propensity modeling, LTV forecasting, customer-level attribution) builds from there.

No. If anything it’s more useful for smaller operators.

Big companies already have in-house data teams. A $50M/year ecomm brand running its own warehouse isn’t paying me to set it up.

The clients I work with are mostly in the $30K to $50K/month ad spend range. They have the volume for this to matter, but no internal analyst, no data engineer, no one on staff who writes SQL. That’s the gap I fill.

Ready to Talk About Your Account?

I take on a limited number of clients. Book a free 30-minute strategy call to see if we’re a good fit. No sales pitch, just a straight conversation about what’s working, what isn’t, and what I’d do differently.