flowsk.com
Blog

Attribution, in plain English

Your ad platform grades its own homework, Safari forgets your customer after seven days, and GA4 models the rest. These are the posts we wish someone had written before we started buying ads — plus everything we learn attributing our own funnel with our own product.

Start here Safari's ITP explained: why your 30-day attribution window is really 7 days Safari caps JavaScript-set cookies at 7 days. If you run a 30-day attribution window and half your traffic is iOS, most of your window is fiction. Here's the mechanic, the math, and the fix. 5 min read →

Why attribution is broken

7 posts

Why attribution is broken Aug 4, 2026
Safari's ITP explained: why your 30-day attribution window is really 7 days Safari caps JavaScript-set cookies at 7 days. If you run a 30-day attribution window and half your traffic is iOS, most of your window is fiction.... 5 min read →
Why attribution is broken Aug 3, 2026
Why your Meta Ads Manager numbers don't match your Stripe revenue Meta says 40 sales. Stripe says 25. Neither is broken — they are answering different questions with different data. Here are the four mechanics... 3 min read →
Why attribution is broken Aug 2, 2026
The death of the pixel: what iOS 14 and ATT did to your attribution App Tracking Transparency did not just cost you IDFA matching. It ended the era where a JavaScript tag on a page was a sufficient measurement... 4 min read →
Why attribution is broken Aug 1, 2026
Third-party cookies are dying — what actually replaces them The replacement is not a clever new identifier. It is a different architecture: first-party identity, server-side confirmation, and consented email... 4 min read →
Why attribution is broken Jul 31, 2026
Why GA4 says 40 conversions and Stripe says 25 GA4 is session-based, thresholded and models what it could not observe. Four specific mechanics explain almost every GA4-vs-payments discrepancy —... 3 min read →
Why attribution is broken Jul 30, 2026
View-through attribution is a lie your ad platform tells you Crediting a sale to an impression nobody engaged with is not measurement, it is a correlation with a marketing budget attached. Here is how to test... 3 min read →
Why attribution is broken Jul 29, 2026
The anonymous-to-known gap: why you can't connect the click to the customer Your analytics knows about visitors. Your database knows about customers. Nothing joins them — and that missing join is why acquisition attribution... 4 min read →

How it actually works

7 posts

How it actually works Jul 28, 2026
First-party vs third-party tracking, in plain English The distinction is not about who owns the data. It is about which domain the browser sees in the request — and that single fact decides whether... 3 min read →
How it actually works Jul 27, 2026
Server-side tracking without the jargon It means your backend sends the event instead of the browser. That is all it means — and it is why the sale gets recorded even when the tag never ran. 3 min read →
How it actually works Jul 26, 2026
Client-side vs server-side events (and why you need both) They are not redundant. One knows what the person did, the other knows what actually happened. Send both on purpose, and give them a shared key so... 3 min read →
How it actually works Jul 25, 2026
Reverse-proxy tracking: how to beat ITP without breaking anything Your backend receives the events and forwards them server-to-server. An hour of work, no disguises, and the visitor id stops expiring after seven... 3 min read →
How it actually works Jul 24, 2026
Identity resolution: stitching anonymous visitors to emails to purchases One person, three devices, two anonymous ids, one email, five purchases. The rules that turn that mess into a single journey — and the merge bugs... 4 min read →
How it actually works Jul 23, 2026
First-touch vs last-touch vs multi-touch: which model should you use? Not a philosophical question. First-touch answers where to put new money, last-touch answers what to fix in the funnel, and multi-touch answers a... 3 min read →
How it actually works Jul 22, 2026
How to make a first-party cookie that survives Safari Six lines of backend code. The rule is not about the domain, the flags or the expiry you request — it is about which side of the wire writes the... 3 min read →

How-to

7 posts

How-to Jul 21, 2026
How to keep UTMs through a 301 redirect Most redirect configurations silently drop the query string, and every campaign that passes through one lands as direct traffic. Here is the fix... 3 min read →
How-to Jul 20, 2026
The UTM taxonomy that survives a marketing team Every team has a UTM convention document. Almost none have clean UTM data. The gap is enforcement — here is a taxonomy small enough to follow and a... 3 min read →
How-to Jul 19, 2026
How to measure true CAC when attribution is broken Blended CAC is honest and useless. Channel CAC is useful and usually wrong. Here is how to get a number you can act on without pretending your... 4 min read →
How-to Jul 18, 2026
Break-even ROAS: the number to actually optimise to Most teams optimise to a ROAS target somebody picked in a meeting. The correct target is derived from your contribution margin, and it is usually... 3 min read →
How-to Jul 17, 2026
Server-side conversion tracking for Meta and Google, step by step The Conversions API and Enhanced Conversions, without the vendor documentation. What each one fixes, what it does not, and the event_id detail that... 3 min read →
How-to Jul 16, 2026
Audit your tracking in 10 minutes Seven checks, in order, using tools that are free. Most sites fail at least three, and the failures are usually the cheap ones to fix. 4 min read →
How-to Jul 15, 2026
Attribution windows: how to pick the right one Derive the window from your conversion-delay distribution, not from a convention — and only after you have checked that your identity actually... 3 min read →

Build in public

2 posts

One email a week, and it's always a number.

New teardowns, tracking research, and what we learn instrumenting our own acquisition with our own product. No fluff, unsubscribe in one click.