Goodreads Book, Author & Listopia List Scraper
Look up Goodreads books by URL, search query, or ISBN, or pull every book by an author, in a series, on a Listopia list, shelf, or genre page. Filter by rating, ratings count, publish year, language, genre, or author.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What to scrape. Auto runs every non-empty input you provide. |
bookUrls | array | optional | Goodreads book URLs, bare book IDs, or ISBNs. Used by books, reviews, editions, similar, and bookLists. (mode=books, reviews, editions, similar, bookLists, auto) |
searchQueries | array | optional | Titles, authors, or keywords to search for. (mode=search, auto) |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What to scrape. Auto runs every non-empty input you provide. |
bookUrls | array | optional | Goodreads book URLs, bare book IDs, or ISBNs. Used by books, reviews, editions, similar, and bookLists. (mode=books, reviews, editions, similar, bookLists, auto) |
searchQueries | array | optional | Titles, authors, or keywords to search for. (mode=search, auto) |
isbns | array | optional | ISBN-10 or ISBN-13 values. Hyphens and spaces are accepted. (mode=isbns, auto) |
authorUrls | array | optional | Goodreads author URLs or bare author IDs. (mode=authors, auto) |
seriesUrls | array | optional | Goodreads series URLs or bare series IDs. (mode=series, auto) |
listUrls | array | optional | Listopia /list/show/ URLs or bare list IDs. (mode=lists, auto) |
shelfNames | array | optional | Popular shelf names such as mystery, fantasy, or historical-fiction. (mode=shelves, auto) |
genreNames | array | optional | Genre slugs such as fantasy, romance, or science-fiction. (mode=genres, auto) |
maxItems | integer | optional | Hard cap on every record emitted in the run, including review, edition, quote, list, and summary records. |
detailLevel | string | optional | Full returns complete book records. Listing returns lighter row records for search, author, series, list, shelf, and genre results. |
includeMetadata | boolean | optional | Also emit one author, series, or Listopia summary record alongside the books. |
includeRelated | boolean | optional | In auto mode, also collect reviews, editions, similar books, and lists for each book URL. |
minRating | number | optional | Drop books rated below this value. Decimals such as 4.5 are supported. |
minRatingsCount | integer | optional | Drop books with fewer ratings than this. |
publishYearMin | integer | optional | Drop books first published before this year. |
publishYearMax | integer | optional | Drop books first published after this year. |
language | string | optional | Keep books whose language starts with this text, for example en, English, or fre. |
containsGenre | string | optional | Keep books with a genre containing this text. |
containsAuthor | string | optional | Keep books with an author name containing this text. |
maxReviewsPerBook | integer | optional | Reviews to collect for each book. (mode=reviews) |
reviewSort | string | optional | Order reviews by Goodreads default, newest first, or oldest first. (mode=reviews) |
reviewLanguage | string | optional | Only collect reviews written in this language. (mode=reviews) |
reviewRatingMin | integer | optional | Only collect reviews with at least this star rating. (mode=reviews) |
reviewRatingMax | integer | optional | Only collect reviews with at most this star rating. (mode=reviews) |
excludeSpoilers | boolean | optional | Skip reviews Goodreads marks as containing spoilers. (mode=reviews) |
maxEditionsPerBook | integer | optional | Editions to collect for each book. (mode=editions) |
quoteTags | array | optional | Quote tag pages to scrape, such as love, life, or wisdom. (mode=quotes) |
quoteAuthorUrls | array | optional | Author quote pages as Goodreads URLs or bare author IDs. (mode=quotes) |
quoteWorkUrls | array | optional | Work quote pages as Goodreads URLs or bare work IDs. (mode=quotes) |
maxQuotesPerSource | integer | optional | Quotes to collect from each tag, author, or work. (mode=quotes) |
maxSimilarPerBook | integer | optional | Similar books to collect for each input book. (mode=similar) |
maxListsPerBook | integer | optional | Listopia lists to collect for each input book. (mode=bookLists) |
releaseYear | integer | optional | Year of the new-releases chart. (mode=newReleases) |
releaseMonth | string | optional | Month of the new-releases chart, or all for the yearly chart. (mode=newReleases) |
Download the published input schema
View complete JSON
{
"description": "Scrape books, reviews, editions, quotes, authors, series, Listopia lists, shelves, genres, similar books, and release charts from Goodreads.",
"properties": {
"authorUrls": {
"default": [],
"description": "Goodreads author URLs or bare author IDs. (mode=authors, auto)",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Author URLs or IDs",
"type": "array"
},
"bookUrls": {
"default": [],
"description": "Goodreads book URLs, bare book IDs, or ISBNs. Used by books, reviews, editions, similar, and bookLists. (mode=books, reviews, editions, similar, bookLists, auto)",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [
"https://www.goodreads.com/book/show/4671.The_Great_Gatsby"
],
"title": "Book URLs or IDs",
"type": "array"
},
"containsAuthor": {
"description": "Keep books with an author name containing this text.",
"editor": "textfield",
"title": "Contains author",
"type": "string"
},
"containsGenre": {
"description": "Keep books with a genre containing this text.",
"editor": "textfield",
"title": "Contains genre",
"type": "string"
},
"detailLevel": {
"default": "full",
"description": "Full returns complete book records. Listing returns lighter row records for search, author, series, list, shelf, and genre results.",
"editor": "select",
"enum": [
"full",
"listing"
],
"enumTitles": [
"Full book records",
"Listing rows only"
],
"prefill": "full",
"title": "Detail level",
"type": "string"
},
"excludeSpoilers": {
"default": false,
"description": "Skip reviews Goodreads marks as containing spoilers. (mode=reviews)",
"prefill": false,
"title": "Exclude spoilers",
"type": "boolean"
},
"genreNames": {
"default": [],
"description": "Genre slugs such as fantasy, romance, or science-fiction. (mode=genres, auto)",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Genre names",
"type": "array"
},
"includeMetadata": {
"default": false,
"description": "Also emit one author, series, or Listopia summary record alongside the books.",
"prefill": false,
"title": "Include summary records",
"type": "boolean"
},
"includeRelated": {
"default": false,
"description": "In auto mode, also collect reviews, editions, similar books, and lists for each book URL.",
"prefill": false,
"title": "Include related book data",
"type": "boolean"
},
"isbns": {
"default": [],
"description": "ISBN-10 or ISBN-13 values. Hyphens and spaces are accepted. (mode=isbns, auto)",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [
"9780743273565"
],
"title": "ISBNs",
"type": "array"
},
"language": {
"description": "Keep books whose language starts with this text, for example en, English, or fre.",
"editor": "textfield",
"title": "Language",
"type": "string"
},
"listUrls": {
"default": [],
"description": "Listopia /list/show/ URLs or bare list IDs. (mode=lists, auto)",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Listopia URLs or IDs",
"type": "array"
},
"maxEditionsPerBook": {
"default": 20,
"description": "Editions to collect for each book. (mode=editions)",
"maximum": 1000,
"minimum": 1,
"prefill": 3,
"title": "Max editions per book",
"type": "integer"
},
"maxItems": {
"default": 50,
"description": "Hard cap on every record emitted in the run, including review, edition, quote, list, and summary records.",
"maximum": 1000000,
"minimum": 1,
"prefill": 1,
"title": "Max items",
"type": "integer"
},
"maxListsPerBook": {
"default": 20,
"description": "Listopia lists to collect for each input book. (mode=bookLists)",
"maximum": 100,
"minimum": 1,
"prefill": 5,
"title": "Max lists per book",
"type": "integer"
},
"maxQuotesPerSource": {
"default": 30,
"description": "Quotes to collect from each tag, author, or work. (mode=quotes)",
"maximum": 3000,
"minimum": 1,
"prefill": 3,
"title": "Max quotes per source",
"type": "integer"
},
"maxReviewsPerBook": {
"default": 30,
"description": "Reviews to collect for each book. (mode=reviews)",
"maximum": 10000,
"minimum": 1,
"prefill": 3,
"title": "Max reviews per book",
"type": "integer"
},
"maxSimilarPerBook": {
"default": 20,
"description": "Similar books to collect for each input book. (mode=similar)",
"maximum": 100,
"minimum": 1,
"prefill": 5,
"title": "Max similar books per book",
"type": "integer"
},
"minRating": {
"description": "Drop books rated below this value. Decimals such as 4.5 are supported.",
"maximum": 5,
"minimum": 0,
"title": "Minimum average rating",
"type": "number"
},
"minRatingsCount": {
"description": "Drop books with fewer ratings than this.",
"maximum": 10000000,
"minimum": 0,
"title": "Minimum ratings count",
"type": "integer"
},
"mode": {
"default": "auto",
"description": "What to scrape. Auto runs every non-empty input you provide.",
"editor": "select",
"enum": [
"auto",
"books",
"search",
"isbns",
"authors",
"series",
"lists",
"shelves",
"genres",
"reviews",
"editions",
"quotes",
"similar",
"bookLists",
"newReleases"
],
"enumTitles": [
"Auto (run every non-empty input)",
"Books by URL or ID",
"Search by keyword",
"Books by ISBN",
"Books by author",
"Books in a series",
"Listopia lists",
"Popular shelves",
"Genres",
"Reviews of books",
"Editions of books",
"Quotes",
"Similar books",
"Lists containing books",
"New releases by date"
],
"prefill": "isbns",
"title": "Mode",
"type": "string"
},
"publishYearMax": {
"description": "Drop books first published after this year.",
"maximum": 3000,
"minimum": 0,
"title": "Published year to",
"type": "integer"
},
"publishYearMin": {
"description": "Drop books first published before this year.",
"maximum": 3000,
"minimum": 0,
"title": "Published year from",
"type": "integer"
},
"quoteAuthorUrls": {
"default": [],
"description": "Author quote pages as Goodreads URLs or bare author IDs. (mode=quotes)",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Quote author URLs or IDs",
"type": "array"
},
"quoteTags": {
"default": [],
"description": "Quote tag pages to scrape, such as love, life, or wisdom. (mode=quotes)",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [
"love"
],
"title": "Quote tags",
"type": "array"
},
"quoteWorkUrls": {
"default": [],
"description": "Work quote pages as Goodreads URLs or bare work IDs. (mode=quotes)",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Quote work URLs or IDs",
"type": "array"
},
"releaseMonth": {
"default": "all",
"description": "Month of the new-releases chart, or all for the yearly chart. (mode=newReleases)",
"editor": "select",
"enum": [
"all",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"enumTitles": [
"Whole year",
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
],
"prefill": "all",
"title": "Release chart month",
"type": "string"
},
"releaseYear": {
"default": 2026,
"description": "Year of the new-releases chart. (mode=newReleases)",
"maximum": 2100,
"minimum": 1900,
"prefill": 2026,
"title": "Release chart year",
"type": "integer"
},
"reviewLanguage": {
"default": "all",
"description": "Only collect reviews written in this language. (mode=reviews)",
"editor": "select",
"enum": [
"all",
"en",
"es",
"fr",
"de",
"it",
"pt",
"nl",
"pl",
"tr",
"ar",
"ru",
"uk",
"zh",
"zh-TW",
"ja",
"ko",
"hi",
"bn",
"id",
"vi",
"th",
"sv",
"no",
"da",
"fi",
"cs",
"sk",
"hu",
"ro",
"bg",
"el",
"he",
"sr",
"hr",
"sl",
"lt",
"lv",
"et",
"ca",
"gl",
"eu",
"fa",
"ur",
"ms",
"tl",
"af",
"sw",
"ka",
"hy",
"az",
"uz",
"mn",
"is",
"ga",
"cy",
"sq",
"bs",
"mk",
"be",
"la"
],
"enumTitles": [
"All languages",
"English",
"Spanish",
"French",
"German",
"Italian",
"Portuguese",
"Dutch",
"Polish",
"Turkish",
"Arabic",
"Russian",
"Ukrainian",
"Chinese",
"Chinese (Traditional)",
"Japanese",
"Korean",
"Hindi",
"Bengali",
"Indonesian",
"Vietnamese",
"Thai",
"Swedish",
"Norwegian",
"Danish",
"Finnish",
"Czech",
"Slovak",
"Hungarian",
"Romanian",
"Bulgarian",
"Greek",
"Hebrew",
"Serbian",
"Croatian",
"Slovenian",
"Lithuanian",
"Latvian",
"Estonian",
"Catalan",
"Galician",
"Basque",
"Persian",
"Urdu",
"Malay",
"Tagalog",
"Afrikaans",
"Swahili",
"Georgian",
"Armenian",
"Azerbaijani",
"Uzbek",
"Mongolian",
"Icelandic",
"Irish",
"Welsh",
"Albanian",
"Bosnian",
"Macedonian",
"Belarusian",
"Latin"
],
"prefill": "all",
"title": "Review language",
"type": "string"
},
"reviewRatingMax": {
"description": "Only collect reviews with at most this star rating. (mode=reviews)",
"maximum": 5,
"minimum": 1,
"title": "Maximum review rating",
"type": "integer"
},
"reviewRatingMin": {
"description": "Only collect reviews with at least this star rating. (mode=reviews)",
"maximum": 5,
"minimum": 1,
"title": "Minimum review rating",
"type": "integer"
},
"reviewSort": {
"default": "DEFAULT",
"description": "Order reviews by Goodreads default, newest first, or oldest first. (mode=reviews)",
"editor": "select",
"enum": [
"DEFAULT",
"NEWEST",
"OLDEST"
],
"enumTitles": [
"Goodreads default",
"Newest first",
"Oldest first"
],
"prefill": "DEFAULT",
"title": "Review sort order",
"type": "string"
},
"searchQueries": {
"default": [],
"description": "Titles, authors, or keywords to search for. (mode=search, auto)",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Search queries",
"type": "array"
},
"seriesUrls": {
"default": [],
"description": "Goodreads series URLs or bare series IDs. (mode=series, auto)",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Series URLs or IDs",
"type": "array"
},
"shelfNames": {
"default": [],
"description": "Popular shelf names such as mystery, fantasy, or historical-fiction. (mode=shelves, auto)",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Shelf names",
"type": "array"
}
},
"required": [
"mode"
],
"schemaVersion": 1,
"title": "Goodreads Scraper Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
records | string | optional | Dataset containing every scraped record for the selected mode, discriminated by recordType. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "One dataset of Goodreads records identified by recordType: books, reviews, editions, quotes, authors, series, Listopia lists, listing rows, and release-chart entries.",
"properties": {
"records": {
"description": "Dataset containing every scraped record for the selected mode, discriminated by recordType.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Goodreads records",
"type": "string"
}
},
"title": "Goodreads Book, Author & Listopia List Scraper Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"views": {
"overview": {
"display": {
"component": "table",
"properties": {
"averageRating": {
"label": "Rating"
},
"primaryAuthor": {
"label": "Author"
},
"publishedYear": {
"label": "Year"
},
"ratingsCount": {
"label": "# Ratings"
},
"recordType": {
"label": "Type"
},
"title": {
"label": "Title"
},
"url": {
"format": "link",
"label": "URL"
}
}
},
"title": "Records",
"transformation": {
"fields": [
"recordType",
"title",
"primaryAuthor",
"averageRating",
"ratingsCount",
"publishedYear",
"url"
]
}
},
"reviews": {
"display": {
"component": "table",
"properties": {
"bookId": {
"label": "Book ID"
},
"createdAt": {
"label": "Created"
},
"likesCount": {
"label": "Likes"
},
"rating": {
"label": "Rating"
},
"recordType": {
"label": "Type"
},
"reviewText": {
"label": "Review"
},
"reviewer.name": {
"label": "Reviewer"
}
}
},
"title": "Reviews",
"transformation": {
"fields": [
"recordType",
"bookId",
"rating",
"reviewer.name",
"createdAt",
"likesCount",
"reviewText"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
Goodreads Book, Author & Listopia List Scraper
Pull Goodreads book data, reader reviews, editions, quotes, author profiles, series, Listopia rankings, shelf and genre charts, similar books, and new-release charts into one dataset. Look up books by URL, ID, ISBN, or keyword, or walk an entire author, series, or Listopia list. Every run is cookieless: no Goodreads login, account, or API key is needed.
What this actor does
- Fifteen modes:
books,search,isbns,authors,series,lists,shelves,genres,reviews,editions,quotes,similar,bookLists,newReleases, andauto. - Books by URL, ID, or ISBN with ratings, reviews, editions, awards, characters, places, series, social counters, and buy links.
- Reader reviews with full text, rating, date, reviewer profile, likes, comments, shelves, language, and sort filters.
- Discovery rows for search results, author bibliographies, series reading order, Listopia ranks, shelves, genres, similar books, and monthly or yearly release charts.
- Filters for minimum rating, ratings count, first-published year range, language, genre, and author, plus per-book review, edition, quote, similar-book, and list caps.
- Clean records: empty fields are omitted at every depth, never returned as
null,"",[], or{}.
Output
Every record has a recordType and a scrapedAt ISO 8601 UTC timestamp. Empty fields are omitted.
Book (recordType: "book")
- Identity:
bookId,kcaId,title,titleComplete,originalTitle,url,workId,workKcaId,workUrl,coverImage - Description:
description(plain text),descriptionHtml - Contributors:
authors[],primaryAuthor,authorUrls[],contributors[](name,authorId,url,role,isGoodreadsAuthor) - Series:
series(name,position,url,id,kcaId),allSeries[] - Edition:
isbn,isbn10,isbn13,asin,pagesCount,format,publisher,language,languageCode,publishedYear,publishedAt,firstPublishedYear,firstPublishedAt - Ratings:
averageRating,ratingsCount,reviewsCount,ratingsDistribution(1–5 stars),reviewsByLanguage - Discovery:
genres[],awards[],characters[],places[],editionsCount,editionsUrl,quotesCount,questionsCount,topicsCount,currentlyReadingCount,wantToReadCount - Commerce:
kindleUrl,buyLinks[]
Review (recordType: "review")
reviewId, bookId, workId, rating, preciseRating, reviewText, reviewTextHtml, spoiler, likesCount, commentsCount, createdAt, updatedAt, reviewer (id, name, url, imageUrl, isAuthor, followersCount, textReviewsCount), shelves[]
Edition (recordType: "edition")
editionId, bookId, sourceBookId, workId, title, format, publishedYear, publishedAt, publisher, pagesCount, authors[], primaryAuthor, isbn10, isbn13, asin, language, languageCode, averageRating, ratingsCount, coverImage, url. For editions, bookId is the edition's own Goodreads id; sourceBookId is the book supplied in the input.
Quote (recordType: "quote")
quoteId, quoteText, authorName, bookTitle, workId, workUrl, tags[], likesCount, quoteUrl, imageUrl, sourceType, sourceValue
Author (recordType: "author", with includeMetadata)
authorId, name, authorUrl, photoUrl, description, born, died, website, twitter, genres[], influences[], series[] (seriesId, name, url, bookCount, authors, averageRating, ratingsCount)
Series (recordType: "series", with includeMetadata)
seriesId, name, seriesUrl, description, primaryWorksCount, totalWorksCount
Listopia list (recordType: "list")
listId, name, listUrl, description, bookCount, voterCount, createdDate, creator (name, url), sourceBookId. Records emitted by bookLists carry the list id, name, URL, book count, voter count, and sourceBookId; the full description, creation date, and creator come from the lists mode with includeMetadata.
Listing rows
searchResult(query) andauthorWork(authorId):bookId,title,url,coverImage,authors[],primaryAuthor,series,averageRating,ratingsCount,reviewsCount,publishedYear,editionsCountseriesBook(seriesId,position) andlistEntry(listId,rank,score,voterCount)shelfBook(shelfName,shelfCount),genreBook(genre,group)similarBook(sourceBookId)newRelease(year,month,rank,count)
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode |
string | auto |
auto, books, search, isbns, authors, series, lists, shelves, genres, reviews, editions, quotes, similar, bookLists, newReleases |
bookUrls |
array | – | Book URLs, IDs, or ISBNs (books, reviews, editions, similar, bookLists) |
searchQueries |
array | – | Titles, authors, or keywords (search) |
isbns |
array | – | ISBN-10 or ISBN-13 values (isbns) |
authorUrls |
array | – | Author URLs or IDs (authors) |
seriesUrls |
array | – | Series URLs or IDs (series) |
listUrls |
array | – | Listopia URLs or IDs (lists) |
shelfNames |
array | – | Shelf names such as mystery (shelves) |
genreNames |
array | – | Genre slugs such as fantasy (genres) |
maxItems |
integer | 50 |
Hard cap on every emitted record |
detailLevel |
string | full |
full book records or listing rows |
includeMetadata |
boolean | false |
Add author, series, or Listopia summary records |
includeRelated |
boolean | false |
In auto mode, also collect reviews, editions, similar books, and lists for each book URL |
minRating |
number | – | Drop books rated below this value (decimals allowed) |
minRatingsCount |
integer | – | Drop books with fewer ratings |
publishYearMin |
integer | – | Drop books first published before this year |
publishYearMax |
integer | – | Drop books first published after this year |
language |
string | – | Keep books whose language starts with this text |
containsGenre |
string | – | Keep books with a genre containing this text |
containsAuthor |
string | – | Keep books with an author containing this text |
maxReviewsPerBook |
integer | 30 |
Reviews per book (reviews) |
reviewSort |
string | DEFAULT |
DEFAULT, NEWEST, OLDEST (reviews) |
reviewLanguage |
string | all |
Review language code (reviews) |
reviewRatingMin |
integer | – | Minimum review star rating (reviews) |
reviewRatingMax |
integer | – | Maximum review star rating (reviews) |
excludeSpoilers |
boolean | false |
Skip reviews marked as spoilers (reviews) |
maxEditionsPerBook |
integer | 20 |
Editions per book (editions) |
quoteTags |
array | – | Quote tag pages such as love (quotes) |
quoteAuthorUrls |
array | – | Author quote pages (quotes) |
quoteWorkUrls |
array | – | Work quote pages (quotes) |
maxQuotesPerSource |
integer | 30 |
Quotes per tag, author, or work (quotes) |
maxSimilarPerBook |
integer | 20 |
Similar books per input book (similar) |
maxListsPerBook |
integer | 20 |
Lists per input book (bookLists) |
releaseYear |
integer | 2026 |
Release chart year (newReleases) |
releaseMonth |
string | all |
all or 1–12 (newReleases) |
Example: book detail by URL
{
"mode": "books",
"bookUrls": ["https://www.goodreads.com/book/show/4671.The_Great_Gatsby"],
"maxItems": 5
}
Example: newest English reviews for two books
{
"mode": "reviews",
"bookUrls": ["4671", "9780743273565"],
"maxReviewsPerBook": 100,
"reviewSort": "NEWEST",
"reviewLanguage": "en",
"reviewRatingMin": 4,
"excludeSpoilers": true
}
Example: Listopia rows plus a list summary
{
"mode": "lists",
"listUrls": ["https://www.goodreads.com/list/show/1.Best_Books_Ever"],
"detailLevel": "listing",
"includeMetadata": true,
"maxItems": 500
}
Example: monthly release chart
{
"mode": "newReleases",
"releaseYear": 2026,
"releaseMonth": "10",
"maxItems": 30
}
Example: full author bibliography
{
"mode": "authors",
"authorUrls": ["https://www.goodreads.com/author/show/1077326.J_K_Rowling"],
"minRating": 4,
"maxItems": 60
}
How it works
Fill in one or more input arrays and pick a mode, or leave mode on auto to run every non-empty input in one pass. The actor reads Goodreads' public book pages, listing pages, and the same public data service the signed-out website uses, then streams records to the dataset as they are ready. Use detailLevel: "listing" when you only need ranks and row metadata; use full when you need complete book records. maxItems is a hard cap across the whole run, so a large request stops exactly at your limit rather than over-delivering. Set includeRelated when an auto run should also collect reviews, editions, similar books, and lists for its book URLs.
Usage cost
You pay only for Apify compute time on the selected memory setting; there is no per-record charge from this actor. Listing modes are the cheapest because they skip per-book detail calls. Review and full-detail runs cost more because each book requires additional requests.
FAQ
Do I need a Goodreads account, cookies, or an API key? No. The actor reads public data only and works without any credentials.
Do I need to configure a proxy?
No. Requests go direct first. If Goodreads challenges an HTML request, the actor retries and then tries a fresh Apify AUTO datacenter session when your account has that proxy access; book pages also have a .xml fallback. GraphQL and autocomplete run without a user proxy.
What is the difference between full and listing?
full returns complete book records with description, ratings, awards, and edition data. listing returns one lightweight row per result with the rank, title, author, rating, and URL, which is faster for large lists.
Why are reviews missing some likes, comments, or shelves? Goodreads itself omits those counters on some deleted or restricted reviews. The actor keeps the review text and rating and leaves the missing fields out.
Why is a book missing its ISBN or publisher? Not every Goodreads edition records those fields. The actor never invents values; it omits the field when the source does not publish it.
How far can search, Listopia, quotes, and shelves go? Goodreads caps search at about 2,000 results, Listopia at 10,000 entries per list, quote pages at 3,000 quotes per source, and popular shelf pages at 50 books. Genre pages expose the three curated groups shown on the page. The actor reports these limits in the run status instead of silently under-delivering.
Does maxItems include summary records?
Yes. Every record counts, including review, edition, quote, author, series, and list records.
Which memory setting does the actor use? The actor requests 1,024 MB and streams records instead of buffering a run. Account-level defaults can raise the effective run memory (often 4,096 MB on Apify accounts), so compute cost follows the memory Apify actually assigns.
Are the links and covers usable elsewhere? Book, cover, author, and buy links are the public URLs Goodreads publishes. A very old or rare cover may no longer be served by Goodreads itself.
Is this affiliated with Goodreads or Amazon? No. This is an independent third-party actor that reads Goodreads' public data.
Notes and limitations
- Search is capped by Goodreads at roughly 2,000 results per query. Split broad topics into narrower queries for deeper coverage.
- Listopia lists stop at 10,000 entries and quote pages at 3,000 quotes per source; both are site limits.
- Popular shelves return the 50 books Goodreads shows; there is no deeper shelf pagination. Use Listopia or genre pages for larger discovery sets.
- Genre pages expose the new-release, most-read, and popular groups shown on the page, not an unbounded catalog.
- Deleted reviews and incomplete editions can lack optional counters or identifiers; those fields are omitted.
- If Goodreads challenges HTML with its AWS WAF page, the actor retries, then attempts an Apify AUTO proxy session; if the challenge persists, it uses book
.xmland search autocomplete fallbacks where available and reports the challenge in the run status. GraphQL book, review, edition, similar, and list data is not WAF-gated. - The
.xmlbook fallback can resolve to the work's primary edition, so itsbookIdmay differ from the edition you requested and it carries fewer social/related fields. The actor uses GraphQL whenever that endpoint answers. - Data is live at run time; ratings, review counts, and chart positions change continuously.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build SE0siaqd22MLHJstA. Documentation is regenerated from the default published build; private drafts are not included.