ProductHunt API endpoint

Retrieve Product Hunt product launches

Returns paginated launch posts for a Product Hunt product using Product Hunt's ProductPageLaunches GraphQL operation.

GETapiKey2 credits/requestproducthunt.launchesResponseDoc/producthunt/product/{id}/launches

Parameters

NameInTypeRequiredEnumExampleDescription
idpathstringYes"openai"Product Hunt slug
cursorquerystringNoPagination cursor
orderquerystringNoDATEProduct Hunt launch order
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
2 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

- Returns `404` when Product Hunt does not return a product for the slug. - Returns `502` when Product Hunt omits the launches/posts connection or returns a blocked/malformed upstream payload.

Failure responses

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

Example response

{
  "code": 200,
  "msg": "OK",
  "data": {
    "product_id": "594550",
    "slug": "openai",
    "name": "OpenAI",
    "order": "DATE",
    "connection": "posts",
    "total_count": 2,
    "end_cursor": "cursor-1",
    "has_next_page": true,
    "items": [
      {
        "id": "1087490",
        "slug": "openai-o3",
        "name": "OpenAI o3",
        "tagline": "A reasoning model",
        "daily_rank": 1,
        "comments_count": 12
      }
    ]
  }
}

Request schema

No body schema

Response schema

#/definitions/producthunt.launchesResponseDoc

FieldTypeRequiredEnumBoundsExampleDescription
codeintegerNo200
dataproducthunt.ProductLaunchesPageNo
data.connectionstringNoposts
data.end_cursorstringNo
data.has_next_pagebooleanNo
data.itemsarrayNo
data.items[].badgesarrayNo
data.items[].badges[].categorystringNo
data.items[].badges[].datestringNo
data.items[].badges[].idstringNo
data.items[].badges[].periodstringNo
data.items[].badges[].positionintegerNo
data.items[].badges[].post_idstringNo
data.items[].badges[].post_namestringNo
data.items[].badges[].post_slugstringNo
data.items[].badges[].yearstringNo
data.items[].comments_countintegerNo
data.items[].created_atstringNo
data.items[].daily_rankintegerNo
data.items[].disabled_when_scheduledbooleanNo
data.items[].embargo_preview_atstringNo
data.items[].featured_atstringNo
data.items[].has_votedbooleanNo
data.items[].hide_votes_countbooleanNo
data.items[].idstringNo
data.items[].latest_scoreintegerNo
data.items[].launch_day_scoreintegerNo
data.items[].monthly_rankintegerNo
data.items[].namestringNo
data.items[].productproducthunt.LeaderboardProductRefNo
data.items[].product.idstringNo
data.items[].product.is_no_longer_onlinebooleanNo
data.items[].product.is_subscribedbooleanNo
data.items[].product.is_top_productbooleanNo
data.items[].product.logo_uuidstringNo
data.items[].product.namestringNo
data.items[].product.slugstringNo
data.items[].product_statestringNo
data.items[].randomization_statusproducthunt.LeaderboardRandomizationStatusNo
data.items[].randomization_status.activebooleanNo
data.items[].randomization_status.next_transition_atstringNo
data.items[].randomization_status.random_daybooleanNo
data.items[].randomization_status.randomize_orderbooleanNo
data.items[].redirect_to_productproducthunt.LeaderboardProductRefNo
data.items[].redirect_to_product.idstringNo
data.items[].redirect_to_product.is_no_longer_onlinebooleanNo
data.items[].redirect_to_product.is_subscribedbooleanNo
data.items[].redirect_to_product.is_top_productbooleanNo
data.items[].redirect_to_product.logo_uuidstringNo
data.items[].redirect_to_product.namestringNo
data.items[].redirect_to_product.slugstringNo
data.items[].shortened_urlstringNo
data.items[].slugstringNo
data.items[].taglinestringNo
data.items[].thumbnail_image_uuidstringNo
data.items[].updated_atstringNo
data.items[].weekly_rankintegerNo
data.namestringNoOpenAI
data.orderstringNoDATE
data.product_idstringNo1191613
data.raw_page_infoobjectNo
data.slugstringNoopenai
data.total_countintegerNo12
msgstringNoOK

Example request

curl -X GET "https://api.crawlora.net/api/v1/producthunt/product/%22openai%22/launches?order=DATE" -H "x-api-key: <api-key>"

TypeScript fetch

const url = new URL("https://api.crawlora.net/api/v1/producthunt/product/%22openai%22/launches");
url.searchParams.set("order", "DATE");
const headers = new Headers();
headers.set("x-api-key", "<api-key>");
const response = await fetch(url, {
  method: "GET",
  headers,
});
const payload = await response.json();