Goodreads Review Scraper avatar

Goodreads Review Scraper

Pricing

from $5.99 / 1,000 results

Go to Apify Store
Goodreads Review Scraper

Goodreads Review Scraper

πŸ“š Goodreads Review Scraper extracts book reviews at scale β€” ratings, review text, dates, reviewer profiles, helpful votes & shelves. πŸ”Ž Clean, structured data for sentiment analysis & insights. πŸš€ Perfect for authors, publishers, marketers & researchers.

Pricing

from $5.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapier

Scrapier

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Goodreads Review Scraper

The Goodreads Review Scraper is a production-ready Apify actor that extracts public Goodreads book reviews at scale β€” including star ratings, full review text, timestamps, reviewer profiles, helpful votes, and shelving metadata. It solves the manual copy‑paste problem by programmatically calling Goodreads’ getReviews GraphQL endpoint and streaming clean, structured rows into your dataset as they’re found. Built for marketers, developers, data analysts, authors, publishers, and researchers, this Goodreads review extractor helps you scrape Goodreads reviews and export them for sentiment analysis, audience insights, and market research at scale. πŸš€

What data / output can you get?

Below are the exact fields pushed to your dataset for each review. These match the flattened shape returned by Goodreads’ getReviews API.

Data typeDescriptionExample value
bookUrlSource book URL for the reviewhttps://www.goodreads.com/book/show/26032825
idReview ID from Goodreads"123456789"
ratingStar rating given by the reviewer5
textFull review text"A brilliant sequel with unforgettable characters..."
createdAtReview creation timestamp (ms)1714147200000
updatedAtReview last update timestamp (ms)1714752000000
lastRevisionAtLast revision timestamp (ms)1714838400000
recommendForAudience recommendation text if presentnull
spoilerStatusSpoiler setting for the review"NONE"
likeCountNumber of likes/helpful votes12
commentCountNumber of comments on the review3
viewerHasLikedWhether the current viewer liked it (from API)false
shelvingShelving metadata: shelf, tags, URLs{"shelf":{"name":"read","webUrl":"https://www.goodreads.com/review/list/...","__typename":"Shelf"},"taggings":[{"tag":{"name":"fantasy","webUrl":"https://www.goodreads.com/genres/fantasy","__typename":"Tag"},"__typename":"Tagging"}],"webUrl":"https://www.goodreads.com/review/list/...","__typename":"Shelving"}
creatorReviewer profile object (id, name, links, counts){"id":"987654","name":"Jane Doe","webUrl":"https://www.goodreads.com/user/show/987654-jane-doe","imageUrlSquare":"https://images.gr-assets.com/...","isAuthor":false,"followersCount":245,"textReviewsCount":102,"viewerRelationshipStatus":{"isBlockedByViewer":false,"__typename":"ViewerRelationshipStatus"},"contributor":{"id":"123","works":{"totalCount":2,"__typename":"WorksConnection"},"__typename":"Contributor"},"__typename":"User"}
__typenameGraphQL typename for the review node"Review"

Notes:

  • Fields like creator and shelving can be null if not provided in the response.
  • You can download your Goodreads reviews dataset from Apify in JSON, CSV, or Excel formats for further analysis.

Key features

  • ⚑️ Bold-scale extraction with clean output
    Streams one row per review directly into your Apify dataset as they’re scraped β€” perfect for building a Goodreads reviews dataset and powering Goodreads review data extraction workflows.

  • 🧩 Flexible filters & sorting
    Choose sortBy (popular, newest, oldest), languageCode (e.g., en or all), and reviewEdition (ALL vs only_this_book) to tailor your Goodreads review mining to specific audiences.

  • πŸ“š Work-wide vs edition-only scope
    Switch between all editions for the work (ALL) and only this specific edition (only_this_book) to match your analysis needs in your Goodreads book reviews scraper workflows.

  • 🌍 Language filtering
    Filter reviews by language using languageCode, with options like en, fr, de, es, it, and more. Ideal for multilingual analysis and to scrape Goodreads book ratings by locale.

  • πŸ›‘οΈ Resilient connection strategy
    Smart proxy escalation: starts direct, then Apify datacenter, then RESIDENTIAL (locked for the rest of the run) with retries and backoff. Built for reliability in your Goodreads review crawler.

  • πŸ”— Bulk input support
    Paste full Goodreads book URLs or just the numeric ID (e.g., 26032825) β€” the actor will normalize them for you. Great for batch jobs that download Goodreads reviews at scale.

  • πŸ“‹ Real-time streaming to Output
    Live rows appear in your Output table as each review is saved, making it a responsive Goodreads reviews exporter for monitoring and quality checks.

  • 🐍 Python-powered, developer-friendly
    Implemented in Python with Apify SDK β€” easy to integrate into pipelines or consume via the Apify dataset API in your Goodreads review scraper Python workflows.

