Goodreads Reviews Scraper - Book Ratings and Text avatar

Goodreads Reviews Scraper - Book Ratings and Text

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Goodreads Reviews Scraper - Book Ratings and Text

Goodreads Reviews Scraper - Book Ratings and Text

Scrape public Goodreads book reviews with ratings, text, reviewer profiles, shelves, reactions and book metadata through a fast paginated no-login HTTP engine.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Ben

Ben

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Goodreads Reviews Scraper

Collect public Goodreads book reviews as structured data without a Goodreads login, browser runtime, residential proxy, or external API key. The Goodreads Reviews Scraper returns review text, star rating, reviewer profile details, shelves, tags, reactions, timestamps, book metadata, and stable source links for one or more public books.

The Actor reads the review data rendered into each public book page and continues through Goodreads' anonymous web pagination when you request more than the initial page. Results are deduplicated by Goodreads review ID and saved one review per dataset row, ready for JSON, CSV, Excel, API, webhook, or scheduled workflows.

What can you use it for?

  • Monitor reader response to a book or edition over time.
  • Build a review-research dataset for publishing, marketing, or catalog analysis.
  • Compare ratings and review themes across several public books.
  • Find frequently used shelf labels and reader-generated tags.
  • Identify highly engaged public reviews by like and comment counts.
  • Create a reviewed input set for text classification or topic analysis.
  • Track new public reviews with a recurring Apify Task.
  • Export reviewer and book links for manual research.

The Actor collects public page data. It does not sign in as a user, access private shelves, post reviews, follow accounts, or modify Goodreads content.

Input

{
"bookUrls": [
{"url": "https://www.goodreads.com/book/show/2767052-the-hunger-games"}
],
"maxReviewsPerBook": 30,
"maxPagesPerBook": 10
}

Input fields

FieldTypeDefaultDescription
bookUrlsarrayone public Goodreads bookGoodreads book URLs or numeric book IDs.
maxReviewsPerBookinteger30Maximum unique review rows saved for each book, from 1 to 1,000.
maxPagesPerBookinteger10Hard pagination limit for each book, from 1 to 50.

You can paste a normal book URL, a Goodreads review-page URL for the same book, or a numeric legacy book ID. The Actor normalizes each value to the canonical public book route. Duplicate URLs in one run are processed once.

Use a low maxReviewsPerBook value while testing a workflow. Increase it only after confirming that the selected book and output fields match the intended research task. Goodreads currently renders up to 30 community reviews in the initial public page data, so the default normally completes with one page request.

Output

Each dataset item represents one public Goodreads rating or text review.

{
"review_id": "kca://review:goodreads/amzn1.gr.review:goodreads.v1.example",
"review_url": "https://www.goodreads.com/review/show/123456",
"rating": 5,
"review_text": "A concise example of the normalized public review text.",
"review_text_html": "A concise example of the public review text.",
"is_spoiler": false,
"created_at": "2025-02-12T10:30:00+00:00",
"updated_at": "2025-02-12T10:30:00+00:00",
"like_count": 18,
"comment_count": 2,
"recommended_for": null,
"shelf_name": "Read",
"shelf_url": "https://www.goodreads.com/review/list/12345",
"tags": ["favorites"],
"reviewer_id": "12345",
"reviewer_name": "Public Reviewer",
"reviewer_url": "https://www.goodreads.com/user/show/12345",
"reviewer_image_url": "https://i.gr-assets.com/images/example.jpg",
"reviewer_is_author": false,
"reviewer_followers": 42,
"reviewer_text_reviews": 73,
"book_id": "2767052",
"book_title": "The Hunger Games",
"book_title_complete": "The Hunger Games (The Hunger Games, #1)",
"book_url": "https://www.goodreads.com/book/show/2767052-the-hunger-games",
"book_image_url": "https://m.media-amazon.com/images/example.jpg",
"book_author": "Suzanne Collins",
"book_author_url": "https://www.goodreads.com/author/show/153394.Suzanne_Collins",
"work_id": "kca://work/amzn1.gr.work.v1.example",
"total_book_reviews": 272523,
"rank": 1,
"source_url": "https://www.goodreads.com/book/show/2767052",
"scraped_at": "2026-07-11T12:00:00+00:00"
}

Review fields

  • rating is the public Goodreads star rating when present.
  • review_text is readable plain text with HTML removed and whitespace normalized.
  • review_text_html preserves the source formatting for workflows that need it.
  • is_spoiler keeps Goodreads' public spoiler marker so downstream tools can hide or route that content.
  • like_count and comment_count are public engagement values returned for the review.
  • shelf_name, shelf_url, and tags describe the public reading activity attached to the review.

Reviewer and book fields

Reviewer fields preserve the public profile name, profile URL, image, author badge, follower count, and public text-review count when Goodreads supplies them. Book fields repeat on every row intentionally: that makes multi-book exports easy to filter and removes the need to join a separate book table.

