We launched Elmren Voice — a local-first Mac app that clones a voice from 10 seconds of audio and turns any reading into a read-along player — on Product Hunt this week. Zero audience, no hunter, no mailing list. The dashboard lit up the next day: 49 unique visitors.
I almost screenshotted it. Then I looked closer, and the number fell apart.
The pattern that killed the number
We ship a localized site (11 languages) with ~330 indexed URLs. Filtering the raw event stream in PostHog, one fingerprint showed up everywhere:
- Every localized page hit exactly 2 times. Not 1, not 3 — 2. Real visitors don't schedule themselves like that.
-
All of it marked "Mac OS X", all of it
$direct, sessions spread across every language version we ship — including languages that had never sent us a single human. - Datacenter ASNs and obvious bot flags were already excluded. These weren't. Multilingual SEO crawlers walk your sitemap wearing a consumer OS user agent and your analytics believes them.
The dedup check we now run daily (HogQL, adapt to your stack):
SELECT uniqIf(distinct_id, event = '$pageview') AS visitors
FROM events
WHERE timestamp >= yesterday() AND timestamp < today()
AND properties.$host IN ('elmren.com', 'www.elmren.com')
AND NOT coalesce(properties.$virt_is_bot, false)
AND coalesce(properties.$geoip_city_name, '') NOT IN
('Ashburn','Council Bluffs','Reston','Boardman','Des Moines','Clifton') -- datacenter cities
Then one more pass: group pageviews by URL and look for the "every page exactly N times" signature. If your per-language counts are uniform, you're looking at a crawler, not a market.
What was left after filtering
- Product Hunt launch day: 6 visitors. Not 600. Six.
- Best post-launch day: ~10. That "49" was ~80% crawler.
- Some days since: genuinely zero. We verified the pipeline itself wasn't broken by sending test events through the same collector — pipe healthy, humans absent.
- Sales: 0. Which, at 2–3 visitors/day, is not a conversion problem. It's arithmetic: even a great 3% visitor→trial→buy funnel needs ~30+ visitors/day to produce a sale a month. Traffic is the bottleneck, and no amount of landing-page polish fixes a denominator.
The number that's actually going up
Google Search Console impressions, week over week: 123 → 177 → 362. One click so far, average position ~14. The first page to rank isn't in English — it's Dutch (tekst voorlezen nederlands, position 8): a long-tail "read text aloud" query where the incumbents are thin and a localized page can actually win.
That's the real shape of a zero-audience launch: social spikes evaporate (ours never materialized), but indexed, localized, genuinely-useful pages compound. Our plan now is boring on purpose — keep shipping content pages in languages where the competition is weak, keep the scoreboard honest, and let the denominator grow before we judge the funnel.
Three things we changed because of the filtered number
- The scoreboard reads filtered numbers only. A daily notification with "visitors X/100 (bots excluded)". Unfiltered numbers get rounded up by robots and round down your judgment.
- We stopped celebrating channel spikes and started auditing them. Any spike gets the URL-uniformity check before it earns an emotion.
- Roadmap re-ordered around the denominator. Localization depth and long-tail content beat another coat of paint on the homepage.
If you're pre-audience right now: filter your traffic before you interpret it. The gap between 49 and 10 is the gap between "growth is happening" and "growth hasn't started yet" — and only one of those diagnoses leads to work that matters.
Elmren Voice is $39.99 once, runs entirely on your Mac (no cloud), and the read-along player it exports works in any browser. If you're curious: elmren.com.
Top comments (2)
the 'every page exactly 2 times' signature is the detail worth stealing. most people filter by ASN or user agent and stop there. uniformity of the hit pattern is a stronger signal, and it catches the crawlers that look clean on paper.
i also like that the scoreboard change came before the roadmap change. unfiltered numbers get rounded up by robots, as you put it, so every indie dashboard should have that warning printed on it.
the dutch page ranking first is quietly the best part of this post. when the denominator is ~10, a long-tail query where incumbents are thin is worth more than any homepage redesign. your framing that traffic is the bottleneck is honest. most postmortems would have called it a conversion problem.
one push: the daily dedup check runs after the fact. a tag for suspected crawler traffic at ingestion time would keep the raw stream as evidence, and the scoreboard would never lie even once.
tr.ee/dev-to