Goodreads Books & Reviews Scraper avatar

Goodreads Books & Reviews Scraper

Pricing

from $6.80 / 1,000 results

Go to Apify Store
Goodreads Books & Reviews Scraper

Goodreads Books & Reviews Scraper

Scrape Goodreads books by keyword, book URL, author, list or shelf: ratings, ISBN, genres, series, description and reviews. Export JSON, CSV, Excel.

Pricing

from $6.80 / 1,000 results

Rating

5.0

(1)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

Goodreads Books & Reviews Scraper

Goodreads Books & Reviews Scraper

Here is one real result, with every field the actor returns (reviews array trimmed to one sample; the actor returns up to maxReviews):

{
"imageUrl": "https://m.media-amazon.com/images/S/compressed.photo.goodreads.com/books/1564783201i/44492286.jpg",
"title": "Children of Dune",
"titleComplete": "Children of Dune (Dune #3)",
"url": "https://www.goodreads.com/book/show/44492286-children-of-dune",
"bookId": 44492286,
"workId": 3634573,
"authorName": "Frank Herbert",
"authorUrl": "https://www.goodreads.com/author/show/58.Frank_Herbert",
"authors": ["Frank Herbert"],
"authorFollowers": 17368,
"authorBooksCount": 627,
"isbn": "0593098242",
"isbn13": "9780593098240",
"asin": "0593098242",
"format": "Paperback",
"pageCount": 609,
"publisher": "Ace",
"publicationDate": "2019-06-04T07:00:00.000Z",
"publicationYear": 2019,
"originalPublicationYear": 1976,
"language": "English",
"averageRating": 3.95,
"ratingsCount": 267081,
"reviewsCount": 14575,
"ratingsCountDist": [2244, 12202, 61973, 109767, 80895],
"seriesTitle": "Dune",
"seriesUrl": "https://www.goodreads.com/series/45935-dune",
"seriesPosition": "3",
"genres": ["Science Fiction", "Fiction", "Fantasy", "Classics", "Audiobook", "Science Fiction Fantasy", "Space Opera", "Novels", "Space", "Adventure"],
"awards": ["Hugo Award", "Locus Award", "Washington State Book Award"],
"characters": ["Leto II Atreides", "Muad'dib", "Stilgar", "Vladimir Harkonnen", "Duncan Idaho", "Paul Atreides", "Alia Atreides", "Lady Jessica", "Gurney Halleck"],
"places": ["Arrakis", "Sietch Tabr", "Salusa Secundus"],
"description": "Book three in Frank Herbert's magnificent Dune Chronicles, one of the most significant sagas in the history of literary science fiction. [trimmed for display; full text returned]",
"reviews": [
{
"reviewerName": "Richard Houchin",
"reviewerUrl": "https://www.goodreads.com/user/show/889975-richard-houchin",
"rating": 3,
"text": "The Dune series is remarkable in that each sequel gets progressively worse until it's unreadable. The first book is truly excellent. [trimmed for display; full text returned]",
"date": "2008-05-06T19:20:29.000Z",
"likes": 1019,
"comments": 72,
"spoiler": false,
"url": null
}
],
"reviewsSampleCount": 10,
"observedAt": "2026-08-10T14:32:30.204Z",
"error": null
}

The most complete Goodreads scraper available. It returns every book field the page exposes, including ISBNs, series, genres, awards, characters, places and the full ratings distribution, plus a sample of the most-liked reviews and optional AI add-ons for a summary, topics and a review digest, and gives you search, direct URL and list inputs to target exactly the books you need.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor finds Goodreads books by keyword search, direct book URL, or list/author/shelf/Listopia URL, then writes one normalized record per book to the run's dataset. Each record carries the full book metadata (title, author, ISBNs, format, publisher, publication years, language), the community stats (average rating, ratings count, reviews count, and the five-bucket ratings distribution), plus genres, awards, characters and places. When reviews are enabled, each book includes a sample of its most-liked recent reviews with reviewer, rating, text, date and like/comment counts. Optional paid AI add-ons write a spoiler-free summary, extract theme/topic tags and a genre category, and distill the collected reviews into a digest.

Data covers books listed on Goodreads. Fields the page does not publish are returned as null; the actor never invents a value.

Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 10 books matching "dune" with up to 10 reviews each.

{
"searchQueries": ["dune"],
"maxBooks": 10,
"withReviews": true,
"maxReviews": 10
}

Use bookUrls for direct book pages, or listUrls for author pages, shelves or Listopia lists.

Input reference

FieldTypeRequiredDefaultDescription
searchQueriesstring[]no["dune"]Book titles or author names to search on Goodreads. Each keyword returns the top matching books.
bookUrlsstring[]no(empty)Direct Goodreads book URLs, for example https://www.goodreads.com/book/show/234225.Dune.
listUrlsstring[]no(empty)Goodreads author pages, author book lists, Listopia lists or shelf URLs. Every book on the page is collected.
maxBooksintegerno10Maximum number of books to collect across all inputs.
withReviewsbooleannotrueWhen enabled, each book includes a sample of its most-liked recent reviews.
maxReviewsintegerno30How many reviews to keep per book when reviews are on. Up to about 30 are available per book.
withSummarybooleannofalsePaid add-on. Generate a short spoiler-free AI summary of each book. Requires a paid plan.
withTopicsbooleannofalsePaid add-on. Extract theme/topic tags and a broad genre category using AI. Requires a paid plan.
withReviewDigestbooleannofalsePaid add-on. Distill the collected reviews for each book into what readers loved and criticized. Requires a paid plan.

