Goodreads Scraper — Books, Authors & Reviews
Pricing
Pay per event
Goodreads Scraper — Books, Authors & Reviews
Goodreads scraper and API: search books or paste URLs to export title, author, rating, ISBN, pages, genres, series, description and full-text reviews to JSON/CSV/Excel.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Tristan Leroux
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Security
Limited permissionsShare
Export Goodreads books by keyword, URL or ID: title, author, rating, ratings count, ISBN, pages, publisher, series, genres, description and full-text reader reviews. No Goodreads account, login or API key needed. Download the results as JSON, CSV, Excel or HTML, or pull them through the Apify API.
What does Goodreads Scraper do?
Goodreads Scraper turns public Goodreads pages into a clean, structured dataset:
- Search Goodreads with any keyword (title, author, ISBN) and expand every result into a full book record.
- Look up books directly by Goodreads book URL or numeric book ID.
- Collect reviews (optional): reviewer name and profile, star rating, date, likes and the complete review text (not the "…more" teaser).
- Duplicate books across queries are stored and billed only once.
Use cases
- Publishers and booksellers: enrich a catalogue with ratings, genres, series and descriptions.
- Market researchers: compare ratings and review volume across titles, authors or genres.
- Data scientists: build recommendation or sentiment datasets from ratings and full-text reviews.
- Authors and marketers: monitor reader feedback on your own and competing titles.
- AI / LLM builders: ground chatbots and agents in up-to-date book metadata and reader opinions.
How much does it cost?
You pay only for results stored in your dataset (pay-per-event). Duplicates are free.
| Event | What you pay for | Free plan | Paid plans (from) |
|---|---|---|---|
book | One book record stored | $2.00 per 1,000 | $1.50 per 1,000 (Gold+) |
review | One review stored | $0.50 per 1,000 | $0.30 per 1,000 (Gold+) |
Examples (Free plan prices):
- 100 books, no reviews → 100 × $0.002 = $0.20.
- 50 books with 30 reviews each → 50 × $0.002 + 1,500 × $0.0005 = $0.10 + $0.75 = $0.85.
A tiny platform start fee ($0.00005 per run) also applies. The Apify Free plan includes $5 monthly credit, enough for about 2,500 books.
How to use Goodreads Scraper
In Apify Console
- Open Goodreads Scraper and click Try for free.
- Enter one or more Search queries (e.g.
dune), or paste Book URLs / Book IDs. - Optionally turn on Include reviews and set limits.
- Click Start and wait for the run to finish.
- Download the dataset as JSON, CSV, Excel or HTML, or connect it to your tools.
Via API
- Get your API token in Apify Console → Settings → Integrations.
- Call the actor with the same input JSON (see Integrations and API).
Input
Provide at least one of queries, bookUrls or bookIds. Books you ask for directly are processed before search results.
| Field | Type | Default | Description |
|---|---|---|---|
queries | array of strings | — | Goodreads search terms, e.g. "dune". |
bookUrls | array of strings | — | Book URLs, e.g. https://www.goodreads.com/book/show/44767458-dune. |
bookIds | array of strings | — | Numeric book IDs, e.g. "44767458". |
includeReviews | boolean | false | Also store text reviews for every book. |
maxReviewsPerBook | integer | 30 | Reviews per book (0–500). |
maxBooksPerQuery | integer | 10 | Search results expanded per query (1–50). |
maxItems | integer | 1000 | Hard cap on stored items (books + reviews). |
proxyConfiguration | object | Apify Proxy | Proxy settings; residential recommended for large runs. |
debug | boolean | false | Verbose logs. |
Example:
{"queries": ["dune", "project hail mary"],"bookUrls": ["https://www.goodreads.com/book/show/186074"],"includeReviews": true,"maxReviewsPerBook": 20,"maxBooksPerQuery": 5,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Output
Each dataset item has a type: book or review. Book record from a real run with {"queries": ["dune"]}:
{"type": "book","bookId": "44767458","workId": "3634639","title": "Dune","author": "Frank Herbert","authorId": "58","rating": 4.29,"ratingsCount": 1724548,"reviewsCount": 90556,"pages": 658,"publishedAt": "2019-10-01","publisher": "Ace","language": "English","isbn13": "9780593099322","format": "Hardcover","series": { "name": "Dune", "position": "1", "url": "https://www.goodreads.com/series/45935-dune" },"genres": ["Science Fiction", "Fiction", "Fantasy", "Classics", "Audiobook", "Science Fiction Fantasy", "Space Opera", "Novels", "Adventure", "Book Club"],"description": "Set on the desert planet Arrakis, Dune is the story of the boy Paul Atreides, heir to a noble family tasked with ruling an inhospitable world …","coverUrl": "https://m.media-amazon.com/images/S/compressed.photo.goodreads.com/books/1555447414i/44767458.jpg","url": "https://www.goodreads.com/book/show/44767458-dune","fetchedAt": "2026-11-02T13:41:21Z"}
Review record (with includeReviews: true):
{"type": "review","bookId": "44767458","reviewId": "156120010","reviewer": "Rajat Ubhaykar","reviewerId": "4686064","reviewerUrl": "https://www.goodreads.com/user/show/4686064-rajat-ubhaykar","rating": 5,"text": "In my head, the purpose of this review is very clear. It is to convince YOU to read this book. …","date": "2011-03-22","likes": 3081,"url": "https://www.goodreads.com/review/show/156120010"}
Field notes:
genresis the full Goodreads genre list in page order.- Fields an edition does not have (publisher, ISBN, language, series, pages) are
nullor[]; the book is still returned. textis the complete review. Rating-only entries without text are not returned.
Integrations and API
Apify API (curl) — run synchronously and get the items back:
curl -X POST "https://api.apify.com/v2/acts/<username>~goodreads-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-H "Content-Type: application/json" \-d '{"queries": ["dune"], "maxBooksPerQuery": 5}'
Python (apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_TOKEN>")run = client.actor("<username>/goodreads-scraper").call(run_input={"queries": ["dune"], "includeReviews": True})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["type"], item.get("title") or item.get("reviewer"))
- Make, Zapier, n8n: use the Apify app/node to start this actor and pass the dataset to Google Sheets, Airtable, Slack, a database or a CRM.
- Scheduling: create a Schedule in Apify Console to refresh ratings and reviews daily or weekly.
- Webhooks: get notified when a run finishes.
- MCP / AI agents: connect Claude, Cursor or any MCP client to the Apify MCP server at https://mcp.apify.com and call Goodreads Scraper as a tool.
FAQ
Is it legal to scrape Goodreads?
The actor reads only publicly visible pages and does not log in. Scraping public data is generally allowed, but reviews can contain personal data (reviewer names). Make sure your use complies with GDPR and other applicable laws, and consult a lawyer if unsure.
Do I need a proxy?
Yes, for anything beyond small runs a residential proxy is recommended. Goodreads rate-limits datacenter and cloud IPs. In the Proxy configuration field select Apify Proxy and the RESIDENTIAL group, or pass "proxyConfiguration": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} via API. The actor retries blocked requests with a fresh IP.
How many books and reviews can I get?
Each query returns up to about 20 search results (maxBooksPerQuery up to 50 caps this), and up to 500 reviews per book. Use more queries or direct book URLs/IDs to cover more titles. maxItems caps the total.
Can I get only new reviews or books?
Within one run, duplicates are never stored or billed twice. To track changes over time, schedule the actor and compare datasets by bookId / reviewId (for example in Make, n8n or your database).
What happens if a book fails?
Failures are isolated: one broken book or review page is logged and skipped, and the rest of the run continues. You are not charged for items that were not stored.
Do I need a Goodreads account or API key?
No. Goodreads closed its public API; this actor works without any account, cookie or key.
Limits
- Only public data: private shelves, friends-only content and login-gated pages are not available.
- Search reads the first results page per query (about 20 books).
- Reviews are text reviews only, up to 500 per book; rating-only entries are skipped.
- Author profiles and full edition lists are not scraped (
authorIdandworkIdare provided). - Large runs without a residential proxy may be slowed down by Goodreads rate limiting.