How to use Goodreads Review Scraper - step by step

  1. Create or log in to your Apify account.
  2. Open the Goodreads Review Scraper actor on Apify.
  3. In the Input, add your book identifiers under urls. You can paste full Goodreads URLs like https://www.goodreads.com/book/show/26032825 or just the numeric ID 26032825.
  4. Set maxItems to control how many reviews to collect per book.
  5. (Optional) Expand Filters & sorting and configure:
    • sortBy: popular, newest, or oldest
    • languageCode: a specific language like en, fr, de, etc., or all for no filter
    • reviewEdition: ALL for all editions, or only_this_book for the current edition
  6. (Optional) Configure proxyConfiguration if you need custom proxy settings; the actor will automatically escalate connection strategy if needed.
  7. Click Start to run. You’ll see status updates as reviews are discovered and saved.
  8. Download results from the dataset in JSON, CSV, or Excel to feed analytics, dashboards, or research.

Pro Tip: Combine filtered runs (e.g., languageCode=en, sortBy=newest) with automation to keep a fresh Goodreads reviews dataset for sentiment tracking.

Use cases

Use case nameDescription
Marketing analytics + sentimentAnalyze reviewer text and ratings to quantify sentiment and identify messaging opportunities from public Goodreads opinions.
Author/publisher feedback loopTrack newest reviews per title to inform blurbs, covers, and positioning with real reader reactions.
Academic research (literature)Study reading trends by language, shelving tags, and rating distributions across genres and regions.
Product strategy (editions)Compare ALL vs only_this_book to see edition-level differences and edition-specific feedback.
Data enrichment for dashboardsFeed structured rating, likeCount, and commentCount data into BI tools for trend tracking.
Developer pipelines (API)Use the Apify dataset API to integrate the Goodreads reviews exporter into ETL workflows.
Market trend analysisGroup by shelving tags and reviewer profiles to uncover sub-genre clusters and audience niches.

Why choose Goodreads Review Scraper?

This Goodreads review scraping tool is built for precision, automation, and reliability.

  • βœ… Accurate, structured fields that mirror Goodreads’ getReviews GraphQL shape.
  • 🌍 Multilingual filtering using languageCode for targeted datasets.
  • πŸ“¦ Scales to multiple books with bulk urls input and per‑book limits via maxItems.
  • 🐍 Developer-friendly foundation in Python and Apify, easy to integrate into pipelines.
  • πŸ›‘οΈ Ethical by design: collects only public reviews and respects platform constraints.
  • πŸ’° Cost-effective automation for ongoing Goodreads review data extraction.
  • πŸ”Œ Integration-ready outputs for CSV/JSON/Excel exports and downstream analytics.
  • 🧭 More reliable than browser extensions or manual scripts thanks to smart proxy escalation and retries.

In short, it’s a robust Goodreads ratings scraper and Goodreads user reviews scraper that fits modern data workflows without the instability of one-off tools.

Yes β€” when used responsibly. This actor collects only publicly visible reviews and does not access private or authenticated data. You are responsible for respecting Goodreads’ terms and applicable laws.

Guidelines for compliant use:

  • Collect only public content and avoid private or authenticated areas of the site.
  • Be mindful of GDPR, CCPA, and relevant data protection regulations in your region.
  • Use scraped data responsibly and for legitimate research, analytics, or reporting use cases.
  • Consult your legal team for edge cases or redistribution policies.

Input parameters & output format

Example JSON input

{
"urls": [
"https://www.goodreads.com/book/show/26032825",
"26032825"
],
"maxItems": 50,
"filtersAndOptions": {
"sortBy": "oldest",
"languageCode": "en",
"reviewEdition": "only_this_book"
},
"proxyConfiguration": {
"useApifyProxy": false
}
}

Parameters

FieldTypeRequiredDefaultDescription
urlsarrayYesβ€”Paste one or more Goodreads book links. Tip: you can paste just the number from the URL (e.g., 26032825) β€” the actor will fix the link for you.
maxItemsintegerNo20How many reviews to collect for each book in your list.
filtersAndOptions.sortBystringNo"popular"Sort reviews by: popular, newest, or oldest.
filtersAndOptions.languageCodestringNo"all"All languages (no filter) or choose one language; reviews are filtered to match (e.g., en, fr, de, es, it, pt, ru, ja, ko, zh, ar, hi, nl, pl, tr, vi, id, th).
filtersAndOptions.reviewEditionstringNo"ALL"ALL (reviews for the whole work) or only_this_book (this edition only).
proxyConfigurationobjectNoβ€”Optional Apify Proxy settings. If something blocks a run, the actor can switch routing automatically.

