Product Hunt Forum Thread Comments API and MCP — Comments, Votes and Reply Counts
Send a thread link or a forum/thread-slug and a max_items cap, and get the thread's top-level comments back as JSON: comment id, link, body text, votes, number of replies, whether it is pinned, when it was posted and the author.
- You send
- a forum thread link or forum/thread-slug, and how many comments you want (up to 250)
- You get back
- top-level comments with text, author, votes, reply count and date
- 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. |
thread | string | The thread 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 comments returned in this response. |
machine.total_found | number | Total matches reported by the platform, when it reports one. |
machine.first_item.id | string | Comment id. |
machine.first_item.name | string | Label of the form "Comment by <author>". |
machine.first_item.url | string | Link to the comment. |
machine.first_item.comment_id | string | Comment id, as a string. |
machine.first_item.body | string | Comment text. Long comments are shortened in the sample. |
machine.first_item.votes_count | number | Votes on the comment. |
machine.first_item.replies_count | number | Number of replies to the comment. |
machine.first_item.is_pinned | boolean | Whether the comment is pinned. |
machine.first_item.created_at | string | Posting time, ISO 8601 with offset. |
machine.first_item.user | object | Author: id, name, username, url, headline and image. |
machine.items[] | array | Comments returned, 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_forums_threads",
"thread": "general/how-do-you-decide-what-features-should-be-free-and-what-should-be-paid",
"max_items": 2,
"start_page": 1,
"partial": false,
"human": "# Product Hunt — forum thread comments\n\n- **Thread:** general/how-do-you-decide-what-features-should-be-free-and-what-should-be-paid\n- **Results:** 2 of 259 found\n- **Proxy traffic:** 263.2 KB",
"machine": {
"total_items": 2,
"first_item": {
"id": "5191801",
"name": "Comment by Mario Gomez",
"url": "https://www.producthunt.com/p/general/how-do-you-decide-what-features-should-be-free-and-what-should-be-paid?comment=5191801",
"comment_id": "5191801",
"body": "With my latest app, I only offer paid, because there are costs to run and I'm self-funded. In the past, I've used features to be my funnel and then the more premium features are paid. That's my train ",
"votes_count": 52,
"replies_count": 13,
"is_pinned": false,
"created_at": "2026-03-08T07:56:19-07:00",
"user": {
"id": "mario_gomez0710",
"name": "Mario Gomez",
"username": "mario_gomez0710",
"url": "https://www.producthunt.com/@mario_gomez0710",
"headline": null,
"image": "https://ph-avatars.imgix.net/9521129/f18a27ff-c189-4d84-9a03-c0519689bc3a.jpeg"
}
},
"items": [
{
"id": "5191801",
"name": "Comment by Mario Gomez",
"url": "https://www.producthunt.com/p/general/how-do-you-decide-what-features-should-be-free-and-what-should-be-paid?comment=5191801",
"comment_id": "5191801",
"body": "With my latest app, I only offer paid, because there are costs to run and I'm self-funded. In the past, I've used features to be my funnel and then the more premium features are paid. That's my train ",
"votes_count": 52,
"replies_count": 13,
"is_pinned": false,
"created_at": "2026-03-08T07:56:19-07:00",
"user": {
"id": "mario_gomez0710",
"name": "Mario Gomez",
"username": "mario_gomez0710",
"url": "https://www.producthunt.com/@mario_gomez0710",
"headline": null,
"image": "https://ph-avatars.imgix.net/9521129/f18a27ff-c189-4d84-9a03-c0519689bc3a.jpeg"
}
},
{
"id": "5193190",
"name": "Comment by swati paliwal",
"url": "https://www.producthunt.com/p/general/how-do-you-decide-what-features-should-be-free-and-what-should-be-paid?comment=5193190",
"comment_id": "5193190",
"body": "Free should get the user to the “wow moment” Paid should help them go deeper, faster, with proof of repeat value How I see this basis my experience is free = audit, visibility, limited runs, core unde",
"votes_count": 48,
"replies_count": 7,
"is_pinned": false,
"created_at": "2026-03-09T03:28:07-07:00",
"user": {
"id": "swati_paliwal",
"name": "swati paliwal",
"username": "swati_paliwal",
"url": "https://www.producthunt.com/@swati_paliwal",
"headline": null,
"image": "https://ph-avatars.imgix.net/8518541/bf7ad0dd-a961-471d-bd2c-9cfde10382b2.png"
}
}
],
"total_found": 259,
"page_count": 1,
"blocked": false,
"proxy_traffic_bytes": 269530
},
"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-forums-threads \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"thread":"general/how-do-you-decide-what-features-should-be-free-and-what-should-be-paid","max_items":2}'What teams use it for
Where this field shows up in an actual workflow.
Read how founders and users discuss a question, such as pricing or feature gating, in their own words.
Collect the most-voted comments on a thread and tag them by theme.
Re-run a thread to see how votes and replies change.
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.
- —Only top-level comments are returned; replies are counted in replies_count but not listed.
- —Comments are written by people with public usernames. Use them as discussion content, and handle personal data in line with your own obligations.
- —The comment body in the sample is shortened, so check for truncation before relying on long comments.
Questions, answered
No. The source returns top-level comments with a reply count for each.
Related sources
Try product hunt forum thread comments on your own data
One request format across every source in the catalog.