Growth overview
Marketing analytics for e-commerce, shown as a sample workspace. A sample store, blended across Meta, Google, TikTok and Snapchat. This is roughly what I look at first when I open an account. As a marketing analyst I start with the data analysis (revenue, spend, MER, new-customer cost) and use AI for the messy text around it: search terms, reviews, campaign names. Related reading: Meta ads for a store, AI in a marketing stack and the questions and answers.
Revenue and ad spend
View the data as a table
Findings
sample findings · what I’d fix first- HighMeta match quality is 5.8 out of 10
The click ID is missing on 41% of purchases. Fix: send it and a hashed email from the server.
- MediumSix Meta ads are past frequency 3.5
CTR is down 34% since launch week. Fix: rotate them and brief three new hooks.
- MediumProspecting saturates above €1.4k a day
Marginal ROAS is 0.8 beyond that. Fix: move the surplus to retention and other channels.
- LowBrand terms inflate Google ROAS
Brand is 11.4, non-brand is 2.2. Fix: report them separately and set targets on non-brand.
Channel performance
| Channel | Share of spend |
|---|
Paid media
Every channel saturates: the next euro earns less than the last one. The job is to spend so the next euro earns the same everywhere.
Budget allocation
Split the budget yourself, then let the model find the mix where marginal ROAS is equal across channels. Sample response curves.
Revenue response curves · monthly spend → monthly revenue
growth idle, waiting for a budget to optimize.
View the curves as a table
Channel playbook
what I run and what I check first| Channel | Campaign types | I check first | Measured with |
|---|---|---|---|
| Meta | Advantage+ sales, catalog ads, broad targeting with creative testing | Event match quality, deduplication, frequency | Conversions API, MER |
| TikTok | Spark Ads, Smart+, creator content | Hook rate, click ID persistence | Events API, geo holdouts |
| Snapchat | Dynamic product ads, story ads | Pixel and API deduplication | Snap CAPI against GA4 |
| Performance Max, Shopping, Search | Search terms, brand leakage, Enhanced Conversions | Non-brand ROAS, Enhanced Conversions |
How I decide
- 01Profit over platform ROAS
Platforms grade their own homework. I judge on revenue, margin and new customers.
- 02Creative is targeting
With broad targeting, the ad decides who sees it. Creative gets tested like an audience.
- 03Data before budget
Fix the tracking first. Algorithms optimize on the signal you give them.
- 04Prove it
Holdouts and lift tests before big bets, not longer attribution windows.
Tracking
Server-side tracking for a store: browsers block, cookies expire and consent is required, which is a lot of ways for an order to go missing. A server-side setup gives a store a first-party pipeline it controls, with consent enforced in one place. What the data says once it arrives is on the Analytics tab.
// fire an event to inspect its payload
Simulation with illustrative loss rates. Nothing is tracked on this page.
Tracking plan
one schema, five destinations| Event | Parameters | Sent to |
|---|---|---|
| page_view | page_location, event_id | GA4 · Meta · TikTok · Snapchat |
| view_item | item_id, price, currency, event_id | GA4 · Meta · TikTok · Snapchat · Google Ads |
| add_to_cart | item_id, value, currency, event_id | GA4 · Meta · TikTok · Snapchat · Google Ads |
| begin_checkout | items[], value, currency, event_id | GA4 · Meta · TikTok · Google Ads |
| purchase | transaction_id, value, currency, items[], hashed email, event_id | GA4 · Meta CAPI · TikTok Events API · Snap CAPI · Google Enhanced Conversions |
Analytics
Tracking gets the order out of the store, and analytics is what a team does with it. I work with GA4 and Piwik PRO for measurement, BigQuery for the raw data, and Looker Studio and Looker Studio Pro for the dashboards, and I check each of them against the store’s own orders before anyone makes a decision with it.
Analytics tools
what each is for and what I check| Tool | I use it for | I check |
|---|---|---|
| Google Analytics 4 (GA4) | Web analytics for the store: the event model, e-commerce reports, conversions and audiences, and the export to BigQuery | Each order counted once, purchases against the store, traffic filed as unassigned, payment providers listed as referrals |
| Piwik PRO | Web analytics, tag management and consent in one suite, for clients who want to choose where the data is stored | Consent rates, which tags wait for consent, what is collected when a visitor says no |
| BigQuery | The raw GA4 export, joined with ad spend and orders | Totals against the GA4 interface, days missing from the export, query cost |
| Looker Studio and Looker Studio Pro | Dashboards that blend GA4, the ad platforms and the store. Pro adds shared team workspaces, project-level access and scheduled delivery | Every metric defined once, sources refreshing, totals that match the store |
Reports I build
the question each one answers| Report | The question | Built from |
|---|---|---|
| Store against platforms | Do Meta, Google and GA4 agree with the store’s orders, and by how much? | Store orders, ad platforms, GA4 |
| Funnel | Where do sessions fall away: product page, cart or checkout? | GA4 events, split by device and country |
| New and returning customers | What does a new customer cost, and do they come back? | Orders, ad spend, BigQuery |
| Tracking health | Which events are missing, doubled or late? | Server container logs, BigQuery |
| Consent | How many visitors say yes, and what changes in the numbers when they say no? | Consent Mode v2, Piwik PRO |
How I measure
- 01One definition per number
Revenue, MER, CAC and margin are written down once, with VAT and shipping in or out, and every dashboard uses that definition.
- 02Start from the store
Orders and revenue come from the store. Analytics and the ad platforms are compared with it, not the other way around.
- 03Explain the gap
When GA4, a platform and the store disagree, I look for the boring reason before I pick a number.
- 04Consent changes the data
Consent Mode can fill gaps with modeled numbers, so reports keep what was observed apart from what was modeled.
Automation
Klaviyo for e-commerce lifecycle, HubSpot for pipeline and CRM. Segmented, triggered, tested, and fed by the same data as the ads, so nobody argues about whose numbers are right.
Programs I build
typical setup| Program | Tool | Trigger | Goal |
|---|---|---|---|
| Welcome series | Klaviyo | Signup | First purchase |
| Browse and cart abandonment | Klaviyo | Viewed item, started checkout | Recover the order |
| Post-purchase | Klaviyo | Placed order | Reviews, cross-sell, second order |
| Win-back and sunset | Klaviyo | Inactive for a set period | Reactivate, or clean the list |
| Lead scoring and routing | HubSpot | Score crosses a threshold | Owner assigned, follow-up in an hour |
| Pipeline stages back to ads | HubSpot | Deal reaches a stage | Ads optimize for pipeline, not form fills |
Clients
Some of the companies I’ve worked with.
References
Stack
The tools behind the work, grouped by what they do.
| Area | Tools | What I do with them |
|---|---|---|
| Ad platforms | Meta Ads, TikTok Ads, Snapchat Ads, Google Ads | Campaign structure, creative testing, budget allocation |
| Analytics | GA4, Piwik PRO | Event model, e-commerce reporting, consent-aware measurement |
| Tag management and consent | Google Tag Manager, server-side GTM, Consent Mode v2 | Server-side collection, consent enforced in one place |
| Conversion APIs | Meta CAPI, TikTok Events API, Snap CAPI, Enhanced Conversions | Deduplicated server events with matched user data |
| Lifecycle | Klaviyo | Flows, segmentation, SMS with consent, predictive segments |
| CRM | HubSpot | Lead scoring, workflows, pipelines, offline conversions |
| Reporting | Looker Studio, Looker Studio Pro, BigQuery | Blended dashboards: MER, CAC and margin |