AI add-ons are disabled for free (non-paying) Apify users.

Output reference

One dataset item per book. Types: string, number, integer, boolean, string[], object[], or null when the source value is absent.

FieldTypeDescription
imageUrlstringCover image URL.
titlestringBook title.
titleCompletestringFull title including series, for example Children of Dune (Dune #3).
urlstringCanonical Goodreads book URL.
bookIdintegerGoodreads book edition ID.
workIdintegerGoodreads work ID (shared across editions).
authorNamestringPrimary author name.
authorUrlstringPrimary author profile URL.
authorsstring[]All credited authors.
authorFollowersintegerFollower count of the primary author.
authorBooksCountintegerNumber of books by the primary author.
isbnstringISBN-10, or null.
isbn13stringISBN-13, or null.
asinstringAmazon ASIN, or null.
formatstringEdition format, for example Paperback.
pageCountintegerPage count, or null.
publisherstringPublisher, or null.
publicationDatestringISO 8601 publication date of this edition, or null.
publicationYearintegerPublication year of this edition.
originalPublicationYearintegerYear the work was first published.
languagestringLanguage of the edition.
averageRatingnumberAverage community rating (0-5).
ratingsCountintegerNumber of ratings.
reviewsCountintegerNumber of text reviews.
ratingsCountDistinteger[]Ratings distribution, five buckets from 1 to 5 stars.
seriesTitlestringSeries name, or null.
seriesUrlstringSeries page URL, or null.
seriesPositionstringPosition within the series, or null.
genresstring[]Genre shelves for the book.
awardsstring[]Awards the book has received.
charactersstring[]Named characters listed on the page.
placesstring[]Settings/places listed on the page.
descriptionstringBook description text.
reviewsobject[]Sample of most-liked reviews (when withReviews). Each has reviewerName, reviewerUrl, rating, text, date, likes, comments, spoiler, url.
reviewsSampleCountintegerNumber of reviews included in the sample.
aiSummarystringAI add-on. Spoiler-free summary (only when withSummary).
aiTopicsstring[]AI add-on. Theme/topic tags (only when withTopics).
aiCategorystringAI add-on. Broad genre category (only when withTopics).
aiReviewDigestobjectAI add-on. Distilled reader sentiment (only when withReviewDigest).
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

Real review object from the live run (input {"searchQueries": ["dune"], "maxBooks": 10, "withReviews": true, "maxReviews": 10}), one entry from the reviews array of the Children of Dune record:

{
"reviewerName": "Richard Houchin",
"reviewerUrl": "https://www.goodreads.com/user/show/889975-richard-houchin",
"rating": 3,
"text": "The Dune series is remarkable in that each sequel gets progressively worse until it's unreadable. The first book is truly excellent. It's mantra on fear alone makes it great. [trimmed for display; full text returned]",
"date": "2008-05-06T19:20:29.000Z",
"likes": 1019,
"comments": 72,
"spoiler": false,
"url": null
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~goodreads-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["dune"],"maxBooks":10,"withReviews":true,"maxReviews":20}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~goodreads-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"bookUrls":["https://www.goodreads.com/book/show/234225.Dune"],"withSummary":true}'

Apify CLI:

apify call scrapers_lat/goodreads-scraper \
--input '{"searchQueries":["Frank Herbert"],"maxBooks":50}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per book returned (result event). See the pricing tab for the current per-result price. Reviews are included with the book record.
  • Optional add-ons. The AI add-ons (ai_summary, ai_topics, ai_review_digest) are billed only when they produce usable output for a book.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results and add-ons.
  • Free Apify plans are capped at 10 books per run and cannot use the AI add-ons. Upgrade for higher maxBooks and AI features.

FAQ and troubleshooting

A run returned 0 records. Why? The search, book URL or list URL did not resolve to any books. Check the query or URL. Zero-result runs are not charged.

How many reviews do I get per book? Up to about 30, controlled by maxReviews, drawn from the most-liked recent reviews. Set withReviews to false to skip reviews entirely.

Can I scrape a whole shelf or Listopia list? Yes. Pass the shelf, author or Listopia URL in listUrls and every book on the page is collected up to maxBooks.

Why are some fields null? Goodreads does not publish every field for every book (for example ISBN or page count on some editions). Missing values are returned as null, never invented.

What do the AI add-ons add? withSummary adds a spoiler-free summary, withTopics adds theme tags and a genre category, and withReviewDigest distills the collected reviews. All require a paid Apify plan and are billed only when they produce output.

Is this an official Goodreads tool? No. This actor is independent and has no affiliation with Goodreads or Amazon. It reads only data that is publicly available on the site. Use it in accordance with Goodreads' terms of service.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with Goodreads or Amazon. Accesses only publicly available data. Use in accordance with Goodreads' terms of service.