How CallSpark got its users
Two country templates cover 461 of 528 pages, each carrying live per-minute rates and a dialer already set to the country code, so the search result answers the question the product answers.
Read from signals. Consistent with what is publicly observable, but nobody confirmed it. Check before you quote it.
You could start this on Monday. No budget, no audience, no permission needed.
- A traffic base that does not collapse when you stop publishing
- Acquisition that owes nothing to any social platform
- A proprietary or painful-to-assemble data source
- A template with a reason to exist page by page
- 6 to 12 months before it compounds
Programmatic SEO in 2026
Still alive, but the bar has moved. Thin pages get deindexed, so you need real data on every single page.
Everything on this channel →The play
5 steps, in the order they ran them.
- 1
Find the one variable your product is already priced or configured per unit of, then split it into two page shapes the way CallSpark splits {country} into /country-codes/{country} (dial code, ISO code, number formats) and /cheap-calls-to-{country} (per-minute rate, cost estimator, prefilled dialer). Two angles per entity doubles the surface without doubling the work.
done whenYou can list 200 or more values of your variable, with at least three real data fields each, before writing a single page.
- 2
Fill every generated page from your own live data, never from filler text: Nigeria shows mobile $0.48/min, landline $0.46/min, 5/10/30 minute totals of $2.40 / $4.80 / $14.40, and a +234 dialer. If a page reads the same with a different country name swapped in, it is a stub and should not ship.
done whenPull ten random generated URLs and diff them: if under three fields change between neighbours, the template is too thin to index well.
- 3
Build a second cluster against named alternatives: a /compare hub plus one page per competitor (Google Voice, Skype, WhatsApp, Viber, RingCentral, and so on), each long enough to hold a real feature-by-feature table. Their Google Voice page runs about 2,985 words.
done whenYour vs-pages start showing impressions for '[competitor] alternative' and '[competitor] vs [you]' in Search Console within a few weeks of indexing.
- 4
Add a third cluster on queries adjacent to the job, not the product: 'does paypal have a phone number', 'how to call amazon customer service from abroad'. Someone searching how to reach support from another country is one click from needing a browser dialer.
done whenSessions land on pages that never mention your product features, and a measurable share still reach your signup or first-use step.
- 5
Wire all three clusters into the homepage footer under plain headings ('Popular Countries', 'Comparisons', 'Customer Support Numbers'), keep crawling welcome in robots.txt, and land every page on a zero-friction first step: 'First call is FREE, no credit card required, no downloads'.
done whenNew pages linked from the footer get crawled within days of publishing, while orphan pages sit uncrawled for weeks.
Run this against your own product
Carries the play above, and is written to tell you no when this channel is out of reach for you.
The same twelve channels as an agent skill. It reads your repository and eliminates what you cannot run. Open source, MIT.
curl -o ~/.claude/skills/howtodistribute/SKILL.md https://howtodistribute.com/skill.md
How big it got
528 URLs in the sitemap, 461 of them from two country templates, plus a 14-page comparison cluster, 11 support-number pages and 27 blog posts. robots.txt sets Content-Signal search=yes.
What else they ran
Nothing else identified. One channel carried it.
They ran the same play
Want this verdict on your product?
Describe it. You get back the channel I would run in your place, the 30-day plan, and the number at which you stop.