Skip to content
Academy
Marketing Academy · Field Work●Analytics & Attribution
BigAudit· 70 minutes

The Full GA4 Tracking Audit: Instacart's Marketing Funnel

Instacart

Objective: Run a genuine five-part audit of a grocery-delivery marketplace's marketing funnel export, the way an analyst actually validates a GA4 setup before trusting a single number in it: session logic, engagement quality, active-user definition, key-event configuration, and vanity-vs-actionable channel reporting.

You've been brought in to audit the marketing analytics setup for a grocery-delivery marketplace built on the Instacart model, two-sided, retailer-partnership-driven growth with an in-house funnel from first visit to repeat order. The marketing team trusts their dashboard completely. Your job before the next budget review: find out if that trust is earned.

Five real questions, five real answers, using the actual 30-day funnel export below. Each one maps to one of the five core vocabulary terms from the lesson: event, session, engaged session, active user, and key event. By the end you'll have a verdict on whether this dashboard is measuring what the team thinks it's measuring.

Before you start

What you'll need

Free path (everything below is enough to finish)

FreeThe source of truth for every setting audited in Steps 1-4

Free at any traffic volume this project's scenario involves, the entire audit runs on the free tier.

FreeBuilding the Step 5 channel comparison table

Free, connects directly to GA4 or a raw CSV export for the pivot used in Step 5.

No access? Any spreadsheet tool (Google Sheets, Excel) works identically for this pivot.

Paid upgrades (optional, faster/deeper)

The entire audit above uses GA4's free tier and a spreadsheet-level channel comparison. A Mixpanel or Amplitude paid tier is an upgrade for teams that outgrow GA4's reporting depth, never a requirement to run this audit.

Mixpanel(optional)
FreemiumEvent-level cohort analysis beyond GA4's default reports

A useful upgrade once a property passes this basic audit and the team wants deeper behavioral cohorting, never a requirement to run the audit itself.

Download project dataset

The process

5 steps

Step 01 of 05

Session

A session groups events from one user in one visit and ends after 30 minutes of inactivity. Critically, GA4 does NOT start a new session just because a user clicks a new campaign link mid-visit, unlike the older Universal Analytics.

Is this property's session-timeout setting actually the GA4 default (30 min), or has someone silently changed it, and does the funnel export's day-level session count make sense given the setting?

Google Analytics 4— Admin > Data Streams > [stream] > Configure Tag Settings > Session timeout, cross-checked against public/project-data/funnel-data.csv 'visit' counts by day

Procedure

  1. Open Admin > Data Streams > the web stream > Configure Tag Settings > Adjust session timeout, confirm it reads 30 minutes, not a custom value set during a past 'fix'
  2. Pull the daily 'visit' totals from the funnel export for June 1-30
  3. Sanity-check: does the day-to-day visit volume look plausible for the channel mix (organic/paid_search/paid_social/email), or are there suspicious single-day spikes suggesting a session-timeout misconfiguration inflating or fragmenting counts
Sample output
GA4 Admin > Data Streams > Web > Configure Tag Settings > Session timeout: 30 minutes (default, unchanged)

Daily 'visit' totals, sample week (Jun 1-7): 1,782 / 1,809 / 1,617 / 1,717 / 2,204 / 1,253 / 1,509
30-day total visits: 51,426 across 4 channels (organic 22,119 / paid_search 14,976 / paid_social 6,849 / email 7,482)

Healthy

Session timeout reads the GA4 default of 30 minutes (or a deliberately documented custom value), and daily visit counts move smoothly with channel mix, no unexplained single-day 3x spikes.

Unhealthy

Session timeout has been changed to something short (e.g. 5 minutes) without documentation, which artificially inflates session counts by chopping up single visits, or something very long, which artificially deflates them by merging separate visits.

What this means

The 30-day total of 51,426 visits across four channels, with organic carrying the largest share (22,119, about 43%), is consistent with a marketing-led acquisition mix and no red flags in the daily pattern. The session-timeout setting checks out at the default.

So what do I do about it?

SymptomActionEffort
Session timeout set to a non-default value with no change-log entry explaining whyRevert to the 30-minute default unless there's a documented product reason, then re-baseline the last 30 days of reporting so it isn't compared against pre-change numbers30 min
Unexplained single-day visit spikes not matching any known campaign launchCheck for bot traffic or a tagging duplication bug before trusting that day's number in any reporthalf day
DeveloperNeeds a developer/engineer to ship the fix.

Step 02 of 05

Engaged Session

An engaged session must meet at least one of three bars: lasted longer than 10 seconds, fired at least one key event, or had 2+ page views. Mistake 4: a jump in sessions paired with a drop in engagement rate usually means bot traffic or broken tracking, not real growth.

Does this property's engagement rate hold steady as visit volume moves, or is there a channel where sessions are rising while engagement quietly falls, the exact pattern the lesson flags as a red flag?

