ProductHunt API endpoint

Retrieve Product Hunt category products

Returns the paginated category listing payload for a Product Hunt category slug.

GETapiKey2 credits/requestproducthunt.categoryProductsResponseDoc/producthunt/category/{slug}/products

Parameters

NameInTypeRequiredEnumExampleDescription
slugpathstringYes"vibe-coding"Product Hunt category slug
featured_onlyquerybooleanNoFeatured products only
orderquerystringNoSort order
pagequeryintegerNoPage number (1-based)
page_sizequeryintegerNoPage size
tagsquerystringNoComma-separated category tags
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

Failure responses

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

Example response

{
  "code": 200,
  "msg": "OK",
  "data": {
    "id": "1585",
    "slug": "vibe-coding",
    "path": "/categories/vibe-coding",
    "name": "Vibe Coding Tools",
    "featured_only": true,
    "order": "highest_rated",
    "page": 1,
    "page_size": 15,
    "ai_summary": "In this set, the strongest split is between code-first assistants, full-stack app generators, and design-led prototyping...",
    "category_tags": [
      {
        "name": "artificial intelligence",
        "count": 60
      }
    ],
    "total_count": 79,
    "end_cursor": "MTU",
    "has_previous_page": false,
    "has_next_page": true,
    "items": [
      {
        "id": "597151",
        "slug": "cursor",
        "name": "Cursor",
        "tagline": "The AI Code Editor",
        "reviews_rating": 4.96,
        "reviews_count": 826,
        "followers_count": 40383,
        "latest_launch": {
          "id": "1102589",
          "scheduled_at": "2026-03-20T00:01:00-07:00"
        },
        "categories": [
          {
            "id": "75",
            "name": "Code editors",
            "path": "/categories/code-editors",
            "slug": "code-editors"
          }
        ]
      }
    ]
  }
}

Request schema

No body schema

Response schema

#/definitions/producthunt.categoryProductsResponseDoc

FieldTypeRequiredEnumBoundsExampleDescription
codeintegerNo200
dataproducthunt.ProductCategoryProductsPageNo
data.ai_summarystringNo
data.category_tagsarrayNo
data.category_tags[].countintegerNo
data.category_tags[].namestringNo
data.connectionstringNoproducts
data.descriptionstringNo
data.end_cursorstringNo
data.featured_onlybooleanNo
data.has_next_pagebooleanNo
data.has_previous_pagebooleanNo
data.idstringNo
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.last_updated_atstringNo
data.namestringNo
data.orderstringNohighest_rated
data.pageintegerNo1
data.page_sizeintegerNo15
data.pathstringNo/categories/vibe-coding
data.slugstringNovibe-coding
data.tagsarrayNo
data.total_countintegerNo
msgstringNoOK

Example request

curl -X GET "https://api.crawlora.net/api/v1/producthunt/category/%22vibe-coding%22/products" -H "x-api-key: <api-key>"

TypeScript fetch

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