Product Hunt API & Scraper
The Product Hunt API returns daily, weekly and monthly launch leaderboards as clean JSON.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
The primary posts endpoint returns launches with id, slug, name, tagline, upvotes, comment count, daily/weekly/monthly rank, topics and product, and you can pull a single post, reviews, topics and their posts, categories, search, and collections. It is built for startup research, trend tracking and lead generation that need Product Hunt data without a scraper. One ReefAPI key, one shared credit pool, the standard envelope.
A launch and a product are two different objects
Product Hunt keeps a launch post and the product it launched as separate records with separate ids and, very often, separate slugs. Most integration bugs here come from treating them as one. Values below are from a live daily board for 2024-06-01 and from product and user calls.
| What | Measured example | Where it comes from |
|---|---|---|
| launch post id and slug | 456434 and artizyou | the id and slug on a posts row. The slug is the /posts/ segment |
| product id and slug | 460056 and b-ip-certificate | the product object nested in the same row. Frequently a different slug from the launch it appeared under |
| upvotes, comments_count, daily_rank | 518, 76 and "1" | the leaderboard feeds. daily_rank, weekly_rank and monthly_rank are numeric strings, not integers |
| daily board paging | meta.next_date 2024-05-31 | daily boards walk backwards one calendar day at a time. page is for the other feeds |
| topic id and slug | 268 and artificial-intelligence | numeric string ids again. Topics embedded in a launch row carry only id, slug and name |
| topic follower counts | design-tools has 262,104 followers | only the topics action fills followers_count, description and image_url. 26 topics per page |
| product review aggregates | reviews_rating 4.83 over 1,392 reviews | rating_breakdown came back as 5:1189, 4:180, 3:18, 2:4, 1:3 |
| user profile | rrhoover is id "2", 854 submitted posts, 76 products | the user action, which also returns followers_count, is_maker and that member's launches |
A daily board is not purely ranked. The 2024-06-01 call returned 19 rows, of which 17 carried a daily_rank string from 1 to 17 and two carried daily_rank null while showing 696 and 2,723 upvotes. Filter on daily_rank being non-null if you are rebuilding the leaderboard, or those two unranked rows will land at the top of any sort by upvotes.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/producthunt/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "ai"
}
}{
"ok": true,
"meta": {
"api": "producthunt",
"endpoint": "search",
"mode": "live",
"latency_ms": 761.8,
"record_count": 23,
"bytes": 204502,
"cache_hit": false,
"method": "rsc_embedded_json",
"has_more": true,
"page": 1,
"next_page": 2
},
"data": {
"products": [
{
"id": "566141",
"slug": "lovable",
"name": "Lovable",
"tagline": "The world's first AI Fullstack Engineer",
"description": null,
"website_url": null,
"product_hunt_url": "https://www.producthunt.com/products/lovable",
"logo_url": null,
"reviews_count": null,
"reviews_rating": null,
"followers_count": null,
"is_no_longer_online": null
},
{
"id": "111412",
"slug": "n8n-io",
"name": "n8n",
"tagline": "Workflow automation for technical people",
"description": null,
"website_url": null,
"product_hunt_url": "https://www.producthunt.com/products/n8n-io",
"logo_url": null,
"reviews_count": null,
"reviews_rating": null,
"followers_count": null,
"is_no_longer_online": null
},
{
"id": "521358",
"slug": "attio",
"name": "Attio",
"tagline": "Customer relationship magic.",
"description": null,
"website_url": null,
"product_hunt_url": "https://www.producthunt.com/products/attio",
"logo_url": null,
"reviews_count": null,
"reviews_rating": null,
"followers_count": null,
"is_no_longer_online": null
}
],
"has_more": true,
"page": 1,
"next_page": 2
}
}What the Product Hunt API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| posts | Today's or historical leaderboard launches (daily/weekly/monthly/yearly). | Platform and DevOps teams call posts to get today's or historical leaderboard launches (daily/weekly/monthly/yearly).. | date, year, month, day, week, ... |
| post | Full launch/product detail by slug: tagline, description, website, makers, hunter, topics, media gallery, external links, review aggregates, alternatives, and launch history. | Security and supply-chain teams call post to get full launch/product detail by slug. | slug |
| reviews | Product reviews by slug: per-question answer text, rating + rating histogram, pro/con tags, and the AI review summary. | Developer-tool builders call reviews to get product reviews by slug. | slug, page |
| topics | Browse Product Hunt topics (interest tags applied to launches). | AI-agent developers call topics to get browse Product Hunt topics (interest tags applied to launches).. | page |
| topic_posts | Launches filtered by topic slug. | Platform and DevOps teams call topic_posts to get launches filtered by topic slug.. | slug, page |
| categories | Browse Product Hunt product categories (the curated category tree, distinct from topics). | Security and supply-chain teams call categories to get browse Product Hunt product categories (the curated category tree, distinct from topics).. | page |
| category | Products and launches inside one product category by slug. | Developer-tool builders call category to get products and launches inside one product category by slug.. | slug, page |
| search | Keyword search across Product Hunt — products (default) or makers/users (type=users). | AI-agent developers call search to get keyword search across Product Hunt. | query, type, page |
| collections | Public curated product collections index. | Platform and DevOps teams call collections to get public curated product collections index.. | page |
| collection | Single collection (its products) by user+collection slug or full path. | Security and supply-chain teams call collection to get single collection (its products) by user+collection slug or full path.. | path, username, collection_slug |
| user | Maker/user profile plus their submitted launches. | Developer-tool builders call user to get maker/user profile plus their submitted launches.. | username, page |
| discussions | Product Hunt discussions/forum thread feed (popular or newest). | AI-agent developers call discussions to get product Hunt discussions/forum thread feed (popular or newest).. | order, page |
| discussion | Single discussion thread with its full nested comment tree. | Platform and DevOps teams call discussion to get single discussion thread with its full nested comment tree.. | slug, forum, path |
Call search from your stack
curl -X POST https://api.reefapi.com/producthunt/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"ai"}'import requests
r = requests.post(
"https://api.reefapi.com/producthunt/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "ai"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/producthunt/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "ai"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.producthunt.search with {"query":"ai"}.Who uses this API and why
- Startup and VC research tools call posts to track top launches by day, week and topic.
- Lead-gen products use search and topic_posts to find new tools in a specific category.
- Trend trackers use reviews and upvotes to gauge community reception of a launch.
Questions developers ask before integrating
I passed a product slug to post and got back a launch I did not ask for. Why?
post resolves to a product page and returns that product's most recent launch in the post block. Asking for notion returned product notion with id 106091, and a post block for ship-os-by-notion with id 1192317, its July 2026 launch. Asking for linkedcrm-ai returned product 585651 with slug linkedcrm-ai and a post whose slug was linkedin-email-finder. The launches array is the honest view: it lists every launch that product has had, 11 of them for figma, so read that rather than assuming post is the one you meant.
Why are upvotes and comments_count null when I call post?
The product page does not print launch counters, so post returns them as null. Measured across notion, figma, linear, raycast and three leaderboard slugs, upvotes, comments_count and daily_rank were null every time on the post action while name, tagline, website_url, topics, media, links and alternatives came back populated. Vote counts live on the leaderboard feeds: the same launch that read null through post read 518 upvotes and 76 comments as a row on the daily board for its launch date.
Are the ids integers?
No, every id in this engine is a numeric string, and so are the rank fields. A post came back as id "456434", its product as "460056", a topic as "268" and the founder's user account as "2". daily_rank came back as "1" and weekly_rank as "22". If you parse them into integers you lose nothing on the ids, but the ranks can be null, so a naive int conversion on a rank will throw on the unranked rows that appear in every board.
How do I walk back through historical leaderboards?
Set date to a YYYY-MM-DD and then follow meta.next_date, which came back as 2024-05-31 for a 2024-06-01 daily call. Daily boards page by date, not by page number. Change period to weekly, monthly or yearly for the wider boards, in which case year with week, or year with month, is how you address a specific one. period has on_invalid set to ignore, so a misspelled window silently gives you the daily board.
Why do the topics on a launch have no follower counts?
Because a launch row embeds only the topic stub. On the daily board, each post carried topics with id, slug and name filled in and description, followers_count and image_url all null. The topics action is the hydrated view and returns 26 per page with the counts attached, for example design-tools with 262,104 followers. Join the two on the topic slug, which is also what topic_posts takes when you want the launches inside one topic.
What review data comes back with a product?
Three layers. The aggregate is reviews_count and reviews_rating, 1,392 and 4.83 on Notion. rating_breakdown is the histogram, which came back as an array of rating and count pairs: 1,189 fives, 180 fours, 18 threes, 4 twos and 3 ones. pro_con_tags is Product Hunt's own tagging of review themes, each with a name, a type of Positive or Negative and a count, such as all-in-one workspace at 198. There is also ai_review_summary, a generated paragraph, which is a summary rather than a quotable review.
What is the difference between topics and categories?
They are two separate taxonomies and they do not share ids. Topics are the interest tags attached to individual launches, addressed by slug through topic_posts, and a launch usually has two or three of them. Categories are Product Hunt's curated product tree, returned by the categories action with a path and a nested subcategories array, and browsed with the category action. A product sits in a category, while a launch is tagged with topics.
How many rows does a page return?
It depends on the surface, and the response tells you. A daily leaderboard returned 19 rows, the topics index returned 26, topic_posts returned 70, and a user profile returned 55 of that member's launches. Every one of these carries meta.has_more and meta.next_page, or meta.next_date on the daily boards. There is no page-size parameter, so plan around what you get back rather than requesting a size.
What is the Product Hunt API?
Product Hunt API is a ReefAPI endpoint group for product hunt It returns live JSON through POST requests under /producthunt/v1.
Is the Product Hunt API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Product Hunt calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Product Hunt login or account?
No login to Product Hunt is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Product Hunt data?
The page example is captured from a live posts call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Product Hunt API use?
Product Hunt actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Product Hunt from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call producthunt actions with the same key, credit pool and JSON envelope used by normal REST requests.