Google Analytics 4— Reports > Engagement > Overview, engagement rate by channel, cross-referenced against the visit-to-signup conversion rate per channel in the funnel export

Procedure

  1. Pull visit-to-signup conversion rate per channel from the 30-day funnel export as a proxy for engagement quality (a visit that never converts to even a signup click sits at the low-engagement end)
  2. Compare the four channels against each other: organic, paid_search, paid_social, email
  3. Flag any channel whose visit volume is large but whose downstream conversion is disproportionately weak, a possible engagement or bot-traffic issue worth a deeper GA4 engagement-rate pull
Sample output
Channel        Total visits   visit->signup %
organic          22,119           10.57%
paid_search      14,976           10.29%
paid_social       6,849           10.79%
email             7,482           10.59%

Healthy

visit-to-signup conversion is roughly consistent across channels (within a couple of points of each other, as seen here: 10.29%-10.79%), meaning no channel is disproportionately dumping low-quality, low-engagement traffic into the top of the funnel.

Unhealthy

One channel shows visit volume comparable to the others but a visit-to-signup rate several points lower, a classic bot-traffic or broken-attribution signature.

What this means

All four channels land within half a point of each other (10.29% to 10.79%), there's no channel here showing the sessions-up/engagement-down pattern the lesson flags. This audit's engagement quality checks out; it's not where this dashboard's problem is.

So what do I do about it?

SymptomActionEffort
A channel's visit-to-signup rate sitting 3+ points below the othersPull that channel's GA4 engagement rate directly (Reports > Engagement > Overview, filtered by channel) and check for a bot-traffic or duplicate-tag signature before trusting its top-of-funnel volumehalf day
YouYou can do this yourself, no engineering access required.

Step 03 of 05

User (vs. Active User)

GA4's default 'Users' card actually shows Active Users, people with at least one engaged session, not the older Universal Analytics definition that counted anyone who landed, even instant bouncers. Mistake 1: comparing GA4 numbers to old UA numbers as if they measure the same thing.

Is the marketing team's monthly report quoting GA4's Active Users number, or has someone quietly swapped in a raw visit count and relabeled it 'users,' inflating the reported reach?

Google Analytics 4— Reports snapshot > Active Users card, cross-checked against the number printed in last month's marketing deck

Procedure

  1. Open the GA4 Reports snapshot and note the Active Users figure for the reporting period
  2. Pull the number the marketing team's monthly deck actually labeled 'users' or 'reach'
  3. Compare the two, if the deck's number is meaningfully higher than GA4's Active Users, trace where the bigger number came from
Sample output
GA4 Active Users (last 30 days, users with >=1 engaged session): closest real proxy is the signup-stage total in the funnel export, 5,410 users who signed up out of 51,426 total visits
Marketing deck's 'Total Users Reached' figure: 51,426 (this is total visits, not users, and not filtered to engaged sessions at all)

Healthy

The number labeled 'users' anywhere in a report traces cleanly back to GA4's Active Users definition, and readers understand it means people who had a meaningful visit, not every raw pageview.

Unhealthy

A raw visit or session count gets relabeled 'users' in a deck, inflating reported reach by counting the same person multiple times across sessions, or counting bounced, non-engaged visits as if they were real audience.

What this means

The marketing deck's 51,426 'Total Users Reached' figure is actually the raw visit count, not Active Users, and it isn't even deduplicated by person. The real Active User signal is much closer to engaged, signed-up traffic. This is the Mistake 1 pattern in the wild, an old habit of quoting the biggest available number under the 'users' label.

So what do I do about it?

SymptomActionEffort
A report's 'users' figure is actually an undeduplicated visit or session countRelabel it accurately (Total Visits) and pull the real GA4 Active Users number separately, don't let the two share a label5 min
Historical decks all carry the same mislabelingAdd a one-time footnote to the next report explaining the relabeling so trend lines aren't misread as a sudden 'user' drop30 min
EitherYou or a developer can handle this, depending on your access.

Step 04 of 05

Key Event

A key event (formerly 'conversion') is any event flagged as a meaningful business outcome. Mistake 2: marking every event as a key event makes the conversion rate meaningless, pick 1-3 outcomes per funnel stage.

How many events are currently flagged as key events on this property, and does the count suggest disciplined outcome-tracking or 'mark everything, hope something's useful' sprawl?

Google Analytics 4— Admin > Events > Mark as key event toggle list

Procedure

  1. Open Admin > Events and list every event currently toggled on as a key event
  2. Compare that list against the funnel export's actual meaningful stages: signup, activation, purchase, retained
  3. Flag any key event that isn't tied to one of those real outcome stages
Sample output
Events currently flagged as key events (8 total):
  sign_up, begin_checkout, purchase, add_to_cart, scroll_75, video_start, newsletter_click, app_download_click

