Product Hunt Scraper for Launches avatar

Product Hunt Scraper for Launches

Pricing

from $1.80 / 1,000 launches

Go to Apify Store
Product Hunt Scraper for Launches

Product Hunt Scraper for Launches

Collect Product Hunt launches from leaderboards, category or topic pages, and supported Product Hunt URLs. Review names, dates, ranks, votes, categories, media, and product details in structured rows. Leave the launch limit empty to collect all available launches until the source is exhausted.

Pricing

from $1.80 / 1,000 launches

Rating

4.3

(5)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

11

Bookmarked

893

Total users

124

Monthly active users

8.7 hours

Issues response

2 days ago

Last modified

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 launch names, descriptions, dates, categories, ranks, votes, and comment counts as structured rows.

📦 Product Hunt launch data

Each saved row represents one Product Hunt launch, or its product when no launch is available. Repeated launches or products 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
  • Makers, hunters, team members, and public profile details shown by Product Hunt
  • External links and X account handle when Product Hunt shows them
  • The public schema also has fields for team profiles, product links, media, comments, reviews, Built With details, past launches, and website data

Unavailable values are null or [], and some optional fields are left out of a row. A launch can still be saved when optional details or extra data are not available. If a run hits a time limit or a website details limit before every requested launch is saved, the rows already saved stay in the dataset. The run log explains the limit.

🚀 Run Product Hunt Scraper

  1. Choose one Target in the Find launches from field: Daily leaderboard, Weekly leaderboard, Monthly leaderboard, Yearly leaderboard, Category pages, Topic pages, or Product Hunt page URLs.
  2. Complete only that Target's options. Daily runs default to today's California-time leaderboard when no date is entered.
  3. Set Maximum launches to save to a positive integer to limit the run. Leave it empty to save all available launches until the selected source is exhausted. Large runs use more memory, so set a smaller limit when you do not need many launches.
  4. Choose whether to include promoted listings or keep only featured launches. These filters apply to leaderboards.
  5. Turn on website details only if you need website titles, descriptions, visible text, or public emails.
  6. Run the Actor and open the dataset from the Output tab.

If Product Hunt blocks every first attempt to find launches, the Actor reports that it could not access Product Hunt instead of treating the page as a normal empty result.

If one launch cannot be read after retries, the Actor skips it and keeps working on other launches it can read. Saved rows stay in the dataset. A launch that is not saved has no launch charge. The run reports an incomplete result when a launch remains unreadable. A failure to access Product Hunt ends the run only when it blocks all remaining work.

If a valid run hits a time limit or a website details limit before all requested launches are saved, the saved rows stay in the dataset. The run log explains the limit.

⚙️ Input

Choose one source type per run. Fields for other Target sections are ignored. This example is copied from the public input of a successful run with the default input.

{
"target": "daily",
"maxNbItemsToScrape": 2,
"shouldIncludePromotedListings": false,
"shouldScrapeOnlyFeaturedLaunches": false,
"shouldScrapeWebsite": false
}

Input fields

FieldTypeWhat it does
targetstringChooses daily, weekly, monthly, yearly, category, topic, or pageUrls.
startDatestringSets the first daily leaderboard date in YYYY-MM-DD. Leave it empty for today's California-time leaderboard.
endDatestringSets the last date in an inclusive daily range. Leave it empty to use only startDate.
startWeekstringSets the first weekly leaderboard in YYYY-WW.
endWeekstringSets the last weekly leaderboard in an inclusive range. Leave it empty to use only startWeek.
startMonthstringSets the first monthly leaderboard in YYYY-MM.
endMonthstringSets the last monthly leaderboard in an inclusive range. Leave it empty to use only startMonth.
startYearintegerSets the first yearly leaderboard.
endYearintegerSets the last yearly leaderboard in an inclusive range. Leave it empty to use only startYear.
categorySlugsstring[]Lists Product Hunt category slugs, such as ai-code-editors.
topicSlugsstring[]Lists Product Hunt topic slugs, such as developer-tools. The old opensource slug is also accepted and uses the open-source page.
productHuntPageUrlsobject[]Lists supported Product Hunt launch detail, category, topic, or leaderboard page URLs. Each item has a url field.
maxNbItemsToScrapeintegerSets a positive limit for launches saved in the run. Leave it empty to return all available results until the source is exhausted.
shouldIncludePromotedListingsbooleanIncludes promoted listings from daily, weekly, monthly, and yearly leaderboards. Launch URL inputs are collected as given.
shouldScrapeOnlyFeaturedLaunchesbooleanKeeps only featured launches from daily, weekly, monthly, or yearly leaderboards. Launch URL inputs are collected as given.
shouldScrapeWebsitebooleanCollects website titles, descriptions, visible text, and public emails when found. A saved launch with at least one public email adds one email charge.

