Goodreads Books, ISBN & Reviews Scraper API
Pricing
from $1.00 / 1,000 results
Goodreads Books, ISBN & Reviews Scraper API
Scrape Goodreads books, ISBN lookups, reviews, ratings, authors, series, genres, and book metadata from URLs or searches into clean JSON datasets.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Inus Grobler
Maintained by CommunityActor stats
4
Bookmarked
20
Total users
9
Monthly active users
15 days
Issues response
15 hours ago
Last modified
Categories
Share
Goodreads Books, ISBN & Reviews Scraper API extracts public data from Goodreads into clean JSON datasets. Use it as a Goodreads scraper, Goodreads API alternative, ISBN lookup tool, book metadata extractor, and public Goodreads reviews scraper for publishing, catalog enrichment, reader sentiment, and book market research.
This Actor can start from Goodreads URLs, ISBN-10 or ISBN-13 values, book titles, author names, series URLs, search URLs, or mixed text queries such as The Hobbit J.R.R. Tolkien.
What does this Goodreads scraper do?
The Actor scrapes public Goodreads pages and search results, then returns structured records for books, authors, series, search matches, and reviews. It is built for workflows that need Goodreads book metadata, ratings, review counts, ISBN data, book covers, genres, shelves, page counts, authors, publication details, and public review text without maintaining a custom scraper.
It does not require Goodreads login credentials and does not scrape private account data.
Why scrape Goodreads?
- Build book recommendation datasets with Goodreads ratings, reviews, genres, and authors.
- Enrich book catalogs with covers, ISBN/ISBN13, ASIN, page count, language, format, publication data, and Goodreads IDs.
- Monitor book ratings and review counts for authors, publishers, literary agencies, and competitors.
- Analyze reader sentiment from public Goodreads reviews and star ratings.
- Discover books, authors, series, and related editions from title, author, or ISBN searches.
- Feed Goodreads data into BI tools, spreadsheets, databases, CRM systems, Make, n8n, Zapier, or LLM workflows.
Goodreads data you can extract
- Book metadata: title, full title, subtitle, description, cover image, Goodreads ID, ISBN, ISBN13, ASIN, page count, language, format, publication date, and first published date.
- Ratings and review metrics: average rating, ratings count, reviews count, star rating, likes, comments, and review dates when visible.
- Public reviews: reviewer name, reviewer profile URL, review text, star rating, spoiler marker, likes, comments, and timestamps when available.
- Author data: author name, Goodreads ID, biography, photo, website links, ratings, reviews, and bibliography summaries.
- Series data: series title, description, linked books, book order, and visible authors.
- Discovery data: Goodreads search results for book titles, ISBNs, author names, and mixed queries.
How to scrape Goodreads
- Open the Goodreads Scraper on Apify.
- Add one or more targets such as a Goodreads book URL, ISBN, book title, author name, or series URL.
- Choose
booksmode for metadata and search results, orreviewsmode to collect public reviews from matched books. - Select a crawl depth:
shallow,standard, ordeep. - Set
maxItems,maxSearchResultsPerQuery, ormaxReviewsPerBookwhen you need predictable cost and runtime. - Keep Apify Proxy enabled for more reliable production runs.
- Start the Actor and download the dataset as JSON, JSONL, CSV, HTML, XML, RSS, or Excel.
Input
| Field | Type | Description |
|---|---|---|
targets | Array of strings | Goodreads URLs, ISBN-10 or ISBN-13 values, book titles, author names, series URLs, search URLs, or mixed text queries. |
depth | String | Controls how much related Goodreads data is followed. Use shallow, standard, or deep. |
searchMode | String | Use books for Goodreads book search, ISBN lookup, and metadata. Use reviews to collect public reviews from matched books. |
maxReviewsPerBook | Integer | Optional cap for public reviews collected from each opened book. |
maxSearchResultsPerQuery | Integer | Optional cap for Goodreads search matches opened per query. Lower values reduce runtime and cost. |
maxItems | Integer | Optional cap for total dataset rows produced by the run. |
proxyConfiguration | Object | Standard Apify proxy settings. Apify Proxy is recommended for reliable production scraping. |
Example inputs
ISBN lookup and book metadata
{"targets": ["9780743273565"],"searchMode": "books","depth": "standard","maxSearchResultsPerQuery": 3,"maxItems": 10,"proxyConfiguration": {"useApifyProxy": true}}
Search Goodreads by book title
{"targets": ["Dune"],"searchMode": "books","depth": "standard","maxSearchResultsPerQuery": 5,"maxItems": 25,"proxyConfiguration": {"useApifyProxy": true}}
Scrape a Goodreads book URL with reviews
{"targets": ["https://www.goodreads.com/book/show/11588.The_Shining"],"searchMode": "reviews","depth": "standard","maxReviewsPerBook": 100,"maxItems": 125,"proxyConfiguration": {"useApifyProxy": true}}
Run multiple Goodreads targets at once
{"targets": ["9780441172719","Frank Herbert","https://www.goodreads.com/book/show/44767458-dune"],"searchMode": "books","depth": "deep","maxSearchResultsPerQuery": 10,"maxItems": 100,"proxyConfiguration": {"useApifyProxy": true}}
Output
Results are saved to the default Apify dataset as structured JSON. In the default entities output mode, new records are pushed to the dataset while the Actor is still running, so you can inspect or integrate results before the crawl finishes. You can download the dataset extracted by this Goodreads Scraper in formats such as JSON, JSONL, CSV, HTML, XML, RSS, or Excel.
The Actor can return these record types:
search_result- matched Goodreads search result.book- Goodreads book details and metadata.author- Goodreads author profile details.series- Goodreads series details.review- public Goodreads review item.
Common output fields include recordType, title, fullTitle, name, author, description, reviewText, goodreadsId, isbn, isbn13, averageRating, ratingsCount, reviewsCount, starRating, pageCount, firstPublishedDate, sourceUrl, canonicalUrl, and scrapedAt.
Example dataset item
{"recordType": "book","title": "The Great Gatsby","fullTitle": "The Great Gatsby","authors": [{"name": "F. Scott Fitzgerald","profileUrl": "https://www.goodreads.com/author/show/3190.F_Scott_Fitzgerald"}],"averageRating": 3.93,"ratingsCount": 6030303,"reviewsCount": 134725,"pageCount": 180,"goodreadsId": "41733839","workId": "245494","canonicalUrl": "https://www.goodreads.com/en/book/show/41733839-the-great-gatsby","sourceUrl": "https://www.goodreads.com/book/show/4671.The_Great_Gatsby","scrapedAt": "2026-05-20T15:38:44.926Z"}
The Actor also writes a run summary to the default key-value store, including scraped item totals, failed URL count, blocked request count, crawl mode, and output mode.
Use this Goodreads scraper with the Apify API
You can run this Goodreads Scraper from Apify Console, the REST API, or the official Apify API clients. The examples below start the Actor, wait for the run to finish, and read the default dataset.
Python API example
import osfrom apify_client import ApifyClientACTOR_ID = "thescrapelab/Apify-Goodreads-Scraper"client = ApifyClient(os.environ["APIFY_TOKEN"])run_input = {"targets": ["9780743273565", "The Great Gatsby"],"searchMode": "books","depth": "standard","maxSearchResultsPerQuery": 5,"maxReviewsPerBook": 25,"maxItems": 50,"proxyConfiguration": {"useApifyProxy": True,},}run = client.actor(ACTOR_ID).call(run_input=run_input)if run is None:raise RuntimeError("Actor run failed")dataset_id = run["defaultDatasetId"]for item in client.dataset(dataset_id).iterate_items():print(item)
JavaScript API example
import { ApifyClient } from 'apify-client';const ACTOR_ID = 'thescrapelab/Apify-Goodreads-Scraper';const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const runInput = {targets: ['9780743273565', 'The Great Gatsby'],searchMode: 'books',depth: 'standard',maxSearchResultsPerQuery: 5,maxReviewsPerBook: 25,maxItems: 50,proxyConfiguration: {useApifyProxy: true,},};const run = await client.actor(ACTOR_ID).call(runInput);const datasetId = run.defaultDatasetId;const { items } = await client.dataset(datasetId).listItems({ clean: true });for (const item of items) {console.log(item);}
Tips for better Goodreads scraping results
- Use ISBNs when you need exact book lookup or catalog enrichment.
- Use direct Goodreads URLs when you already know the exact book, author, or series page.
- Use
standarddepth for most metadata extraction and review workflows. - Use
deepdepth when you need richer related data or more linked entities. - Set
maxReviewsPerBookwhen you need predictable run size, cost, and runtime. - Keep Apify Proxy enabled for production runs.
FAQ
Can I scrape Goodreads by ISBN?
Yes. Add an ISBN-10 or ISBN-13 value to targets, for example 9780743273565. The Actor searches Goodreads and follows the matched book page when available.
Can I scrape Goodreads reviews?
Yes. Use searchMode: "reviews" or start from a Goodreads book URL and set maxReviewsPerBook to control how many public reviews are collected.
Can I use this as a Goodreads API?
Yes. The Actor works well as a Goodreads data API for public book metadata, ISBN lookup, author research, rating data, and review extraction. You can run it from Apify Console, the Apify API, Python, JavaScript, Make, n8n, Zapier, or scheduled tasks.
Is it legal to scrape Goodreads?
This Actor extracts public Goodreads data only. You should use the results responsibly and make sure your use case complies with applicable laws, Goodreads terms, and privacy rules. If your workflow involves personal data, consult qualified legal advice.
Limitations
- The Actor extracts public Goodreads data only.
- Direct Goodreads review pages can be login-gated; public reviews visible from book pages are the recommended review source.
- Goodreads page availability, visible fields, and review access can vary by book, region, or Goodreads interface changes.
- Very broad searches, deep crawling, and high review caps can produce larger runs and require more time.