Goodreads Scraper — search & extract book data avatar

Goodreads Scraper — search & extract book data

Pricing

Pay per usage

Go to Apify Store
Goodreads Scraper — search & extract book data

Goodreads Scraper — search & extract book data

Scrape Goodreads — the world's largest book platform. Search books, extract ratings, authors, genres, ISBN, publication details, series info, and more. Output as JSON, CSV, or Excel.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Steven Bennett

Steven Bennett

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Share

Goodreads Scraper

Extract book data from Goodreads — the world's largest book recommendation platform with 150M+ members, 3.5B+ books cataloged, and 90M+ reviews.

No existing Goodreads scraper on Apify Store. First-mover advantage in this valuable niche.

Goodreads Scraper demo


Why Goodreads?

Goodreads is the definitive source for book metadata — ratings, reviews, genres, author info, series data, and more. Publishers, authors, marketers, librarians, and AI/ML teams all need this data:

  • Publishers — track ratings and reviews for competitive titles
  • Authors — monitor your book's performance and discoverability
  • Market researchers — analyze genre trends, rating distributions, publication patterns
  • AI/ML teams — build training datasets for recommendation systems, NLP models, book classifiers
  • Librarians — enrich catalog metadata with crowdsourced ratings and genres

Features

  • 🔍 Search anything — books by title, author, or keyword
  • 📚 Rich book data — title, author, rating, ratings count, reviews count, ISBN, ISBN-13, pages, publisher, publication year, format
  • 🏷️ Genres & shelves — extract all genre tags/categories for each book
  • 🏆 Awards — see which awards each book has won
  • 📖 Full descriptions — get the complete book description text
  • 🔗 Series data — identify series and series position
  • 📊 Rating analytics — average rating and total rating counts
  • 🔄 Smart sorting — by relevance, highest rated, or newest first
  • 📄 Automatic pagination — paginates through all search results up to your max
  • 🛡️ Anti-bot resistant — headless browser with stealth techniques
  • 💰 Pay-per-event pricing — you only pay for what you use
  • 🔌 API-first — call via REST API, Apify SDK, Python, or Zapier

Pricing

EventPrice
Run start$0.50 per run
Per book scraped$0.001 per book

A typical search for "science fiction" (1,000 results) would cost ~$1.50. A small search (50 books) costs ~$0.55.

Quick Start

Via Apify Console

  1. Go to Goodreads Scraper in Apify Console
  2. Click Run and fill in the fields:
    • search — what to look for (e.g. "Dune", "Stephen King", "fantasy")
    • maxItems — how many books to scrape (default: 50, max: 1000)
    • sort — sort order: relevance (default), highest rated, or newest first
  3. Wait for the run to complete
  4. Download results as JSON, CSV, or Excel

Via API

curl -X POST "https://api.apify.com/v2/acts/~goodreads-scraper/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"search": "The Name of the Wind",
"maxItems": 50,
"sort": "relevance"
}'

Via Apify SDK (Node.js)

import { Actor } from 'apify';
const run = await Actor.call('~goodreads-scraper', {
search: 'The Name of the Wind',
maxItems: 50,
sort: 'rating',
});
const { items } = await Actor.openDataset(run.defaultDatasetId);
console.log(items);

Via Python

import requests
response = requests.post(
'https://api.apify.com/v2/acts/~goodreads-scraper/runs',
params={'token': 'YOUR_API_TOKEN'},
json={
'search': 'The Name of the Wind',
'maxItems': 50,
'sort': 'relevance'
}
)
run = response.json()
print(f'Run ID: {run["data"]["id"]}')

Via Webhook/Zapier

Configure a webhook in Apify Console to send data directly to Zapier, Make (formerly Integromat), Slack, Google Sheets, or any HTTP endpoint.

Input Parameters

ParameterTypeDefaultDescription
searchstringrequiredSearch keyword, title, or author name
maxItemsnumber50Max books to scrape (1–1000)
sortstringrelevanceSort order: relevance, rating, date
proxyConfigurationobjectApify proxyProxy configuration (recommended for large runs)

Output Schema

Each scraped book returns the following fields:

