Goodreads Book & Reviews Scraper avatar

Goodreads Book & Reviews Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Goodreads Book & Reviews Scraper

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

DevilScrapes

Maintained by Community

Actor 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 rotationcurl-cffi impersonates 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-After honoured.
  • 🧱 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

  1. Click Try for free at the top of the page.
  2. 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.
  3. Turn on Include reviews if you want reader reviews attached, and pick Output mode (books or reviews).
  4. Click Start. Output streams into the run's dataset.
  5. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
startUrlsarrayno*[]Direct book (/book/show/...), author (/author/show/...), or list/shelf (/list/show/..., /author/list/...) URLs.
searchQueriesarrayno*[]Free-text titles/authors or ISBN-10/13, resolved via Goodreads' auto-complete search.
maxBooksintegerno20Cap on total distinct books resolved, across every Start URL and Search query combined (1-500).
maxSearchResultsPerQueryintegerno3Auto-complete hits expanded into a book fetch, per Search queries entry (1-20).
includeReviewsbooleannofalseAttach the reviews Goodreads embeds on each book page.
maxReviewsPerBookintegerno10Cap on reviews attached per book (1-30) — Goodreads embeds ~20-30 for anonymous visitors.
outputModestringno"books"books: one row per book, reviews nested. reviews: one row per review (requires includeReviews: true).
proxyConfigurationobjectno{"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.

FieldTypeNotes
book_idstringGoodreads numeric book ID.
work_idstring | nullGoodreads work ID.
title / title_completestringTitle, and title with series suffix.
urlstringCanonical book page URL.
author_name / author_urlstring | nullPrimary author.
series_name / series_positionstring | nullSeries title and position within it.
genresarrayGenre tags.
format / num_pages / publisher / isbn / isbn13 / asin / languagemixedEdition metadata.
publish_date / original_publish_datestring | nullISO dates for this edition / the original work.
descriptionstring | nullBook blurb, HTML stripped.
image_urlstring | nullCover image URL.
average_rating / ratings_count / text_reviews_countnumber/int | nullWork-level rating stats.
ratings_count_distributionarrayRating histogram, index 0 = 1★ … index 4 = 5★.
awardsarrayAwards won.
reviewsarrayEmbedded reviews (books mode) — populated only when includeReviews: true.
reviews_returned_countintegerHow many reviews were actually attached.
source_querystring | nullThe Start URL or Search queries entry that resolved this book.
scraped_atstringISO 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:

EventUSDWhat it is
apify-actor-start$0.01One-off warm-up charge per run
apify-default-dataset-item$0.002Per 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.