Goodreads Book & Reviews Scraper
Pricing
from $2.00 / 1,000 results
Goodreads Book & Reviews Scraper
Extract Goodreads book metadata, ratings, and reader reviews from book URLs, author or list pages, or free-text/ISBN search. One Pay-Per-Event Actor covers book details, ratings, and embedded reviews — no login, no API key, no separate subscription.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
🎯 What this scrapes
Goodreads retired its official API in December 2020, leaving no supported way to pull book metadata, ratings, or review text at scale. This Actor resolves books three ways — direct book, author, or list/shelf (Listopia) URLs, free-text or ISBN search, or a shelf page you already have bookmarked — and returns full book metadata (title, author, series, genres, ISBNs, ratings, awards) plus the reviews Goodreads embeds on the page, in one PPE-priced call.
🔥 What we handle for you
- 🛡️ Browser fingerprint rotation —
curl-cffiimpersonates real Chrome / Firefox / Safari TLS handshakes so Goodreads sees a browser, not Python. - 🌐 Apify Proxy on every request, escalating to residential exit IPs with no input change if a block ever shows up.
- 🔁 Retries with exponential backoff on
408 / 429 / 503— up to 5 attempts per page,Retry-Afterhonoured. - 🧱 Session rotation on every block — a fresh proxy session and browser fingerprint the moment one gets flagged.
- 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable book IDs, JSON / CSV / Excel export straight from the Apify Console.
- 💰 Pay-Per-Event pricing — you only pay for book and review rows that hit your dataset. No data, no charge.
💡 Use cases
- Catalogue enrichment — backfill title, author, series, ISBN, and cover-image metadata for a bookstore, library, or reading-app catalogue.
- Reader-sentiment research — pull a book's rating distribution and a sample of review text to gauge audience reception before an author/publisher marketing push.
- "Best of" dataset building — resolve every book on a Listopia list or shelf page into one structured dataset for recommendation or curation tools.
- Rating/review monitoring — re-run against the same book URLs on a schedule to track how average rating and ratings count move over time.
⚙️ How to use it
- Click Try for free at the top of the page.
- Add one or more Start URLs (book, author, or list/shelf pages) and/or Search queries (titles, authors, or ISBNs) — at least one of the two is required.
- Turn on Include reviews if you want reader reviews attached, and pick Output mode (
booksorreviews). - Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
startUrls | array | no* | [] | Direct book (/book/show/...), author (/author/show/...), or list/shelf (/list/show/..., /author/list/...) URLs. |
searchQueries | array | no* | [] | Free-text titles/authors or ISBN-10/13, resolved via Goodreads' auto-complete search. |
maxBooks | integer | no | 20 | Cap on total distinct books resolved, across every Start URL and Search query combined (1-500). |
maxSearchResultsPerQuery | integer | no | 3 | Auto-complete hits expanded into a book fetch, per Search queries entry (1-20). |
includeReviews | boolean | no | false | Attach the reviews Goodreads embeds on each book page. |
maxReviewsPerBook | integer | no | 10 | Cap on reviews attached per book (1-30) — Goodreads embeds ~20-30 for anonymous visitors. |
outputMode | string | no | "books" | books: one row per book, reviews nested. reviews: one row per review (requires includeReviews: true). |
proxyConfiguration | object | no | {"useApifyProxy": true} | Standard Apify Proxy block — escalate to RESIDENTIAL if you ever see a block. |
* At least one of startUrls / searchQueries must be non-empty.
Example input
{"startUrls": ["https://www.goodreads.com/book/show/2767052-the-hunger-games"],"searchQueries": [],"maxBooks": 1,"maxSearchResultsPerQuery": 3,"includeReviews": true,"maxReviewsPerBook": 2,"outputMode": "books","proxyConfiguration": {"useApifyProxy": true}}
📤 Output
Every row is one dataset item. books mode (the default) emits one row per resolved book, with reviews nested inside; reviews mode flattens the same data into one row per individual review.
| Field | Type | Notes |
|---|---|---|
book_id | string | Goodreads numeric book ID. |
work_id | string | null | Goodreads work ID. |
title / title_complete | string | Title, and title with series suffix. |
url | string | Canonical book page URL. |
author_name / author_url | string | null | Primary author. |
series_name / series_position | string | null | Series title and position within it. |
genres | array | Genre tags. |
format / num_pages / publisher / isbn / isbn13 / asin / language | mixed | Edition metadata. |
publish_date / original_publish_date | string | null | ISO dates for this edition / the original work. |
description | string | null | Book blurb, HTML stripped. |
image_url | string | null | Cover image URL. |
average_rating / ratings_count / text_reviews_count | number/int | null | Work-level rating stats. |
ratings_count_distribution | array | Rating histogram, index 0 = 1★ … index 4 = 5★. |
awards | array | Awards won. |
reviews | array | Embedded reviews (books mode) — populated only when includeReviews: true. |
reviews_returned_count | integer | How many reviews were actually attached. |
source_query | string | null | The Start URL or Search queries entry that resolved this book. |
scraped_at | string | ISO 8601 UTC timestamp when the row was fetched. |
Example output
{"book_id": "2767052","work_id": "2792775","title": "The Hunger Games","title_complete": "The Hunger Games (The Hunger Games, #1)","url": "https://www.goodreads.com/book/show/2767052-the-hunger-games","author_name": "Suzanne Collins","author_url": "https://www.goodreads.com/author/show/153394.Suzanne_Collins","series_name": "The Hunger Games","series_position": "1","genres": ["Young Adult", "Dystopia", "Fiction", "Science Fiction"],"format": "Hardcover","num_pages": 374,"publisher": "Scholastic Press","isbn": "0439023483","isbn13": "9780439023481","asin": null,"language": "English","publish_date": "2008-10-14","original_publish_date": "2008-09-14","description": "Winning means fame and fortune. Losing means certain death. The Hunger Games have begun...","image_url": "https://m.media-amazon.com/images/S/compressed.photo.goodreads.com/books/1586722975i/2767052.jpg","average_rating": 4.35,"ratings_count": 10190318,"ratings_count_distribution": [133754, 242196, 1113954, 3090721, 5609693],"text_reviews_count": 273383,"awards": ["Georgia Peach Book Award (WINNER)", "Buxtehuder Bulle (WINNER)"],"reviews": [{"review_id": "kca://review:goodreads/amzn1.gr.review:goodreads.v1.-GjjHy9iBCConbkcwszIsw","reviewer_name": "Jayson","reviewer_url": "https://www.goodreads.com/user/show/22106879-jayson","reviewer_followers_count": 4318,"rating": 4,"review_text": "(A-) 83% | Very Good. Notes: A Pax Romana parallel, where odds are ever mostly misses...","like_count": 693,"comment_count": 68,"has_spoiler": false,"created_at": "2020-09-18T02:33:35Z","updated_at": "2026-05-22T05:01:56Z"}],"reviews_returned_count": 1,"source_query": "https://www.goodreads.com/book/show/2767052-the-hunger-games","scraped_at": "2026-07-20T00:00:00Z"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
apify-actor-start | $0.01 | One-off warm-up charge per run |
apify-default-dataset-item | $0.002 | Per book or review row written to the dataset — $2.00 / 1 000 results |
No subscription, no minimum, no card required to start — Apify gives every new account $5 of free credit.
🚧 Limitations
Reviews are capped at what Goodreads server-embeds for anonymous visitors — observed ~20-30 per book, further capped by maxReviewsPerBook (max 30). Full review-corpus pagination beyond that page requires a logged-in session and is out of scope. Authenticated actions (shelving, following, posting reviews), quotes/Q&A/giveaways, and non-English or localized Goodreads domains are also out of scope for v1.
❓ FAQ
Do I need a Goodreads account or API key?
No. Goodreads retired its official API in December 2020; this Actor reads the same public book, author, and list pages a signed-out visitor sees — no login, no key.
How many reviews can I get per book?
Up to the ~20-30 reviews Goodreads server-embeds on the book page for anonymous visitors, capped further by maxReviewsPerBook. The full review corpus beyond that page requires a logged-in session and is out of scope.
What's the difference between books and reviews output mode?
books mode emits one row per book with its reviews nested inside. reviews mode flattens the same data into one row per individual review — turn on includeReviews for either mode to actually fetch review content.
Can I search by ISBN instead of title?
Yes — searchQueries accepts ISBN-10 or ISBN-13 codes as well as free-text titles/authors; both resolve through Goodreads' own auto-complete search.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.