Product Hunt Collection Products API and MCP — Curated Product Lists with Ratings
Send a collection slug such as 0-design-tools (or the collection page link) and a max_items cap, and get the collection's products back as JSON in the order the curator set: name, link, product id, tagline, rating, review count and image.
- You send
- a Product Hunt collection slug or collection page link, and how many products you want (up to 250)
- You get back
- products in the collection, in the curator order, with tagline, rating, review count and image
- Coverage
- Product Hunt records with a public page.
- Price
- 1 point per returned record — $1 per 1,000
- Billed per record actually returned, capped by max_items. A request that returns nothing costs nothing.
Ways to get this data
Three approaches teams use today, and where each one runs into trouble.
| Approach | What it takes | Cost | Trade-off |
|---|---|---|---|
| Product Hunt directly | Open the page on Product Hunt and scroll through the list | Free, and slow | Fine for one record, useless across a list, and the layout differs on every platform |
| Building a scraper | Write it, host it, and repair it when Product Hunt changes its pages | Engineering time | A maintenance commitment for something that isn't your product |
| NeuralVerge | One request, the same shape as every other source in the catalog | $1 per 1,000, misses not billed | Returns what Product Hunt publishes at request time. Other platforms are separate sources with the same request format |
What you get back
Every field in the example response below.
| Field | Type | Description |
|---|---|---|
session_id | string | Id of this run, for tracing. |
kind | string | Source type of the response. |
collection | string | The collection you sent. |
max_items | number | The cap on returned records, as run. |
start_page | number | Page the run started from. |
partial | boolean | True when the run stopped before reaching max_items. |
human | string | Readable summary: the query, how many results came back and how many were found. |
total_points | number | Points charged for the run. |
machine.total_items | number | Number of products returned in this response. |
machine.total_found | null | Total matches reported by the platform, when it reports one. Null in the sample. |
machine.first_item.id | string | Product slug. |
machine.first_item.name | string | Product name. |
machine.first_item.url | string | Link to the product page on Product Hunt. |
machine.first_item.alias | string | Product slug as Product Hunt uses it. |
machine.first_item.product_id | string | Numeric product id, as a string. |
machine.first_item.tagline | null | One-line tagline. Null in the sample. |
machine.first_item.rating | number | Average review rating. |
machine.first_item.review_count | number | Number of reviews. |
machine.first_item.post_count | null | Number of launches the product has had. Null in the sample. |
machine.first_item.image | string | Product image URL. |
machine.first_item.categories | array | Categories the product is listed under; each has name, slug and url. |
machine.first_item.is_no_longer_online | boolean | Whether Product Hunt marks the product as no longer online. |
machine.items[] | array | Products returned in collection order, same shape as first_item. |
machine.page_count | number | Pages read for the run. |
machine.blocked | boolean | Whether the platform refused the request. |
machine.proxy_traffic_bytes | number | Size of the data transferred for the run, in bytes. |
Example response
A real response, as returned.
{
"session_id": "11111111-1111-1111-1111-111111111111",
"kind": "producthunt_collections",
"collection": "0-design-tools",
"max_items": 2,
"start_page": 1,
"partial": false,
"human": "# Product Hunt — collection products\n\n- **Collection:** 0-design-tools\n- **Results:** 2\n- **Proxy traffic:** 34.6 KB",
"machine": {
"total_items": 2,
"first_item": {
"id": "looka",
"name": "Looka",
"url": "https://www.producthunt.com/products/looka",
"alias": "looka",
"product_id": "93446",
"tagline": null,
"rating": 4.67,
"review_count": 3,
"post_count": null,
"image": "https://ph-files.imgix.net/dee44533-a25f-4e6b-b1f6-d7f7d4445109.png?auto=format&fit=crop&w=128&h=128",
"categories": [],
"is_no_longer_online": false
},
"items": [
{
"id": "looka",
"name": "Looka",
"url": "https://www.producthunt.com/products/looka",
"alias": "looka",
"product_id": "93446",
"tagline": null,
"rating": 4.67,
"review_count": 3,
"post_count": null,
"image": "https://ph-files.imgix.net/dee44533-a25f-4e6b-b1f6-d7f7d4445109.png?auto=format&fit=crop&w=128&h=128",
"categories": [],
"is_no_longer_online": false
},
{
"id": "uxarchive",
"name": "UXArchive",
"url": "https://www.producthunt.com/products/uxarchive",
"alias": "uxarchive",
"product_id": "94247",
"tagline": null,
"rating": 5,
"review_count": 1,
"post_count": null,
"image": "https://ph-files.imgix.net/0a8ed72f-3c85-4736-ba84-234f41e347fa.png?auto=format&fit=crop&w=128&h=128",
"categories": [],
"is_no_longer_online": false
}
],
"total_found": null,
"page_count": 1,
"blocked": false,
"proxy_traffic_bytes": 35440
},
"total_points": 2
}How to run it
The same lookup works from the app, the API, or as a tool an agent can call mid-task.
Results come back in the same envelope as every other source: a session id, a readable summary, the structured result and the points charged. max_items caps how many records are returned and billed.
curl -X POST https://api.neuralverge.ai/functions/v1/run-producthunt-collections \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"collection":"0-design-tools","max_items":2}'What teams use it for
Where this field shows up in an actual workflow.
Turn a curator's tool list into rows you can filter by rating or review count.
Read what a curated collection includes to find products you would otherwise miss.
Re-run the same collection and compare to see products added or reordered.
Coverage, freshness and limits
What this source covers, how fresh it is, and where it stops.
Product Hunt records with a public page.
Read at request time, so the answer reflects the platform as it stands when you ask.
This source returns information Product Hunt shows publicly. Every response carries the session id you can trace.
- —Taglines, launch counts and categories can be empty for products in a collection, as in the sample.
- —The list is read at request time; the platform does not provide earlier versions.
Questions, answered
Yes. Products come back in the order the curator set, and start_page continues the list beyond the first page.
Related sources
Try product hunt collection products on your own data
One request format across every source in the catalog.