Product Hunt Scraper (/w EMAILS) avatar

Product Hunt Scraper (/w EMAILS)

Pricing

from $3.50 / 1,000 scraped products

Go to Apify Store
Product Hunt Scraper (/w EMAILS)

Product Hunt Scraper (/w EMAILS)

Scrapes Product Hunt's launches for a specific date. Extracts the product names, descriptions, makers info (name + links), and emails.

Pricing

from $3.50 / 1,000 scraped products

Rating

5.0

(2)

Developer

Maxime

Maxime

Maintained by Community

Actor stats

3

Bookmarked

160

Total users

42

Monthly active users

5.3 hours

Issues response

17 hours ago

Last modified

Share

Find startup leads from Product Hunt

Product Hunt Scraper turns Product Hunt daily, weekly, monthly, yearly, category, and topic pages into startup rows you can sort, research, and use for outreach. It keeps launch ranks, follower counts, reviews, past launches, and optional website details in the same row when you turn those extras on.

  • Lead-ready rows - keep Product Hunt links, ranks, launch history, and optional website details together in one dataset.
  • Daily, historical, and slug pages - scrape leaderboards or category/topic pages without assembling Product Hunt URLs yourself.
  • Website enrichment when you need it - add the site title, description, raw text, and public emails for deeper outreach research.
  • Cache-first cost control - choose cached, fallback, or fresh based on how much live crawling you want.
  • Deeper launch research on demand - switch on comments, reviews, and launch history only for the runs that need them.

⚡️ TRY IT FOR FREE


🏆 Benefits

  • 🎯 Build startup lead lists from Product Hunt without opening each launch by hand.
  • 🗓️ Pull one leaderboard, category, or topic page at a time so you can check the results before you scale up.
  • 🌐 Add website enrichment only when you want outreach-ready context in the same row.
  • 📊 Keep rank, follower, review, and launch-history context attached to each product for research and prioritization.
  • 💸 Start with cache-first pulls, then use live recrawls only for the pages worth deeper analysis.

🚀 Quick start

  1. Open the Input tab and leave every target section empty to run today's California-time leaderboard.
  2. Set Maximum items across the whole run to 5 or 25 for a small first run.
  3. Keep Scrape mode on Fallback (use saved rows, then fetch missing ones) for the default balance of cost and freshness.
  4. Leave Include promoted listings?, Scrape comments?, Scrape reviews?, Scrape built-with tools?, Scrape past launches?, and Scrape website enrichment? off unless you already need those extra fields.
  5. Run the actor and review the dataset in the finished run or via the API.

⚙️ Features

  • 🗂️ Supports one page type per run: daily, weekly, monthly, and yearly leaderboards, plus category and topic pages.
  • 🕒 Defaults to today's Product Hunt daily leaderboard in America/Los_Angeles when every target section is empty.
  • ♻️ cached uses saved rows only, fallback starts with saved rows and fetches the missing rows now, and fresh fetches every requested row now for this run.
  • 📣 Includes or excludes promoted listings with one toggle.
  • 🧩 Adds reviews, comments, launch history, built-with tools, and website enrichment only when you switch them on.
  • 📦 Emits one Product Hunt-specific row per product, with missing scalars set to null and missing lists set to [].

📊 Output

Every emitted row keeps the same Product Hunt-specific fields, with missing scalars set to null and missing lists set to []. Object arrays show one real item followed by "..." when more items were present. website.rawText is excerpted here only so the README stays readable. See the full Output tab for the complete contract.

Example

This example is from the ai-code-editors category.

