The Full GA4 Tracking Audit: Instacart's Marketing Funnel
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)
Free at any traffic volume this project's scenario involves, the entire audit runs on the free tier.
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.
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.
The process
5 steps
Step 01 of 05
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?
Procedure
- 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'
- Pull the daily 'visit' totals from the funnel export for June 1-30
- 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
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?
| Symptom | Action | Effort |
|---|---|---|
| Session timeout set to a non-default value with no change-log entry explaining why | Revert 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 numbers | 30 min |
| Unexplained single-day visit spikes not matching any known campaign launch | Check for bot traffic or a tagging duplication bug before trusting that day's number in any report | half day |
Step 02 of 05
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?
Procedure
- 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)
- Compare the four channels against each other: organic, paid_search, paid_social, email
- 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
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?
| Symptom | Action | Effort |
|---|---|---|
| A channel's visit-to-signup rate sitting 3+ points below the others | Pull 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 volume | half day |
Step 03 of 05
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?
Procedure
- Open the GA4 Reports snapshot and note the Active Users figure for the reporting period
- Pull the number the marketing team's monthly deck actually labeled 'users' or 'reach'
- Compare the two, if the deck's number is meaningfully higher than GA4's Active Users, trace where the bigger number came from
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?
| Symptom | Action | Effort |
|---|---|---|
| A report's 'users' figure is actually an undeduplicated visit or session count | Relabel it accurately (Total Visits) and pull the real GA4 Active Users number separately, don't let the two share a label | 5 min |
| Historical decks all carry the same mislabeling | Add a one-time footnote to the next report explaining the relabeling so trend lines aren't misread as a sudden 'user' drop | 30 min |
Step 04 of 05
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?
Procedure
- Open Admin > Events and list every event currently toggled on as a key event
- Compare that list against the funnel export's actual meaningful stages: signup, activation, purchase, retained
- Flag any key event that isn't tied to one of those real outcome stages
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?
| Symptom | Action | Effort |
|---|---|---|
| 8+ events flagged as key events on one property | Un-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 rate | 30 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 itself | 5 min |
Step 05 of 05
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?
Procedure
- Pull total visits by channel (the vanity-adjacent, top-line number most reports lead with)
- Compute visit-to-purchase rate by channel (chain visit-to-signup by signup-to-activation by activation-to-purchase from the earlier steps)
- Rank channels by each metric separately and see if the rankings agree
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?
| Symptom | Action | Effort |
|---|---|---|
| Budget decisions being made from a channel report sorted by visits/sessions by default | Re-sort or add a visit-to-purchase (or visit-to-key-event) column as the default view before the next budget review | 5 min |
| paid_social's small volume (6,849 visits) makes it easy to dismiss despite its strong conversion rate | Recommend a modest test-budget increase for paid_social and re-measure visit-to-purchase at the new volume before committing a large shift | dev ticket |
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
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