Goodreads API endpoint
Returns a book's featured reviews (reviewer, rating, text, date, like/comment counts, spoiler flag), sorted by like count.
/goodreads/book/{id}/reviewsReturns a book's featured reviews (the reviews Goodreads embeds on the book page), sorted by like count descending.
Path parameters:
id (required) — Goodreads book id.Query parameters:
limit (optional, default 10, max 50). Goodreads embeds roughly 30 featured reviews on the book page; that is the practical ceiling.Response includes reviews[]: reviewer, reviewer_url, rating (0 when the reviewer left text but no star rating), text, date, like_count, comment_count, contains_spoilers.
| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| reviewer | 20 | |
| reviewer_url | 20 | goodreads.com |
| rating | 20 | 1 to 5, median 4 |
| text | 20 | median 3,068 characters |
| date | 20 | 2008-09-20 to 2025-03-19 |
| like_count | 20 | 354 to 2,057, median 561 |
| comment_count | 20 | 2 to 344, median 95 |
| contains_spoilers | 1 | true in 1 of 1 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id (path) | string | Yes | Goodreads book id | 2767052 | |
| limit | integer | No | Max reviews, default 10, max 50 | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/goodreads/book/2767052/reviews?limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"id": "2767052",
"reviews": [
{
"reviewer": "Hannah Azerang",
"reviewer_url": "https://www.goodreads.com/user/show/38077205-hannah-azerang",
"rating": 5,
"text": "rereading this for the first time in 10 years and it feels more relevant than ever. truly a timeless classic.",
"date": "2014-12-23",
"like_count": 2036,
"comment_count": 19
}
],
"source_url": "https://www.goodreads.com/book/show/2767052"
}
}Request schema
No body schema
Response schema
#/definitions/goodreads.reviewsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | goodreads.ReviewsResponse | No | ||||
| data.id | string | No | ||||
| data.reviews | array | No | ||||
| data.reviews[].comment_count | integer | No | ||||
| data.reviews[].contains_spoilers | boolean | No | ||||
| data.reviews[].date | string | No | 2020-09-18 | |||
| data.reviews[].like_count | integer | No | ||||
| data.reviews[].rating | integer | No | 5 | |||
| data.reviews[].reviewer | string | No | ||||
| data.reviews[].reviewer_url | string | No | ||||
| data.reviews[].text | string | No | ||||
| data.source_url | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/goodreads/book/2767052/reviews?limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"