Target choices

For the Daily, Weekly, Monthly, and Yearly leaderboard choices (daily, weekly, monthly, and yearly), use the matching period fields. For Category pages (category), add categorySlugs. For Topic pages (topic), add topicSlugs. For Product Hunt page URLs (pageUrls), add supported Product Hunt launch detail, category, topic, or leaderboard URLs. Product Hunt post, search, home, and other URLs are not supported.

🧾 Output

The default dataset contains one row for each successfully saved Product Hunt launch, or its product when no launch is available. Unavailable values are null or [], and some optional fields are left out of a row. The table uses dotted paths for nested fields; [] means an array item.

Output fields

FieldTypeWhat it does
isPromotedbooleanSays whether Product Hunt identified the placement as promoted.
thumbnailUrlstring or nullGives the Product Hunt thumbnail URL.
namestringGives the product or launch name.
urlstringGives the Product Hunt launch URL, or product URL when no launch URL is known.
taglinestring or nullGives the Product Hunt tagline.
categoriesstring[]Lists Product Hunt categories in the order Product Hunt shows them.
followersnumber or nullGives the visible product follower count.
commentsCountnumber or nullGives the visible comment count for the current launch.
reviewsCountnumber or nullGives the visible review count.
reviewRatingnumber or nullGives the average public review rating when the product has reviews.
launchesCountnumber or nullGives the visible number of launches for the product.
dayRanknumber or nullGives the daily leaderboard rank when available.
weekRanknumber or nullGives the weekly leaderboard rank when available.
monthRanknumber or nullGives the monthly leaderboard rank when available.
yearRanknumber or nullGives the yearly leaderboard rank when available.
launchDatestring or nullGives the launch date in YYYY-MM-DD when available.
createdDatestring or nullGives the date the Product Hunt launch was created in YYYY-MM-DD when available.
descriptionstring or nullGives the readable product description.
upvotesCountnumber or nullGives the current launch upvote score.
linksstring[]Lists company and product links shown by Product Hunt.
appStoreUrlstring or nullGives the App Store link Product Hunt shows when the product has an iOS app.
googlePlayUrlstring or nullGives the Google Play link Product Hunt shows when the product has an Android app.
xAccountHandlestring or nullGives the public X/Twitter handle when available.
imageUrlsstring[]Lists Product Hunt gallery image URLs.
videoUrlsstring[]Lists Product Hunt video asset URLs.
tagsstring[]Lists Product Hunt topic and tag names in the order Product Hunt shows them.
pricingTypestring or nullGives the pricing type Product Hunt shows, such as free or paid, when available.
teamobject[]Lists makers, hunters, and other launch-team members shown by Product Hunt.
team[].avatarUrlstring or nullGives a public team member avatar URL.
team[].typestring or nullGives the Product Hunt team role when available.
team[].namestring or nullGives the public team member name.
team[].usernamestring or nullGives the Product Hunt username.
team[].profileUrlstring or nullGives the Product Hunt profile URL for this team member.
team[].headlinestring or nullGives the public profile headline.
team[].aboutstring or nullGives the public profile biography.
team[].followersCountnumber or nullGives the public follower count.
team[].linksstring[]Lists public profile links.
builtWithobject[]Lists tools in Product Hunt's Built With section when available.
builtWith[].namestring or nullGives the tool name.
builtWith[].urlstring or nullGives the Product Hunt URL for the tool when available.
builtWith[].taglinestring or nullGives the tool tagline when available.
builtWith[].thumbnailUrlstring or nullGives the tool thumbnail URL when available.
alternativesobject[]Lists similar Product Hunt products shown for this product, with their review ratings.
alternatives[].namestring or nullGives the name of a similar Product Hunt product.
alternatives[].urlstring or nullGives the Product Hunt URL for the similar product.
alternatives[].reviewRatingnumber or nullGives the average public review rating for the similar product, when it has reviews.
launchesobject[]Lists visible prior Product Hunt launches for the same product when available.
launches[].titlestring or nullGives the prior launch name.
launches[].urlstring or nullGives the prior launch Product Hunt URL.
launches[].taglinestring or nullGives the prior launch tagline.
launches[].launchDatestring or nullGives the prior launch date when available.
launches[].dayRanknumber or nullGives the prior launch daily rank when available.
launches[].weekRanknumber or nullGives the prior launch weekly rank when available.
launches[].monthRanknumber or nullGives the prior launch monthly rank when available.
launches[].yearRanknumber or nullGives the prior launch yearly rank when available.
launches[].upvotesCountnumber or nullGives the prior launch upvote score when available.
launches[].commentsCountnumber or nullGives the prior launch comment count when available.
launches[].thumbnailUrlstring or nullGives the prior launch thumbnail URL when available.
awardsobject[]Lists the daily, weekly, and monthly Product Hunt awards this launch won.
awards[].titlestring or nullGives the name of the launch that won the award.
awards[].periodstringSays whether the award is daily, weekly, or monthly.
awards[].ranknumberGives the place in the award period, such as 1.
awards[].datestring or nullGives the award date in YYYY-MM-DD when available.
commentsobject[]Lists Product Hunt comments when available.
comments[].idstring or nullGives the Product Hunt comment ID.
comments[].parentIdstring or nullGives the ID of the comment this reply answers, or null for a top-level comment.
comments[].userobjectHolds the public Product Hunt commenter profile.
comments[].user.isMakerboolean or nullSays whether the commenter is a maker when known.
comments[].user.usernamestring or nullGives the commenter's Product Hunt username.
comments[].user.namestring or nullGives the commenter's public name.
comments[].user.avatarUrlstring or nullGives the commenter's public avatar URL.
comments[].user.headlinestring or nullGives the commenter's public profile headline.
comments[].user.linksstring[]Lists the commenter's public profile links.
comments[].user.followersCountnumber or nullGives the commenter's public follower count.
comments[].textstring or nullGives the comment text.
comments[].upvotesCountnumber or nullGives the comment upvote count when available.
comments[].timeAgostring or nullGives the relative time shown for the comment.
reviewsobject[]Lists Product Hunt reviews when available.
reviews[].userobjectHolds the public Product Hunt reviewer profile.
reviews[].user.usernamestring or nullGives the reviewer's Product Hunt username.
reviews[].user.namestring or nullGives the reviewer's public name.
reviews[].user.avatarUrlstring or nullGives the reviewer's public avatar URL.
reviews[].user.headlinestring or nullGives the reviewer's public profile headline.
reviews[].user.linksstring[]Lists the reviewer's public profile links.
reviews[].user.followersCountnumber or nullGives the reviewer's public follower count.
reviews[].user.reviewsCountnumber or nullGives the reviewer's review count when available.
reviews[].ratingnumber or nullGives the review rating when available.
reviews[].textstring or nullGives the review text.
reviews[].viewsCountnumber or nullGives the review view count when available.
reviews[].timeAgostring or nullGives the relative time shown for the review.
reviewRatingBreakdownobject[]Lists the public review count for each star rating Product Hunt shows.
reviewRatingBreakdown[].ratingnumberGives the star rating, such as 5.
reviewRatingBreakdown[].countnumberGives the number of public reviews with that star rating.
reviewSummarystring or nullGives Product Hunt's written summary of the public reviews, when shown.
websiteobjectHolds the linked website and any requested website details.
website.urlstring or nullGives the external product website URL.
website.titlestring or nullGives the website page title when the website is read.
website.descriptionstring or nullGives the website page description when the website is read.
website.emailsstring[]Lists public website emails found when website details are turned on.
website.rawTextstring or nullGives readable visible website text when the website is read.