{
"isPromoted": false,
"thumbnailUrl": "https://ph-files.imgix.net/7cdee0cb-3f0f-4def-92c0-7137df568438.png?auto=compress&codec=mozjpeg&cs=strip&auto=format&w=64&h=64&fit=crop&frame=1",
"name": "Codebuff",
"url": "https://www.producthunt.com/products/codebuff",
"tagline": "Better code generation than Cursor, from your CLI",
"categories": [
"AI Coding Agents",
"Command line tools",
"AI Code Editors"
],
"followers": 227,
"commentsCount": 52,
"reviewsCount": 3,
"launchesCount": 1,
"dayRank": 7,
"weekRank": 38,
"monthRank": 183,
"yearRank": null,
"launchDate": "2024-10-22",
"description": "Codebuff is a tool for editing codebases via natural language. Just npm install it, point it at your directory, and you're off to the races! Codebuff automatically pulls any files it needs for context, so it has the most accurate data to solve your problems. It also runs terminal commands for you, to speed up your own development. Our users have found that they can build apps in hours that used to take weeks. Some even use it to build in languages they've never used before!",
"upvotesCount": 270,
"links": [
"https://codebuff.com/?ref=producthunt"
],
"xAccountHandle": "@codebuffai",
"imageUrls": [
"https://ph-files.imgix.net/a217b57d-2b5f-4413-a50c-4e928a2edfc5.gif",
"https://ph-files.imgix.net/2add5932-49fa-48f6-a2ea-cb9bff5966ed.png",
"https://ph-files.imgix.net/37ee0625-16e5-45fc-af76-fccf3100bdcc.png",
"https://ph-files.imgix.net/3d3d16c0-8ceb-44b3-ad4b-3f087dcc343e.jpeg"
],
"tags": [
"Software Engineering",
"AI Coding Agents",
"Artificial Intelligence"
],
"team": [
{
"avatarUrl": "https://ph-avatars.imgix.net/7686611/09ebef1d-d2f0-4037-8bd4-839ac15e363d.jpeg?auto=compress&codec=mozjpeg&cs=strip&auto=format&w=40&h=40&fit=crop&frame=1",
"type": "Maker",
"name": "Brandon Chen",
"username": "brandon_at_manicode",
"headline": null,
"about": null,
"followersCount": 1,
"links": []
},
"..."
],
"builtWith": [
{
"name": "Claude by Anthropic",
"url": "https://www.producthunt.com/products/claude",
"tagline": null,
"thumbnailUrl": "https://ph-files.imgix.net/ae49ce7d-30a4-457b-823a-2e1ee8d44dbb.png?auto=compress&codec=mozjpeg&cs=strip&auto=format&w=40&h=40&fit=crop&frame=1"
},
"..."
],
"launches": [
{
"title": "Codebuff",
"url": "https://www.producthunt.com/products/codebuff/launches/codebuff",
"tagline": "Better code generation than Cursor, from your CLI",
"launchDate": "2024-10-22",
"dayRank": 7,
"weekRank": 38,
"monthRank": 183,
"yearRank": null,
"upvotesCount": 270,
"commentsCount": 52,
"thumbnailUrl": "https://ph-files.imgix.net/a7c2b93c-18fa-48ee-9a9f-1f3664b17039.png"
}
],
"comments": [
{
"user": {
"isMaker": false,
"username": "dhunten",
"name": "Derek Hunten",
"avatarUrl": "https://ph-avatars.imgix.net/128459/original.jpeg",
"headline": null,
"links": [],
"followersCount": null
},
"text": "i personally was not a fan of the usability of Cursor, so plan on checking this out. is it good when starting from scratch, too?",
"upvotesCount": 2,
"timeAgo": null
},
"..."
],
"reviews": [
{
"user": {
"username": "dexter_horthy",
"name": "Dexter Horthy",
"avatarUrl": "https://ph-avatars.imgix.net/7575784/4562c776-2031-4f71-9de1-a99d573b3e2f.jpeg",
"headline": "hacking on safe + reliable AI Agents",
"links": [],
"followersCount": null,
"reviewsCount": 5
},
"rating": 5,
"text": "watching codebuff debug infrastructure problems by running aws cli commands is both terrifying and delightful",
"viewsCount": 57,
"timeAgo": null
},
"..."
],
"website": {
"url": "https://codebuff.com/?ref=producthunt",
"title": "Codebuff – AI Coding Assistant for Your Terminal",
"description": "Code faster with AI using Codebuff. Edit your codebase and run terminal commands via natural language instruction.",
"emails": [],
"rawText": "Docs Pricing GitHub Toggle menu Better agents. Better code. Higher quality output and 100+ seconds faster than Claude Code Get Started npm install -g codebuff EXPLORER 📁 src 📄 index.ts 📁 api 📄 auth.ts 📄 users.ts 📄 projects.ts 📁 utils 📄 helpers.ts 📄 types.ts 📄 constants.ts 📄 validation.ts..."
}
}

Params

FieldTypeDescription
isPromotedbooleantrue for sponsored Product Hunt placements and false for organic rows.
name, tagline, descriptionstring | nullCore Product Hunt product copy from the row and product page.
urlstring | nullProduct Hunt row URL. This is a product URL or launch URL, never the external website URL.
thumbnailUrl, imageUrlsstring | null, string[]Primary thumbnail plus any additional Product Hunt gallery images from the current product page metadata that Product Hunt exposes.
categories, tagsstring[]Product Hunt categories plus the current product page metadata tags that Product Hunt exposes.
followers, upvotesCount, commentsCount, reviewsCount, launchesCountnumber | nullBuyer-visible Product Hunt engagement counts for that row.
dayRank, weekRank, monthRank, yearRank, launchDatenumber | null, string | nullLeaderboard ranks plus the ISO YYYY-MM-DD launch date when available.
links, xAccountHandlestring[], string | nullExternal company links from Product Hunt plus the X account handle when available.
team, builtWith, launchesarrayRelated maker/team, built-with, and launch-history objects.
comments, reviewsarrayComment and review objects when those enrichments are enabled and Product Hunt exposes them on the page.
websiteobjectAlways present with url, title, description, emails, and rawText.

🛠️ Input

Example

This input produced the output example above.

{
"categorySlugs": [
"ai-code-editors"
],
"scrapeMode": "fresh",
"maxNbItemsToScrape": 20,
"shouldIncludePromotedListings": false,
"shouldScrapeComments": true,
"shouldScrapeReviews": true,
"shouldScrapeBuiltWith": true,
"shouldScrapeLaunches": true,
"shouldScrapeWebsite": true
}

Params

