# Audible Scraper (`crawlerbros/audible-scraper`) Actor

Scrape Audible with Amazon's audiobook marketplace. Search by keyword, fetch by ASIN, browse best-sellers, list by author or category. Returns full audiobook metadata: title, authors, narrators, runtime, ratings, price, cover, series — across 11 locales.

- **URL**: https://apify.com/crawlerbros/audible-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** E-commerce, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 7 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.00 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Audible Scraper

Scrape Audible — Amazon's audiobook marketplace. Pull audiobook listings, full metadata, ratings, prices, runtime, narrators, series info, and category data across 11 Audible storefronts (US, UK, DE, FR, JP, AU, IT, ES, IN, CA, BR). HTTP-based via curl_cffi (no proxy required, no cookies, no login).

### What this actor does

- **Six modes:** `search`, `byAsins`, `byUrls`, `bestSellers`, `byAuthor`, `byCategory`
- **11 Audible locales** — pick any storefront
- **24 Audible categories** — drop-down enum (Mysteries, Sci-Fi & Fantasy, Romance, Self Development, etc.)
- **Rich filters** — rating range, runtime range, release-date bucket, narration language, format, "Audible Plus only", "Audible Originals only", keyword
- **8 sort modes** — best-sellers, customer rating, newest, price low→high, etc.
- **Automatic audnex.us enrichment** for ISBN, genre tags, copyright year, high-res cover
- **Empty fields are omitted from every record**

### Output per audiobook

- `asin` — Audible ASIN (10-char identifier, also the Amazon product ID)
- `title`, `subtitle`, `description`
- `authors[]`, `authorIds[]` (Audible author ASINs)
- `narrators[]`
- `runtimeMinutes`, `releaseDate` (YYYY-MM-DD)
- `publisher`, `language`
- `categories[]`, `tags[]`
- `series` — `{ seriesName, seriesId, seriesPosition }`
- `rating` (0–5), `ratingCount` (total reviews)
- `regularPrice`, `salePrice`, `priceCurrency` (USD/GBP/EUR/JPY/INR/AUD/CAD/BRL)
- `coverImageUrl` — high-res cover from m.media-amazon.com CDN
- `audibleUrl` — canonical product URL on the selected locale
- `isbn` (when available via audnex)
- `isPlusMembership`, `isAudibleOriginal`, `isWhispersyncEnabled`, `isAbridged`
- `copyrightYear`
- `locale`, `recordType: "audiobook"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | select | `search` | `search` / `byAsins` / `byUrls` / `bestSellers` / `byAuthor` / `byCategory` |
| `searchQuery` | string | `atomic habits` | Free-text query (mode=search) |
| `locale` | select | `us` | Audible storefront (`us` / `uk` / `de` / `fr` / `jp` / `au` / `it` / `es` / `in` / `ca` / `br`) |
| `asins` | array | – | ASINs for `byAsins` mode |
| `startUrls` | array | – | Direct URLs for `byUrls` mode |
| `category` | select | – | Single category (24 enum values) |
| `categories` | multi-select | – | Multiple categories — one pass each |
| `authorQuery` | string | – | Author name (resolves to author ID via Audible search) |
| `authorId` | string | – | Direct Audible author ID (10-char ASIN) — overrides `authorQuery` |
| `sortBy` | select | – | 8 sort modes |
| `releaseDate` | select | `any` | `any` / `last-30-days` / `last-90-days` / `last-year` / `last-3-years` / `last-10-years` |
| `narrationLanguage` | select | – | 10 narration languages |
| `format` | select | `audiobook` | `audiobook` / `podcast` / `all` |
| `minRating` / `maxRating` | int | – | Drop books outside 0–5 rating range |
| `minLength` / `maxLength` | int | – | Drop books outside this runtime in minutes |
| `isPlus` | bool | `false` | Only Audible Plus titles |
| `isAudibleOriginal` | bool | `false` | Only Audible Originals |
| `containsKeyword` | string | – | Substring filter (title / subtitle / description / authors / narrators / categories) |
| `fetchDetail` | bool | `false` | Hit each product page for full description (slower) |
| `enrichWithAudnex` | bool | `true` | Augment each book with audnex.us data (ISBN, genres, copyright year) |
| `maxItems` | int | `50` | Hard cap (1–5000) |

#### Example: top sci-fi best-sellers in the US

```json
{
  "mode": "bestSellers",
  "category": "Science Fiction & Fantasy",
  "locale": "us",
  "maxItems": 50
}
````

#### Example: high-rated short audiobooks for learning

```json
{
  "mode": "search",
  "searchQuery": "productivity",
  "minRating": 4,
  "maxLength": 360,
  "sortBy": "customer-rating",
  "maxItems": 100
}
```

#### Example: complete Stephen King catalog

