ProductHunt API endpoint

Retrieve Product Hunt product customers

Returns paginated customer products for a Product Hunt product using Product Hunt's ProductCustomersPage GraphQL operation.

GETapiKey2 credits/requestproducthunt.customersResponseDoc/producthunt/product/{id}/customers

Parameters

NameInTypeRequiredEnumExampleDescription
idpathstringYes"openai"Product Hunt slug
orderquerystringNocustomers, latest_launchProduct Hunt customers order
pagequeryintegerNoPage number
page_sizequeryintegerNoResults per page
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 customers/products 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": "customers",
    "page": 1,
    "page_size": 10,
    "connection": "customers",
    "total_count": 120,
    "pages_count": 12,
    "has_previous_page": false,
    "has_next_page": true,
    "items": [
      {
        "id": "1192159",
        "slug": "sheet-ninja-2",
        "name": "Sheet Ninja",
        "tagline": "Ship vibe-coded apps. Your data stays in Google Sheets.",
        "reviews_rating": 4.8,
        "reviews_count": 42
      }
    ]
  }
}

Request schema

No body schema

Response schema

#/definitions/producthunt.customersResponseDoc

FieldTypeRequiredEnumBoundsExampleDescription
codeintegerNo200
dataproducthunt.ProductCustomersPageNo
data.connectionstringNocustomers
data.end_cursorstringNo
data.has_next_pagebooleanNo
data.has_previous_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[].categoriesarrayNo
data.items[].categories[].idstringNo
data.items[].categories[].namestringNo
data.items[].categories[].pathstringNo
data.items[].categories[].slugstringNo
data.items[].detailed_reviews_countintegerNo
data.items[].followers_countintegerNo
data.items[].founder_reviews_countintegerNo
data.items[].founder_shoutoutsarrayNo
data.items[].founder_shoutouts[].from_postproducthunt.ProductCategoryFounderPostNo
data.items[].founder_shoutouts[].from_post.badgesarrayNo
data.items[].founder_shoutouts[].from_post.badges[].categorystringNo
data.items[].founder_shoutouts[].from_post.badges[].datestringNo
data.items[].founder_shoutouts[].from_post.badges[].idstringNo
data.items[].founder_shoutouts[].from_post.badges[].periodstringNo
data.items[].founder_shoutouts[].from_post.badges[].positionintegerNo
data.items[].founder_shoutouts[].from_post.badges[].post_idstringNo
data.items[].founder_shoutouts[].from_post.badges[].post_namestringNo
data.items[].founder_shoutouts[].from_post.badges[].post_slugstringNo
data.items[].founder_shoutouts[].from_post.badges[].yearstringNo
data.items[].founder_shoutouts[].from_post.idstringNo
data.items[].founder_shoutouts[].from_post.namestringNo
data.items[].founder_shoutouts[].from_post.product_idstringNo
data.items[].founder_shoutouts[].from_post.product_slugstringNo
data.items[].founder_shoutouts[].from_post.product_statestringNo
data.items[].founder_shoutouts[].from_post.slugstringNo
data.items[].founder_shoutouts[].from_post.thumbnail_image_uuidstringNo
data.items[].founder_shoutouts[].idstringNo
data.items[].founder_shoutouts[].product_idstringNo
data.items[].idstringNo
data.items[].is_no_longer_onlinebooleanNo
data.items[].is_subscribedbooleanNo
data.items[].is_top_productbooleanNo
data.items[].latest_launchproducthunt.ProductCategoryLatestLaunchNo
data.items[].latest_launch.idstringNo
data.items[].latest_launch.scheduled_atstringNo
data.items[].logo_uuidstringNo
data.items[].namestringNo
data.items[].posts_countintegerNo
data.items[].reviews_countintegerNo
data.items[].reviews_ratingnumberNo
data.items[].slugstringNo
data.items[].structured_dataproducthunt.ProductAlternativeStructuredDataNo
data.items[].structured_data.application_categorystringNo
data.items[].structured_data.contextstringNo
data.items[].structured_data.date_modifiedstringNo
data.items[].structured_data.date_publishedstringNo
data.items[].structured_data.descriptionstringNo
data.items[].structured_data.idstringNo
data.items[].structured_data.imagestringNo
data.items[].structured_data.namestringNo
data.items[].structured_data.operating_systemstringNo
data.items[].structured_data.screenshotarrayNo
data.items[].structured_data.urlstringNo
data.items[].taglinestringNo
data.items[].tagsarrayNo
data.namestringNoOpenAI
data.orderstringNocustomers
data.pageintegerNo1
data.page_sizeintegerNo10
data.pages_countintegerNo12
data.product_idstringNo594550
data.raw_page_infoobjectNo
data.slugstringNoopenai
data.total_countintegerNo120
msgstringNoOK

Example request

curl -X GET "https://api.crawlora.net/api/v1/producthunt/product/%22openai%22/customers" -H "x-api-key: <api-key>"

TypeScript fetch

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