This row came from a recent successful run. It is shortened: each "..." marker stands for values omitted from a larger array.

{
"isPromoted": false,
"thumbnailUrl": "https://ph-files.imgix.net/9ddfe38e-133a-4257-8d46-60ee70a63150.png",
"name": "Caldera",
"url": "https://www.producthunt.com/products/caldera/launches/caldera",
"tagline": "Your Obsidian vault as a living profile and linked garden",
"categories": [
"Note and writing apps"
],
"followers": 169,
"commentsCount": 11,
"reviewsCount": 0,
"launchesCount": 1,
"dayRank": 2,
"weekRank": 29,
"monthRank": 309,
"yearRank": 3372,
"launchDate": "2026-10-17",
"description": "Caldera turns your Obsidian vault into a public page that updates itself, and a digital garden of notes you grow in public. Plant a note and it becomes a page marked seedling, budding or evergreen, with a license you choose. Link to a note in a friend's garden and the backlink appears on theirs. Private by default: nothing leaves your vault unless you choose it, and contact details are stripped. Free, open source and self-hostable.",
"upvotesCount": 163,
"links": [
"https://caldera.social",
"https://github.com/schoettle-cmd/caldera"
],
"xAccountHandle": null,
"imageUrls": [
"https://ph-files.imgix.net/2c80407b-287d-44aa-9de0-4d61a0f00a9d.jpeg?auto=format&fit=crop",
"https://ph-files.imgix.net/a2c62148-5339-4317-8668-56b5bfba41b0.png?auto=format&fit=crop",
"https://ph-files.imgix.net/a7a65e63-8043-4afc-b37e-61a1b5d70c8d.png?auto=format&fit=crop",
"https://ph-files.imgix.net/2a51bfce-1354-4d3d-b5ee-6a396a1628bf.png?auto=format&fit=crop",
"https://ph-files.imgix.net/b54fb4b7-8ab0-49d4-aa60-6d4d487a98bb.png?auto=format&fit=crop",
"https://ph-files.imgix.net/121e733a-167e-4ff0-95c9-9d41c4379d71.png?auto=format&fit=crop"
],
"videoUrls": [],
"tags": [
"Productivity"
],
"team": [
{
"avatarUrl": "https://ph-avatars.imgix.net/541465/original.jpeg?auto=format&crop=faces&fit=crop&h=100&w=100",
"type": "Maker",
"name": "Michael Jones",
"username": "mjonesone",
"headline": "Toonstar",
"about": null,
"followersCount": 3240,
"links": [
"https://twitter.com/mjones",
"http://www.science-inc.com"
]
}
],
"builtWith": [],
"launches": [
{
"title": "Caldera",
"url": "https://www.producthunt.com/products/caldera/launches/caldera",
"tagline": "Your Obsidian vault as a living profile and linked garden",
"launchDate": "2026-10-17",
"dayRank": 2,
"weekRank": 29,
"monthRank": 309,
"yearRank": 3372,
"upvotesCount": 163,
"commentsCount": 11,
"thumbnailUrl": "https://ph-files.imgix.net/9ddfe38e-133a-4257-8d46-60ee70a63150.png"
}
],
"comments": [
{
"user": {
"isMaker": true,
"username": "mjonesone",
"name": "Michael Jones",
"avatarUrl": "https://ph-avatars.imgix.net/541465/original.jpeg",
"headline": "Toonstar",
"links": [
"https://twitter.com/mjones",
"http://www.science-inc.com"
],
"followersCount": 3240
},
"text": "Hi Product Hunt! I'm Mike. I keep almost everything in Obsidian, about 4,000 notes, and two things bugged me. My notes never turned into anything other people could see. And the public \"digital gardens\" people do build are islands: you can't link from your garden into a friend's. Caldera fixes both. It reads your vault on your device and publishes a living profile (daily journal, activity, timeline, projects) that refreshes itself every few hours. With 0.5 you can plant notes in a Garden folder and each one becomes a page, and [[@handle/Note]] links connect gardens with backlinks on both sides. Every note is hashed into a signed manifest, so authorship travels with it. It's free and open source (MIT plugin, AGPL hub), and setup is one prompt you paste into Claude Code, Codex or Cursor. I'd love feedback on two things: what would make you plant notes in public, and what you'd want a link between two gardens to do.",
"upvotesCount": 1,
"timeAgo": "5 days ago"
},
{
"user": {
"isMaker": false,
"username": "raaed_muggo12",
"name": "Raaed Muggo",
"avatarUrl": "https://ph-avatars.imgix.net/10264102/8ae91e23-1958-4d57-aa76-63bce49a1fe2.jpeg",
"headline": "Building AI systems that work",
"links": [],
"followersCount": 1
},
"text": "@handle @mjonesone Self hosting is a big plus for me. I don't love the idea of my notes depending on yet another service staying online.",
"upvotesCount": 1,
"timeAgo": "13 hours ago"
},
"..."
],
"reviews": [],
"website": {
"url": "https://caldera.social",
"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 saved launch, or its product when no launch is available. The public email add-on is charged only for a saved launch where optional website details find at least one public email. A run with no saved launch is not charged for a launch. Website checks that find no public email do not add the email charge. 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 one launch cannot be read after retries?

The Actor skips that launch and keeps working on other launches it can read. Rows already saved stay in the dataset. The skipped launch has no launch charge, and the run reports an incomplete result. The run ends only if a problem with access to Product Hunt blocks all remaining work.

What happens if Product Hunt blocks every attempt to find launches?

The Actor reports that it could not access Product Hunt instead of returning a normal, successful run with no launches. Retry later because access to Product Hunt can change between runs.

What happens if a run hits a time limit or a website details limit?

Rows saved before the stop remain in the dataset, and charges for those saved rows remain. The run log explains the limit. Set Maximum launches to save when you want a smaller run.

How do I keep a large run manageable?

Leave website details off when you do not need the linked site data. Set a positive Maximum launches to save limit for a smaller run; leave it empty to return all available results until the source is exhausted.

Can I submit a Product Hunt launch URL?

Yes. Choose Product Hunt page URLs as the Target to submit supported Product Hunt launch detail, category, topic, or leaderboard URLs. It does not accept post, search, home, or other URL types.

Why are some fields null or empty arrays?

Product Hunt does not show every optional fact for every launch. Missing optional details or website data do not discard a valid launch. The row keeps null or [] for unavailable values, and some optional fields are left out. A launch that cannot be read after retries is skipped.

Can I use several target types in one run?

Choose one Target per run. The Product Hunt page URLs Target accepts a list of supported Product Hunt pages. You can include launch detail, category, topic, and leaderboard URLs in the same list.

Are comments, reviews, launch history, Built With data, and website emails always included?

No. The public form has no separate switches for comments, reviews, Built With data, or launch history. It has one switch for website details. Product Hunt may not show every field on each launch, so some values can be empty.

Can I run the Actor through an API?

Yes. Use the Apify API to start runs and get dataset rows.

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 again instead of reusing older results.

📝 Changelog

v2.0 (18-10-2026)

  • Breaking change: each Product Hunt page URL goes in its own row, in a url field. Plain text URLs from v1.0 are no longer accepted, so update saved inputs and API calls.
  • Runs that get close to a memory or time limit stop early on their own. Saved rows stay in the dataset. If work was cut short, the run succeeds with a warning that says why, instead of failing.
  • Launches are saved as soon as they finish. A slow launch no longer holds back the launches after it.
  • Reliability improvements.

v1.0 (07-10-2026)

  • Category and topic targets use slug lists, and the URL list accepts their supported pages.
  • Comments, reviews, Built With details, and launch history are collected without separate input switches.
  • When a launch cannot be read, saved rows remain in the dataset, other launches continue, and the run reports an incomplete result.

v0.0

  • 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.
  • Initial release.

🆘 Support

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

Made with ❤️ by Maxime Dupré