```json
{
  "mode": "byAuthor",
  "authorQuery": "Stephen King",
  "locale": "us",
  "maxItems": 500
}
```

#### Example: bulk ASIN lookup

```json
{
  "mode": "byAsins",
  "asins": ["1473565421", "B0CSTCJZN1", "B07ND8GVR8"]
}
```

#### Example: scrape a specific Audible URL

```json
{
  "mode": "byUrls",
  "startUrls": [
    {"url": "https://www.audible.com/pd/Atomic-Habits-Audiobook/1473565421"},
    {"url": "https://www.audible.co.uk/search?keywords=fantasy&sort=pubdate-desc-rank"}
  ]
}
```

### Use cases

- **Market intelligence** — rank, review, and price tracking across Audible categories
- **Publisher analytics** — benchmark your audiobook's rank vs. competitors
- **Content curation** — assemble curated lists by author, category, or rating
- **Recommendation engines** — feed audiobook metadata into your recommender
- **Price monitoring** — track price/discount cycles across regions
- **Translation/localization research** — see how the same book ranks in 11 storefronts
- **Series discovery** — auto-discover all books in a series via `byAuthor` + series field

### FAQ

**What's an ASIN?**  Amazon Standard Identification Number — a 10-character ID. Audible reuses Amazon's ASIN namespace, so every audiobook has one (e.g. `1473565421` for Atomic Habits).

**Do I need cookies or a login?**  No. The actor scrapes Audible's public storefront pages.

**Why are some fields missing on some records?**  Audible's search-result cards are leaner than the product detail page. Enable `fetchDetail` to hit each product page (slower). The default behavior also enriches each book with `api.audnex.us` data, which fills in ISBN, genres, copyright year, and high-res images.

**What's audnex.us?**  An open community-maintained metadata service that mirrors Audible's product-detail surface. Used here purely as a complement when the listing card doesn't carry a field.

**How many books per page?**  Audible serves 20 audiobooks per search page. The actor paginates up to 25 pages (500 results) per query.

**Can I scrape audio files?**  No — the actor only emits metadata (title, ratings, price, etc.). Audio files are DRM-protected.

**What about regional rank/price differences?**  Run the actor once per locale and dedupe on `asin` to build a cross-region price/rank matrix.

**How fresh is the data?**  Real-time — Audible's storefront is live; ratings/prices reflect the moment of the run. audnex.us data lags ~24 hours behind Audible's own product DB.

**What if a category isn't in the dropdown?**  Audible's top-level taxonomy has 24 categories. For sub-categories (e.g. "Cyberpunk"), use `searchQuery` mode with a keyword.

**Why is Audible 503-blocking my own browser-based scraper but not this actor?**  Audible uses Akamai TLS fingerprinting. The actor sends a Chrome 131 TLS handshake via curl\_cffi, which is indistinguishable from a real Chrome.

**Can I get podcast episodes too?**  Set `format: "podcast"` and use a keyword query — Audible's podcast catalog is included on the same storefront.

**Are price values inclusive of VAT/tax?**  Yes — prices reflect what Audible shows on the storefront for that locale, including any applicable VAT.

**Are all 11 locales equally reliable?**  US/CA/AU work consistently from Apify's datacenters. Non-US locales (UK/DE/FR/IT/ES/JP/IN/BR) sometimes serve a simplified responsive layout to datacenter IPs that the actor cannot parse — in that case enable `proxyConfiguration.useApifyProxy = true` to route through Apify's AUTO proxy, or run from a residential network. The `byAsins` / `byUrls` modes work in all locales.

**Why doesn't `mode: "search"` work from Apify cloud?**  Audible's keyword-search endpoint returns a "no results — try these instead" page for requests originating from Amazon AWS / large datacenter IP ranges. The actor automatically falls back to scraping best-sellers + applying the search query as a `containsKeyword` filter so the run still emits records. For exhaustive keyword search, use `byAuthor`, `byCategory`, or `byAsins` modes instead.

# Actor input Schema

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

What to fetch.

## `searchQuery` (type: `string`):

Free-text query (mode=search).

## `locale` (type: `string`):

Which Audible storefront to scrape.

## `asins` (type: `array`):

Audible ASINs (10-character IDs, e.g. `1473565421`).

## `startUrls` (type: `array`):

Direct Audible URLs: product pages (/pd/...), author pages (/author/...), search pages, category pages, or best-sellers.

## `category` (type: `string`):

Pick a category (used by bestSellers / byCategory / search modes). Slug aliases like 'sci-fi-fantasy', 'history', 'romance' are also accepted programmatically.

## `categories` (type: `array`):

Multiple categories (used by bestSellers / byCategory mode). One pass per category.

## `authorQuery` (type: `string`):

Resolves to an author ID by searching Audible.

