Dataspryva

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.

FieldTypeRequiredDescription
modestringrequiredWhat to scrape. Auto runs every non-empty input you provide.
bookUrlsarrayoptionalGoodreads book URLs, bare book IDs, or ISBNs. Used by books, reviews, editions, similar, and bookLists. (mode=books, reviews, editions, similar, bookLists, auto)
searchQueriesarrayoptionalTitles, authors, or keywords to search for. (mode=search, auto)
Show all input fields
FieldTypeRequiredDescription
modestringrequiredWhat to scrape. Auto runs every non-empty input you provide.
bookUrlsarrayoptionalGoodreads book URLs, bare book IDs, or ISBNs. Used by books, reviews, editions, similar, and bookLists. (mode=books, reviews, editions, similar, bookLists, auto)
searchQueriesarrayoptionalTitles, authors, or keywords to search for. (mode=search, auto)
isbnsarrayoptionalISBN-10 or ISBN-13 values. Hyphens and spaces are accepted. (mode=isbns, auto)
authorUrlsarrayoptionalGoodreads author URLs or bare author IDs. (mode=authors, auto)
seriesUrlsarrayoptionalGoodreads series URLs or bare series IDs. (mode=series, auto)
listUrlsarrayoptionalListopia /list/show/ URLs or bare list IDs. (mode=lists, auto)
shelfNamesarrayoptionalPopular shelf names such as mystery, fantasy, or historical-fiction. (mode=shelves, auto)
genreNamesarrayoptionalGenre slugs such as fantasy, romance, or science-fiction. (mode=genres, auto)
maxItemsintegeroptionalHard cap on every record emitted in the run, including review, edition, quote, list, and summary records.
detailLevelstringoptionalFull returns complete book records. Listing returns lighter row records for search, author, series, list, shelf, and genre results.
includeMetadatabooleanoptionalAlso emit one author, series, or Listopia summary record alongside the books.
includeRelatedbooleanoptionalIn auto mode, also collect reviews, editions, similar books, and lists for each book URL.
minRatingnumberoptionalDrop books rated below this value. Decimals such as 4.5 are supported.
minRatingsCountintegeroptionalDrop books with fewer ratings than this.
publishYearMinintegeroptionalDrop books first published before this year.
publishYearMaxintegeroptionalDrop books first published after this year.
languagestringoptionalKeep books whose language starts with this text, for example en, English, or fre.
containsGenrestringoptionalKeep books with a genre containing this text.
containsAuthorstringoptionalKeep books with an author name containing this text.
maxReviewsPerBookintegeroptionalReviews to collect for each book. (mode=reviews)
reviewSortstringoptionalOrder reviews by Goodreads default, newest first, or oldest first. (mode=reviews)
reviewLanguagestringoptionalOnly collect reviews written in this language. (mode=reviews)
reviewRatingMinintegeroptionalOnly collect reviews with at least this star rating. (mode=reviews)
reviewRatingMaxintegeroptionalOnly collect reviews with at most this star rating. (mode=reviews)
excludeSpoilersbooleanoptionalSkip reviews Goodreads marks as containing spoilers. (mode=reviews)
maxEditionsPerBookintegeroptionalEditions to collect for each book. (mode=editions)
quoteTagsarrayoptionalQuote tag pages to scrape, such as love, life, or wisdom. (mode=quotes)
quoteAuthorUrlsarrayoptionalAuthor quote pages as Goodreads URLs or bare author IDs. (mode=quotes)
quoteWorkUrlsarrayoptionalWork quote pages as Goodreads URLs or bare work IDs. (mode=quotes)
maxQuotesPerSourceintegeroptionalQuotes to collect from each tag, author, or work. (mode=quotes)
maxSimilarPerBookintegeroptionalSimilar books to collect for each input book. (mode=similar)
maxListsPerBookintegeroptionalListopia lists to collect for each input book. (mode=bookLists)
releaseYearintegeroptionalYear of the new-releases chart. (mode=newReleases)
releaseMonthstringoptionalMonth 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.

FieldTypeRequiredDescription
recordsstringoptionalDataset 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, and auto.
  • 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) and authorWork (authorId): bookId, title, url, coverImage, authors[], primaryAuthor, series, averageRating, ratingsCount, reviewsCount, publishedYear, editionsCount
  • seriesBook (seriesId, position) and listEntry (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 .xml and 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 .xml book fallback can resolve to the work's primary edition, so its bookId may 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.

Open the step-by-step Python guide →

Source build SE0siaqd22MLHJstA. Documentation is regenerated from the default published build; private drafts are not included.