Product Hunt API — Collections Search
Documentation menu
FetchLayer FetchLayer API

Search or browse collections

Search Product Hunt collections by name, or omit the query to browse the newest ones. Each collection carries its curator, how many products it holds, and a short preview of what is inside — a ready-made, human-curated shortlist of products in one theme.

POST /collections Discovery
https://api.fetchlayer.dev/producthunt/collections
OpenAPI JSON

Headers

Authorization string required

Bearer token — your FetchLayer API key.

Parameters

query string optional

Search collections by name. Omit to browse the newest ones.

limit number optional

Maximum collections returned (max 200), or -1 for everything available. (default: 20)

pages number optional

Pages of results to collect in one request (max 100), or -1 for the maximum allowed. Each page walked counts as one request. (default: 1)

cursor string optional

Resume from a previous response's nextCursor.

delayMs number optional

Milliseconds to wait between pages (max 30000).

format string optional

json or markdown. Markdown returns the same result rendered as text. (default: json)

timeoutMs number optional

Per-request time limit in milliseconds (max 600000).

Response Fields

collections

Search or browse collections

query string | null

The search term, or null when browsing.

collections object[]

The matching collections.

collections[].name string | null

Collection name, with title alongside it.

collections[].description string | null

What the curator says the collection is for.

collections[].url string | null

Public Product Hunt page for the collection.

collections[].productsCount number | null

How many products the collection holds.

collections[].curator object | null

Who maintains it.

collections[].products object[]

A short preview of what the collection holds — names and logos.

collectionCount number

Number of collections in this response.

pagesScraped number

Pages actually collected. Each page counts as one request against your plan.

pagesRequested number

Pages the request asked for.

nextCursor string | null

Pass back as cursor to continue, or null when the listing is exhausted.

hasNextPage boolean

Whether more results are available beyond this response.

requestedUrl string

The Product Hunt page this result corresponds to.

scrapedAt string

ISO timestamp the result was collected at.

notes string[]

Read this. Caveats about this specific result — a walk that stopped early, an upstream ceiling, or promoted entries that were dropped. An empty array means nothing was held back.

blocked boolean

Always false on a successful response.

Request

curl -X POST "https://api.fetchlayer.dev/producthunt/collections" \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"query":"design tools","limit":20}'

Response

{
  "query": "design tools",
  "collectionCount": 20,
  "hasNextPage": true,
  "notes": [],
  "collections": [
    {
      "name": "Design tools I actually use",
      "productsCount": 34,
      "curator": {
        "username": "maya"
      }
    }
  ]
}