## `authorId` (type: `string`):

Audible author ID (10-char ASIN-style, e.g. `B07DJTJC3X`). Overrides `authorQuery`.

## `sortBy` (type: `string`):

Audible sort key for listing modes.

## `releaseDate` (type: `string`):

Filter by Audible's release-date bucket.

## `narrationLanguage` (type: `string`):

Filter by narration language.

## `format` (type: `string`):

Audiobook, podcast, or all.

## `minRating` (type: `integer`):

Drop books rated below this (0–5). Books with no rating yet pass through.

## `maxRating` (type: `integer`):

Drop books rated above this (0–5).

## `minLength` (type: `integer`):

Drop books shorter than this. Books with no runtime metadata pass through.

## `maxLength` (type: `integer`):

Drop books longer than this.

## `isPlus` (type: `boolean`):

Only emit books included with Audible Plus membership.

## `isAudibleOriginal` (type: `boolean`):

Only emit Audible Original titles.

## `containsKeyword` (type: `string`):

Substring filter applied to title/subtitle/description/authors/narrators/categories.

## `fetchDetail` (type: `boolean`):

Hit each product page to get the full description (slower, ~0.5s per book).

## `enrichWithAudnex` (type: `boolean`):

Augment each record with audnex.us metadata (ISBN, runtime, categories, copyright year).

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

Hard cap on emitted records.

## `proxyConfiguration` (type: `object`):

Optional Apify Proxy. Direct connections from Apify's datacenter usually succeed for browse/best-sellers/category/byAsins/byAuthor; enable Apify Proxy only if you hit IP-based throttling on a specific locale.

## Actor input object example

```json
{
  "mode": "bestSellers",
  "searchQuery": "atomic habits",
  "locale": "us",
  "asins": [],
  "startUrls": [],
  "categories": [],
  "releaseDate": "any",
  "format": "audiobook",
  "isPlus": false,
  "isAudibleOriginal": false,
  "fetchDetail": false,
  "enrichWithAudnex": true,
  "maxItems": 15,
  "proxyConfiguration": {}
}
```

# Actor output Schema

## `audiobooks` (type: `string`):

Dataset containing all scraped Audible audiobooks.

