# Internet Archive Reviews & Metadata Scraper (`thescrapelab/internet-archive-book-reviews-scraper`) Actor

Extract public Archive.org book metadata, ISBNs, ratings, and user reviews from public Internet Archive endpoints. Start from URLs, identifiers, ISBNs, creators, collections, subjects, or search queries. Output is always one dataset row per public review. No API key required.

- **URL**: https://apify.com/thescrapelab/internet-archive-book-reviews-scraper.md
- **Developed by:** [Inus Grobler](https://apify.com/thescrapelab) (community)
- **Categories:** Developer tools, SEO tools, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## Internet Archive Reviews & Metadata Scraper

Archive.org scraper for extracting public Internet Archive book metadata, item details, ISBNs, ratings, and public user reviews. Add Archive.org item URLs, identifiers, ISBNs, creators, collections, subjects, or search queries and get one dataset row per public review.

No Internet Archive API key is required for public item URLs, public identifiers, public metadata, or public reviews.

### Quick Start

The default input is intentionally small and fast. If you click **Start** without changing anything, the Actor scrapes up to 10 public reviews from one known Archive.org item:

```json
{
  "sources": ["https://archive.org/details/goodytwoshoes00newyiala"],
  "maxItems": 1,
  "maxReviewsPerItem": 10,
  "onlyItemsWithReviews": true
}
````

Use that default run to confirm the output format, then replace `sources` or use the discovery fields for your own books, authors, collections, ISBNs, subjects, or search queries.

### Why Use This Actor

- Scrape Archive.org book reviews without browser automation
- Extract Internet Archive item metadata from public API-style endpoints
- Enrich review records with title, creators, ISBNs, publisher, language, subjects, collections, and cover URL
- Search by ISBN, creator, collection, subject, or Archive.org query
- Export results as JSON, CSV, Excel, XML, or via the Apify API
- Run as a one-off scrape, scheduled research workflow, or data pipeline input

### What It Extracts

**Book and item metadata**

- Archive.org identifier, title, creators/authors, description, publisher, publication date, year, language, subjects, collections, and media type
- ISBN-10, ISBN-13, all ISBN values, Open Library IDs, OCLC, LCCN, contributors, sponsors, scanners, uploader, rights, license URL, and external identifiers
- Cover thumbnail URL, item URL, metadata URL, file count, item size, and update timestamps

**Public reviews**

- Review title and body text
- Star rating, normalized rating, and rating scale
- Reviewer name and reviewer item/profile reference when available
- Created date, updated/review date, source item identifier, source item title, source item URL, stable review hash, and scrape timestamp

**Computed review statistics**

- Review count
- Non-zero rating count and zero-rating count
- Rating distribution
- First review date and latest review date
- `computedAverageRating`

`computedAverageRating` is calculated by this Actor from fetched public review star values. It is not an official Internet Archive average rating.

### Supported Inputs

Use plain fields. No prefixes are needed.

For known Archive.org items, add values to the `sources` list:

```text
https://archive.org/details/goodytwoshoes00newyiala
goodytwoshoes00newyiala
9780140449136
```

For discovery, use the dedicated list fields:

- Archive.org item URLs, for example `https://archive.org/details/adventuresoftomsa00twai`
- Archive.org metadata URLs, for example `https://archive.org/metadata/adventuresoftomsa00twai`
- Archive.org review URLs, for example `https://archive.org/metadata/adventuresoftomsa00twai/reviews`
- Direct Archive.org identifiers
- `isbns`: ISBN-10 or ISBN-13 values
- `creators`: creator or author names
- `collections`: Archive.org collection identifiers
- `subjects`: subject terms
- `searchQueries`: raw Archive.org search queries

For review-focused discovery, use `searchQueries` with `mediatype:texts AND reviewdate:*`. General searches can match many books that do not expose public review objects.

### Example Inputs

**Scrape reviews from an Archive.org item URL**

```json
{
  "sources": ["https://archive.org/details/goodytwoshoes00newyiala"],
  "maxItems": 1,
  "maxReviewsPerItem": 10,
  "onlyItemsWithReviews": true
}
```

**Scrape a known Archive.org identifier**

```json
{
  "sources": ["goodytwoshoes00newyiala"],
  "maxReviewsPerItem": 10
}
```

**Find reviewed books by creator**

```json
{
  "creators": ["Mark Twain"],
  "maxItems": 10,
  "maxReviewsPerItem": 10,
  "onlyItemsWithReviews": true
}
```

**Search reviewed text items**

```json
{
  "searchQueries": ["mediatype:texts AND reviewdate:*"],
  "maxItems": 10,
  "maxReviewsPerItem": 10
}
```

### Dataset Output

The Actor always writes one dataset item per public review. Each review row includes key item metadata, so the output is ready for review analysis, sentiment workflows, rating exports, and spreadsheets.

### Example Output

```json
{
  "entityType": "review",
  "source": "internet_archive",
  "identifier": "goodytwoshoes00newyiala",
  "itemUrl": "https://archive.org/details/goodytwoshoes00newyiala",
  "metadataUrl": "https://archive.org/metadata/goodytwoshoes00newyiala",
  "title": "Goody Two-Shoes",
  "creators": [],
  "isbn13": null,
  "publisher": null,
  "publishedDate": "1900",
  "language": ["eng"],
  "subjects": ["fiction"],
  "collections": ["internetarchivebooks"],
  "mediatype": "texts",
  "coverUrl": "https://archive.org/services/img/goodytwoshoes00newyiala",
  "reviewTitle": "Great book",
  "reviewText": "Review text here",
  "stars": 5,
  "rating": 5,
  "ratingScale": 5,
  "reviewerName": "Reviewer",
  "reviewerItemName": "@reviewer",
  "createdAt": "2020-01-01 00:00:00",
  "reviewUpdatedAt": "2020-01-02 00:00:00",
  "reviewSource": "metadata_reviews_branch",
  "reviewHash": "stable_hash",
  "scrapedAt": "2026-05-28T00:00:00.000Z"
}
```

### How It Works

The Actor uses public Internet Archive API-style endpoints:

- `https://archive.org/metadata/{identifier}`
- `https://archive.org/metadata/{identifier}/reviews`
- `https://archive.org/services/search/v1/scrape` for discovery
- `https://archive.org/advancedsearch.php` as a fallback search endpoint

It does not use Playwright, Puppeteer, browser automation, login sessions, captcha solving, or private APIs.

### Read-Only And Compliance

This Actor is read-only. It does not write, update, upload, delete, rate reviews, or modify anything on Internet Archive. It extracts public metadata and public reviews only. It does not scrape private data, bypass login walls, bypass access controls, solve captchas, or attempt to evade rate limits.

Optional Internet Archive credentials can be provided for advanced or future reliability needs, but they are not required for the core scraper.

### Filtering

`onlyItemsWithReviews` defaults to `true`, so items with no public reviews are skipped. The dataset is review-only, so no-review items do not produce dataset rows.

You can also filter by:

- Minimum star rating
- Maximum star rating
- Text contained in the review title or body
- Item language
- Archive.org media type

### API Usage

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

actor_client = client.actor("TheScrapeLab/internet-archive-book-reviews-scraper")

run_input = {
    "sources": ["https://archive.org/details/goodytwoshoes00newyiala"],
    "maxItems": 1,
    "maxReviewsPerItem": 10,
    "onlyItemsWithReviews": True,
}

run = actor_client.call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

### Common Use Cases

- Build a dataset of Archive.org book reviews and ratings
- Enrich book records with Internet Archive metadata, ISBNs, subjects, and collection data
- Monitor public reviews for selected Archive.org items
- Research public-domain and library collections
- Prepare structured review data for analytics, dashboards, LLM workflows, or data warehouses
- Find reviewed books by creator, collection, subject, or ISBN

### Rate Limits And Polite Usage

The Actor uses a descriptive User-Agent, request timeouts, retries with exponential backoff, 429 handling, concurrency limits, and configurable request delays. For broad discovery jobs, keep concurrency modest and limit `maxItems` to the amount of data you actually need.

### Troubleshooting

**No reviews found**: The item may not have public reviews, or the public reviews endpoint may not expose reviews for that identifier. Because output is one row per review, no-review items produce no dataset rows.

**Identifier not found**: Use the Archive.org item identifier from `/details/{identifier}`.

**Search returns items but no reviews**: Search can match books that have no public reviews. Put `mediatype:texts AND reviewdate:*` in `searchQueries` for review-focused discovery.

**Review stars missing or zero**: Internet Archive review objects may omit stars or include zero-star records. The Actor preserves those values and reports zero-rating counts separately.

**Rate limited or slow runs**: Lower concurrency, increase request delay, or reduce `maxItems`. Archive.org endpoint latency can vary.

**Metadata endpoint returned an error**: The item may be unavailable, removed, or temporarily inaccessible through the public metadata endpoint.

**Search API unavailable**: The Actor logs a warning and continues with any already known direct URLs or identifiers.

**Credentials are optional**: Direct public item scraping does not require Internet Archive credentials.

### Pricing Suggestion

Recommended pricing model: pay per event.

- `review-scraped` for each public review successfully written
- `item-enriched` for each item whose metadata is successfully enriched
- `search-result-processed` for each search result considered during discovery

Charge mainly per review scraped. Optionally charge a small amount per enriched item. Do not charge for failed items.

# Actor input Schema

## `sources` (type: `array`):

Use this when you already know the Archive.org item URL, item identifier, or ISBN. For authors, collections, subjects, and advanced Archive.org searches, use the discovery fields below.

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

Optional ISBN-10 or ISBN-13 values to search for. Spaces and hyphens are accepted.

## `creators` (type: `array`):

Author or creator names to search. Example: Mark Twain.

## `collections` (type: `array`):

Archive.org collection identifiers to search. Example: internetarchivebooks.

## `subjects` (type: `array`):

Subject terms to search. Example: fiction.

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

Optional raw Archive.org search queries. Example: creator:"Mark Twain" AND mediatype:texts.

## `outputMode` (type: `string`):

Legacy option ignored by the Actor. Dataset output is always one row per public review.

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

Maximum number of Archive.org items to enrich.

## `maxReviewsPerItem` (type: `integer`):

Maximum number of public reviews to fetch per item.

## `onlyItemsWithReviews` (type: `boolean`):

Keep enabled for review-only output. Items with no public reviews do not produce dataset rows.

## `includeFiles` (type: `boolean`):

Legacy option. Dataset output remains one row per public review and book files are never downloaded.

## `minStars` (type: `number`):

Advanced review filter. Only keep reviews with this star rating or higher.

## `maxStars` (type: `number`):

Advanced review filter. Only keep reviews with this star rating or lower.

## `reviewTextContains` (type: `string`):

Advanced review filter applied case-insensitively to review titles and bodies.

## `languageFilter` (type: `array`):

Advanced item language filter, for example eng or english.

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

API-compatible structured URL input.

## `identifiers` (type: `array`):

API-compatible structured identifier input.

## `mediatypes` (type: `array`):

Advanced filter for Archive.org mediatype. Defaults to texts.

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

Backward-compatible option. Metadata is included by default.

## `includeReviews` (type: `boolean`):

Backward-compatible option. Reviews are included by default.

## `includeRawMetadata` (type: `boolean`):

Advanced debugging option.

## `includeRawReviews` (type: `boolean`):

Advanced debugging option.

## `searchPageSize` (type: `integer`):

Advanced search pagination option.

## `metadataReviewsPageSize` (type: `integer`):

Advanced review pagination option.

## `globalConcurrency` (type: `integer`):

Advanced HTTP concurrency option.

## `perHostConcurrency` (type: `integer`):

Advanced per-host HTTP concurrency option.

## `requestDelayMs` (type: `integer`):

Advanced polite-request delay option.

## `requestTimeoutSecs` (type: `integer`):

Advanced HTTP timeout option.

## `maxRetries` (type: `integer`):

Advanced retry option for retryable HTTP errors such as 429 and 5xx.

## `internetArchiveAccessKey` (type: `string`):

Optional advanced credential. Not required for public item URLs, identifiers, metadata, or reviews.

## `internetArchiveSecretKey` (type: `string`):

Optional advanced credential. Not required for public item URLs, identifiers, metadata, or reviews.

## `debug` (type: `boolean`):

Advanced debugging option. Secret credential values are never logged.

## Actor input object example

```json
{
  "sources": [
    "https://archive.org/details/goodytwoshoes00newyiala",
    "goodytwoshoes00newyiala",
    "9780140449136"
  ],
  "isbns": [],
  "creators": [],
  "collections": [],
  "subjects": [],
  "searchQueries": [],
  "outputMode": "reviews_flat",
  "maxItems": 1,
  "maxReviewsPerItem": 10,
  "onlyItemsWithReviews": true,
  "includeFiles": false,
  "minStars": null,
  "maxStars": null,
  "reviewTextContains": "",
  "languageFilter": [],
  "startUrls": [],
  "identifiers": [],
  "mediatypes": [
    "texts"
  ],
  "includeMetadata": true,
  "includeReviews": true,
  "includeRawMetadata": false,
  "includeRawReviews": false,
  "searchPageSize": 100,
  "metadataReviewsPageSize": 100,
  "globalConcurrency": 3,
  "perHostConcurrency": 2,
  "requestDelayMs": 500,
  "requestTimeoutSecs": 20,
  "maxRetries": 2,
  "debug": false
}
```

# Actor output Schema

## `reviews` (type: `string`):

Default dataset items. Each item is one public Archive.org review enriched with item metadata.

## `developerDataset` (type: `string`):

Default dataset items with the full stable field set for integrations and API consumers.

## `runStats` (type: `string`):

Summary statistics, warnings, request counts, and skipped/failed counts saved by the Actor.

# 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 = {
    "sources": [
        "https://archive.org/details/goodytwoshoes00newyiala",
        "goodytwoshoes00newyiala",
        "9780140449136"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("thescrapelab/internet-archive-book-reviews-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 = { "sources": [
        "https://archive.org/details/goodytwoshoes00newyiala",
        "goodytwoshoes00newyiala",
        "9780140449136",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("thescrapelab/internet-archive-book-reviews-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 '{
  "sources": [
    "https://archive.org/details/goodytwoshoes00newyiala",
    "goodytwoshoes00newyiala",
    "9780140449136"
  ]
}' |
apify call thescrapelab/internet-archive-book-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Internet Archive Reviews & Metadata Scraper",
        "description": "Extract public Archive.org book metadata, ISBNs, ratings, and user reviews from public Internet Archive endpoints. Start from URLs, identifiers, ISBNs, creators, collections, subjects, or search queries. Output is always one dataset row per public review. No API key required.",
        "version": "1.0",
        "x-build-id": "2CRWOEkpwxueyHtbV"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/thescrapelab~internet-archive-book-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-thescrapelab-internet-archive-book-reviews-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/thescrapelab~internet-archive-book-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-thescrapelab-internet-archive-book-reviews-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/thescrapelab~internet-archive-book-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-thescrapelab-internet-archive-book-reviews-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",
                "properties": {
                    "sources": {
                        "title": "Archive.org URLs, identifiers, or ISBNs",
                        "type": "array",
                        "description": "Use this when you already know the Archive.org item URL, item identifier, or ISBN. For authors, collections, subjects, and advanced Archive.org searches, use the discovery fields below.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "https://archive.org/details/goodytwoshoes00newyiala"
                        ]
                    },
                    "isbns": {
                        "title": "ISBNs",
                        "type": "array",
                        "description": "Optional ISBN-10 or ISBN-13 values to search for. Spaces and hyphens are accepted.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "creators": {
                        "title": "Authors / creators",
                        "type": "array",
                        "description": "Author or creator names to search. Example: Mark Twain.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "collections": {
                        "title": "Collections",
                        "type": "array",
                        "description": "Archive.org collection identifiers to search. Example: internetarchivebooks.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "subjects": {
                        "title": "Subjects",
                        "type": "array",
                        "description": "Subject terms to search. Example: fiction.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "searchQueries": {
                        "title": "Archive.org search queries",
                        "type": "array",
                        "description": "Optional raw Archive.org search queries. Example: creator:\"Mark Twain\" AND mediatype:texts.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "outputMode": {
                        "title": "Output mode",
                        "type": "string",
                        "description": "Legacy option ignored by the Actor. Dataset output is always one row per public review.",
                        "default": "reviews_flat"
                    },
                    "maxItems": {
                        "title": "Maximum items",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of Archive.org items to enrich.",
                        "default": 1
                    },
                    "maxReviewsPerItem": {
                        "title": "Maximum reviews per item",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of public reviews to fetch per item.",
                        "default": 10
                    },
                    "onlyItemsWithReviews": {
                        "title": "Only items with reviews",
                        "type": "boolean",
                        "description": "Keep enabled for review-only output. Items with no public reviews do not produce dataset rows.",
                        "default": true
                    },
                    "includeFiles": {
                        "title": "Include file metadata",
                        "type": "boolean",
                        "description": "Legacy option. Dataset output remains one row per public review and book files are never downloaded.",
                        "default": false
                    },
                    "minStars": {
                        "title": "Minimum stars",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "number",
                        "description": "Advanced review filter. Only keep reviews with this star rating or higher.",
                        "default": null
                    },
                    "maxStars": {
                        "title": "Maximum stars",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "number",
                        "description": "Advanced review filter. Only keep reviews with this star rating or lower.",
                        "default": null
                    },
                    "reviewTextContains": {
                        "title": "Review text contains",
                        "type": "string",
                        "description": "Advanced review filter applied case-insensitively to review titles and bodies.",
                        "default": ""
                    },
                    "languageFilter": {
                        "title": "Languages",
                        "type": "array",
                        "description": "Advanced item language filter, for example eng or english.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "startUrls": {
                        "title": "Structured URLs",
                        "type": "array",
                        "description": "API-compatible structured URL input.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "identifiers": {
                        "title": "Structured identifiers",
                        "type": "array",
                        "description": "API-compatible structured identifier input.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "mediatypes": {
                        "title": "Mediatypes",
                        "type": "array",
                        "description": "Advanced filter for Archive.org mediatype. Defaults to texts.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "texts"
                        ]
                    },
                    "includeMetadata": {
                        "title": "Include metadata",
                        "type": "boolean",
                        "description": "Backward-compatible option. Metadata is included by default.",
                        "default": true
                    },
                    "includeReviews": {
                        "title": "Include reviews",
                        "type": "boolean",
                        "description": "Backward-compatible option. Reviews are included by default.",
                        "default": true
                    },
                    "includeRawMetadata": {
                        "title": "Include raw metadata",
                        "type": "boolean",
                        "description": "Advanced debugging option.",
                        "default": false
                    },
                    "includeRawReviews": {
                        "title": "Include raw reviews",
                        "type": "boolean",
                        "description": "Advanced debugging option.",
                        "default": false
                    },
                    "searchPageSize": {
                        "title": "Search page size",
                        "minimum": 100,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Advanced search pagination option.",
                        "default": 100
                    },
                    "metadataReviewsPageSize": {
                        "title": "Review page size",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Advanced review pagination option.",
                        "default": 100
                    },
                    "globalConcurrency": {
                        "title": "Global concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Advanced HTTP concurrency option.",
                        "default": 3
                    },
                    "perHostConcurrency": {
                        "title": "Per-host concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Advanced per-host HTTP concurrency option.",
                        "default": 2
                    },
                    "requestDelayMs": {
                        "title": "Request delay in milliseconds",
                        "minimum": 0,
                        "maximum": 60000,
                        "type": "integer",
                        "description": "Advanced polite-request delay option.",
                        "default": 500
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout in seconds",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Advanced HTTP timeout option.",
                        "default": 20
                    },
                    "maxRetries": {
                        "title": "Maximum retries",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Advanced retry option for retryable HTTP errors such as 429 and 5xx.",
                        "default": 2
                    },
                    "internetArchiveAccessKey": {
                        "title": "Internet Archive access key (optional)",
                        "type": "string",
                        "description": "Optional advanced credential. Not required for public item URLs, identifiers, metadata, or reviews."
                    },
                    "internetArchiveSecretKey": {
                        "title": "Internet Archive secret key (optional)",
                        "type": "string",
                        "description": "Optional advanced credential. Not required for public item URLs, identifiers, metadata, or reviews."
                    },
                    "debug": {
                        "title": "Debug logging",
                        "type": "boolean",
                        "description": "Advanced debugging option. Secret credential values are never logged.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