Funnel stages that actually represent business outcomes (per the export): signup, activation (first order behavior), purchase, retained

Healthy

1-3 key events per meaningful funnel stage, each one tied to a real outcome (sign_up, purchase), not passive engagement signals.

Unhealthy

8 events flagged as 'key,' several of which (scroll_75, video_start) are engagement signals, not outcomes, the Mistake 2 pattern in the wild: if everything is a key event, nothing is.

What this means

5 of the 8 flagged key events (add_to_cart, scroll_75, video_start, newsletter_click, app_download_click) are engagement or intent signals, not completed outcomes. Any 'key event conversion rate' pulled from this property right now is averaging real purchases together with people who merely scrolled 75% down a page, the number is close to meaningless as reported.

So what do I do about it?

SymptomActionEffort
8+ events flagged as key events on one propertyUn-flag everything except sign_up, begin_checkout, and purchase (the three that map to real funnel stages), keep the rest as regular events, still analyzable, just not polluting the conversion rate30 min
Team resistance to un-flagging 'scroll_75' because 'we like watching that number'It can still be tracked and reported as a regular engagement event, key-event status is what's being removed, not the tracking itself5 min
DeveloperNeeds a developer/engineer to ship the fix.

Step 05 of 05

Actionable vs. Vanity Metrics

Vanity metrics look good but don't connect to revenue or decisions (total pageviews, follower counts). Actionable metrics connect directly to outcomes and tell you what to do next (conversion rate, CAC, revenue per session).

Looking at the channel breakdown, which channel does the vanity metric (total visits) say is winning, and does the actionable metric (visit-to-purchase rate) agree?

Looker Studio— Full-funnel channel breakdown, visits (vanity, top of funnel) vs. visit-to-purchase (actionable, full funnel)

Procedure

  1. Pull total visits by channel (the vanity-adjacent, top-line number most reports lead with)
  2. Compute visit-to-purchase rate by channel (chain visit-to-signup by signup-to-activation by activation-to-purchase from the earlier steps)
  3. Rank channels by each metric separately and see if the rankings agree
Sample output
Channel        Total visits (rank)   visit->purchase % (rank)
organic         22,119 (#1)           1.97% (#2)
paid_search     14,976 (#2)           1.84% (#4)
paid_social      6,849 (#4)           2.34% (#1)
email             7,482 (#3)           1.96% (#3)

Healthy

The channel that ranks #1 on the vanity metric (visits) is also the channel a budget decision should favor, the two rankings roughly agree.

Unhealthy

The visits ranking and the actionable visit-to-purchase ranking disagree, meaning a budget decision made off the vanity number alone would favor the wrong channel.

What this means

paid_social ranks 4th by raw visits but 1st by visit-to-purchase rate (2.34%, meaningfully ahead of organic's 1.97%). A budget review that only looked at 'which channel drives the most traffic' would keep underfunding the channel that's actually converting best. This is the audit's real finding: the dashboard's default sort order (by visits) is quietly steering decisions toward the wrong channel.

So what do I do about it?

SymptomActionEffort
Budget decisions being made from a channel report sorted by visits/sessions by defaultRe-sort or add a visit-to-purchase (or visit-to-key-event) column as the default view before the next budget review5 min
paid_social's small volume (6,849 visits) makes it easy to dismiss despite its strong conversion rateRecommend a modest test-budget increase for paid_social and re-measure visit-to-purchase at the new volume before committing a large shiftdev ticket
YouYou can do this yourself, no engineering access required.

Final deliverable

A five-finding audit memo (one finding per step above) with a specific fix and owner for each, plus the re-sorted channel table from Step 5 as the one chart to bring to the next budget review.

See a reference example
Sample output
Findings: (1) session timeout at the GA4 default, no issue; (2) engagement consistent across channels, no bot-traffic signature found; (3) the marketing deck's 'Total Users Reached' (51,426) is actually raw visits, not GA4 Active Users, mislabeled; (4) 8 events flagged as key events, 5 of them are engagement signals, not outcomes, over-tagged the way a marketplace with dozens of on-page micro-interactions, like Care.com's, would need to watch for; (5) paid_social ranks last by raw visits (6,849) but first by visit-to-purchase rate (2.34%), the channel report's default sort is quietly hiding the best-converting channel. Two findings need a developer ticket (session/event config), three are same-day fixes.

Success criteria

You're done when you can:

  • Correctly distinguishes the 30-minute session default from a possible misconfiguration using real evidence, not assumption
  • Identifies the specific mislabeling of 'visits' as 'users' in Step 3, citing the actual GA4 Active User definition
  • Flags the correct 5 over-tagged key events in Step 4 (the engagement-signal ones, not the 3 legitimate outcome events)
  • Reaches the Step 5 finding that paid_social outconverts organic despite lower volume, and recommends re-sorting the channel report rather than just noting the discrepancy