How we measured 16,861 Product Hunt launches
The method behind four pieces of research, the decisions that could have gone another way, and the dataset itself as a CSV you can check us with.
Four of our research pieces rest on the same dataset, and each one repeats a compressed version of how it was built. This is the long version, once, plus the data.
Download the dataset as a CSV, 14,354 rows and 1.3 MB.
What was collected
Every Product Hunt launch between 1 September 2024 and 1 September 2026, which is 16,861 products, with name, tagline, topics, vote count and launch date, from the public API.
The API does not give you a product's web address. It gives you a producthunt.com/r/ redirect, and Product Hunt's robots.txt disallows fetching those, so following them to see where they land is off the table. The route that is allowed is the product's own /products/<slug> page, which carries the domain in its payload. That is where every address here came from. 14,354 of the 16,861 resolved; the rest are launches whose page no longer carries an address.
The four decisions that shaped the numbers
One row in five is not a product's domain. Some launches point at an App Store or Play listing. Some point at a subdomain on a hosting platform. Counting either as a registered domain would put apple.com and vercel.app near the top of a study about what founders name things, and would quietly inflate both .com and .app. They are classified out of the naming analysis and counted separately, which turned out to be one of the more interesting numbers in the set.
The platform and store lists are maintained by hand. The obvious alternative is to treat any host appearing more than N times as a platform. That breaks on the first agency or studio that ships six products from one domain, which by frequency alone is indistinguishable from Vercel. The script has an --audit mode that prints frequent hosts not yet classified, and the lists grew by reading its output rather than by setting a threshold.
A link shortener is not the same as no domain. bit.ly and linktr.ee links are counted in their own category, 39 of them, because the honest statement is that the launch's real address is unknown rather than that it lacks one.
Product Hunt is not a sample of startups. It is a sample of launches somebody decided to promote. The weekend project shared in one Discord is missing by construction, and so is the Series B company with a procurement department. Every figure should be read as describing teams who thought a product was worth showing to strangers, on the day they showed it.
How a name is matched to a domain
Product name and domain label are both reduced to lowercase letters and digits, so Daily Note and dailynote.com match. From there each launch falls into exactly one of six categories, tested in this order.
- exact, where the label is the name
- suffix, the name with something added on the end, as in
menutranslatorapp.com - prefix, the name with something added in front, as in
usereplio.com - shortened, a run of three or more characters taken from inside the name, as in
SpeedNote AItospeednote.ai - initialism, the first letter of each word, which only three launches in 11,422 did
- unrelated, none of the above
The categories are exhaustive and mutually exclusive, so the table in the piece that uses them sums to 11,422 rather than to something near it. An earlier version of that table did not, which is the reason this classifier now lives in the repository instead of in a script that ran once.
Reproducing any of it
Every count in the four pieces comes out of scripts/research/product-hunt/analyse-domains.ts, run over the JSONL the fetcher produced. The same script writes the CSV linked at the top of this page with --csv, so the rows behind a number and the number itself come from one pass over one file.
If a figure here disagrees with something you compute from the CSV, we would rather hear about it than not.
What this data cannot tell you
It measures what was registered, not what was available. A domain that appears in the exact-match row might have been the founder's first choice or their fourth. Nothing here observes the search that happened before the registration, which is the part that would actually settle the scarcity argument, and it is the reason our other line of research runs live registry checks over word lists instead.
Common questions
- Where does Permutica's Product Hunt data come from?
- The public Product Hunt API, for every launch between 1 September 2024 and 1 September 2026, which is 16,861 products. The API exposes only a producthunt.com/r/ redirect rather than the product's real address, and robots.txt forbids dereferencing those, so the domain for each launch was read from its own /products/<slug> page, which robots.txt allows. 14,354 resolved.
- Can I download the dataset?
- Yes. The 14,354 resolved launches are published as a CSV carrying the two classifications the research turns on, which are what kind of address each launch uses and how its domain label relates to its own product name. It is linked from this page.
- How do you decide what counts as an AI product?
- A whole-word match on ai, gpt, llm, genai, agent, agentic, chatbot or copilot against the launch's name, tagline and topics. That is 3,170 of the 11,422 launches that registered a domain. The list is deliberately narrow, covering the words a team puts on its own launch to be read as an AI product rather than every product that happens to call a model.
Run it yourself
Check one name
Check a name you already have in mind — no pattern needed. Leave the extension off and every supported one gets checked at once.