Goodreads Scraper — Books, Authors & Reviews avatar

Goodreads Scraper — Books, Authors & Reviews

Pricing

Pay per event

Go to Apify Store
Goodreads Scraper — Books, Authors & Reviews

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

Tristan Leroux

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Security

Limited permissions

Share

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.

EventWhat you pay forFree planPaid plans (from)
bookOne book record stored$2.00 per 1,000$1.50 per 1,000 (Gold+)
reviewOne 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

  1. Open Goodreads Scraper and click Try for free.
  2. Enter one or more Search queries (e.g. dune), or paste Book URLs / Book IDs.
  3. Optionally turn on Include reviews and set limits.
  4. Click Start and wait for the run to finish.
  5. Download the dataset as JSON, CSV, Excel or HTML, or connect it to your tools.

Via API

  1. Get your API token in Apify Console → Settings → Integrations.
  2. 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.

FieldTypeDefaultDescription
queriesarray of strings—Goodreads search terms, e.g. "dune".
bookUrlsarray of strings—Book URLs, e.g. https://www.goodreads.com/book/show/44767458-dune.
bookIdsarray of strings—Numeric book IDs, e.g. "44767458".
includeReviewsbooleanfalseAlso store text reviews for every book.
maxReviewsPerBookinteger30Reviews per book (0–500).
maxBooksPerQueryinteger10Search results expanded per query (1–50).
maxItemsinteger1000Hard cap on stored items (books + reviews).
proxyConfigurationobjectApify ProxyProxy settings; residential recommended for large runs.
debugbooleanfalseVerbose 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:

  • genres is the full Goodreads genre list in page order.
  • Fields an edition does not have (publisher, ISBN, language, series, pages) are null or []; the book is still returned.
  • text is 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 ApifyClient
client = 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

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 (authorId and workId are provided).
  • Large runs without a residential proxy may be slowed down by Goodreads rate limiting.