ProductHunt API endpoint
Lists the detailed reviews of a Product Hunt product, looked up by its slug in `id`. Each review has its ratings, such as ease of use and customization, comment count, creation time, the launch it came from and any alternative products named. The response also gives the review counts and an `end_cursor`.
/producthunt/product/{id}/reviewsPath parameters:
id: required. Product Hunt slug. Example: "clico".| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| id | 10 | |
| review_type | 10 | |
| status | 10 | |
| overall_rating | 10 | 5 |
| alternatives_feedback | 10 | |
| created_at | 10 | 2026-09-24 to 2026-10-07 |
| user | 10 | |
| from_post | 10 | |
| product | 10 | |
| comments_count | 10 | 0 |
| threads_total_count | 10 | 0 |
| threads_has_next_page | 10 | |
| has_voted | 10 | true in 0 of 10 |
| votes_count | 10 | 0 |
| can_reply | 10 | true in 0 of 10 |
| can_update | 10 | true in 0 of 10 |
| can_destroy | 10 | true in 0 of 10 |
| is_hidden | 10 | true in 0 of 10 |
| can_moderate | 10 | true in 0 of 10 |
| impression_count | 10 | 0 to 2, median 0 |
| alternative_products | 1 | median 2 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id (path) | string | Yes | Product Hunt slug | "clico" | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/producthunt/product/%22clico%22/reviews" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"product_id": "1191613",
"slug": "clico",
"connection": "authoredDetailedReviews",
"total_count": 6,
"end_cursor": "Ng",
"has_next_page": false
}
}Request schema
No body schema
Response schema
#/definitions/producthunt.reviewsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | producthunt.ProductDetailedReviewsPage | No | ||||
| data.connection | string | No | detailedReviews | Kind of list the items come from, for example `detailedReviews`. | ||
| data.detailed_review | object | No | A single detailed review attached to the product, as Product Hunt returns it. Omitted when none. | |||
| data.detailed_reviews_count | integer | No | Total number of detailed reviews the product has. | |||
| data.end_cursor | string | No | Cursor of the last review on this page. Omitted when Product Hunt returns none. | |||
| data.founder_detailed_reviews_count | integer | No | Number of detailed reviews written by the product's founders. | |||
| data.has_next_page | boolean | No | false | Whether another page of reviews follows this one. | ||
| data.is_maker | boolean | No | Whether the requesting viewer is a maker of the product. | |||
| data.is_trashed | boolean | No | Whether the product has been removed from Product Hunt. | |||
| data.items | array | No | Detailed reviews of the product, one per entry. | |||
| data.items[].alternative_products | array | No | Products the reviewer names as alternatives. | |||
| data.items[].alternative_products[].id | string | No | Product Hunt id of the product. | |||
| data.items[].alternative_products[].is_no_longer_online | boolean | No | Whether Product Hunt marks the product as no longer online. | |||
| data.items[].alternative_products[].logo_uuid | string | No | Identifier of the product's logo image file. | |||
| data.items[].alternative_products[].name | string | No | Name of the product as shown on Product Hunt. | |||
| data.items[].alternative_products[].slug | string | No | URL slug of the product on Product Hunt. | |||
| data.items[].alternatives_feedback | string | No | Reviewer's free-text comments on alternatives to the product. | |||
| data.items[].can_destroy | boolean | No | Whether the requesting viewer can delete the review. | |||
| data.items[].can_moderate | boolean | No | Whether the requesting viewer can moderate the review. | |||
| data.items[].can_reply | boolean | No | Whether the requesting viewer can reply to the review. | |||
| data.items[].can_update | boolean | No | Whether the requesting viewer can edit the review. | |||
| data.items[].comments_count | integer | No | Number of comments on the review. | |||
| data.items[].created_at | string | No | Time the review was written. | |||
| data.items[].customization_rating | integer | No | Reviewer's rating for customization. Omitted when the reviewer gave none. | |||
| data.items[].ease_of_use_rating | integer | No | Reviewer's rating for ease of use. Omitted when the reviewer gave none. | |||
| data.items[].follow_product | object | No | The reviewed product with the viewer's follow state. | |||
| data.items[].follow_product.id | string | No | Product Hunt id of the product. | |||
| data.items[].follow_product.is_no_longer_online | boolean | No | Whether Product Hunt marks the product as no longer online. | |||
| data.items[].follow_product.is_subscribed | boolean | No | Whether the requesting viewer follows the product. | |||
| data.items[].follow_product.logo_uuid | string | No | Identifier of the product's logo image file. | |||
| data.items[].follow_product.name | string | No | Name of the product as shown on Product Hunt. | |||
| data.items[].follow_product.slug | string | No | URL slug of the product on Product Hunt. | |||
| data.items[].from_post | object | No | Launch post the review was written from. | |||
| data.items[].from_post.badges | array | No | Badges the launch post has earned. | |||
| data.items[].from_post.badges[].category | string | No | Award category of the badge, for example `Product of the Year`. Omitted for daily and weekly badges. | |||
| data.items[].from_post.badges[].date | string | No | Date the badge refers to. | |||
| data.items[].from_post.badges[].id | string | No | Product Hunt id of the badge. | |||
| data.items[].from_post.badges[].period | string | No | Period the badge covers, for example `daily` or `weekly`. | |||
| data.items[].from_post.badges[].position | integer | No | Rank the product placed at for this badge. | |||
| data.items[].from_post.badges[].post_id | string | No | Product Hunt id of the launch post the badge was earned on. | |||
| data.items[].from_post.badges[].post_name | string | No | Name of the launch post the badge was earned on. | |||
| data.items[].from_post.badges[].post_slug | string | No | URL slug of the launch post the badge was earned on. | |||
| data.items[].from_post.badges[].year | string | No | Year of the award the badge belongs to. | |||
| data.items[].from_post.id | string | No | Product Hunt id of the launch post. | |||
| data.items[].from_post.is_top_launch | boolean | No | Whether Product Hunt flags the post as a top launch. | |||
| data.items[].from_post.latest_score | integer | No | Latest vote score of the launch post. | |||
| data.items[].from_post.name | string | No | Name of the launch post. | |||
| data.items[].from_post.product_id | string | No | Product Hunt id of the product the post belongs to. | |||
| data.items[].from_post.product_is_top_product | boolean | No | Whether Product Hunt flags the product as a top product. | |||
| data.items[].from_post.product_slug | string | No | URL slug of the product the post belongs to. | |||
| data.items[].from_post.product_state | string | No | State of the product on Product Hunt, for example `default`. | |||
| data.items[].from_post.slug | string | No | URL slug of the launch post. | |||
| data.items[].from_post.thumbnail_image_uuid | string | No | Identifier of the launch post's thumbnail image file. | |||
| data.items[].has_voted | boolean | No | Whether the requesting viewer has upvoted the review. | |||
| data.items[].id | string | No | Product Hunt id of the review. | |||
| data.items[].impression_count | integer | No | Number of times the review has been shown. | |||
| data.items[].is_hidden | boolean | No | Whether the review is hidden on Product Hunt. | |||
| data.items[].llm_content_quality_grade | string | No | Quality grade Product Hunt assigned to the review text. Omitted when none is given. | |||
| data.items[].llm_content_quality_reason | string | No | Reason given for the review's quality grade. Omitted when none is given. | |||
| data.items[].negative_feedback | string | No | Reviewer's free-text comments on what they disliked. | |||
| data.items[].overall_experience | string | No | Reviewer's free-text summary of their overall experience. | |||
| data.items[].overall_rating | integer | No | Reviewer's overall rating of the product. | |||
| data.items[].positive_feedback | string | No | Reviewer's free-text comments on what they liked. | |||
| data.items[].product | object | No | Product the review is about. | |||
| data.items[].product.id | string | No | Product Hunt id of the product. | |||
| data.items[].product.is_no_longer_online | boolean | No | Whether Product Hunt marks the product as no longer online. | |||
| data.items[].product.logo_uuid | string | No | Identifier of the product's logo image file. | |||
| data.items[].product.name | string | No | Name of the product as shown on Product Hunt. | |||
| data.items[].product.slug | string | No | URL slug of the product on Product Hunt. | |||
| data.items[].question_answers | array | No | Reviewer's answers to Product Hunt's review questions. | |||
| data.items[].question_answers[].answer | string | No | Reviewer's answer to the question. | |||
| data.items[].question_answers[].id | string | No | Product Hunt id of the answer. | |||
| data.items[].question_answers[].question | string | No | Text of the review question. | |||
| data.items[].question_answers[].question_id | string | No | Product Hunt id of the review question. | |||
| data.items[].reliability_rating | integer | No | Reviewer's rating for reliability. Omitted when the reviewer gave none. | |||
| data.items[].review_type | string | No | Kind of review, for example `founder` or `personal`. | |||
| data.items[].selected_cons | array | No | Downsides the reviewer picked from Product Hunt's tag list. | |||
| data.items[].selected_cons[].count | integer | No | Number of reviewers who picked this tag for the product. | |||
| data.items[].selected_cons[].id | string | No | Product Hunt id of the tag. | |||
| data.items[].selected_cons[].name | string | No | Text of the tag as shown on Product Hunt. | |||
| data.items[].selected_cons[].type | string | No | Whether the tag is a strength or a downside, for example `Positive`. | |||
| data.items[].selected_pros | array | No | Strengths the reviewer picked from Product Hunt's tag list. | |||
| data.items[].selected_pros[].count | integer | No | Number of reviewers who picked this tag for the product. | |||
| data.items[].selected_pros[].id | string | No | Product Hunt id of the tag. | |||
| data.items[].selected_pros[].name | string | No | Text of the tag as shown on Product Hunt. | |||
| data.items[].selected_pros[].type | string | No | Whether the tag is a strength or a downside, for example `Positive`. | |||
| data.items[].status | string | No | Publication status of the review, for example `submitted`. | |||
| data.items[].threads_end_cursor | string | No | Cursor of the last comment thread returned. Omitted when none. | |||
| data.items[].threads_has_next_page | boolean | No | Whether more comment threads exist on the review. | |||
| data.items[].threads_total_count | integer | No | Total number of comment threads on the review. | |||
| data.items[].user | object | No | Reviewer who wrote the review. | |||
| data.items[].user.avatar_url | string | No | URL of the reviewer's profile picture. | |||
| data.items[].user.headline | string | No | Reviewer's profile headline. | |||
| data.items[].user.id | string | No | Product Hunt id of the reviewer. | |||
| data.items[].user.is_account_verified | boolean | No | Whether the reviewer's Product Hunt account is verified. | |||
| data.items[].user.is_ambassador | boolean | No | Whether the reviewer is a Product Hunt ambassador. | |||
| data.items[].user.is_followed | boolean | No | Whether the requesting viewer follows the reviewer. | |||
| data.items[].user.name | string | No | Reviewer's display name. | |||
| data.items[].user.reviews_count | integer | No | Number of reviews the reviewer has written. | |||
| data.items[].user.selected_byline_product | object | No | Product the reviewer shows on their byline. | |||
| data.items[].user.selected_byline_product.id | string | No | Product Hunt id of the product. | |||
| data.items[].user.selected_byline_product.is_no_longer_online | boolean | No | Whether Product Hunt marks the product as no longer online. | |||
| data.items[].user.selected_byline_product.logo_uuid | string | No | Identifier of the product's logo image file. | |||
| data.items[].user.selected_byline_product.name | string | No | Name of the product as shown on Product Hunt. | |||
| data.items[].user.selected_byline_product.slug | string | No | URL slug of the product on Product Hunt. | |||
| data.items[].user.top_hunter_badge | object | No | Top hunter badge on the reviewer's profile, as Product Hunt returns it. Omitted when none. | |||
| data.items[].user.top_launch_badge | object | No | Top launch badge on the reviewer's profile, as Product Hunt returns it. Omitted when none. | |||
| data.items[].user.top_product_badge | object | No | Top product badge on the reviewer's profile, as Product Hunt returns it. Omitted when none. | |||
| data.items[].user.username | string | No | Reviewer's Product Hunt username. | |||
| data.items[].value_for_money_rating | integer | No | Reviewer's rating for value for money. Omitted when the reviewer gave none. | |||
| data.items[].votes_count | integer | No | Number of upvotes the review has. | |||
| data.name | string | No | Name of the product. | |||
| data.other_detailed_reviews_count | integer | No | Number of detailed reviews written by users other than the founders. | |||
| data.product_id | string | No | 1191613 | Product Hunt id of the product. | ||
| data.raw_page_info | object | No | Pagination details for this page as Product Hunt returns them. | |||
| data.reviews_count | integer | No | Total number of reviews the product has. | |||
| data.reviews_rating | number | No | Average review rating of the product. | |||
| data.reviews_recent_rating | number | No | Average review rating over recent reviews. Omitted when Product Hunt gives none. | |||
| data.slug | string | No | clico | URL slug of the product on Product Hunt. | ||
| data.total_count | integer | No | 6 | Total number of detailed reviews in the list. | ||
| 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/reviews" \
-H "x-api-key: $CRAWLORA_API_KEY"