Goodreads Review Scraper
Pricing
from $5.99 / 1,000 results
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
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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 type | Description | Example value |
|---|---|---|
| bookUrl | Source book URL for the review | https://www.goodreads.com/book/show/26032825 |
| id | Review ID from Goodreads | "123456789" |
| rating | Star rating given by the reviewer | 5 |
| text | Full review text | "A brilliant sequel with unforgettable characters..." |
| createdAt | Review creation timestamp (ms) | 1714147200000 |
| updatedAt | Review last update timestamp (ms) | 1714752000000 |
| lastRevisionAt | Last revision timestamp (ms) | 1714838400000 |
| recommendFor | Audience recommendation text if present | null |
| spoilerStatus | Spoiler setting for the review | "NONE" |
| likeCount | Number of likes/helpful votes | 12 |
| commentCount | Number of comments on the review | 3 |
| viewerHasLiked | Whether the current viewer liked it (from API) | false |
| shelving | Shelving 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"} |
| creator | Reviewer 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"} |
| __typename | GraphQL 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
- Create or log in to your Apify account.
- Open the Goodreads Review Scraper actor on Apify.
- 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.
- Set maxItems to control how many reviews to collect per book.
- (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
- (Optional) Configure proxyConfiguration if you need custom proxy settings; the actor will automatically escalate connection strategy if needed.
- Click Start to run. Youβll see status updates as reviews are discovered and saved.
- 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 name | Description |
|---|---|
| Marketing analytics + sentiment | Analyze reviewer text and ratings to quantify sentiment and identify messaging opportunities from public Goodreads opinions. |
| Author/publisher feedback loop | Track 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 dashboards | Feed 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 analysis | Group 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.
Is it legal / ethical to use Goodreads Review Scraper?
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
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| urls | array | Yes | β | 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. |
| maxItems | integer | No | 20 | How many reviews to collect for each book in your list. |
| filtersAndOptions.sortBy | string | No | "popular" | Sort reviews by: popular, newest, or oldest. |
| filtersAndOptions.languageCode | string | No | "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.reviewEdition | string | No | "ALL" | ALL (reviews for the whole work) or only_this_book (this edition only). |
| proxyConfiguration | object | No | β | 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.
Is it legal to use this scraper?
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 Name | Scraper Name |
|---|---|
| Goodreads Book Search | Goodreads Phone Number Scraper |
| Goodreads Email Scraper |