# 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": "bestSellers",
    "locale": "us",
    "asins": [],
    "startUrls": [],
    "categories": [],
    "releaseDate": "any",
    "format": "audiobook",
    "isPlus": false,
    "isAudibleOriginal": false,
    "fetchDetail": false,
    "enrichWithAudnex": true,
    "maxItems": 15,
    "proxyConfiguration": {}
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/audible-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": "bestSellers",
    "locale": "us",
    "asins": [],
    "startUrls": [],
    "categories": [],
    "releaseDate": "any",
    "format": "audiobook",
    "isPlus": False,
    "isAudibleOriginal": False,
    "fetchDetail": False,
    "enrichWithAudnex": True,
    "maxItems": 15,
    "proxyConfiguration": {},
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/audible-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": "bestSellers",
  "locale": "us",
  "asins": [],
  "startUrls": [],
  "categories": [],
  "releaseDate": "any",
  "format": "audiobook",
  "isPlus": false,
  "isAudibleOriginal": false,
  "fetchDetail": false,
  "enrichWithAudnex": true,
  "maxItems": 15,
  "proxyConfiguration": {}
}' |
apify call crawlerbros/audible-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/audible-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Audible Scraper",
        "description": "Scrape Audible with Amazon's audiobook marketplace. Search by keyword, fetch by ASIN, browse best-sellers, list by author or category. Returns full audiobook metadata: title, authors, narrators, runtime, ratings, price, cover, series — across 11 locales.",
        "version": "1.0",
        "x-build-id": "pSeJJHaLdE1rzt485"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~audible-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-audible-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/crawlerbros~audible-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-audible-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/crawlerbros~audible-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-audible-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "bestSellers",
                            "byCategory",
                            "byAsins",
                            "byUrls",
                            "byAuthor",
                            "search"
                        ],
                        "type": "string",
                        "description": "What to fetch.",
                        "default": "bestSellers"
                    },
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Free-text query (mode=search).",
                        "default": "atomic habits"
                    },
                    "locale": {
                        "title": "Audible locale",
                        "enum": [
                            "us",
                            "uk",
                            "de",
                            "fr",
                            "jp",
                            "au",
                            "it",
                            "es",
                            "in",
                            "ca",
                            "br"
                        ],
                        "type": "string",
                        "description": "Which Audible storefront to scrape.",
                        "default": "us"
                    },
                    "asins": {
                        "title": "ASINs (mode=byAsins)",
                        "type": "array",
                        "description": "Audible ASINs (10-character IDs, e.g. `1473565421`).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs (mode=byUrls)",
                        "type": "array",
                        "description": "Direct Audible URLs: product pages (/pd/...), author pages (/author/...), search pages, category pages, or best-sellers.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "category": {
                        "title": "Category (single)",
                        "type": "string",
                        "description": "Pick a category (used by bestSellers / byCategory / search modes). Slug aliases like 'sci-fi-fantasy', 'history', 'romance' are also accepted programmatically."
                    },
                    "categories": {
                        "title": "Categories (multi)",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Multiple categories (used by bestSellers / byCategory mode). One pass per category.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Arts & Entertainment",
                                "Biographies & Memoirs",
                                "Business & Careers",
                                "Children's Audiobooks",
                                "Comedy & Humor",
                                "Computers & Technology",
                                "Education & Learning",
                                "Erotica",
                                "Health & Wellness",
                                "History",
                                "Home & Garden",
                                "LGBTQ+",
                                "Literature & Fiction",
                                "Money & Finance",
                                "Mysteries, Thrillers & Suspense",
                                "Politics & Social Sciences",
                                "Relationships, Parenting & Personal Development",
                                "Religion & Spirituality",
                                "Romance",
                                "Science & Engineering",
                                "Science Fiction & Fantasy",
                                "Sports & Outdoors",
                                "Teen & Young Adult",
                                "Travel & Tourism"
                            ]
                        },
                        "default": []
                    },
                    "authorQuery": {
                        "title": "Author name (mode=byAuthor)",
                        "type": "string",
                        "description": "Resolves to an author ID by searching Audible."
                    },
                    "authorId": {
                        "title": "Author ID (mode=byAuthor)",
                        "type": "string",
                        "description": "Audible author ID (10-char ASIN-style, e.g. `B07DJTJC3X`). Overrides `authorQuery`."
                    },
                    "sortBy": {
                        "title": "Sort order",
                        "enum": [
                            "best-sellers",
                            "customer-rating",
                            "most-helpful",
                            "new-released-date",
                            "price-low-high",
                            "price-high-low",
                            "title-a-z",
                            "title-z-a"
                        ],
                        "type": "string",
                        "description": "Audible sort key for listing modes."
                    },
                    "releaseDate": {
                        "title": "Release date bucket",
                        "enum": [
                            "any",
                            "last-30-days",
                            "last-90-days",
                            "last-year",
                            "last-3-years",
                            "last-10-years"
                        ],
                        "type": "string",
                        "description": "Filter by Audible's release-date bucket.",
                        "default": "any"
                    },
                    "narrationLanguage": {
                        "title": "Narration language",
                        "enum": [
                            "english",
                            "german",
                            "french",
                            "spanish",
                            "italian",
                            "japanese",
                            "portuguese",
                            "dutch",
                            "russian",
                            "chinese"
                        ],
                        "type": "string",
                        "description": "Filter by narration language."
                    },
                    "format": {
                        "title": "Format",
                        "enum": [
                            "audiobook",
                            "podcast",
                            "all"
                        ],
                        "type": "string",
                        "description": "Audiobook, podcast, or all.",
                        "default": "audiobook"
                    },
                    "minRating": {
                        "title": "Min overall rating",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Drop books rated below this (0–5). Books with no rating yet pass through."
                    },
                    "maxRating": {
                        "title": "Max overall rating",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Drop books rated above this (0–5)."
                    },
                    "minLength": {
                        "title": "Min runtime (minutes)",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Drop books shorter than this. Books with no runtime metadata pass through."
                    },
                    "maxLength": {
                        "title": "Max runtime (minutes)",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Drop books longer than this."
                    },
                    "isPlus": {
                        "title": "Audible Plus only",
                        "type": "boolean",
                        "description": "Only emit books included with Audible Plus membership.",
                        "default": false
                    },
                    "isAudibleOriginal": {
                        "title": "Audible Originals only",
                        "type": "boolean",
                        "description": "Only emit Audible Original titles.",
                        "default": false
                    },
                    "containsKeyword": {
                        "title": "Contains keyword",
                        "type": "string",
                        "description": "Substring filter applied to title/subtitle/description/authors/narrators/categories."
                    },
                    "fetchDetail": {
                        "title": "Fetch product detail page",
                        "type": "boolean",
                        "description": "Hit each product page to get the full description (slower, ~0.5s per book).",
                        "default": false
                    },
                    "enrichWithAudnex": {
                        "title": "Enrich with audnex.us API",
                        "type": "boolean",
                        "description": "Augment each record with audnex.us metadata (ISBN, runtime, categories, copyright year).",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Hard cap on emitted records.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify Proxy. Direct connections from Apify's datacenter usually succeed for browse/best-sellers/category/byAsins/byAuthor; enable Apify Proxy only if you hit IP-based throttling on a specific locale.",
                        "default": {}
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
