Goodreads Scraper — Books, Authors & Reviews avatar

Goodreads Scraper — Books, Authors & Reviews

Pricing

$10.00 / 1,000 result scrapeds

Go to Apify Store
Goodreads Scraper — Books, Authors & Reviews

Goodreads Scraper — Books, Authors & Reviews

Scrape Goodreads books, reviews, and reading lists without authentication. Extract titles, authors, ratings, review counts, genres, ISBNs, and synopsis. Search by keyword, author, or genre. Monitor book trends. Export to JSON/CSV.

Pricing

$10.00 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

CryptoSignals Agent

CryptoSignals Agent

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

3 hours ago

Last modified

Share

Goodreads Scraper

Scrape book data from Goodreads — the world's largest book recommendation site with 125M+ members and 3.5B+ shelved books. Search books, get full details (ratings, reviews, genres, ISBN, page count), and browse complete author catalogs.

No API key needed. Goodreads shut down their public API in December 2020. This actor scrapes publicly available pages, making it the only reliable way to programmatically access Goodreads data.

What Data You Get

ActionData Returned
SearchBook ID, title, author, average rating, ratings count, URL, cover image
Book DetailsFull metadata: descriptions, all ratings (1-5 star breakdown), reviews count, page count, format, publisher, publish date, language, ISBN/ISBN13/ASIN, genres, series info, awards, cover URL
Author CatalogAuthor name, bio, image, book count, and their full book list with ratings

Input Parameters

ParameterTypeRequiredDefaultDescription
actionStringYes"search"What to scrape: search, book, or author
queryStringFor search"Harry Potter"Search term — title, author, keyword, or ISBN
urlStringFor book/authorGoodreads URL or just the numeric ID
maxItemsIntegerNo20Max results to return (1–200)

Input Examples

Search for books

{
"action": "search",
"query": "project hail mary",
"maxItems": 10
}

Get full book details

{
"action": "book",
"url": "https://www.goodreads.com/book/show/44767458-dune"
}

You can also pass just the book ID:

{
"action": "book",
"url": "44767458"
}

Get author's books

{
"action": "author",
"url": "https://www.goodreads.com/author/show/58.Frank_Herbert",
"maxItems": 50
}

Output Examples

Search Result

{
"bookId": 44767458,
"title": "Dune (Dune, #1)",
"author": "Frank Herbert",
"avgRating": 4.29,
"ratingsCount": 1646394,
"url": "https://www.goodreads.com/book/show/44767458-dune",
"coverUrl": "https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1555447414i/44767458.jpg"
}

Book Detail

{
"bookId": 44767458,
"title": "Dune",
"titleComplete": "Dune (Dune, #1)",
"authors": ["Frank Herbert"],
"description": "Set on the desert planet Arrakis, Dune is the story of the boy Paul Atreides...",
"avgRating": 4.29,
"ratingsCount": 1646396,
"ratingsDistribution": [25620, 54369, 199561, 504821, 862025],
"reviewsCount": 84029,
"numPages": 658,
"format": "Hardcover",
"publisher": "Ace",
"publishDate": "2019-10-01",
"language": "English",
"isbn": "059309932X",
"isbn13": "9780593099322",
"asin": "059309932X",
"genres": ["Science Fiction", "Fiction", "Fantasy", "Classics"],
"series": [{"title": "Dune", "position": "1"}],
"awards": ["Hugo Award for Best Novel (1966)", "Nebula Award for Best Novel (1966)"],
"coverUrl": "https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1555447414i/44767458.jpg",
"url": "https://www.goodreads.com/book/show/44767458-dune"
}

Author Catalog

{
"authorName": "Frank Herbert",
"bio": "Frank Patrick Herbert was an American science fiction author...",
"imageUrl": "https://images.gr-assets.com/authors/1429735/.jpg",
"booksCount": 68,
"books": [
{
"bookId": 44767458,
"title": "Dune (Dune, #1)",
"avgRating": 4.29,
"ratingsCount": 1646394,
"url": "https://www.goodreads.com/book/show/44767458-dune",
"coverUrl": "https://i.gr-assets.com/images/S/..."
}
]
}

Use with Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
# Search for books
run = client.actor("cryptosignals/goodreads-scraper").call(run_input={
"action": "search",
"query": "atomic habits",
"maxItems": 10,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['title']} by {item['author']}{item['avgRating']}⭐")
# Get full book details
run = client.actor("cryptosignals/goodreads-scraper").call(run_input={
"action": "book",
"url": "44767458",
})
for book in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{book['title']}{book['numPages']} pages, {book['ratingsCount']} ratings")
print(f"Genres: {', '.join(book.get('genres', []))}")

Handling Bot Detection

Goodreads may throttle or block requests from datacenter IPs, especially at higher volumes. If you see empty results or CAPTCHA pages:

  1. Use residential proxies — datacenter IPs get flagged quickly on Goodreads
  2. Lower maxItems — smaller batches are less likely to trigger rate limits
  3. Space out runs — avoid running the same search repeatedly in quick succession

For reliable residential proxies, I recommend ThorData — rotating residential IPs with good geographic coverage that work well for book data scraping.

Limitations

  • Goodreads' page structure may change without notice — the actor is updated regularly to handle this
  • Search returns up to 200 results per query (Goodreads pagination limit)
  • Very new books may not yet have full metadata populated
  • Rate limiting may occur on high-volume runs without residential proxies

Support

Found a bug or have a feature request? Open an issue on the actor's page or reach out through Apify's messaging system.