Some public records are incomplete. A deleted profile, unavailable review, rating-only activity, or field-level source error can produce null values. The Actor keeps a row when it has meaningful review text or a rating and does not invent unavailable values.

How pagination works

The first page is read from Goodreads' server-rendered Next.js Apollo state. When more rows are requested, the Actor uses the same anonymous GraphQL connection used by Goodreads' public web client and follows its opaque nextPageToken. Each continuation request is bounded to 30 reviews, deduplicated, and stopped when:

  • maxReviewsPerBook is reached;
  • maxPagesPerBook is reached;
  • Goodreads returns no next token;
  • a page adds no new review IDs; or
  • the source stops returning usable public review data.

The engine uses Chrome-compatible TLS impersonation over direct HTTP. It does not launch a browser or spend residential proxy traffic. Requests use explicit timeouts, limited retries, and a short delay between continuation pages.

Practical review-research workflow

  1. Choose a small, relevant set of Goodreads book URLs.
  2. Run 30 reviews per book and inspect the data before increasing the limit.
  3. Keep review_id, book_id, rank, and scraped_at in every downstream export.
  4. Separate rating-only rows from text reviews when calculating text metrics.
  5. Respect is_spoiler before displaying or sharing review text.
  6. Deduplicate historical snapshots by review_id rather than reviewer name.
  7. Review automated topics or sentiment labels before using them in decisions.
  8. Store only the fields required for the legitimate research purpose.

Reader reviews are subjective opinions. A rating, follower count, or text classification should not be treated as verified fact about a book or person. Avoid sensitive profiling and retain human review for consequential uses.

Scheduling and integrations

Save a tested input as an Apify Task, then add a schedule or webhook for repeat collection. Common destinations include:

  • Google Sheets or Airtable for editorial review;
  • n8n, Make, or Zapier for workflow automation;
  • BigQuery, Snowflake, PostgreSQL, or object storage for snapshots;
  • Python or JavaScript services through the Apify API;
  • a dashboard that compares rating distributions or review themes.

For change monitoring, append timestamped results instead of overwriting the prior dataset. Use review_id as the stable key and compare updated_at, rating, engagement, or normalized text between runs.

Pricing

This Actor uses transparent pay-per-event pricing:

  • $0.005 when the Actor starts.
  • $0.002 for each unique review row saved to the default dataset.

A 100-review run costs about $0.205 in Actor charges before ordinary Apify platform usage. Duplicate reviews, failed page requests, source records discarded as empty, and rows beyond the configured limit do not create result charges. The price is below the closest current competing Goodreads review Actor's per-result price and has a much lower run-start charge.

Reliability and limitations

Goodreads can change its public page or pagination schema. The Actor discovers review metadata from the current page and can refresh the anonymous GraphQL configuration from the current web bundle if Goodreads rotates it. Empty output fails explicitly instead of reporting a misleading successful run, which makes scheduled source changes visible.

The Actor does not bypass private-account controls, captchas, paywalls, or authenticated features. Ordering is the order Goodreads returns at run time and can change between runs. Public totals may include ratings that do not have written review text. Localization and platform experiments can affect which reviews appear.

Responsible use

Use the Actor only for legitimate collection and analysis of public data. Follow Goodreads' terms, applicable copyright and privacy law, and your organization's policies. Do not use review text for harassment, identity resolution, sensitive profiling, spam, or deceptive outreach. When publishing analysis, quote sparingly, attribute appropriately, and prefer aggregate findings over redistributing large amounts of individual review text.

This Actor is independent and is not affiliated with, endorsed by, or sponsored by Goodreads or Amazon.

Frequently asked questions

Does it require a Goodreads account?

No. It reads anonymous public book and review data.

Can it scrape several books in one run?

Yes. Add up to 25 unique public Goodreads book URLs or IDs to bookUrls. The per-book result and page limits apply separately.

Does it return reviews beyond the first page?

Yes. Set maxReviewsPerBook above 30 and keep maxPagesPerBook high enough. The Actor follows Goodreads' current public continuation tokens.

Why is a review field sometimes null?

Goodreads does not expose every field for every public record. Deleted users, rating-only activity, unavailable reactions, and partial source records can produce nulls.

Can I use the output for sentiment analysis?

Yes, as a reviewed research input. Keep the source URL and spoiler marker, distinguish ratings from text, and validate automated labels before relying on them.

Can I schedule it?

Yes. Save the input as an Apify Task and attach a schedule. Start with a small controlled set of books and append timestamped snapshots.

You might also like

If the Actor saved time or replaced manual work, leave a Store review. Reviews help prioritize endpoint monitoring, field improvements, and support.

Keywords: Goodreads review scraper, Goodreads reviews API, book review scraper, Goodreads ratings scraper, book sentiment data, reader review dataset, publishing research, Goodreads book data, public review monitoring.