ProductHunt API endpoint

Search for products, users, or launches on Product Hunt

Performs a full-text Product Hunt search and returns matching products, users, or launches.

GETapiKey3 credits/requestproducthunt.searchResponseDoc/producthunt/search

Parameters

NameInTypeRequiredEnumExampleDescription
queryquerystringYes"ai"Search keywords
typequerystringNoproduct, user, launchResult type: **product** (default), **user**, or **launch**
pagequeryintegerNo2Page number (1-based)
featuredquerybooleanNoLaunch search only: featured launches only
topicsquerystringNoai-chatbots,chrome-extensionsLaunch search only: comma-separated topic slugs
x-api-keyheaderstringYesAPI key required

Authentication

Send your scraping API key in the x-api-key header. Use the console API Keys page to rotate or select the active key.

Billing

Endpoint usage is metered in credits. The plan prices, included credits, limits, and overage rates below match the active backend billing configuration.

Credit cost
3 credits/request
Charged response
Successful 2xx responses
PlanPriceIncluded creditsDaily capRate limitOverage
Free$0/mo2,000500 daily credits5/minNo overage
Starter$9/mo20,0005,000 daily credits15/min$0.75/1,000 overage credits when enabled
Growth$29/mo100,00025,000 daily credits45/min$0.45/1,000 overage credits when enabled
Pro$79/mo400,000No daily cap120/min$0.30/1,000 overage credits
Business$199/mo1,200,000No daily cap300/min$0.20/1,000 overage credits
Enterprise$499/mo5,000,000No daily cap1,000/min$0.12/1,000 overage credits

Response behavior

- The `data` shape depends on `type`: `product` returns product edges, `user` returns user edges, and `launch` returns post edges plus topic aggregations. Example response: ```json { "code": 200, "msg": "OK", "data": { "edges": [ { "node": { "id": "1050265", "name": "HeroUI Chat", "tagline": "Build and ship beautiful UIs with AI and HeroUI", "slug": "heroui-chat", "reviewsRating": 4.8, "reviewsCount": 5 } } ], "pageInfo": { "page": 1, "hasPreviousPage": false, "hasNextPage": true }, "pagesCount": 394 } } ```

Failure responses

StatusDescriptionSchema
400Missing or invalid parameters#/definitions/app.Response
404No results found#/definitions/app.Response
429Rate limit exceeded#/definitions/app.Response
500Internal server error#/definitions/app.Response

Example response

{
  "code": 200,
  "msg": "OK",
  "data": {
    "edges": [
      {
        "node": {
          "id": "1050265",
          "name": "HeroUI Chat",
          "tagline": "Build and ship beautiful UIs with AI and HeroUI",
          "slug": "heroui-chat",
          "reviewsRating": 4.8,
          "reviewsCount": 5
        }
      }
    ],
    "pageInfo": {
      "page": 1,
      "hasPreviousPage": false,
      "hasNextPage": true
    },
    "pagesCount": 394
  }
}

Request schema

No body schema

Response schema

#/definitions/producthunt.searchResponseDoc

FieldTypeRequiredEnumBoundsExampleDescription
codeintegerNo200
dataproducthunt.searchDataDocNo
data.aggregationsproducthunt.searchAggregationsDocNo
data.aggregations.topicsarrayNo
data.aggregations.topics[].countintegerNo11979
data.aggregations.topics[].topicobjectNo
data.aggregations.topics[].topic.idstringNo268
data.aggregations.topics[].topic.namestringNoArtificial Intelligence
data.edgesarrayNo
data.edges[].nodeobjectNo
data.pageInfoproducthunt.searchPageInfoDocNo
data.pageInfo.hasNextPagebooleanNo
data.pageInfo.hasPreviousPagebooleanNo
data.pageInfo.pageintegerNo1
data.pagesCountintegerNo394
msgstringNoOK

Example request

curl -X GET "https://api.crawlora.net/api/v1/producthunt/search?query=%22ai%22&page=2&topics=ai-chatbots%2Cchrome-extensions" -H "x-api-key: <api-key>"

TypeScript fetch

const url = new URL("https://api.crawlora.net/api/v1/producthunt/search");
url.searchParams.set("query", "\"ai\"");
url.searchParams.set("page", "2");
url.searchParams.set("topics", "ai-chatbots,chrome-extensions");
const headers = new Headers();
headers.set("x-api-key", "<api-key>");
const response = await fetch(url, {
  method: "GET",
  headers,
});
const payload = await response.json();