Product Hunt Launches Scraper – Daily Top, No Login
Pricing
from $0.85 / 1,000 launches
Product Hunt Launches Scraper – Daily Top, No Login
Scrape Product Hunt daily leaderboards for any day or period: name, tagline, votes, comments, rank, topics, website and public maker names. Filter by topic and minimum votes. No login, no API token.
Pricing
from $0.85 / 1,000 launches
Rating
0.0
(0)
Developer
Cliqto Media
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Get Product Hunt daily leaderboards for any day or period up to 31 days: one row per launch with name, tagline, votes, comments, daily rank, topics, website and public makers. No login and no API token.
Add how many days to read (or a date range), click Start, and you get the launches in a dataset you can export to JSON, CSV or Excel. A typical run (yesterday's top 20) takes about 10–25 seconds and costs about $0.02.

Table of contents
- What it does
- Quick start
- Input
- Output
- Pricing
- Use cases
- Scheduling
- API, export and integrations
- Limits and partial results
- Moving from another Product Hunt scraper
- Troubleshooting
- FAQ
- Support
What it does
The Actor reads the public Product Hunt daily leaderboard for each day you choose. Days follow Product Hunt's calendar (Pacific Time). For each launch it saves one dataset row. With details on (default), it also opens the launch page and adds the product website, makers, hunter, description and pricing type.
You can keep only some launches: by topic (for example artificial-intelligence or Marketing) and by a minimum number of votes.
Data comes from Product Hunt. This Actor is not made by or connected to Product Hunt.
Good fit
- Marketers: a daily list of new tools in your niche, with website and tagline, for newsletters, competitor watch or partner outreach.
- Investors: the top launches of a week or month with votes, comments and rank, to spot early products.
- Sales: new products with their website and public maker names, as a starting list for lead research.
Not a fit / limits
- The Actor does not collect emails, phone numbers or other private contact data. Makers have only public name, username and profile URL.
- No comments text, reviews, followers or maker profiles.
- Up to 31 days in one run. For a longer period, run it again with the next dates.
- Votes and ranks are live numbers. They can change after the launch day. Today's leaderboard (
daysBack: 0) is not final. - Only Product Hunt launches. No other launch sites.
Quick start
- Open the Input tab.
- Keep Days back (
daysBack) =1. This reads yesterday's final leaderboard. - Keep Max launches (
maxItems) =20, or set your own number. - Optional: add Topics (
topics), for exampleartificial-intelligence. - Click Start.
- Open the Output tab and check the Launches view:
rank,name,votesCount,website.
Expected result: up to 20 rows from yesterday's featured leaderboard, best rank first.
Input
Input fields
| Field | Plain name | Type | Required | Default / prefill | Allowed values | Effect | Example | Recommendation |
|---|---|---|---|---|---|---|---|---|
daysBack | Days back | integer | no | default 1, prefill 1 | 0–31 | Reads N full days before today. 0 = today (live, not final). Ignored when dateFrom or dateTo is set. | 7 | Best for daily schedules: no dates to edit. |
dateFrom | From date | string | no | none | YYYY-MM-DD, not in the future | First day of the period. Alone, it reads one day. | 2026-10-01 | Use for a fixed past period. |
dateTo | To date | string | no | none | YYYY-MM-DD, ≥ dateFrom, period ≤ 31 days | Last day, included. Alone, it reads one day. | 2026-10-07 | |
featuredOnly | Featured launches only | boolean | no | true | true / false | true: the featured launches (usually 10–60 a day). false: all launches of the day (often several hundred). | false | Keep true unless you need small launches too. |
topics | Topics | array of strings | no | empty | up to 20 names or slugs, any case | Keeps launches with at least one of these topics. Empty = all topics. | ["artificial-intelligence", "Marketing"] | Use the slug from the topic page URL. |
minVotes | Minimum votes | integer | no | 0 | ≥ 0 | Keeps launches with votesCount ≥ this number. | 100 | Makes runs faster: the Actor stops a day early when votes drop below it. Product Hunt sorts by votes, so a very low value (under 10) can rarely skip a launch. |
includeDetails | Include website and makers | boolean | no | true | true / false | true: one extra request per launch for website, makers, hunter, description, pricingType. false: leaderboard fields only. | false | Turn off when you need only votes and ranks: much faster for big runs. |
maxItems | Max launches | integer | no | default 100, prefill 20 | 1–10,000 | Stops after this many rows in total. Newest day first. | 500 | Each row is one paid result. |
Empty input ({}) reads yesterday with up to 100 rows. Wrong dates (future date, dateFrom after dateTo, more than 31 days) stop the run at once with INVALID_INPUT, before any source request and without row charges.
Interacting settings
| When | Input A | Input B | Effective behavior | Example | Cost/result effect |
|---|---|---|---|---|---|
| Both set | daysBack | dateFrom / dateTo | Dates win, daysBack is ignored | daysBack: 7, dateFrom: 2026-10-01 → only 2026-10-01 | none |
| Filter + cap | topics / minVotes | maxItems | Filters first, then the cap counts saved rows | 7 days, topics: ["saas"], maxItems: 50 | You pay only for saved rows |
| All launches + filter with few matches | featuredOnly: false | topics | The Actor still reads every leaderboard page of every day | 31 days, a rare topic | Many pages: see Pricing |
| Vote filter | minVotes | any | The leaderboard is sorted by votes, so the Actor stops a day after a full page below minVotes | minVotes: 50 | Fewer pages, lower cost |
| No details | includeDetails: false | topics | Topic filter uses the topics shown on the leaderboard (up to 3 per launch) | Faster; website, makers are null |
Input examples
Yesterday's top 20 (prefill)
{"daysBack": 1,"maxItems": 20}
Expected behavior: reads one leaderboard page and opens each launch page.
Expected output: up to 20 launches with rank, name, votesCount, website, makers.
Cost note: about $0.02.
AI launches with 100+ votes in one week
{"dateFrom": "2026-10-05","dateTo": "2026-10-11","topics": ["artificial-intelligence"],"minVotes": 100,"maxItems": 200}
Expected behavior: reads 7 days, keeps AI launches with at least 100 votes.
Expected output: launches with topics containing "Artificial Intelligence" and votesCount ≥ 100.
Output
Each dataset row is one launch from one leaderboard day. Rows go from the newest day to the oldest, and by rank inside a day.
Output example
{"name": "ngram 2.0","tagline": "Create explainers, screencasts, and AI avatar videos","url": "https://www.producthunt.com/products/ngram/launches/ngram-2-0-2","productUrl": "https://www.producthunt.com/products/ngram","website": "https://www.ngram.com","votesCount": 269,"launchDayVotesCount": 248,"votesHidden": false,"commentsCount": 42,"rank": 2,"weeklyRank": 3,"monthlyRank": 35,"topics": ["Education", "Artificial Intelligence", "Video"],"topicSlugs": ["education", "artificial-intelligence", "video"],"makers": [{ "name": "…", "username": "…", "profileUrl": "https://www.producthunt.com/@…" }],"hunter": { "name": "…", "username": "…", "profileUrl": "https://www.producthunt.com/@…" },"description": "Turn ideas, documents, and recordings into narrated videos…","pricingType": "free_options","featured": true,"launchDate": "2026-10-12","launchedAt": "2026-10-12T07:01:00.000Z","thumbnail": "https://ph-files.imgix.net/ff626e36-21c0-49e6-9937-f794c9825256.png","postId": "1266889","slug": "ngram-2-0-2","productSlug": "ngram","detailsStatus": "ok","source": "Product Hunt (https://www.producthunt.com/)","fetchedAt": "2026-10-14T03:40:18.334Z"}
This is one row from a run for 2026-10-12. The description is shortened and maker names are hidden here. null means Product Hunt did not give this value or details were off. It is never used instead of 0.
Output fields
| Field | Meaning | Type | Can be empty? | Example / enum | Notes |
|---|---|---|---|---|---|
name | Launch name | string | no | ngram 2.0 | |
tagline | One-line tagline | string | yes | Create explainers, screencasts, and AI avatar videos | |
url | Product Hunt launch page | string | no | https://www.producthunt.com/products/ngram/launches/ngram-2-0-2 | |
productUrl | Product Hunt product page | string | yes | https://www.producthunt.com/products/ngram | |
website | Product website | string | yes | https://www.ngram.com | null when details are off or there is no link |
votesCount | Upvotes now | integer | yes | 269 | null when Product Hunt does not return it; never 0 for missing |
launchDayVotesCount | Upvotes at the end of the launch day | integer | yes | 248 | |
votesHidden | The maker hides the vote count | boolean | no | false | |
commentsCount | Number of comments | integer | yes | 42 | |
rank | Daily leaderboard rank | integer | yes | 2 | null for launches without a rank |
weeklyRank, monthlyRank | Weekly and monthly rank | integer | yes | 3, 35 | |
topics | Topic names | array | no (can be []) | ["Education", "Artificial Intelligence", "Video"] | All topics with details, up to 3 without |
topicSlugs | Topic slugs | array | no | ["education", "artificial-intelligence", "video"] | |
makers | Makers: public name, username, profile URL | array | yes | [{"name": "…", "username": "…", "profileUrl": "…"}] | [] = none listed; null = details not read |
hunter | Who posted the launch | object | yes | {"name": "…", "username": "…", "profileUrl": "…"} | |
description | Launch description | string | yes | Turn ideas, documents, and recordings into narrated videos… | HTML entities decoded; email addresses replaced with [email removed] |
pricingType | Pricing set by the maker | string | yes | free, free_options, payment_required | |
featured | Featured by Product Hunt | boolean | no | true | |
launchDate | Leaderboard day (Pacific Time) | string | no | 2026-10-12 | |
launchedAt | Launch time, UTC | string | yes | 2026-10-12T07:01:00.000Z | |
thumbnail | Thumbnail image URL | string | yes | https://ph-files.imgix.net/….png | |
postId, slug, productSlug | Product Hunt IDs | string | productSlug yes | 1266889, ngram-2-0-2, ngram | Use postId to remove duplicates between runs |
detailsStatus | Did the details load? | string | no | ok, not_found, skipped | not_found = the launch page no longer exists; the row keeps leaderboard fields |
source | Data source | string | no | Product Hunt (https://www.producthunt.com/) | |
fetchedAt | When the row was read, UTC | string | no | 2026-10-14T03:40:18.334Z |
Output entities and surfaces
| Situation | Where | Result shape | User action |
|---|---|---|---|
| Normal run | Dataset, view Launches; RUN_SUMMARY status COMPLETE or CAPPED | Launch rows | Export or use the fields |
| No launches on these days | RUN_SUMMARY status NOT_FOUND, run SUCCEEDED | Empty dataset | Check the dates (Product Hunt started in 2013) |
| Filters removed everything | RUN_SUMMARY status NO_RESULTS, run SUCCEEDED | Empty dataset | Use a wider topic or a lower minVotes |
| Some data could not be read | RUN_SUMMARY status PARTIAL with reason | Saved rows; some rows may have website/makers = null | Read message and warnings; run again for missing days |
| Source error, nothing saved | RUN_SUMMARY status ERROR with errorCode, run FAILED | Empty dataset | Run again later; if SOURCE_QUERY_CHANGED, open an issue |
RUN_SUMMARY (in the run's key-value store) has status, reason, errorCode, message, the normalized input, counts (days, pages, rows saved, filtered out, cut by maxItems), one line per day and request statistics.
Pricing
Pricing unit
You pay per event:
| Event | When | Price |
|---|---|---|
| Actor start | Once per run (per GB of memory; default 256 MB = 1 event) | $0.001 |
| Leaderboard page | Each leaderboard page read (up to 20 launches) | $0.0005 |
| Launch | Each row saved to the dataset | $0.001 (FREE plan) → $0.00085 (GOLD and higher) |
Launch price by Apify plan: FREE $0.001, BRONZE $0.00095, SILVER $0.0009, GOLD and higher $0.00085. Website and makers (includeDetails) do not cost extra.
A run with no rows still pays for the start and the pages it read. An empty day or a filter with no matches on one day costs about $0.0015. Invalid input costs only the $0.001 start event: no pages or rows are charged. If you set a maximum charge for the run, the Actor stops at that limit and keeps the saved rows (PARTIAL, reason CHARGE_LIMIT).
Cost examples (FREE plan prices)
| Scenario | Input scope | Rows | Pages | Approx. charge | Stop/cap behavior |
|---|---|---|---|---|---|
| 10 launches | daysBack: 1, maxItems: 10 | 10 | 1 | $0.012 | Stops at 10 rows |
| Yesterday's top 20 (prefill) | daysBack: 1, maxItems: 20 | 20 | 1 | $0.022 | Stops at 20 rows |
| One week, featured | daysBack: 7, maxItems: 100 | 100 | up to 14 | $0.11 | Stops at 100 rows |
| One busy day, all launches | featuredOnly: false, maxItems: 1000 | 1,000 | ~50 | $1.03 | Stops at 1,000 rows |
| Empty day or no matches | 1 day | 0 | 1 | $0.0015 | SUCCEEDED, NOT_FOUND / NO_RESULTS |
| 31 days, all launches, rare topic | featuredOnly: false, 31 days, topics | 0–few | ~1,400–1,600 | $0.70–0.80 + rows | Reads every page; set a charge limit |
Use cases
| Buyer job | Input path | Output entity | Key fields | Next integration |
|---|---|---|---|---|
| Daily digest of new tools | daysBack: 1, topics | Launch | name, tagline, website, topics | Schedule + export to Sheets or Slack |
| Top launches of a week for deal flow | dateFrom, dateTo, minVotes | Launch | rank, votesCount, commentsCount, weeklyRank | CSV / Excel |
| Lead list of new products | daysBack: 7, topics | Launch | website, makers, productUrl | Your CRM via API |
| Full day, also non-featured | featuredOnly: false | Launch | featured, rank, votesCount | Dataset API |
Scheduling
To get new launches every day, create an Apify schedule with this input and run it once a day, after midnight Pacific Time:
{"daysBack": 1,"maxItems": 100}
Each run reads the last full day, so you do not edit dates. The Actor does not compare runs: each run is a full snapshot of that day. Use postId to remove duplicates if your periods overlap.
API, export and integrations
- Export: from the Output tab as JSON, CSV, Excel, XML or HTML.
- API: start the Actor with the Apify API, then read the dataset items.
postIdis a stable key. - No-code: connect the dataset to Google Sheets, Slack, Make, Zapier or n8n with Apify integrations.
Use with AI agents (MCP)
- MCP server with only this Actor:
https://mcp.apify.com?tools=cliqtomedia/product-hunt-launches(see Apify MCP server). - Smallest useful input:
{"daysBack": 1, "maxItems": 20}. - Key output fields:
name(launch),rank(daily place),votesCount(current votes),website(product site),topics(topic names). - A typical call takes 10–25 seconds and costs about $0.02. Limits: 31 days and 10,000 rows per run;
INVALID_INPUTexplains a wrong date inRUN_SUMMARY.message.
Limits and partial results
- Up to 31 days and 10,000 rows per run; up to 150 leaderboard pages per day.
- Speed: about 1 leaderboard page per second; details add about 0.5 seconds per row.
- Default timeout is 30 minutes. 31 days with all launches and details may need more: set timeout to 3600 seconds. When time runs out, the Actor saves what it has and ends with
PARTIAL, reasonDEADLINE. PARTIALmeans some data was not read, but the saved rows are correct.RUN_SUMMARY.reasonsays why:DEADLINE(time limit),CHARGE_LIMIT(your maximum charge),REQUEST_CAP(internal request limit) orSOURCE_ERROR(Product Hunt failed after retries).- Rows from a
PARTIALrun can havewebsiteandmakers=nullwhen details were not read.detailsStatusshows this for each row.
Moving from another Product Hunt scraper
If you already use a dataset from another Product Hunt scraper, these renames are often enough:
| Common field elsewhere | Field here | Note |
|---|---|---|
upvotesCount | votesCount | Same number (live votes) |
dayRank | rank | |
weekRank, monthRank | weeklyRank, monthlyRank | |
thumbnailUrl | thumbnail | |
tags | topics | Here: all topics with details, not only one |
website.url | website | Here: a plain string |
team | makers + hunter | Here: only the launch makers and the hunter, public fields only |
name, tagline, url, commentsCount and launchDate have the same names.
Troubleshooting
The dataset is empty
Symptom: the run SUCCEEDED but there are no rows.
Likely reason: RUN_SUMMARY.status is NO_RESULTS (filters removed all launches) or NOT_FOUND (no launches on these days).
Check: RUN_SUMMARY.counts.launchesListed and filteredOut.
Action: use a topic slug from the Product Hunt topic page, lower minVotes, or choose other dates.
Ranks have gaps (for example 1, 2, 4)
Symptom: a rank number is missing in a day.
Likely reason: Product Hunt removed or hid that launch, or the place is an ad. The Actor skips ads and counts them in RUN_SUMMARY.skippedFeedTypes.
Action: nothing to fix; the other rows are complete.
Some rows have website and makers = null
Symptom: leaderboard fields are filled, details are empty.
Likely reason: includeDetails is off (detailsStatus: skipped), the launch page no longer exists (not_found), or the run was PARTIAL.
Action: check detailsStatus and RUN_SUMMARY.warnings; run that day again if needed.
The run ended with PARTIAL and reason DEADLINE
Symptom: not all days were read. Likely reason: a long period with all launches and details needs more than the run timeout. Action: set timeout to 3600 seconds, or split the period into smaller runs.
FAQ
Do I need a Product Hunt account or API token?
No. The Actor reads public leaderboard pages. You do not add a login, cookie or token.
Why are votes different from the Product Hunt page?
Votes are live. They change during the day and a little after it. launchDayVotesCount keeps the number from the end of the launch day. fetchedAt shows when the row was read.
Does it give maker emails?
No. Only public name, username and profile URL. Emails in descriptions are replaced with [email removed].
Are all launches of a day included?
With featuredOnly: true, you get the featured launches. With featuredOnly: false, you get all launches on the daily leaderboard, except ads.
Support
For bugs, questions or feature requests, open an issue in the Issues tab. Include the run ID, your input (without private data) and the RUN_SUMMARY message. Do not send tokens or private data.