# Goodreads Book, Author & Listopia List Scraper (`dataspryva/goodreads-book-author-and-listopia-list-scraper`) Actor

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.

- **URL**: https://apify.com/dataspryva/goodreads-book-author-and-listopia-list-scraper.md
- **Developed by:** [Dataspryva](https://apify.com/dataspryva) (community)
- **Categories:** Automation, Social media, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 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

```json
{
  "mode": "books",
  "bookUrls": ["https://www.goodreads.com/book/show/4671.The_Great_Gatsby"],
  "maxItems": 5
}
```

#### Example: newest English reviews for two books

```json
{
  "mode": "reviews",
  "bookUrls": ["4671", "9780743273565"],
  "maxReviewsPerBook": 100,
  "reviewSort": "NEWEST",
  "reviewLanguage": "en",
  "reviewRatingMin": 4,
  "excludeSpoilers": true
}
```

#### Example: Listopia rows plus a list summary

```json
{
  "mode": "lists",
  "listUrls": ["https://www.goodreads.com/list/show/1.Best_Books_Ever"],
  "detailLevel": "listing",
  "includeMetadata": true,
  "maxItems": 500
}
```

#### Example: monthly release chart

```json
{
  "mode": "newReleases",
  "releaseYear": 2026,
  "releaseMonth": "10",
  "maxItems": 30
}
```

#### Example: full author bibliography

```json
{
  "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.

# Actor input Schema

## `mode` (type: `string`):

What to scrape. Auto runs every non-empty input you provide.

## `bookUrls` (type: `array`):

Goodreads book URLs, bare book IDs, or ISBNs. Used by books, reviews, editions, similar, and bookLists. (mode=books, reviews, editions, similar, bookLists, auto)

## `searchQueries` (type: `array`):

Titles, authors, or keywords to search for. (mode=search, auto)

## `isbns` (type: `array`):

ISBN-10 or ISBN-13 values. Hyphens and spaces are accepted. (mode=isbns, auto)

## `authorUrls` (type: `array`):

Goodreads author URLs or bare author IDs. (mode=authors, auto)

## `seriesUrls` (type: `array`):

Goodreads series URLs or bare series IDs. (mode=series, auto)

## `listUrls` (type: `array`):

Listopia /list/show/ URLs or bare list IDs. (mode=lists, auto)

## `shelfNames` (type: `array`):

Popular shelf names such as mystery, fantasy, or historical-fiction. (mode=shelves, auto)

## `genreNames` (type: `array`):

Genre slugs such as fantasy, romance, or science-fiction. (mode=genres, auto)

## `maxItems` (type: `integer`):

Hard cap on every record emitted in the run, including review, edition, quote, list, and summary records.

## `detailLevel` (type: `string`):

Full returns complete book records. Listing returns lighter row records for search, author, series, list, shelf, and genre results.

## `includeMetadata` (type: `boolean`):

Also emit one author, series, or Listopia summary record alongside the books.

## `includeRelated` (type: `boolean`):

In auto mode, also collect reviews, editions, similar books, and lists for each book URL.

## `minRating` (type: `number`):

Drop books rated below this value. Decimals such as 4.5 are supported.

## `minRatingsCount` (type: `integer`):

Drop books with fewer ratings than this.

## `publishYearMin` (type: `integer`):

Drop books first published before this year.

## `publishYearMax` (type: `integer`):

Drop books first published after this year.

## `language` (type: `string`):

Keep books whose language starts with this text, for example en, English, or fre.

## `containsGenre` (type: `string`):

Keep books with a genre containing this text.

## `containsAuthor` (type: `string`):

Keep books with an author name containing this text.

## `maxReviewsPerBook` (type: `integer`):

Reviews to collect for each book. (mode=reviews)

## `reviewSort` (type: `string`):

Order reviews by Goodreads default, newest first, or oldest first. (mode=reviews)

## `reviewLanguage` (type: `string`):

Only collect reviews written in this language. (mode=reviews)

## `reviewRatingMin` (type: `integer`):

Only collect reviews with at least this star rating. (mode=reviews)

## `reviewRatingMax` (type: `integer`):

Only collect reviews with at most this star rating. (mode=reviews)

## `excludeSpoilers` (type: `boolean`):

Skip reviews Goodreads marks as containing spoilers. (mode=reviews)

## `maxEditionsPerBook` (type: `integer`):

Editions to collect for each book. (mode=editions)

## `quoteTags` (type: `array`):

Quote tag pages to scrape, such as love, life, or wisdom. (mode=quotes)

## `quoteAuthorUrls` (type: `array`):

Author quote pages as Goodreads URLs or bare author IDs. (mode=quotes)

## `quoteWorkUrls` (type: `array`):

Work quote pages as Goodreads URLs or bare work IDs. (mode=quotes)

## `maxQuotesPerSource` (type: `integer`):

Quotes to collect from each tag, author, or work. (mode=quotes)

## `maxSimilarPerBook` (type: `integer`):

Similar books to collect for each input book. (mode=similar)

## `maxListsPerBook` (type: `integer`):

Listopia lists to collect for each input book. (mode=bookLists)

## `releaseYear` (type: `integer`):

Year of the new-releases chart. (mode=newReleases)

## `releaseMonth` (type: `string`):

Month of the new-releases chart, or all for the yearly chart. (mode=newReleases)

## Actor input object example

```json
{
  "mode": "isbns",
  "bookUrls": [
    "https://www.goodreads.com/book/show/4671.The_Great_Gatsby"
  ],
  "searchQueries": [],
  "isbns": [
    "9780743273565"
  ],
  "authorUrls": [],
  "seriesUrls": [],
  "listUrls": [],
  "shelfNames": [],
  "genreNames": [],
  "maxItems": 1,
  "detailLevel": "full",
  "includeMetadata": false,
  "includeRelated": false,
  "maxReviewsPerBook": 3,
  "reviewSort": "DEFAULT",
  "reviewLanguage": "all",
  "excludeSpoilers": false,
  "maxEditionsPerBook": 3,
  "quoteTags": [
    "love"
  ],
  "quoteAuthorUrls": [],
  "quoteWorkUrls": [],
  "maxQuotesPerSource": 3,
  "maxSimilarPerBook": 5,
  "maxListsPerBook": 5,
  "releaseYear": 2026,
  "releaseMonth": "all"
}
```

# Actor output Schema

## `records` (type: `string`):

Dataset containing every scraped record for the selected mode, discriminated by recordType.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "isbns",
    "bookUrls": [
        "https://www.goodreads.com/book/show/4671.The_Great_Gatsby"
    ],
    "searchQueries": [],
    "isbns": [
        "9780743273565"
    ],
    "authorUrls": [],
    "seriesUrls": [],
    "listUrls": [],
    "shelfNames": [],
    "genreNames": [],
    "maxItems": 1,
    "detailLevel": "full",
    "includeMetadata": false,
    "includeRelated": false,
    "maxReviewsPerBook": 3,
    "reviewSort": "DEFAULT",
    "reviewLanguage": "all",
    "excludeSpoilers": false,
    "maxEditionsPerBook": 3,
    "quoteTags": [
        "love"
    ],
    "quoteAuthorUrls": [],
    "quoteWorkUrls": [],
    "maxQuotesPerSource": 3,
    "maxSimilarPerBook": 5,
    "maxListsPerBook": 5,
    "releaseYear": 2026,
    "releaseMonth": "all"
};

// Run the Actor and wait for it to finish
const run = await client.actor("dataspryva/goodreads-book-author-and-listopia-list-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "isbns",
    "bookUrls": ["https://www.goodreads.com/book/show/4671.The_Great_Gatsby"],
    "searchQueries": [],
    "isbns": ["9780743273565"],
    "authorUrls": [],
    "seriesUrls": [],
    "listUrls": [],
    "shelfNames": [],
    "genreNames": [],
    "maxItems": 1,
    "detailLevel": "full",
    "includeMetadata": False,
    "includeRelated": False,
    "maxReviewsPerBook": 3,
    "reviewSort": "DEFAULT",
    "reviewLanguage": "all",
    "excludeSpoilers": False,
    "maxEditionsPerBook": 3,
    "quoteTags": ["love"],
    "quoteAuthorUrls": [],
    "quoteWorkUrls": [],
    "maxQuotesPerSource": 3,
    "maxSimilarPerBook": 5,
    "maxListsPerBook": 5,
    "releaseYear": 2026,
    "releaseMonth": "all",
}

# Run the Actor and wait for it to finish
run = client.actor("dataspryva/goodreads-book-author-and-listopia-list-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "isbns",
  "bookUrls": [
    "https://www.goodreads.com/book/show/4671.The_Great_Gatsby"
  ],
  "searchQueries": [],
  "isbns": [
    "9780743273565"
  ],
  "authorUrls": [],
  "seriesUrls": [],
  "listUrls": [],
  "shelfNames": [],
  "genreNames": [],
  "maxItems": 1,
  "detailLevel": "full",
  "includeMetadata": false,
  "includeRelated": false,
  "maxReviewsPerBook": 3,
  "reviewSort": "DEFAULT",
  "reviewLanguage": "all",
  "excludeSpoilers": false,
  "maxEditionsPerBook": 3,
  "quoteTags": [
    "love"
  ],
  "quoteAuthorUrls": [],
  "quoteWorkUrls": [],
  "maxQuotesPerSource": 3,
  "maxSimilarPerBook": 5,
  "maxListsPerBook": 5,
  "releaseYear": 2026,
  "releaseMonth": "all"
}' |
apify call dataspryva/goodreads-book-author-and-listopia-list-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dataspryva/goodreads-book-author-and-listopia-list-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/G16n73DmJWBnyen2O/builds/SE0siaqd22MLHJstA/openapi.json