Note: The actor also supports legacy top-level keys sortBy, languageCode, and reviewEdition; if both are provided, filtersAndOptions takes precedence.

Example JSON output

[
{
"bookUrl": "https://www.goodreads.com/book/show/26032825",
"__typename": "Review",
"id": "123456789",
"creator": {
"id": "987654",
"imageUrlSquare": "https://images.gr-assets.com/...",
"isAuthor": false,
"viewerRelationshipStatus": {
"isBlockedByViewer": false,
"__typename": "ViewerRelationshipStatus"
},
"followersCount": 245,
"__typename": "User",
"textReviewsCount": 102,
"name": "Jane Doe",
"webUrl": "https://www.goodreads.com/user/show/987654-jane-doe",
"contributor": {
"id": "123",
"works": {
"totalCount": 2,
"__typename": "WorksConnection"
},
"__typename": "Contributor"
}
},
"recommendFor": null,
"updatedAt": 1714752000000,
"createdAt": 1714147200000,
"spoilerStatus": "NONE",
"lastRevisionAt": 1714838400000,
"text": "A brilliant sequel with unforgettable characters and pacing.",
"rating": 5,
"shelving": {
"shelf": {
"name": "read",
"webUrl": "https://www.goodreads.com/review/list/...",
"__typename": "Shelf"
},
"taggings": [
{
"tag": {
"name": "fantasy",
"webUrl": "https://www.goodreads.com/genres/fantasy",
"__typename": "Tag"
},
"__typename": "Tagging"
}
],
"webUrl": "https://www.goodreads.com/review/list/...",
"__typename": "Shelving"
},
"likeCount": 12,
"viewerHasLiked": false,
"commentCount": 3
}
]

Notes:

  • creator and shelving may be null if not present in the response.
  • Timestamps are returned as integers in milliseconds.

FAQ

Do I need to log in to scrape Goodreads reviews?

No. The actor collects only public reviews and does not require login or cookies. It works as a Goodreads review scraping tool for publicly available content.

Can I input just the Goodreads numeric ID instead of a full URL?

Yes. You can paste a numeric ID like 26032825 into urls and the actor will convert it to a valid Goodreads book URL automatically.

How many reviews can I scrape per book?

You control this with maxItems. By default it is 20 per book (from the input schema), and you can set higher limits up to 10,000 per book.

Can I filter reviews by language?

Yes. Use filtersAndOptions.languageCode. Set it to a specific code like en, fr, de, es, it, etc., or use all for no filter to build multilingual Goodreads reviews datasets.

Can I choose between all editions and just this specific edition?

Yes. Set filtersAndOptions.reviewEdition to ALL for the entire work or only_this_book to limit to the specific edition β€” ideal for precise Goodreads review mining.

How are results exported?

All rows are saved to your Apify dataset in real time. You can download results in JSON, CSV, or Excel from the dataset, making this a handy Goodreads reviews exporter for analytics.

Is this a Goodreads review scraper Python solution?

Yes. The actor is implemented in Python and runs on Apify’s infrastructure. You can integrate the dataset outputs into your own Python pipelines or consume them via the Apify API.

Is this a Goodreads review scraper Chrome extension?

No extension is required. This is a cloud-based Goodreads review crawler that runs reliably on Apify, with smart proxy escalation built in.

Yes, when used responsibly. The actor gathers only publicly available data. You are responsible for complying with Goodreads’ terms and relevant laws.

Closing thoughts

Goodreads Review Scraper is built to extract structured, reliable Goodreads review data at scale. With bulk input, flexible filters, and robust connectivity, it empowers marketers, developers, researchers, authors, and publishers to export clean Goodreads review datasets for analytics and insights. Developers can automate workflows using Apify datasets and standard exports, while analysts benefit from ready-to-use JSON/CSV/Excel outputs. Start extracting smarter Goodreads book insights today and turn public reviews into actionable intelligence.

What are other Good scraping tools?

If you want to scrape specific Good data, you can use any of the dedicated scrapers below for faster and more targeted results.

Scraper NameScraper Name
Goodreads Book SearchGoodreads Phone Number Scraper
Goodreads Email Scraper