Product Hunt Scraper - Launches, Maker Emails & Socials
Pricing
Pay per event
Product Hunt Scraper - Launches, Maker Emails & Socials
Scrape full Product Hunt leaderboards (daily, weekly, monthly), product URLs and topic pages: rank, upvotes, makers, website, plus public emails and X/LinkedIn/GitHub links from each product site. For startup lead lists, VC deal flow and competitor tracking. No login or API key.
Pricing
Pay per event
Rating
0.0
(0)
Developer
John Soh
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Get every Product Hunt launch as a clean row: name, tagline, rank, upvotes, comments, topics, makers (with profile links), the real product website, and, if you turn on contacts, the public emails and X / LinkedIn / GitHub links published on that website. It covers the full daily, weekly and monthly leaderboards (every page, not just the top 17), optionally every non-featured launch too, any list of product URLs, and Product Hunt topic pages. No Product Hunt login or API key needed.
Pricing is flat and predictable: $1.50 per 1,000 launches. Turn on contacts and you pay $2 per 1,000 more, only for launches where the crawl actually finds an email or a social link. A launch with contacts found costs at most $3.50 per 1,000; on the 2026-10-20 daily board (33 launches, 27 with an email or social) the whole run came to about $3.14 per 1,000. Emails and socials come in that one price, with no extra fee per email. Apify's free $5 monthly credit covers at least 1,400 launches with contacts on, or about 3,300 without.
What people use it for
| You are... | Run it like this | What you get |
|---|---|---|
| Agency or freelancer selling to new startups (dev shops, design, SEO, launch marketing) | Daily schedule, period: daily, contacts on, then Google Sheets or your CRM | A fresh list every morning of companies that just launched, with a website, any published contact email and the company's X / LinkedIn |
| VC scout, angel or accelerator | Weekly board with topic: artificial-intelligence (or fintech, developer-tools) | A weekly deal-flow sheet ranked by upvotes, with the makers' names |
| SaaS founder tracking competitors | topicPage set to your category, sorted by most recent launch | New products in your space, their tagline, positioning and traction |
| Launch-day outreach and partnerships (newsletters, podcasts, directories) | Yesterday's daily board, maxItems: 20 | Makers who just shipped, with their profile links |
| Market researchers and content creators | Monthly boards over a date range, maxItems: 0 | Every featured launch per month: topics, upvotes, ranks |
| AI agents (via Apify MCP) | "Find this week's top AI launches on Product Hunt and their contact emails" | Structured JSON your agent can act on |
Example output
One row from a run on Apify for the daily board of 2026-10-20. The makers list is shortened (that row had nine makers), and description, thumbnail and the empty socials keys are left out here for space.
{"name": "Composio Instant","tagline": "The easiest way for AI agents to pay for their own tools","productHuntUrl": "https://www.producthunt.com/products/composio","website": "https://composio.dev","launchDate": "2026-10-20","rank": 2,"upvotes": 325,"commentCount": 46,"topics": ["Developer Tools", "Artificial Intelligence", "SDK"],"makers": [{ "name": "Sushant Hiray", "profileUrl": "https://www.producthunt.com/@sushant_hiray" }],"hunter": null,"emails": ["support@composio.dev"],"socials": {"x": "https://x.com/composio", "linkedin": "https://www.linkedin.com/company/composiohq/", "github": "https://github.com/composiohq/composio/"},"audience": "developers","postId": "1265727","boardKey": "2026-10-20"}
Quick start
- Click Try for free. The prefilled input scrapes yesterday's daily board, 5 launches, with contacts on.
- Change
period(daily, weekly or monthly), the dates,maxItems(0 = the whole board), or atopicfilter. Or paste product URLs, or set a topic page. - Download CSV, Excel or JSON, or connect Apify Schedules and an integration (Google Sheets, Make, Zapier, n8n, webhooks) for a hands-off daily feed.
Why this one
- Contacts at one flat price, only when found. Emails plus X, LinkedIn and GitHub links from the product's own site for $2 per 1,000, charged only for launches where at least one was found. Some other Product Hunt scrapers charge per email found.
- Real-browser extraction. It reads Product Hunt's own page data through a real Chrome window, so it keeps working when Cloudflare blocks plain HTTP scrapers.
- You only pay for rows you get. No start fee. A launch is charged when its row is saved, and contacts only when the crawl found at least one email or social link.
Input modes
The Actor picks one mode per run:
- Product URLs (
productUrls): when the list is not empty. Acceptshttps://www.producthunt.com/products/<slug>(returns the product's latest launch),/products/<slug>/launches/<launch-slug>and/posts/<slug>(return that launch). Duplicates are dropped. - Topic page (
topicPage): when set and there are no product URLs. A slug such asdeveloper-toolsor a/topics/<slug>URL. The Actor pages through the products listed on that topic, sorted bytopicOrder(most_recent_launchorhighest_rated), and returns each product with its latest launch. - Leaderboard (default): the daily, weekly or monthly board for
startDatetoendDate, or the latest finished board when both dates are empty. Every page of the board is read. Product Hunt's featured daily board is usually 30 to 50 launches (2026-10-20 had 33). SetincludeNonFeatured: trueto get every launch posted in that period, featured or not; a single day can have more than 1,000.
In every mode maxItems caps the saved rows (default 100, 0 = no limit), rows are deduplicated by Product Hunt post id, and topic keeps only launches tagged with that topic slug or name.
For product URL and topic page rows, rank and boardKey refer to the daily board of that launch's day. rank is null when the launch was not ranked.
Run it
{"period": "daily","startDate": "2026-10-20","endDate": "2026-10-20","maxItems": 0,"enrichContacts": true,"proxyConfiguration": { "useApifyProxy": true }}
{"productUrls": ["https://www.producthunt.com/products/composio","https://www.producthunt.com/products/exa-ai"],"enrichContacts": true}
{ "topicPage": "developer-tools", "topicOrder": "most_recent_launch", "maxItems": 50 }
startDate and endDate are inclusive YYYY-MM-DD dates in America/Los_Angeles, Product Hunt's time zone, so "yesterday" is a finished board rather than one still collecting votes. Weekly boards use the ISO week, so the week of 2026-10-19 is /leaderboard/weekly/2026/43.
Proxy tiers are tried in order: the Apify datacenter proxy you selected (the account's default groups when none are picked), then a direct connection, then Apify residential proxy if residentialFallback is true. A tier the account does not have is skipped with an info line in the log. Leave residentialFallback false unless runs are failing on the Cloudflare check, because residential traffic is billed by the gigabyte.
To run it locally, install the Apify CLI and Google Chrome, then pip install -r requirements.txt and apify run. Headless Chrome and plain HTTP clients both stop on Product Hunt's Cloudflare check, so the Actor starts a headed Chrome and attaches to it over the DevTools protocol.
Output
One launch is one dataset item. Fields that Product Hunt did not publish are JSON null. The Actor does not invent a hunter, an email, or a rank. emails is null when the website was not crawled. It is an empty list when the crawl finished and found no address on that site's domain. hunter is always null, because the public pages this Actor reads do not name a hunter.
postId is the Product Hunt post id, and a restarted run skips ids already in the dataset. boardKey is 2026-10-20 for a day, 2026-W43 for an ISO week, or 2026-10 for a month.
Contact enrichment loads the website homepage, /contact, and /about. An email is kept when its domain is the site that was crawled. Addresses on other domains, including sample addresses in documentation, are left out. Social links are the first profile URL found for X, LinkedIn, GitHub, Facebook, and Instagram. The audience tag is a keyword match over the topics, tagline, description, and page text. The labels are developers, designers, marketers, and founders. No language model is used. If none of the keywords appear, audience is null.
How much does it cost to scrape Product Hunt?
The Actor uses pay per event:
| Event | Price | When it is charged |
|---|---|---|
product | $0.0015 | Once for each launch saved to the dataset |
product-enriched | $0.002 | Once per launch, only when the website crawl found at least one email or social link (X, LinkedIn, GitHub, Facebook, Instagram) |
A run that saves 100 launches, all with contacts found, costs at most 100 × $0.0015 + 100 × $0.002 = $0.35. The daily board for 2026-10-20 had 33 launches and 27 of them had an email or a social link, so with contacts on it costs 33 × $0.0015 + 27 × $0.002 = about $0.10 (about $3.14 per 1,000 launches), or about $0.05 with enrichContacts off. With includeNonFeatured a single day can exceed 1,000 launches, so set maxItems to cap the cost. A launch with no website, a website that does not answer, or a crawl that finds no email and no social link is charged the product event only. The audience tag on its own does not trigger the contacts charge. Platform usage for the run is included in these prices.
If you set a maximum charge on the run, the Actor stops after the last row that still fits. It exits without an error, and the rows already saved stay in the dataset.
FAQ
Does this need a Product Hunt account? No. The run reads public leaderboard and product pages.
What if Product Hunt changes the page? The run fails with a message that names the missing field. It does not save an empty dataset and report success. The one exception is a topic filter that matches nothing. That run succeeds and the log says the filter matched nothing.
Why do some runs hit a Cloudflare check?
Product Hunt sometimes puts a Turnstile check in front of the leaderboard. The Actor opens a real Chrome window and clicks that check. If a tier stays blocked it moves to the next tier, and if every tier is blocked the run fails and names the URL. Turn residentialFallback on only after runs start failing.
Why is hunter always null?
The public pages this Actor reads do not name the hunter, and the Actor does not guess.
Does it get the whole board?
Yes. Every page of the leaderboard is read, up to maxItems (0 = no limit). Turn on includeNonFeatured for launches Product Hunt did not feature.
How current are the upvote counts? They are the counts on the page at request time. They are not a frozen snapshot from launch morning.
Changelog
- 0.1.10 (2026-10-22): The contacts event (
product-enriched) now costs $0.002 instead of $0.004 and is charged only when the website crawl finds at least one email or social link. - 0.1.9 (2026-10-21): Full leaderboards: every page of daily, weekly and monthly boards instead of the first ~17 launches. New
includeNonFeaturedoption. New input modes:productUrlsandtopicPage(withtopicOrder).maxItemsnow defaults to 100 and accepts 0 for no limit. Rows are deduplicated by post id. - 0.1.7 (2026-10-21): First public release: daily, weekly and monthly leaderboards (first page), maker profiles, website emails, X / LinkedIn / GitHub links and an audience tag.
Found a bug or a page that does not parse? Open an issue on the Actor's Issues tab.
Public data
The Actor collects information Product Hunt and the product websites show to anyone without an account. It does not bypass a login, and it does not collect data from private profiles. You are responsible for how you store and email the people behind these launches, including any rules those sites publish about automated access. This note is not legal advice.