FieldTypeDescriptionDefault / empty behavior
maxNbItemsToScrapeintegerOptional cap applied across the whole run, even when the input resolves to multiple Product Hunt pages.Defaults to 0, which means scrape all available items. The Input tab prefills 25 for a bounded starter run.
scrapeModestringChooses how Product Hunt cache and live crawling are combined: cached, fallback, or fresh.Defaults to fallback.
shouldIncludePromotedListingsbooleanIncludes sponsored Product Hunt placements from the same page.Defaults to false.
shouldScrapeCommentsbooleanScrapes Product Hunt comments when available for the selected products.Defaults to false.
shouldScrapeReviewsbooleanScrapes Product Hunt reviews when they exist.Defaults to false.
shouldScrapeBuiltWithbooleanScrapes the Product Hunt Built With section when it is available.Defaults to false.
shouldScrapeLaunchesbooleanScrapes the product's visible Product Hunt launch history.Defaults to false.
shouldScrapeWebsitebooleanEnriches the external website with title, description, visible text, and emails.Defaults to false.
startDatestringDaily pages only. First day in YYYY-MM-DD format.Leave empty unless you want the daily target section. If every target field is empty, the actor defaults to today's California-time daily leaderboard.
endDatestringDaily pages only. Optional inclusive end date in YYYY-MM-DD format.Empty means one day.
startWeekstringWeekly pages only. First week in YYYY-WW format.Leave empty unless you want the weekly target section.
endWeekstringWeekly pages only. Optional inclusive end week in YYYY-WW format.Empty means one week.
startMonthstringMonthly pages only. First month in YYYY-MM format.Leave empty unless you want the monthly target section.
endMonthstringMonthly pages only. Optional inclusive end month in YYYY-MM format.Empty means one month.
startYearintegerYearly pages only. First year to scrape.Leave empty unless you want the yearly target section.
endYearintegerYearly pages only. Optional inclusive end year.Empty means one year.
categorySlugsstring[]Category pages only. Add one Product Hunt category slug per item, such as ai-code-editors.Leave empty unless you want the category target section. Category runs do not support date ranges.
topicSlugsstring[]Topic pages only. Add one Product Hunt topic slug per item, such as developer-tools or open-source.Leave empty unless you want the topic target section. opensource is normalized to open-source.

Important

  • Pick one page type per run. Start date, Start week, Start month, and Start year open date-based leaderboard pages. Category slugs and Topic slugs open slug pages. Leave every target section empty for today's California-time daily leaderboard, or fill only the fields for one page type.
  • The same-day daily cache usually covers Product Hunt basics only. If you also want comments, reviews, launch history, or website enrichment, fallback or fresh is usually the better fit.
  • cached uses saved rows only. fallback starts with saved rows and then fetches the missing rows now. fresh skips saved Product Hunt rows and fetches every requested row now for this run.
  • If you ask for comments, reviews, built-with tools, launch history, or website enrichment, older cached rows may not be enough. Use fallback or fresh when you need those extra fields.
  • Example daily run: Start date: "2026-03-20", Maximum items across the whole run: 3, Scrape mode: "fresh", and all five enrichment toggles set to true is a good way to inspect one past leaderboard day in depth.
  • Example category run: Category slugs: ["ai-code-editors"], Maximum items across the whole run: 20, Scrape mode: "fresh", and all five enrichment toggles set to true produced the real Codebuff row used in this README.
  • Example first daily run: leave every target section empty, set Maximum items across the whole run to 5, keep Scrape mode on fallback, and leave the enrichments off.
  • Pricing depends on whether a row came from cache, a fresh Product Hunt crawl, and whether website email enrichment found any public email addresses. See the Pricing tab for current rates.

🔍 Error handling

  • If you mix fields from more than one page type, or a date/week/month/year value is invalid, the actor stops before crawl with a clear user-facing error.
  • In cached mode, pages with no reusable Product Hunt cache finish cleanly with a warning that tells you to use fallback or fresh if you want live rows.
  • If Product Hunt blocks the initial page after all retries, the run log explains that access was blocked and advises restarting the actor.
  • If Product Hunt does not return the complete ranked leaderboard data for a daily, weekly, monthly, or yearly page, the actor stops that page with a clear retry message instead of guessing from partial page content.
  • Once a product is discovered, product-page extraction, comments, reviews, launches, and website enrichment are best-effort. The actor still emits the row with missing fields set to null or [].
  • When a request fails, the actor saves a diagnostic screenshot and error message on a best-effort basis for later inspection.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡


🔗 Other actors

  • Website Emails Scraper - turn company sites into one row per unique public email.
  • Uneed Scraper - find fresh startup launches from Uneed with optional website enrichment.
  • Tiny Startups Scraper - pull startup rows from Tiny Startups for prospecting and research.
  • TinySeed Scraper - collect TinySeed portfolio companies for founder and market research.
  • Twitter Scraper - search X for launch chatter, mentions, and social proof around companies you find.
  • Reddit Scraper - collect Reddit posts and comments for market research, objections, and audience language.

Made with ❤️ by Maxime Dupré