nvNeuralVerge
Startup & Funding Data

Product Hunt Collections Search API and MCP — Find Curated Lists by Keyword

Send a keyword such as design, or leave it out to browse collections page by page, and get matching collections back as JSON: name, link, collection id, title, description, how many products it holds and the user who curates it.

You send
an optional keyword, a max_items cap (up to 250) and optionally a start page
You get back
collections with title, description, number of products and the user who curates 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.
Comparison

Ways to get this data

Three approaches teams use today, and where each one runs into trouble.

ApproachWhat it takesCostTrade-off
Product Hunt directlyType the query into Product Hunt and read the resultsFree, and slowFine for one record, useless across a list, and the layout differs on every platform
Building a scraperWrite it, host it, and repair it when Product Hunt changes its pagesEngineering timeA maintenance commitment for something that isn't your product
NeuralVergeOne request, the same shape as every other source in the catalog$1 per 1,000, misses not billedReturns what Product Hunt publishes at request time. Other platforms are separate sources with the same request format
Response

What you get back

Every field in the example response below.

FieldTypeDescription
session_idstringId of this run, for tracing.
kindstringSource type of the response.
max_itemsnumberThe cap on returned records, as run.
start_pagenumberPage the run started from.
partialbooleanTrue when the run stopped before reaching max_items.
humanstringReadable summary: the query, how many results came back and how many were found.
total_pointsnumberPoints charged for the run.
machine.total_itemsnumberNumber of collections returned in this response.
machine.total_foundnullTotal matches reported by the platform, when it reports one. Null in the sample.
machine.first_item.idstringCollection path as Product Hunt uses it.
machine.first_item.namestringCollection name.
machine.first_item.urlstringLink to the collection.
machine.first_item.collection_idstringNumeric collection id, as a string.
machine.first_item.titlestringCollection title line.
machine.first_item.descriptionstringCollection description.
machine.first_item.products_countnumberNumber of products in the collection.
machine.first_item.userobjectCurator: id, name, username, url, headline and image.
machine.items[]arrayCollections returned, same shape as first_item.
machine.page_countnumberPages read for the run.
machine.blockedbooleanWhether the platform refused the request.
machine.proxy_traffic_bytesnumberSize of the data transferred for the run, in bytes.
Response

Example response

A real response, as returned.

{
  "session_id": "11111111-1111-1111-1111-111111111111",
  "kind": "producthunt_collections_search",
  "max_items": 2,
  "start_page": 1,
  "partial": false,
  "human": "# Product Hunt — collections\n\n- **Query:** all\n- **Results:** 2\n- **Proxy traffic:** 13.8 KB",
  "machine": {
    "total_items": 2,
    "first_item": {
      "id": "@rrhoover/collections/_-_",
      "name": "¯\\_(ツ)_/¯",
      "url": "https://www.producthunt.com/@rrhoover/collections/_-_",
      "collection_id": "56173",
      "title": "Express yourself with old-school ASCII emoticons",
      "description": "Express yourself with old-school ASCII emoticons",
      "products_count": 11,
      "user": {
        "id": "rrhoover",
        "name": "Ryan Hoover",
        "username": "rrhoover",
        "url": "https://www.producthunt.com/@rrhoover",
        "headline": null,
        "image": "https://ph-avatars.imgix.net/2/original.jpeg"
      }
    },
    "items": [
      {
        "id": "@rrhoover/collections/_-_",
        "name": "¯\\_(ツ)_/¯",
        "url": "https://www.producthunt.com/@rrhoover/collections/_-_",
        "collection_id": "56173",
        "title": "Express yourself with old-school ASCII emoticons",
        "description": "Express yourself with old-school ASCII emoticons",
        "products_count": 11,
        "user": {
          "id": "rrhoover",
          "name": "Ryan Hoover",
          "username": "rrhoover",
          "url": "https://www.producthunt.com/@rrhoover",
          "headline": null,
          "image": "https://ph-avatars.imgix.net/2/original.jpeg"
        }
      },
      {
        "id": "collections/0-design-tools",
        "name": "$0 Design Tools",
        "url": "https://www.producthunt.com/collections/0-design-tools",
        "collection_id": "183205",
        "title": "A collection of $0 Design Tools to Help You Create Your Next Project",
        "description": "A collection of $0 Design Tools to Help You Create Your Next Project",
        "products_count": 122,
        "user": {
          "id": "producthunt",
          "name": "Product Hunt",
          "username": "producthunt",
          "url": "https://www.producthunt.com/@producthunt",
          "headline": null,
          "image": "https://ph-avatars.imgix.net/92/original.jpeg"
        }
      }
    ],
    "total_found": null,
    "page_count": 1,
    "blocked": false,
    "proxy_traffic_bytes": 14157
  },
  "total_points": 2
}
Integration

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-search \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"max_items":2}'
Use cases

What teams use it for

Where this field shows up in an actual workflow.

Find curated lists in a niche

Search a keyword to see which collections already group the products you care about.

Spot active curators

Read which accounts maintain large collections on a topic.

Seed a product read

Take collection slugs from the results and read their products with the collection products source.

Coverage & limits

Coverage, freshness and limits

What this source covers, how fresh it is, and where it stops.

Coverage

Product Hunt records with a public page.

Freshness

Read at request time, so the answer reflects the platform as it stands when you ask.

Handling

This source returns information Product Hunt shows publicly. Every response carries the session id you can trace.

What it will not do
  • —Without a keyword the source returns collections page by page rather than a ranked search.
  • —Each collection lists the name and username of the person who curates it. Use that for attribution of the list, and handle personal data in line with your own obligations.
  • —total_found is null in the sample, so the total number of matches is not reported.
FAQ

Questions, answered

No. Leave it out to browse collections page by page.

Related

Related sources

Try product hunt collections search on your own data

One request format across every source in the catalog.

Get started