ProductHunt API endpoint
Lists alternatives to a Product Hunt product, looked up by its slug in `id`. `first` sets the page size (default 10), `order` defaults to `most_relevant`, and `tags` takes comma-separated tag slugs. Returns alternative items with ratings, badges and scores, alternative tags with counts, and related discussions. Use `end_cursor` as `cursor` for the next page.
/producthunt/product/{id}/alternativesPath parameters:
id: required. Product Hunt slug. Example: "clico".Query parameters:
first: optional. Page size. Default: 10.cursor: optional. Pagination cursor.order: optional. Sort order. Default: most_relevant.tags: optional. Comma-separated tag slugs.Notable response behavior:
cursor value from a previous response to continue pagination.| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| id | 10 | |
| embedding_score | 10 | 0.78 to 0.83, median 0.8 |
| category_score | 10 | 0.7 to 1, median 0.95 |
| rating_score | 10 | 0 to 1, median 0.3 |
| combined_score | 10 | 4.36 to 4.91, median 4.61 |
| embedding_weight | 10 | 3 |
| category_weight | 10 | 2 |
| rating_weight | 10 | 1 |
| product | 10 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id (path) | string | Yes | Product Hunt slug | "clico" | |
| first | integer | No | Page size | ||
| cursor | string | No | Pagination cursor | ||
| order | string | No | Sort order | ||
| tags | string | No | Comma-separated tag slugs | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/producthunt/product/%22clico%22/alternatives" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"product_id": "1191613",
"slug": "clico",
"name": "Clico",
"followers_count": 577,
"categories": [
"Writing assistants"
],
"alternative_tags": [
{
"name": "chrome extension",
"count": 24
}
]
}
}Request schema
No body schema
Response schema
#/definitions/producthunt.alternativesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | producthunt.ProductAlternativesPage | No | ||||
| data.alternative_tags | array | No | ||||
| data.alternative_tags[].count | integer | No | ||||
| data.alternative_tags[].name | string | No | ||||
| data.alternatives_markdown_description | string | No | ||||
| data.categories | array | No | ||||
| data.discussions | array | No | ProductAlternativeDiscussion record, 20 fields: comments_count, created_at, description_preview, has_voted, id, path, pinned, primary_forum, slug, title, user, votes_count. Described under Product Hunt Category API. | |||
| data.discussions_has_next_page | boolean | No | ||||
| data.end_cursor | string | No | MTA | |||
| data.followers_count | integer | No | 577 | |||
| data.has_next_page | boolean | No | true | |||
| data.items | array | No | ||||
| data.items[].category_score | number | No | ||||
| data.items[].category_weight | number | No | ||||
| data.items[].combined_score | number | No | ||||
| data.items[].embedding_score | number | No | ||||
| data.items[].embedding_weight | number | No | ||||
| data.items[].id | string | No | ||||
| data.items[].product | producthunt.ProductAlternativeProduct | No | ||||
| data.items[].product.badges | array | No | ProductAlternativeBadge record, 6 fields: date, id, period, position, post_name, post_slug. Described under Product Hunt Category API. | |||
| data.items[].product.categories | array | No | ||||
| data.items[].product.followers_count | integer | No | ||||
| data.items[].product.id | string | No | ||||
| data.items[].product.is_subscribed | boolean | No | ||||
| data.items[].product.is_top_product | boolean | No | ||||
| data.items[].product.logo_uuid | string | No | ||||
| data.items[].product.name | string | No | ||||
| data.items[].product.reviews_count | integer | No | ||||
| data.items[].product.reviews_rating | number | No | ||||
| data.items[].product.slug | string | No | ||||
| data.items[].product.structured_data | producthunt.ProductAlternativeStructuredData | No | ||||
| data.items[].product.structured_data.application_category | string | No | Schema.org application category of the product. | |||
| data.items[].product.structured_data.context | string | No | Schema.org context URL of the product's structured data block. | |||
| data.items[].product.structured_data.date_modified | string | No | Date the product page was last modified. | |||
| data.items[].product.structured_data.date_published | string | No | Date the product was published on Product Hunt. | |||
| data.items[].product.structured_data.description | string | No | Product description as given in its structured data. | |||
| data.items[].product.structured_data.id | string | No | Identifier of the product in its structured data block. | |||
| data.items[].product.structured_data.image | string | No | URL of the product's main image. | |||
| data.items[].product.structured_data.name | string | No | Product name as given in its structured data. | |||
| data.items[].product.structured_data.operating_system | string | No | Operating systems the product runs on, as listed in its structured data. | |||
| data.items[].product.structured_data.screenshot | array | No | URLs of the product's screenshots. | |||
| data.items[].product.structured_data.url | string | No | Product Hunt page URL of the product. | |||
| data.items[].product.tagline | string | No | ||||
| data.items[].product.tags | array | No | ||||
| data.items[].rating_score | number | No | ||||
| data.items[].rating_weight | number | No | ||||
| data.name | string | No | Clico | |||
| data.product_id | string | No | 1191613 | |||
| data.slug | string | No | clico | |||
| data.total_count | integer | No | 50 | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Missing or invalid parameters | #/definitions/app.Response |
| 404 | Product 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/product/%22clico%22/alternatives" \
-H "x-api-key: $CRAWLORA_API_KEY"