Product Hunt Forum Threads API and MCP — Search Discussions with Votes and Comment Counts
Send a keyword such as startup, or leave it out to browse threads page by page, and get threads back as JSON: id, title, link, forum, a preview of the opening post, votes, comment count, pinned flag, creation time and the user who started the thread.
- You send
- an optional keyword, a max_items cap (up to 250) and optionally a start page
- You get back
- forum threads with title, forum, preview text, votes, comment count, pinned flag, date and starter
- 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 | Type the query into Product Hunt and read the results | 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. |
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 threads returned in this response. |
machine.total_found | number | Total matches reported by the platform, when it reports one. |
machine.first_item.id | string | Thread path as forum/thread-slug. |
machine.first_item.name | string | Thread title. |
machine.first_item.url | string | Link to the thread. |
machine.first_item.thread_id | string | Numeric thread id, as a string. |
machine.first_item.forum | string | Forum the thread is in. |
machine.first_item.preview | string | Start of the opening post. |
machine.first_item.votes_count | number | Votes on the thread. |
machine.first_item.comments_count | number | Number of comments. |
machine.first_item.pinned | boolean | Whether the thread is pinned. |
machine.first_item.created_at | string | Creation time, ISO 8601 with offset. |
machine.first_item.user | object | Thread starter: id, name, username, url, headline and image. |
machine.items[] | array | Threads 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_search",
"max_items": 2,
"start_page": 1,
"partial": false,
"human": "# Product Hunt — forum threads\n\n- **Query:** all\n- **Results:** 2 of 2568 found\n- **Proxy traffic:** 597.3 KB",
"machine": {
"total_items": 2,
"first_item": {
"id": "google-cloud-platform/google-cloud-run-takeover-hackathon",
"name": "Google Cloud Run Takeover & Hackathon!",
"url": "https://www.producthunt.com/p/google-cloud-platform/google-cloud-run-takeover-hackathon",
"thread_id": "945304",
"forum": "google-cloud-platform",
"preview": "We teamed up with @GoogleCloud for a Cloud Run Hackathon October 14th! To kick things off, we're celebrating on the leaderboard so you can meet the people behind Cloud Run.",
"votes_count": 235,
"comments_count": 18,
"pinned": true,
"created_at": "2026-10-06T06:10:47-07:00",
"user": {
"id": "gabe",
"name": "Gabe Perez",
"username": "gabe",
"url": "https://www.producthunt.com/@gabe",
"headline": null,
"image": "https://ph-avatars.imgix.net/84553/afd8c28f-5881-4a33-aa3d-9bc02e32c192.jpeg"
}
},
"items": [
{
"id": "google-cloud-platform/google-cloud-run-takeover-hackathon",
"name": "Google Cloud Run Takeover & Hackathon!",
"url": "https://www.producthunt.com/p/google-cloud-platform/google-cloud-run-takeover-hackathon",
"thread_id": "945304",
"forum": "google-cloud-platform",
"preview": "We teamed up with @GoogleCloud for a Cloud Run Hackathon October 14th! To kick things off, we're celebrating on the leaderboard so you can meet the people behind Cloud Run.",
"votes_count": 235,
"comments_count": 18,
"pinned": true,
"created_at": "2026-10-06T06:10:47-07:00",
"user": {
"id": "gabe",
"name": "Gabe Perez",
"username": "gabe",
"url": "https://www.producthunt.com/@gabe",
"headline": null,
"image": "https://ph-avatars.imgix.net/84553/afd8c28f-5881-4a33-aa3d-9bc02e32c192.jpeg"
}
},
{
"id": "runevr/when-was-the-last-time-you-did-some-sport",
"name": "🏃 When was the last time you did some sport?",
"url": "https://www.producthunt.com/p/runevr/when-was-the-last-time-you-did-some-sport",
"thread_id": "947610",
"forum": "runevr",
"preview": "I just walked out of the gym, and I feel ready to move mountains! =D For a while, I gave up exercising. And yesterday, the bell rang when my teammate asked the whole team: When was the last time you d",
"votes_count": 25,
"comments_count": 22,
"pinned": false,
"created_at": "2026-10-09T00:19:19-07:00",
"user": {
"id": "adana",
"name": "Adana Marukhyan",
"username": "adana",
"url": "https://www.producthunt.com/@adana",
"headline": null,
"image": "https://ph-avatars.imgix.net/9683599/a85f4f4c-4361-4779-b24a-8f4ff5418b4e.jpeg"
}
}
],
"total_found": 2568,
"page_count": 1,
"blocked": false,
"proxy_traffic_bytes": 611612
},
"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-search \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"max_items":2}'What teams use it for
Where this field shows up in an actual workflow.
Search a keyword to see what founders are discussing and which threads draw votes.
List the forums and threads that mention your category or competitors.
Take thread ids from the results and read the discussion with the thread comments source.
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.
- —Without a keyword the source browses threads rather than ranking them by relevance.
- —Each thread lists the name and username of the person who started it. Use threads as discussion content, and handle personal data in line with your own obligations.
- —Preview text is only the start of the opening post.
Questions, answered
No. Leave it out to browse threads page by page.
Related sources
Try product hunt forum threads search on your own data
One request format across every source in the catalog.