Goodreads Reviews Scraper Cheap avatar

Goodreads Reviews Scraper Cheap

Pricing

from $1.99 / 1,000 results

Go to Apify Store
Goodreads Reviews Scraper Cheap

Goodreads Reviews Scraper Cheap

Goodreads review scraper that collects book reviews, star ratings, and reviewer profiles without login or authentication, giving authors and researchers clean data for sentiment analysis and competitive research.

Pricing

from $1.99 / 1,000 results

Rating

0.0

(0)

Developer

Data API

Data API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

Goodreads Reviews Scraper

Goodreads Reviews Scraper

Reader reviews on Goodreads hold a lot of signal, but the site gives you no easy way to pull them out. You can scroll a book page forever and still end up copy-pasting one review at a time into a spreadsheet. This scraper skips all of that. Paste a book link, say how many reviews you want, and get back a clean table: the review text, the star rating, who wrote it, how many likes it picked up, and which shelf they filed it under. Run it on one title or a whole stack of them, and export to JSON, CSV, or Excel.

What you get

One row per review, with a steady shape every time. Fields that a reviewer left blank come back as null rather than disappearing, so your columns line up when you load the data into a sheet or database. Each row carries three kinds of data:

  • The reviewcritiqueId, critiqueUrl, critiqueHtml, critiqueText, starRating, postedAt, editedAt, revisedAt, hasSpoiler, likesTotal, commentsTotal, recommendedAudience
  • The readerreaderId, readerName, readerProfileUrl, readerAvatarUrl, readerIsAuthor, readerFollowers, readerReviewsWritten
  • Shelf and bookshelfSlug, shelfLabel, shelfPageUrl, shelfTags, bookWorkId, collectedAt

Quick start

  1. Click Try for free and open the input form.
  2. Paste a Goodreads book link into Book page URL, or drop several into Book page URLs for a batch.
  3. Set Reviews per book to cap how many reviews each title returns.
  4. Choose a proxy if you want one, then press Start and export to JSON, CSV, Excel, or XML when the run wraps up.

How it works

Use cases

  • Sentiment work — collect a few hundred reader reviews to train a classifier or run opinion mining on how people reacted to a book
  • Author and competitor reading — see what readers actually wrote about your titles or the ones you're up against
  • Recommendation engines — feed ratings, shelves, and tags into similarity scoring or recommendation logic
  • Genre and market research — gauge how readers responded to recent releases in a category before you commit to one
  • Academic datasets — assemble reader-review corpora for literary or sociological study
  • Acquisition calls — read feedback on comparable books before greenlighting something similar

Input

FieldTypeRequiredDescription
titleUrlstringNoA single Goodreads book page link. Best for one title at a time. Example https://www.goodreads.com/book/show/2767052-the-hunger-games.
titleUrlsarray of stringsNoA list of Goodreads book page links, one per row, for batch runs.
reviewsLimitintegerNoReviews to collect per book. Hard ceiling of 1000. Default 50.
runTimeoutSecondsintegerNoCap on the whole run, in seconds. Default 420.
requestTimeoutSecondsintegerNoCap on each API call, in seconds. Default 45.
proxyConfigurationobjectNoProxies used for requests. Datacenter is the default; switch to Residential if Goodreads starts blocking.

You can fill titleUrl, titleUrls, or both. Repeated links are dropped.

Example input

{
"titleUrls": [
"https://www.goodreads.com/book/show/2767052-the-hunger-games",
"https://www.goodreads.com/book/show/4671.The_Great_Gatsby"
],
"reviewsLimit": 50,
"runTimeoutSeconds": 420,
"requestTimeoutSeconds": 45,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["DATACENTER"]
}
}

Output

Every review becomes one row, and each field is always present — values a reviewer never filled in come back as null, so the dataset stays rectangular.

Example output

