ProductHunt API endpoint
Returns the products in a Product Hunt category (now backed by Product Hunt topics), cursor-paginated. Pass the `cursor` from a previous response's `end_cursor` to page; `page_size` controls the batch size. `page`, `featured_only`, `order` and `tags` are accepted for compatibility but no longer affect the result.
/producthunt/category/{slug}/productsReturns the paginated category listing payload for a Product Hunt category slug.
Path parameters:
slug: required. Product Hunt category slug. Example: "vibe-coding".Query parameters:
featured_only: optional. Featured products only. Default: true.order: optional. Sort order. Default: highest_rated.page: optional. Page number (1-based). Default: 1.page_size: optional. Page size. Default: 15.tags: optional. Comma-separated category tags.| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| id | 20 | |
| detailed_reviews_count | 20 | 0 to 961, median 14 |
| posts_count | 20 | 6 to 541, median 11 |
| latest_launch | 20 | |
| slug | 20 | |
| name | 20 | “Google” and 19 other values |
| tagline | 20 | “Organizing the world's information” and 19 other values |
| logo_uuid | 20 | |
| reviews_rating | 20 | 0 to 5, median 4.71 |
| reviews_count | 20 | 0 to 961, median 14 |
| tags | 20 | median 20 entries |
| is_top_product | 20 | true in 0 of 20 |
| followers_count | 20 | 105 to 67,717, median 2,013 |
| is_subscribed | 20 | true in 0 of 20 |
| is_no_longer_online | 20 | true in 0 of 20 |
| founder_reviews_count | 20 | 0 to 901, median 5 |
| categories | 18 | median 2 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| slug (path) | string | Yes | Product Hunt category slug | "developer-tools" | |
| cursor | string | No | Pagination cursor from a previous response's end_cursor | ||
| page_size | integer | No | Page size (number of products) | ||
| featured_only | boolean | No | Accepted for compatibility; no longer affects results | ||
| order | string | No | Accepted for compatibility; no longer affects results | ||
| page | integer | No | Accepted for compatibility; use cursor to paginate | ||
| tags | string | No | Accepted for compatibility; no longer affects results | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/producthunt/category/%22developer-tools%22/products?featured_only=true&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"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
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | producthunt.ProductCategoryProductsPage | No | ||||
| data.ai_summary | string | No | ||||
| data.category_tags | array | No | ||||
| data.category_tags[].count | integer | No | ||||
| data.category_tags[].name | string | No | ||||
| data.connection | string | No | products | |||
| data.description | string | No | ||||
| data.end_cursor | string | No | ||||
| data.featured_only | boolean | No | ||||
| data.has_next_page | boolean | No | ||||
| data.has_previous_page | boolean | No | ||||
| data.id | string | No | ||||
| data.items | array | No | ProductCategoryListProduct record, 66 fields: badges, categories, detailed_reviews_count, followers_count, founder_reviews_count, founder_shoutouts, id, is_no_longer_online, is_subscribed, is_top_product, latest_launch, logo_uuid and 8 more. Described under Product Hunt Product Customers API. | |||
| data.last_updated_at | string | No | ||||
| data.name | string | No | ||||
| data.order | string | No | highest_rated | |||
| data.page | integer | No | 1 | |||
| data.page_size | integer | No | 15 | |||
| data.path | string | No | /categories/vibe-coding | |||
| data.slug | string | No | vibe-coding | |||
| data.tags | array | No | ||||
| data.total_count | integer | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Missing or invalid parameters | #/definitions/app.Response |
| 404 | Category not found | #/definitions/app.Response |
| 429 | Rate limit exceeded | #/definitions/app.Response |
| 500 | Internal server error | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/producthunt/category/%22developer-tools%22/products?featured_only=true&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"