Product Hunt User Stacks API and MCP — Products a User Runs on
Send a username or profile link and get the products in that user's stack: name, tagline, rating, review count, link and, where given, who recommended each product and when it was added. Set max_items to cap the list (up to 250).
- You send
- a Product Hunt username or profile link, and how many results to return
- You get back
- products in the user's stack, with rating, review count and who recommended them
- 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. |
user | string | The username you sent. |
max_items | number | The cap you sent on returned records. |
start_page | number | Page the run started from. |
partial | boolean | Whether the run stopped before reaching everything that matched. |
human | string | Readable summary of the run. |
total_points | number | Points charged for the run: 1 per returned record. |
machine.total_items | number | Number of records returned in this response. |
machine.total_found | null | Empty in the sample because the platform gave no total for this request. |
machine.page_count | number | Pages read for the run. |
machine.first_item | object | The first returned record, repeated from items[]. Fields below are described on items[]. |
machine.blocked | boolean | Whether the platform refused the request. |
machine.proxy_traffic_bytes | number | Size of the data transferred for the run, in bytes. |
machine.items[].id | string | Product slug. |
machine.items[].name | string | Product name. |
machine.items[].url | string | Link to the product page. |
machine.items[].alias | string | The product slug. |
machine.items[].product_id | string | Numeric product id. |
machine.items[].tagline | string | One-line tagline. |
machine.items[].rating | number | Average review rating. |
machine.items[].review_count | null | Empty in the sample; the number of reviews when given. |
machine.items[].post_count | null | Empty in the sample. |
machine.items[].image | string | Logo image link. |
machine.items[].categories[] | array | Categories; empty in the sample. |
machine.items[].is_no_longer_online | boolean | Whether the platform marks the product as no longer online. |
machine.items[].added_at | null | Empty in the sample; when the product was added to the stack, if given. |
machine.items[].referrer | null | Empty in the sample; who recommended the product, if given. |
Example response
A real response, as returned.
{
"session_id": "11111111-1111-1111-1111-111111111111",
"kind": "producthunt_users_stacks",
"user": "kevin",
"max_items": 2,
"start_page": 1,
"partial": false,
"human": "# Product Hunt — user stacks\n\n- **User:** kevin\n- **Results:** 2\n- **Proxy traffic:** 276.6 KB",
"machine": {
"total_items": 2,
"first_item": {
"id": "gpt-4-openai",
"name": "GPT-4o",
"url": "https://www.producthunt.com/products/gpt-4-openai",
"alias": "gpt-4-openai",
"product_id": "113179",
"tagline": "Fast, intelligent, flexible GPT model",
"rating": 4.83,
"review_count": null,
"post_count": null,
"image": "https://ph-files.imgix.net/da10f845-57e4-4fa9-8856-0cb9275daecf.png?auto=format&fit=crop&w=128&h=128",
"categories": [],
"is_no_longer_online": false,
"added_at": null,
"referrer": null
},
"items": [
{
"id": "gpt-4-openai",
"name": "GPT-4o",
"url": "https://www.producthunt.com/products/gpt-4-openai",
"alias": "gpt-4-openai",
"product_id": "113179",
"tagline": "Fast, intelligent, flexible GPT model",
"rating": 4.83,
"review_count": null,
"post_count": null,
"image": "https://ph-files.imgix.net/da10f845-57e4-4fa9-8856-0cb9275daecf.png?auto=format&fit=crop&w=128&h=128",
"categories": [],
"is_no_longer_online": false,
"added_at": null,
"referrer": null
},
{
"id": "spotify",
"name": "Spotify",
"url": "https://www.producthunt.com/products/spotify",
"alias": "spotify",
"product_id": "97236",
"tagline": "Stream music and podcasts",
"rating": 4.67,
"review_count": null,
"post_count": null,
"image": "https://ph-files.imgix.net/aa6e3930-dec2-4d85-af41-d39f120e7539.jpeg?auto=format&fit=crop&w=128&h=128",
"categories": [],
"is_no_longer_online": false,
"added_at": null,
"referrer": null
}
],
"total_found": null,
"page_count": 1,
"blocked": false,
"proxy_traffic_bytes": 283265
},
"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-users-stacks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"user":"kevin","max_items":2}'What teams use it for
Where this field shows up in an actual workflow.
See which tools a well-known maker or investor runs on.
Check whether a target account's team lists your product or a rival's.
Find which products show up together in stacks and plan integrations around them.
Reference a tool someone uses when you contact them about it.
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.
- —A stack is what a person chose to list on their profile; it is not a record of what they actually use.
- —Several fields, including review count, added date and referrer, were null in the sample.
- —This source returns a person's public list. Use it for product research, not to profile the individual.
Questions, answered
There is a referrer field for it, but it was null in the sample, so it is filled only when the platform shows one.
Related sources
Profile of one Product Hunt user with follower and launch counts.
Collections a user has made.
Full profile of one product: rating, followers, categories, makers and similar products.
Startup directories, funding databases, launch platforms and investor data.
Try product hunt user stacks on your own data
One request format across every source in the catalog.