#FieldTypeDescription
1idnumberGoodreads book ID
2titlestring | nullBook title
3authorstring | nullAuthor name
4authorUrlstring | nullAuthor profile URL
5ratingnumber | nullAverage rating (0–5)
6ratingsCountnumber | nullNumber of ratings
7reviewsCountnumber | nullNumber of text reviews
8isbnstring | nullISBN-10 identifier
9isbn13string | nullISBN-13 identifier
10pagesnumber | nullNumber of pages
11publicationYearnumber | nullYear of publication
12publisherstring | nullPublisher name
13descriptionstring | nullFull book description
14genresstring[]Genre/category tags (up to 30)
15awardsstring[]Awards the book has won
16imageUrlstring | nullBook cover image URL
17formatstring | nullBook format (Paperback, Hardcover)
18seriesstring | nullSeries name (if part of a series)
19urlstringGoodreads book page URL
20pricenumber | nullPrice (if available)
21scrapedAtstringISO 8601 timestamp of scrape

Sample Output

{
"id": 186074,
"title": "The Name of the Wind",
"author": "Patrick Rothfuss",
"authorUrl": "https://www.goodreads.com/author/show/108713.Patrick_Rothfuss",
"rating": 4.53,
"ratingsCount": 1051940,
"reviewsCount": 76291,
"isbn": "0575081406",
"isbn13": "9780575081406",
"pages": 662,
"publicationYear": 2007,
"publisher": "Gollancz",
"description": "Told in Kvothe's own voice, this is the tale of the magically gifted young man...",
"genres": ["Fantasy", "Fiction", "High Fantasy", "Epic Fantasy", "Magic", "Adventure"],
"awards": ["Quill Award for Science Fiction/Fantasy/Horror (2007)", "David Gemmell Legend Award (2008)"],
"imageUrl": "https://images.gr-assets.com/books/1472067508m/186074.jpg",
"format": "Paperback",
"series": "The Kingkiller Chronicle (1)",
"url": "https://www.goodreads.com/book/show/186074",
"price": null,
"scrapedAt": "2026-07-04T12:00:00.000Z"
}

Use Cases

📊 Publishing & Market Research

Analyze ratings, review sentiment, and genre trends across thousands of books. Identify emerging genres, track author popularity over time, and benchmark competitor titles.

🤖 AI/ML Training Data

Build high-quality datasets for book recommendation systems, NLP models, sentiment analysis, text classification, and genre prediction. Goodreads data is ideal for:

  • Matrix factorization — user-item rating matrices
  • Content-based filtering — book metadata & genre features
  • NLP training — authentic review text corpora
  • Book embeddings — genre-tagged, rated collections

📝 Author & Self-Publishing

Monitor your book's performance, track ratings and reviews, compare against similar titles, and identify keywords for better discoverability.

🏫 Academic Research

Bibliometric studies, network analysis of reading patterns, genre evolution tracking, literary analysis at scale.

📚 Library Science

Enrich library catalog metadata with crowdsourced ratings, shelf/genre tags, series information, and cover images.

Rate Limits & Anti-Bot

Goodreads is a content platform and generally doesn't aggressively block scrapers. However, for reliability at scale, this Actor includes:

  • ✅ Headless Playwright browser (full JS rendering)
  • ✅ Apify proxy support for IP rotation
  • ✅ Request retry logic with exponential backoff
  • ✅ Browser stealth techniques (spoofed webdriver, plugins, languages)
  • ✅ Polite delays between requests (human-like timing)

Technical Details

Architecture

The scraper uses a two-phase approach:

  1. Search phase — Crawls Goodreads search results pages, extracting basic info (title, author, rating, ratings count) and collecting book IDs
  2. Detail phase — Visits each book's detail page, extracting rich metadata from both JSON-LD structured data and DOM parsing for comprehensive coverage

RSC Payload Support

Goodreads has been migrating pages to Next.js App Router. The scraper checks for React Server Components (RSC) streaming payloads (self.__next_f.push) first — if found, it extracts structured data directly without DOM parsing. This is:

  • Faster (no DOM parsing overhead)
  • More resilient (resists layout changes)
  • More accurate (same data the app renders)

If RSC data isn't available (e.g. legacy pages), it falls back automatically to HTML/Cheerio parsing with JSON-LD extraction.

Stack

Crawlee (PlaywrightCrawler) · Node.js 20 · Cheerio for HTML fallback · Apify SDK · JSON-LD extraction · RSC payload parsing

Changelog

v1.0 — 2026-07-04

  • Initial release
  • Book search with full pagination
  • Full detail extraction (RSC → JSON-LD → DOM)
  • Genre/category extraction
  • Award tracking
  • Series information
  • Three sort options (relevance, rating, date)
  • Proxy support with Apify proxy

Built with 🛠️ by Meester Bot · Not affiliated with Goodreads or Amazon