{
"critiqueId": "kca://review:goodreads/amzn1.gr.review:goodreads.v1.tI_H8-8bJGQv1O4IIOpeTA",
"critiqueUrl": "https://www.goodreads.com/review/show/2280609898",
"critiqueHtml": "<b>4.5 Stars!</b><br /><br />Buddy read with the gang and it held up...",
"critiqueText": "4.5 Stars! Buddy read with the gang and it held up...",
"starRating": 5,
"postedAt": "2018-02-01T20:15:18+00:00",
"editedAt": "2021-02-19T16:45:57+00:00",
"revisedAt": "2018-03-20T18:24:36+00:00",
"hasSpoiler": false,
"likesTotal": 114,
"commentsTotal": 17,
"recommendedAudience": null,
"readerId": 44125660,
"readerName": "Beth",
"readerProfileUrl": "https://www.goodreads.com/user/show/44125660-beth",
"readerAvatarUrl": "https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/users/sample.jpg",
"readerIsAuthor": false,
"readerFollowers": 627,
"readerReviewsWritten": 929,
"shelfSlug": "read",
"shelfLabel": "Read",
"shelfPageUrl": "https://www.goodreads.com/review/list/44125660?shelf=read",
"shelfTags": ["2018-reads", "audiobook", "book-series", "five-stars", "young-adult-fantasy"],
"bookWorkId": "kca://work/amzn1.gr.work.v1.TbpxJa2CwiSSz_9W2FruoA",
"collectedAt": "2026-06-29T10:30:00+00:00"
}

Output fields

FieldTypeDescription
critiqueIdstringGoodreads' identifier for the review
critiqueUrlstringDirect link to the review
critiqueHtmlstringReview body as raw HTML
critiqueTextstringReview body as plain text, tags removed
starRatingintegerStars given, 1 to 5, or null if none
postedAtstringWhen the review first went up
editedAtstringWhen the review was last changed
revisedAtstringWhen the review text was last edited
hasSpoilerbooleanWhether the review is flagged as a spoiler
likesTotalintegerNumber of likes
commentsTotalintegerNumber of comments
recommendedAudiencestringWho the reader recommends the book for, when noted
readerIdintegerReviewer's numeric Goodreads ID
readerNamestringReviewer's display name
readerProfileUrlstringLink to the reviewer's profile
readerAvatarUrlstringLink to the reviewer's profile photo
readerIsAuthorbooleanWhether the reviewer is a published author
readerFollowersintegerHow many followers the reviewer has
readerReviewsWrittenintegerTotal reviews the reviewer has written
shelfSlugstringShelf machine name (for example read, currently-reading)
shelfLabelstringReader-facing shelf name (for example Read)
shelfPageUrlstringLink to the reviewer's shelf
shelfTagsarrayCustom shelf tags the reviewer added
bookWorkIdstringInternal Goodreads work ID for the book
collectedAtstringWhen the actor captured this review

Tips for best results

  • Try a small run first. Scrape 10 reviews from one book before you point it at a long list — most URL or format snags show up in the first batch.
  • Switch to Residential if you get blocked. Datacenter clears most books; reach for residential when you see repeated 403s or rate limits.
  • Mind the 1000-per-book ceiling. reviewsLimit tops out at 1000 for each title, so split very popular books across separate runs if you need more.
  • Raise requestTimeoutSeconds to ~60 when you run on residential proxies or hit slow responses.
  • Batch with titleUrls. Stack several links and the actor reads them in order into one dataset, so a multi-book pull is a single run.

How can I use Goodreads reviews data?

How can I use the Goodreads Reviews Scraper to run sentiment analysis on a book? Paste the book's link, set reviewsLimit to a few hundred, and run it. You get critiqueText for clean review bodies plus starRating for a labelled signal — enough to train a sentiment model or chart how reader reactions skew positive or negative for that title.

How can I export Goodreads reviews to CSV or Excel? Run the scraper on one or more book links, then use the export button when it finishes. Every review lands as a row with the same columns — review text, rating, reader, likes, shelf — so the JSON, CSV, or Excel file drops straight into a spreadsheet or BI tool.

How can I pull reviews for several books at once for genre research? Drop a batch of book links into titleUrls and the actor walks them in order, writing all reviews into one dataset tagged with bookWorkId. Group by that field to compare how readers responded across a genre or a set of comparable titles.

How can I collect Goodreads reviewer profiles alongside the reviews? Each row already carries reader fields — readerName, readerProfileUrl, readerFollowers, readerReviewsWritten, and readerIsAuthor — so you can see who is reviewing, weight opinions by reach, or build a list of active reviewers in a niche without a second scrape.

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the legality of web scraping.

Support

Questions, feature requests, or a field you'd like added? Reach out at data.apify@proton.me and we'll get back to you.