Product Hunt Launches Search API and MCP — Find Launches by Keyword
Send a keyword such as crm and a max_items cap, and get matching launches back as JSON: launch name, link, slug, launch id, creation date and a block for the product behind each launch with its tagline, rating and review count.
- You send
- a keyword, a max_items cap (up to 250) and optionally a start page
- You get back
- launches matching the keyword with name, date and the product behind each launch
- 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. |
keyword | string | The keyword 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 launches 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 | Launch slug. |
machine.first_item.name | string | Launch name. |
machine.first_item.url | string | Link to the launch page. |
machine.first_item.alias | string | Launch slug as Product Hunt uses it. |
machine.first_item.launch_id | string | Numeric launch id, as a string. |
machine.first_item.created_at | string | Launch creation time, ISO 8601 with offset. |
machine.first_item.votes_count | null | Votes on the launch. Null in search results. |
machine.first_item.comments_count | null | Comments on the launch. Null in search results. |
machine.first_item.image | null | Launch image. Null in search results. |
machine.first_item.product | object | Product behind the launch: id, name, url, alias, product_id, tagline, rating, review_count, post_count, image, categories and is_no_longer_online. |
machine.items[] | array | Launches 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_launches_search",
"keyword": "crm",
"max_items": 2,
"start_page": 1,
"partial": false,
"human": "# Product Hunt — launches search\n\n- **Query:** keyword=crm\n- **Results:** 2\n- **Proxy traffic:** 237.4 KB",
"machine": {
"total_items": 2,
"first_item": {
"id": "doplac-crm",
"name": "Doplac CRM",
"url": "https://www.producthunt.com/posts/doplac-crm",
"alias": "doplac-crm",
"launch_id": "426271",
"created_at": "2023-11-22T00:01:00-08:00",
"votes_count": null,
"comments_count": null,
"image": null,
"product": {
"id": "doplac-crm",
"name": "Doplac CRM",
"url": "https://www.producthunt.com/products/doplac-crm",
"alias": "doplac-crm",
"product_id": "561231",
"tagline": "Your CRM Partner",
"rating": 5,
"review_count": 7,
"post_count": null,
"image": "https://ph-files.imgix.net/604baef1-62aa-4544-88ba-cf142fecaf05.jpeg?auto=format&fit=crop&w=128&h=128",
"categories": [],
"is_no_longer_online": false
}
},
"items": [
{
"id": "doplac-crm",
"name": "Doplac CRM",
"url": "https://www.producthunt.com/posts/doplac-crm",
"alias": "doplac-crm",
"launch_id": "426271",
"created_at": "2023-11-22T00:01:00-08:00",
"votes_count": null,
"comments_count": null,
"image": null,
"product": {
"id": "doplac-crm",
"name": "Doplac CRM",
"url": "https://www.producthunt.com/products/doplac-crm",
"alias": "doplac-crm",
"product_id": "561231",
"tagline": "Your CRM Partner",
"rating": 5,
"review_count": 7,
"post_count": null,
"image": "https://ph-files.imgix.net/604baef1-62aa-4544-88ba-cf142fecaf05.jpeg?auto=format&fit=crop&w=128&h=128",
"categories": [],
"is_no_longer_online": false
}
},
{
"id": "chartmogul-crm",
"name": "ChartMogul CRM",
"url": "https://www.producthunt.com/posts/chartmogul-crm",
"alias": "chartmogul-crm",
"launch_id": "387373",
"created_at": "2023-04-04T00:42:10-07:00",
"votes_count": null,
"comments_count": null,
"image": null,
"product": {
"id": "chartmogul-crm",
"name": "ChartMogul CRM",
"url": "https://www.producthunt.com/products/chartmogul-crm",
"alias": "chartmogul-crm",
"product_id": "528330",
"tagline": "The first CRM tailor-made for B2B SaaS companies",
"rating": 5,
"review_count": 2,
"post_count": null,
"image": "https://ph-files.imgix.net/c1c1c7ac-ff6c-44ae-aed4-6eca5b44fcba.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": 243121
},
"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-launches-search \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"keyword":"crm","max_items":2}'What teams use it for
Where this field shows up in an actual workflow.
Search a product type and list the launches that match, with product ratings alongside.
Search a name or idea before you launch to see what has already been launched.
Take launch slugs from the results and fetch full details with the launch 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.
- —Votes, comments and image are null in search results; the launch source returns them for one launch.
- —Matching is by keyword on the platform; results are not re-ranked.
- —total_found is null in the sample, so the total number of matches is not reported.
Questions, answered
Search results carry the launch name, date and product only. Run the Product Hunt launch source on a slug for votes, comments and rank.
Related sources
Try product hunt launches search on your own data
One request format across every source in the catalog.