> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/product-hunt>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/product-hunt.mdx>

---

# Product Hunt API. Launches, products and reviews as JSON.

Read public Product Hunt posts, products, launches, leaderboards, comments, reviews, topics, categories and user profiles with one API key.

- Posts and launches
- Cursor paging
- 1 credit per request

`GET /v1/product-hunt/posts` returns the posts Product Hunt is currently showing in its most-active list, with `id`, `name`, `tagline`, `url`, `productSlug`, `author.name`, `publishedAt`, `lastActivityAt` and `websiteRedirectUrl`. Pass `topic` to narrow it to one topic, for example `artificial-intelligence` or `developer-tools`; a topic Product Hunt does not know comes back as `lookupStatus: not_found` with an empty list. It returns at most 50 posts and does not page, and the order is Product Hunt's current order, not a date or rank order you can request.

Everything else is looked up by slug or username. One product returns its description, links, categories, alternatives, pro/con tags, rating and follower counts and `latestLaunch`; one post adds its description, hunter, makers, media, links, badges, votes, ranks, topics and the linked product when it has one. `GET /v1/product-hunt/users/{username}` returns the profile plus its first 20 made, submitted and voted posts, each with `totalCount`, `hasMore` and `nextCursor`; continue one list on `GET /v1/product-hunt/users/{username}/posts?kind=...`. Topics, categories, comments and reviews follow the same lookup pattern, and comment threads carry up to 20 replies with `repliesCount` and `repliesHasMore`.

For time-based lists, `launches` and `leaderboard` take today or a year with a month, week or day, and both default to today when no date is given. The leaderboard also returns the rank order it used. Both return `order`, `period`, `totalCount` and a cursor block. List pages hold up to 20 rows, except the topic list, which holds up to 100.

Search spans products, users, posts, topics and categories, with `type=product` for the products tab and cursor paging. A mixed search stops at 1,000 results.

## What you can get

- Current most-active posts with an optional `topic` filter, at most 50 per call.
- Products and posts by slug, including ratings, votes, ranks, topics and the linked product when present.
- Launches and leaderboards for today, a chosen day, week, month or year.
- Comment threads with up to 20 replies, reply counts and a cursor for the next page.
- Product reviews with ratings, pros, cons, question answers and the reviewer.
- Topic, category and user routes, including paged user post lists, plus mixed search.

## Product Hunt endpoints

| Endpoint | Request | Credits | Docs |
| --- | --- | --- | --- |
| Posts | GET /v1/product-hunt/posts | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/posts/get) |
| Post | GET /v1/product-hunt/posts/{slug} | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/posts/slug/get) |
| Comments | GET /v1/product-hunt/posts/{slug}/comments | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/posts/slug/comments/get) |
| Product | GET /v1/product-hunt/products/{slug} | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/products/slug/get) |
| Reviews | GET /v1/product-hunt/products/{slug}/reviews | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/products/slug/reviews/get) |
| User | GET /v1/product-hunt/users/{username} | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/users/username/get) |
| User posts | GET /v1/product-hunt/users/{username}/posts | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/users/username/posts/get) |
| Search | GET /v1/product-hunt/search | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/search/get) |
| Launches | GET /v1/product-hunt/launches | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/launches/get) |
| Leaderboard | GET /v1/product-hunt/leaderboard | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/leaderboard/get) |
| Topics | GET /v1/product-hunt/topics | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/topics/get) |
| Topic | GET /v1/product-hunt/topics/{slug} | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/topics/slug/get) |
| Topic posts | GET /v1/product-hunt/topics/{slug}/posts | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/topics/slug/posts/get) |
| Category | GET /v1/product-hunt/categories/{slug} | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/categories/slug/get) |

## How to start

1. **Create an API key.** Sign up at Social Fetch and copy a key (`sfk_…`). New accounts get 100 free credits, enough to try several Product Hunt routes on public posts.
2. **Pick the route that has the record.** Use `GET /v1/product-hunt/posts?topic=artificial-intelligence` for the current post list, `GET /v1/product-hunt/products/notion` for one product, or `GET /v1/product-hunt/launches?year=2026&month=10&day=1` for a past launch day. Send `x-api-key` on every request.
3. **Branch, page and bill.** Read `data.lookupStatus` before storing a row. For lists, keep calling with `page.nextCursor` while `page.hasMore` is true. Bill from `meta.creditsCharged` and log `meta.requestId` when a lookup misses.

## Pricing

Each Product Hunt route charges 1 credit per completed request, including a `not_found` lookup. Each page of a list is its own request. Credits never expire on pay-as-you-go packs, and `meta.creditsCharged` on every response is the billing source of truth.

