Goodreads Books & Reviews Scraper
Pricing
from $6.80 / 1,000 results
Goodreads Books & Reviews Scraper
Scrape Goodreads books by keyword, book URL, author, list or shelf: ratings, ISBN, genres, series, description and reviews. Export JSON, CSV, Excel.
Pricing
from $6.80 / 1,000 results
Rating
5.0
(1)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Goodreads Books & Reviews Scraper
Here is one real result, with every field the actor returns (reviews array trimmed to one sample; the actor returns up to maxReviews):
{"imageUrl": "https://m.media-amazon.com/images/S/compressed.photo.goodreads.com/books/1564783201i/44492286.jpg","title": "Children of Dune","titleComplete": "Children of Dune (Dune #3)","url": "https://www.goodreads.com/book/show/44492286-children-of-dune","bookId": 44492286,"workId": 3634573,"authorName": "Frank Herbert","authorUrl": "https://www.goodreads.com/author/show/58.Frank_Herbert","authors": ["Frank Herbert"],"authorFollowers": 17368,"authorBooksCount": 627,"isbn": "0593098242","isbn13": "9780593098240","asin": "0593098242","format": "Paperback","pageCount": 609,"publisher": "Ace","publicationDate": "2019-06-04T07:00:00.000Z","publicationYear": 2019,"originalPublicationYear": 1976,"language": "English","averageRating": 3.95,"ratingsCount": 267081,"reviewsCount": 14575,"ratingsCountDist": [2244, 12202, 61973, 109767, 80895],"seriesTitle": "Dune","seriesUrl": "https://www.goodreads.com/series/45935-dune","seriesPosition": "3","genres": ["Science Fiction", "Fiction", "Fantasy", "Classics", "Audiobook", "Science Fiction Fantasy", "Space Opera", "Novels", "Space", "Adventure"],"awards": ["Hugo Award", "Locus Award", "Washington State Book Award"],"characters": ["Leto II Atreides", "Muad'dib", "Stilgar", "Vladimir Harkonnen", "Duncan Idaho", "Paul Atreides", "Alia Atreides", "Lady Jessica", "Gurney Halleck"],"places": ["Arrakis", "Sietch Tabr", "Salusa Secundus"],"description": "Book three in Frank Herbert's magnificent Dune Chronicles, one of the most significant sagas in the history of literary science fiction. [trimmed for display; full text returned]","reviews": [{"reviewerName": "Richard Houchin","reviewerUrl": "https://www.goodreads.com/user/show/889975-richard-houchin","rating": 3,"text": "The Dune series is remarkable in that each sequel gets progressively worse until it's unreadable. The first book is truly excellent. [trimmed for display; full text returned]","date": "2008-05-06T19:20:29.000Z","likes": 1019,"comments": 72,"spoiler": false,"url": null}],"reviewsSampleCount": 10,"observedAt": "2026-08-10T14:32:30.204Z","error": null}
The most complete Goodreads scraper available. It returns every book field the page exposes, including ISBNs, series, genres, awards, characters, places and the full ratings distribution, plus a sample of the most-liked reviews and optional AI add-ons for a summary, topics and a review digest, and gives you search, direct URL and list inputs to target exactly the books you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor finds Goodreads books by keyword search, direct book URL, or list/author/shelf/Listopia URL, then writes one normalized record per book to the run's dataset. Each record carries the full book metadata (title, author, ISBNs, format, publisher, publication years, language), the community stats (average rating, ratings count, reviews count, and the five-bucket ratings distribution), plus genres, awards, characters and places. When reviews are enabled, each book includes a sample of its most-liked recent reviews with reviewer, rating, text, date and like/comment counts. Optional paid AI add-ons write a spoiler-free summary, extract theme/topic tags and a genre category, and distill the collected reviews into a digest.
Data covers books listed on Goodreads. Fields the page does not publish are returned as null; the actor never invents a value.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 books matching "dune" with up to 10 reviews each.
{"searchQueries": ["dune"],"maxBooks": 10,"withReviews": true,"maxReviews": 10}
Use bookUrls for direct book pages, or listUrls for author pages, shelves or Listopia lists.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchQueries | string[] | no | ["dune"] | Book titles or author names to search on Goodreads. Each keyword returns the top matching books. |
bookUrls | string[] | no | (empty) | Direct Goodreads book URLs, for example https://www.goodreads.com/book/show/234225.Dune. |
listUrls | string[] | no | (empty) | Goodreads author pages, author book lists, Listopia lists or shelf URLs. Every book on the page is collected. |
maxBooks | integer | no | 10 | Maximum number of books to collect across all inputs. |
withReviews | boolean | no | true | When enabled, each book includes a sample of its most-liked recent reviews. |
maxReviews | integer | no | 30 | How many reviews to keep per book when reviews are on. Up to about 30 are available per book. |
withSummary | boolean | no | false | Paid add-on. Generate a short spoiler-free AI summary of each book. Requires a paid plan. |
withTopics | boolean | no | false | Paid add-on. Extract theme/topic tags and a broad genre category using AI. Requires a paid plan. |
withReviewDigest | boolean | no | false | Paid add-on. Distill the collected reviews for each book into what readers loved and criticized. Requires a paid plan. |
AI add-ons are disabled for free (non-paying) Apify users.
Output reference
One dataset item per book. Types: string, number, integer, boolean, string[], object[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
imageUrl | string | Cover image URL. |
title | string | Book title. |
titleComplete | string | Full title including series, for example Children of Dune (Dune #3). |
url | string | Canonical Goodreads book URL. |
bookId | integer | Goodreads book edition ID. |
workId | integer | Goodreads work ID (shared across editions). |
authorName | string | Primary author name. |
authorUrl | string | Primary author profile URL. |
authors | string[] | All credited authors. |
authorFollowers | integer | Follower count of the primary author. |
authorBooksCount | integer | Number of books by the primary author. |
isbn | string | ISBN-10, or null. |
isbn13 | string | ISBN-13, or null. |
asin | string | Amazon ASIN, or null. |
format | string | Edition format, for example Paperback. |
pageCount | integer | Page count, or null. |
publisher | string | Publisher, or null. |
publicationDate | string | ISO 8601 publication date of this edition, or null. |
publicationYear | integer | Publication year of this edition. |
originalPublicationYear | integer | Year the work was first published. |
language | string | Language of the edition. |
averageRating | number | Average community rating (0-5). |
ratingsCount | integer | Number of ratings. |
reviewsCount | integer | Number of text reviews. |
ratingsCountDist | integer[] | Ratings distribution, five buckets from 1 to 5 stars. |
seriesTitle | string | Series name, or null. |
seriesUrl | string | Series page URL, or null. |
seriesPosition | string | Position within the series, or null. |
genres | string[] | Genre shelves for the book. |
awards | string[] | Awards the book has received. |
characters | string[] | Named characters listed on the page. |
places | string[] | Settings/places listed on the page. |
description | string | Book description text. |
reviews | object[] | Sample of most-liked reviews (when withReviews). Each has reviewerName, reviewerUrl, rating, text, date, likes, comments, spoiler, url. |
reviewsSampleCount | integer | Number of reviews included in the sample. |
aiSummary | string | AI add-on. Spoiler-free summary (only when withSummary). |
aiTopics | string[] | AI add-on. Theme/topic tags (only when withTopics). |
aiCategory | string | AI add-on. Broad genre category (only when withTopics). |
aiReviewDigest | object | AI add-on. Distilled reader sentiment (only when withReviewDigest). |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Example output record
Real review object from the live run (input {"searchQueries": ["dune"], "maxBooks": 10, "withReviews": true, "maxReviews": 10}), one entry from the reviews array of the Children of Dune record:
{"reviewerName": "Richard Houchin","reviewerUrl": "https://www.goodreads.com/user/show/889975-richard-houchin","rating": 3,"text": "The Dune series is remarkable in that each sequel gets progressively worse until it's unreadable. The first book is truly excellent. It's mantra on fear alone makes it great. [trimmed for display; full text returned]","date": "2008-05-06T19:20:29.000Z","likes": 1019,"comments": 72,"spoiler": false,"url": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~goodreads-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries":["dune"],"maxBooks":10,"withReviews":true,"maxReviews":20}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~goodreads-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"bookUrls":["https://www.goodreads.com/book/show/234225.Dune"],"withSummary":true}'
Apify CLI:
apify call scrapers_lat/goodreads-scraper \--input '{"searchQueries":["Frank Herbert"],"maxBooks":50}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per book returned (
resultevent). See the pricing tab for the current per-result price. Reviews are included with the book record. - Optional add-ons. The AI add-ons (
ai_summary,ai_topics,ai_review_digest) are billed only when they produce usable output for a book. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results and add-ons. - Free Apify plans are capped at 10 books per run and cannot use the AI add-ons. Upgrade for higher
maxBooksand AI features.
FAQ and troubleshooting
A run returned 0 records. Why? The search, book URL or list URL did not resolve to any books. Check the query or URL. Zero-result runs are not charged.
How many reviews do I get per book?
Up to about 30, controlled by maxReviews, drawn from the most-liked recent reviews. Set withReviews to false to skip reviews entirely.
Can I scrape a whole shelf or Listopia list?
Yes. Pass the shelf, author or Listopia URL in listUrls and every book on the page is collected up to maxBooks.
Why are some fields null?
Goodreads does not publish every field for every book (for example ISBN or page count on some editions). Missing values are returned as null, never invented.
What do the AI add-ons add?
withSummary adds a spoiler-free summary, withTopics adds theme tags and a genre category, and withReviewDigest distills the collected reviews. All require a paid Apify plan and are billed only when they produce output.
Is this an official Goodreads tool? No. This actor is independent and has no affiliation with Goodreads or Amazon. It reads only data that is publicly available on the site. Use it in accordance with Goodreads' terms of service.
Related scrapers
- Amazon Product Scraper: Amazon product details and pricing.
- Open Library Books Scraper: Book metadata from Open Library.
- App Store Reviews Scraper: iOS App Store reviews.
- Trustpilot Reviews Scraper: Business reviews from Trustpilot.
- IMDb Reviews Scraper: Film and TV reviews from IMDb.
- Letterboxd Scraper: Film ratings and reviews from Letterboxd.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Goodreads or Amazon. Accesses only publicly available data. Use in accordance with Goodreads' terms of service.
