Six YouTube Shorts channels, a vertical-video render pipeline, weekly token reauths, channel phone verifications. I poured six months into this to bring people to the apps. And I had never once measured, by source, which channel actually drove app visits.
A question first. Do you know, in numbers, which channel actually drives your traffic — or do you believe "the one I invested in most must be working best"? I believed. I was wrong.
The dashboards measured activity, not traffic
All my dashboards measured activity: views, posts shipped, followers. Nobody measured "does this view turn into an app visit." The apps had a GA4 tag (gtag) that was sending data — but no code was reading it. Telemetry that only sends and nobody reads: piling up silently into the void.
So I set out to build a source-by-source traffic reader. And I tripped twice.
grep lied to me
First, to check whether GA4-reading code already existed, I ran:
grep -rlE "runReport|analyticsdata" . --include=*.pyResult: nothing. "No reader — I'll write one." I wrote the whole script, and even prepped an OAuth consent for GA4 access.
But this command didn't find nothing — it never ran. In zsh, the *.py in --include=*.py tries to glob-expand first, finds no match, and dies with no matches found; grep itself never executed. On screen it just looked like empty results. I failed to distinguish an empty result from a dead command.
Digging through my notes, the answer was already there. Another dashboard was already reading GA4, and the token was already issued. I nearly (1) built a duplicate reader and (2) re-did an unnecessary OAuth consent while a valid token sat right there.
Let me stop and ask. What would you do? When grep returns empty, do you say "doesn't exist" and build anew, or check the exit code first? When a search tool shows "not found" and "didn't run" as the same screen, the former is a fact but the latter is a lie.
So what were the real numbers
The reader reused the existing credentials and ran immediately. Last 28 days, all app traffic:
sessions by source (175 total)
Threads 110 (63%)
Direct 25 (14%)
Facebook 14 ( 8%)
YouTube Shorts 22 (13%)
Instagram 4 ( 2%)
by app
ddi 128 (73%)
the other 6 apps 47 (27%)Six months of YouTube: 13%. The barely-touched Threads (one text bot): 63%. And of thirty-four apps, one (ddi) took 73%.
Digging into the YouTube side hurt more. The Japanese Shorts channel has 14,000 views — and generated twenty-two app sessions. Almost everything leaked on the path from Shorts → profile link → app. The reach (views) was there; the traffic conversion was near zero. The numbers said plainly what I'd refused to see: views are activity, not traffic.
The honest part
This is not a success story. Six sessions a day is small in absolute terms. No channel is a big winner yet. But the relative signal is clear: Threads ≫ YouTube, ddi ≫ the rest. Ignore the relative signal because the absolute is small, and you'll pour another six months into a 13% channel.
And YouTube isn't worthless — brand awareness (people later Googling the name and coming in) can be built there. It's just that on the single axis of direct app traffic it's 13%, and that one fact was invisible until I measured it.
The bottleneck wasn't shipping more content; it was concentrating on the channel and app that work. Before measuring, "make more" felt like the answer. After measuring, "move to where it already works" was.
Three things to check on your own traffic right now:
- Have you ever split app traffic by source, or are you only watching views and followers (activity)?
- Is there telemetry you only send and never built the reading side for? (Adding gtag ≠ seeing the data.)
- When a search tool returns "no results," did you check the exit code to tell an empty result from a dead command?
I wrote up the wiring — telemetry attached but unread — separately, and the same views-vs-outcome trap is in the Threads 53k-views post. Another case of a tool quietly lying is in the diagnostic that hid the bug.
Do one thing now. Pull your app's traffic by source once. The odds that the channel you invested in most isn't #1 are higher than you'd think.