Product Hunt Scraper
Pricing
from $0.90 / 1,000 launches
Product Hunt Scraper
Collect Product Hunt launches from daily and past leaderboards, category or topic pages, and supported URLs. Export ranks, engagement, teams, media, and optional extra data.
Pricing
from $0.90 / 1,000 launches
Rating
4.6
(4)
Developer
Maxime Dupré
Maintained by CommunityActor stats
9
Bookmarked
641
Total users
97
Monthly active users
15 days ago
Last modified
Categories
Share
🚀 Turn Product Hunt launches into structured research data
Product Hunt Scraper helps founders, marketers, researchers, and sales teams collect public launch data without opening every listing. Export names, descriptions, ranks, engagement, topics, media, team details, and optional extra data from a selected Product Hunt page family.
- Collect launch rows from supported pages with Product Hunt Scraper.
- Browse public source pages with Product Hunt.
- Find recently listed products with New Product.
- Track a specific launch with New Product Launch.
- Review recent listings with New Products Launched Recently.
- Build a startup list with Product Hunt Startup Lead Generation.
- Compare daily pages over time with Product Hunt Launch Tracking.
- Compare launches and engagement with Product Hunt Competitor Analysis.
- Inspect products, media, and launch history with Product Hunt Product Research.
- Find public emails on linked sites with Product Hunt Email Enrichment.
📦 Product Hunt launch data
Each saved row represents one Product Hunt launch, or its product identity when no launch identity is available. Duplicate launches are skipped after the first saved match. Fields include:
- Product or launch name, tagline, description, Product Hunt URL, launch date, and thumbnail
- Upvotes, comments, reviews, followers, launch counts, and available daily, weekly, monthly, or yearly ranks
- Categories, topics, tags, gallery images, and Product Hunt video assets
- Exposed makers, hunters, team members, and public profile context
- External links and X account handle when Product Hunt exposes them
- Optional comments, reviews, Built With context, launch history, and website enrichment
Unavailable values remain null or []. A launch can still be saved when optional details or extra data are not available. If a long crawl stops early, rows already saved remain in the dataset and the run reports that it is incomplete.
🚀 Run Product Hunt Scraper
- Choose one Target: daily, weekly, monthly, yearly, category, topic, or Product Hunt page URLs.
- Complete only that Target's options. Daily runs default to today's California-time leaderboard when no date is entered.
- Set Maximum items to a positive integer to bound the run. Leave it empty to save all available launches until the selected source is exhausted. Large runs use more memory, so use a smaller limit for a bounded run.
- Choose whether to include listings that Product Hunt marks as promoted or keep only featured launches.
- Turn on slower comments, reviews, Built With, launch history, or website research only when needed.
- Run the Actor and open the dataset from the Output tab.
If Product Hunt blocks every initial discovery attempt, the Actor reports a source-access failure instead of treating the blocked page as a normal empty result.
⚙️ Input
Choose one source family per run. Fields for other Target sections are ignored. This example is copied from a successful current-beta run with no item limit, so it can return all available launches until the source is exhausted:
{"target": "daily","startDate": "2026-01-01","endDate": "2026-02-28","shouldIncludePromotedListings": false,"shouldScrapeOnlyFeaturedLaunches": false,"shouldScrapeComments": false,"shouldScrapeReviews": false,"shouldScrapeBuiltWith": false,"shouldScrapeLaunches": false,"shouldScrapeWebsite": false}
Input fields
| Field | Type | What it does |
|---|---|---|
target | string | Chooses daily, weekly, monthly, yearly, category, topic, or pageUrls. |
startDate | string | Sets the first daily leaderboard date in YYYY-MM-DD. Leave it empty for today's California-time leaderboard. |
endDate | string | Sets the last date in an inclusive daily range. Leave it empty to use only startDate. |
startWeek | string | Sets the first weekly leaderboard in YYYY-WW. |
endWeek | string | Sets the last weekly leaderboard in an inclusive range. Leave it empty to use only startWeek. |
startMonth | string | Sets the first monthly leaderboard in YYYY-MM. |
endMonth | string | Sets the last monthly leaderboard in an inclusive range. Leave it empty to use only startMonth. |
startYear | integer | Sets the first yearly leaderboard. |
endYear | integer | Sets the last yearly leaderboard in an inclusive range. Leave it empty to use only startYear. |
categorySlugs | string[] | Adds Product Hunt category slugs, such as ai-code-editors. |
topicSlugs | string[] | Adds Product Hunt topic slugs, such as developer-tools or open-source. The legacy alias opensource is also accepted. |
productHuntPageUrls | string[] | Adds supported daily, weekly, monthly, yearly, category, or topic page URLs. Product-detail, post, search, home, and other URLs are rejected. |
maxNbItemsToScrape | integer | Sets a positive limit for launches saved in the run. Leave it empty to save all available launches until the source is exhausted. Large runs use more memory, so use a smaller limit for a bounded run. |
shouldIncludePromotedListings | boolean | Includes listings that Product Hunt clearly marks as promoted. |
shouldScrapeOnlyFeaturedLaunches | boolean | Keeps only launches in Product Hunt's featured feed. |
shouldScrapeComments | boolean | Collects available Product Hunt comments for each launch. This makes the run slower. |
shouldScrapeReviews | boolean | Collects available Product Hunt reviews for each launch. This makes the run slower. |
shouldScrapeBuiltWith | boolean | Collects Product Hunt's Built With data when available. This makes the run slower. |
shouldScrapeLaunches | boolean | Collects the product's visible Product Hunt launch history. This makes the run slower. |
shouldScrapeWebsite | boolean | Visits each product website for its title, description, visible text, and public emails when found. This makes the run slower. Email enrichment is charged only when at least one email is saved. |
Target choices
For daily, weekly, monthly, and yearly, use the matching period fields. For category and topic, add the matching slug list. For pageUrls, add supported Product Hunt leaderboard, category, or topic URLs. Product detail, post, search, and homepage URLs are not supported inputs.
🧾 Output
The default dataset contains one row per successfully saved Product Hunt launch or product identity. Optional arrays stay empty, and unavailable values stay null, when Product Hunt does not provide the requested data. The table uses dotted paths for nested fields; [] means an array item.
Output fields
| Field | Type | What it does |
|---|---|---|
isPromoted | boolean | Says whether Product Hunt identified the placement as promoted. |
thumbnailUrl | string or null | Gives the Product Hunt thumbnail URL. |
name | string or null | Gives the product or launch name. |
url | string or null | Gives the Product Hunt launch URL, or product URL when no launch URL is known. |
tagline | string or null | Gives the Product Hunt tagline. |
categories | string[] | Lists Product Hunt categories in source order. |
followers | number or null | Gives the visible product follower count. |
commentsCount | number or null | Gives the visible comment count for the current launch. |
reviewsCount | number or null | Gives the visible review count. |
launchesCount | number or null | Gives the visible number of launches for the product. |
dayRank | number or null | Gives the daily leaderboard rank when available. |
weekRank | number or null | Gives the weekly leaderboard rank when available. |
monthRank | number or null | Gives the monthly leaderboard rank when available. |
yearRank | number or null | Gives the yearly leaderboard rank when available. |
launchDate | string or null | Gives the launch date in YYYY-MM-DD when available. |
description | string or null | Gives the readable product description. |
upvotesCount | number or null | Gives the current launch upvote score. |
links | string[] | Lists company and product links shown by Product Hunt. |
xAccountHandle | string or null | Gives the public X/Twitter handle when available. |
imageUrls | string[] | Lists Product Hunt gallery image URLs. |
videoUrls | string[] | Lists Product Hunt video asset URLs. |
tags | string[] | Lists Product Hunt topic and tag names in source order. |
team | object[] | Lists exposed makers, hunters, and other launch-team members. |
team[].avatarUrl | string or null | Gives a public team member avatar URL. |
team[].type | string or null | Gives the Product Hunt team role when available. |
team[].name | string or null | Gives the public team member name. |
team[].username | string or null | Gives the Product Hunt username. |
team[].headline | string or null | Gives the public profile headline. |
team[].about | string or null | Gives the public profile biography. |
team[].followersCount | number or null | Gives the public follower count. |
team[].links | string[] | Lists public profile links. |
builtWith | object[] | Lists tools in Product Hunt's Built With section when requested. |
builtWith[].name | string or null | Gives the tool name. |
builtWith[].url | string or null | Gives the Product Hunt URL for the tool when available. |
builtWith[].tagline | string or null | Gives the tool tagline when available. |
builtWith[].thumbnailUrl | string or null | Gives the tool thumbnail URL when available. |
launches | object[] | Lists visible prior Product Hunt launches for the same product when requested. |
launches[].title | string or null | Gives the prior launch name. |
launches[].url | string or null | Gives the prior launch Product Hunt URL. |
launches[].tagline | string or null | Gives the prior launch tagline. |
launches[].launchDate | string or null | Gives the prior launch date when available. |
launches[].dayRank | number or null | Gives the prior launch daily rank when available. |
launches[].weekRank | number or null | Gives the prior launch weekly rank when available. |
launches[].monthRank | number or null | Gives the prior launch monthly rank when available. |
launches[].yearRank | number or null | Gives the prior launch yearly rank when available. |
launches[].upvotesCount | number or null | Gives the prior launch upvote score when available. |
launches[].commentsCount | number or null | Gives the prior launch comment count when available. |
launches[].thumbnailUrl | string or null | Gives the prior launch thumbnail URL when available. |
comments | object[] | Lists Product Hunt comments when requested. |
comments[].user | object | Holds the public Product Hunt commenter profile. |
comments[].user.isMaker | boolean or null | Says whether the commenter is a maker when known. |
comments[].user.username | string or null | Gives the commenter's Product Hunt username. |
comments[].user.name | string or null | Gives the commenter's public name. |
comments[].user.avatarUrl | string or null | Gives the commenter's public avatar URL. |
comments[].user.headline | string or null | Gives the commenter's public profile headline. |
comments[].user.links | string[] | Lists the commenter's public profile links. |
comments[].user.followersCount | number or null | Gives the commenter's public follower count. |
comments[].text | string or null | Gives the comment text. |
comments[].upvotesCount | number or null | Gives the comment upvote count when available. |
comments[].timeAgo | string or null | Gives the relative time shown for the comment. |
reviews | object[] | Lists Product Hunt reviews when requested. |
reviews[].user | object | Holds the public Product Hunt reviewer profile. |
reviews[].user.username | string or null | Gives the reviewer's Product Hunt username. |
reviews[].user.name | string or null | Gives the reviewer's public name. |
reviews[].user.avatarUrl | string or null | Gives the reviewer's public avatar URL. |
reviews[].user.headline | string or null | Gives the reviewer's public profile headline. |
reviews[].user.links | string[] | Lists the reviewer's public profile links. |
reviews[].user.followersCount | number or null | Gives the reviewer's public follower count. |
reviews[].user.reviewsCount | number or null | Gives the reviewer's review count when available. |
reviews[].rating | number or null | Gives the review rating when available. |
reviews[].text | string or null | Gives the review text. |
reviews[].viewsCount | number or null | Gives the review view count when available. |
reviews[].timeAgo | string or null | Gives the relative time shown for the review. |
website | object | Holds the linked website and requested enrichment. |
website.url | string or null | Gives the external product website URL. |
website.title | string or null | Gives the website page title when enrichment succeeds. |
website.description | string or null | Gives the website page description when enrichment succeeds. |
website.emails | string[] | Lists public website emails found by optional enrichment. |
website.rawText | string or null | Gives readable visible website text when enrichment succeeds. |
The row below is shortened from a genuine current-beta run: the real team array is shown as the JSON string "..." to keep the example small. Other shown values are from that saved row.
{"isPromoted": false,"thumbnailUrl": "https://ph-files.imgix.net/cac4f4a7-fb00-42d1-b741-9dfc26e0a56f.png","name": "Cursor","url": "https://www.producthunt.com/products/cursor","tagline": "AI coding agent","categories": ["AI Coding Agents","Vibe Coding Tools","AI Code Editors"],"followers": 53491,"commentsCount": 62,"reviewsCount": 920,"launchesCount": 10,"dayRank": 1,"weekRank": 5,"monthRank": 234,"yearRank": null,"launchDate": "2026-06-30","description": "Cursor is the best way to build ambitious software.","upvotesCount": 658,"links": ["https://cursor.com","https://twitter.com/cursor_ai","https://www.linkedin.com/company/cursorai/","https://apps.apple.com/app/cursor/id6767085653"],"xAccountHandle": "@cursor_ai","imageUrls": ["https://ph-files.imgix.net/f3171d81-83b0-479a-bff6-9007dc2176ee.png?auto=format&fit=crop","https://ph-files.imgix.net/09a5ccf8-605f-49fc-b747-4414bce7d46e.png?auto=format&fit=crop","https://ph-files.imgix.net/eb183572-53ad-4a7f-9d8b-2e40d981b8fc.png?auto=format&fit=crop"],"videoUrls": ["https://www.youtube.com/watch?v=ovxL42LkKNg"],"tags": ["Artificial Intelligence"],"team": "...","builtWith": [],"launches": [],"comments": [],"reviews": [],"website": {"url": "https://cursor.com","title": null,"description": null,"emails": [],"rawText": null}}
See the Output schema for the same fields in the public schema.
💳 Pricing
This Actor uses pay-per-event pricing. The primary event is charged once for each successfully saved deduplicated launch or product identity. The email-enrichment add-on is charged only for a saved launch where optional website enrichment finds at least one public email. A run with no saved launch is not charged for a launch. Website checks with no found email are not charged for email enrichment. See the Pricing tab for current rates.
🔌 Integrations
Use Apify datasets, API access, schedules, and webhooks to export or automate results. This walkthrough shows how to connect an Actor to other workflows:
❓ FAQ
What happens if Product Hunt blocks every discovery attempt?
The Actor ends with a clear source-access failure rather than reporting an ordinary successful empty scrape. Retry later because source access can change between runs.
What happens if a long crawl stops early?
Rows saved before the stop remain in the dataset, and the run reports that it is incomplete. Set Maximum items when you need a smaller bounded run.
How do I keep a large crawl manageable?
Leave comments, reviews, Built With, launch history, and website enrichment off unless you need them. For a large source range, set a positive Maximum items limit; leaving it empty asks for all available launches until the source is exhausted.
Can I submit a Product Hunt product or post URL?
No. URL input accepts supported leaderboard, category, and topic pages. Standalone product, post, search, and homepage URLs are rejected rather than reinterpreted.
Why are some fields null or empty arrays?
Product Hunt does not expose every optional fact for every launch. Detail and enrichment failures do not discard an already discovered launch, so unavailable values keep their schema-defined empty form.
Can I scrape several target families in one run?
Choose one Target per run. The Product Hunt page URL Target can contain a mixed list of supported leaderboard, category, and topic page URLs.
Are comments, reviews, launch history, Built With data, and website emails always included?
No. You must turn on these slower options. Some data may still be missing. Public emails are returned only when found on the linked website.
Can I run this as a Product Hunt scraper API?
Yes. Start runs and get dataset rows through the Apify API. You do not need to give the Actor a Product Hunt account or API token.
How do I monitor new Product Hunt launches?
Run the daily Target on an Apify schedule and send completed datasets through the API or a webhook. Each run reads the selected Product Hunt page rather than reusing a saved inventory.
📝 Changelog
0.0: Initial release
- Initial release with daily, weekly, monthly, yearly, category, topic, and supported page URL Targets.
- Initial release with optional comments, reviews, Built With, launch history, and website enrichment.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Uneed Scraper — collect products, launches, categories, pricing, engagement, and available business details from Uneed.
- Tiny Startups Scraper — research public startup launches, rankings, creators, deals, and available emails from Tiny Startups.
- TinySeed Scraper — collect portfolio companies, cohorts, locations, websites, and available public emails.
- Website Emails Scraper — turn a selected list of product websites into deduplicated public email rows.
- Twitter (X) Scraper — research public launch discussion and company mentions on X.
Made with ❤️ by Maxime Dupré