## Compared with the official API

Product Hunt's official API is built for registered apps and its own query format. Social Fetch puts the public post, product, launch, leaderboard, topic, category and review data behind REST routes with one `x-api-key`, a shared `{ data, meta }` envelope, typed `lookupStatus` values and cursors. These routes are read-only: they do not vote, comment, follow or publish.

## FAQ

### Is there a Product Hunt API for posts, products and launches?

Yes. Social Fetch has fourteen Product Hunt routes under `/v1/product-hunt`: posts, a product, a product's reviews, a post, a post's comments, a user, a user's post list, search, launches, leaderboard, a topic, a topic's posts, topics and a category. Authenticate with your Social Fetch API key in `x-api-key`.

### How do I filter the post list by topic?

Add `topic` to `GET /v1/product-hunt/posts`, for example `topic=artificial-intelligence` or `topic=developer-tools`. The value is used as written. A topic Product Hunt does not serve returns `lookupStatus: not_found` with an empty `posts` list, so check the status before treating an empty list as no activity.

### How are launches and the leaderboard different?

`GET /v1/product-hunt/launches` lists the launches for a period, with `launches`, `totalCount` and the `order` and `period` it resolved to. `GET /v1/product-hunt/leaderboard` reads the ranked posts for the same period shape. Both default to today when you give no date, and both can be paged with `page.nextCursor`.

### How do I page through a Product Hunt list?

Read `data.page.hasMore`. When it is true, send `data.page.nextCursor` as the `cursor` query parameter on the same route with the same filters. Light lists hold up to 20 rows per page; the topic list holds up to 100. Posts-based lists stop at the first 5,000 rows and set `page.truncated: true`, so `totalCount` can be larger than the rows you can reach. The post list is the exception: it has no cursor and returns at most 50 posts.

### What does lookupStatus mean?

HTTP 200 means the request completed. `data.lookupStatus` says whether the item exists: `found` or `not_found`. On a `not_found` result the record field is null or the list is empty. A list can also be `found` with an empty list when the product, post or period genuinely has no rows.

### How many replies does a comment include?

Each comment in `GET /v1/product-hunt/posts/{slug}/comments` includes up to 20 replies in `replies`. `repliesCount` is the thread total and `repliesHasMore` is true when more than 20 exist.

### Why does a user show only 20 posts in each list?

Each profile list starts with 20 posts and reports `totalCount`, `hasMore` and `nextCursor`. Continue one list on `GET /v1/product-hunt/users/{username}/posts` with `kind=made|submitted|voted` and that cursor.

### Does the Product Hunt search route work?

Yes. `GET /v1/product-hunt/search` searches products, users, posts, topics and categories. Omit `type` for a mixed search, use `type=product` for the products tab, and pass `page.nextCursor` as `cursor` for the next page.

### How much does the Product Hunt API cost?

Each route charges 1 credit per completed request, and each page of a list is a separate request. A `not_found` lookup is a completed request. Confirm the charge on every response with `meta.creditsCharged`. New accounts start with 100 free credits.

### Does a product or post return the same fields every time?

The contract fixes the field names and types, but some values can be null: a product may have no rating or website, a post may have no rank or hunter, and a topic may have no description or follower count. Read the field as nullable rather than assuming a number or string.

## Related

- [Product Hunt Posts API](https://www.socialfetch.dev/platforms/product-hunt/posts): Current most-active posts, optionally filtered by topic (`GET /v1/product-hunt/posts`).
- [Product Hunt Launches API](https://www.socialfetch.dev/platforms/product-hunt/launches): Launches for today or a chosen day, week, month or year (`GET /v1/product-hunt/launches`).
- [Product Hunt Leaderboard API](https://www.socialfetch.dev/platforms/product-hunt/leaderboard): Ranked posts by day, week, month or year (`GET /v1/product-hunt/leaderboard`).
- [Product Hunt Reviews API](https://www.socialfetch.dev/platforms/product-hunt/products-slug-reviews): Ratings, pros, cons and reviewer details for one product (`GET /v1/product-hunt/products/{slug}/reviews`).
- [Product Hunt User API](https://www.socialfetch.dev/platforms/product-hunt/users-username): Profile fields and the first 20 made, submitted and voted posts (`GET /v1/product-hunt/users/{username}`), with paged lists at `/users/{username}/posts`.
- [Ask in plain English](https://www.socialfetch.dev/ask): Route a natural-language Product Hunt question to the matching operation.
- [Hosted MCP](https://www.socialfetch.dev/mcp): Call the same Product Hunt tools from Cursor or Claude with the same credit metering.
