# BookWyrm Book Reviews Scraper (`thescrapelab/bookwyrm-book-reviews-scraper`) Actor

Scrape public BookWyrm reviews, ratings, book metadata, and reviewer details by book name, book URL, or profile handle from federated BookWyrm instances.

- **URL**: https://apify.com/thescrapelab/bookwyrm-book-reviews-scraper.md
- **Developed by:** [Inus Grobler](https://apify.com/thescrapelab) (community)
- **Categories:** Social media, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.19 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## BookWyrm Book Reviews Scraper

<p align="center">
  <img src="assets/bookwyrm-book-reviews-scraper-logo.svg" alt="BookWyrm Book Reviews Scraper logo" width="128" />
</p>

Scrape public BookWyrm book reviews, ratings, reviewer profiles, and book metadata from federated BookWyrm instances. This Apify Actor is built for book-focused review collection, ActivityPub book-review enrichment, public profile review monitoring, and multi-source book-review datasets.

BookWyrm is federated, so reviews are spread across independent servers such as `bookwyrm.social`, `bookwyrm.world`, and many smaller community instances. Add book URLs, profile handles, or book search queries for the instances you care about, and the Actor collects the public data that those pages and feeds expose. Download the results as JSON, CSV, Excel, XML, or HTML from the Apify dataset.

### Why use this BookWyrm scraper?

- Collect public BookWyrm reviews from selected books, profile handles, or book searches
- Build a public book review dataset from federated BookWyrm instances
- Monitor public reviews from selected BookWyrm users
- Enrich book-review records with reviewer and book metadata
- Combine BookWyrm reviews with Goodreads, StoryGraph, Open Library, or other book data sources
- Export clean book and review rows to a dataset, database, spreadsheet, or downstream analytics workflow

### What you can extract

- Review URL, title, rating, review text, original HTML, publication date, language, visibility, tags, and content warning
- Reviewer profile URL, handle, display name, avatar URL, ActivityPub ID, public profile bio, outbox URL, and federation metadata
- Book title, subtitle, authors, author aliases, author bio/ISNI links, ISBNs, cover image, BookWyrm book URL, work/edition URL, publisher, page count, subjects, languages, series, physical format, and visible identifiers
- Public comments and quotes linked to books when enabled through advanced input
- Optional raw ActivityPub and RSS fields for advanced workflows

### Simple setup

Most runs use one of three inputs:

- **Book URLs**: scrape selected public BookWyrm book pages
- **Profiles**: add one federated handle, profile URL, or `instance | handle` per line
- **Book search**: add one book title, author, or ISBN per line

Example book URL:

```text
https://bookwyrm.world/book/20954
````

Example profile:

```text
sigvie@bookwyrm.world
mouse@bookwyrm.social
bookwyrm.world | sigvie
https://bookwyrm.world/user/sigvie
```

Example book search:

```text
Min skyld Abid Raja
Sula Toni Morrison
9788202713461
```

Plain searches use a built-in BookWyrm search instance. To target a specific server, use `instance | query`, such as `bookwyrm.social | Sula Toni Morrison`.

### Example input

```json
{
  "books": [
    "https://bookwyrm.world/book/20954"
  ],
  "profiles": [
    "sigvie@bookwyrm.world",
    "mouse@bookwyrm.social"
  ],
  "search": [
    "Min skyld Abid Raja",
    "Sula Toni Morrison"
  ],
  "maxReviews": 100,
  "maxSearchResults": 10
}
```

### Example output

Book rows are emitted as soon as book metadata is available:

```json
{
  "entityType": "book",
  "source": "bookwyrm",
  "sourceInstance": "https://bookwyrm.social",
  "activityPubId": "https://bookwyrm.social/book/2",
  "bookUrl": "https://bookwyrm.social/book/2/s/hamlet",
  "title": "Hamlet",
  "authors": [
    {
      "name": "William Shakespeare",
      "url": "https://bookwyrm.social/author/1/s/william-shakespeare",
      "activityPubId": "https://bookwyrm.social/author/1"
    }
  ],
  "isbn10": "0140714545",
  "isbn13": "9780140714548",
  "aggregateRating": 3.7,
  "reviewsCount": 272,
  "bookReviewDiscoveryStatus": "collected_from_html_public_page",
  "scrapedAt": "2026-05-23T10:21:23.443Z"
}
```

Every review is emitted as its own dataset row:

```json
{
  "entityType": "review",
  "source": "bookwyrm",
  "sourceInstance": "https://bookwyrm.world",
  "activityPubId": "https://bookwyrm.world/user/sigvie/review/10524",
  "reviewUrl": "https://bookwyrm.world/user/sigvie/review/10524",
  "reviewType": "Article",
  "title": "Review of \"Min skyld\" (5 stars)",
  "rating": 5,
  "ratingScale": 5,
  "ratingSource": "activitypub",
  "reviewText": "Fantastisk og rørende bok. Elsker skrivinga!",
  "publishedAt": "2022-12-06T00:00:00.000Z",
  "visibility": "public",
  "reviewer": {
    "activityPubId": "https://bookwyrm.world/user/sigvie",
    "profileUrl": "https://bookwyrm.world/user/sigvie",
    "handle": "sigvie@bookwyrm.world",
    "displayName": "Sigurd Vie"
  },
  "book": {
    "activityPubId": "https://bookwyrm.world/book/20954",
    "bookUrl": "https://bookwyrm.world/book/20954",
    "title": "Min skyld",
    "authors": ["Abid Qayyum Raja"],
    "isbn13": "9788202713461"
  },
  "bookDetails": {
    "title": "Min skyld",
    "publisher": "Cappelen Damm",
    "publishedDate": "2021-08-11",
    "pageCount": 240,
    "languages": ["Norsk (Bokmål)"],
    "authors": [
      {
        "name": "Abid Qayyum Raja",
        "aliases": ["Abid Raja", "Abid Q. Raja"],
        "isni": "0000000041008712",
        "wikipediaLink": "https://da.wikipedia.org/wiki/Abid_Raja"
      }
    ],
    "bookwyrm": {
      "workUrl": "https://bookwyrm.world/book/20953",
      "physicalFormat": "Hardcover"
    }
  },
  "reviewerProfile": {
    "handle": "sigvie@bookwyrm.world",
    "displayName": "Sigurd Vie",
    "outboxUrl": "https://bookwyrm.world/user/sigvie/outbox"
  },
  "bookwyrm": {
    "repliesUrl": "https://bookwyrm.world/user/sigvie/review/10524/replies",
    "repliesCount": 0
  },
  "discoveryMethod": "rss_reviews",
  "scrapedAt": "2026-05-23T10:21:23.443Z"
}
```

### Output

The dataset contains one standalone row for each discovered book and one standalone row for each public review. Reviews are never nested under books, so large runs stay easy to stream into spreadsheets, databases, dashboards, or analytics pipelines.

Book rows include the best available public metadata. Review rows include compact nested book and reviewer summaries, plus richer `bookDetails` and `reviewerProfile` fields when enrichment is available. Rows are streamed in batches as they are collected, which lowers memory pressure on large runs and lets you inspect partial results before the run finishes.

For faster large book runs, full reviewer profile enrichment is off by default. Review rows still include the reviewer information visible on the review page, such as reviewer name, profile URL, and handle when available.

### How the Actor gets BookWyrm data

The Actor uses the safest available public source first:

1. **ActivityPub JSON** for structured review, profile, book, and status data
2. **RSS feeds** for reliable profile-level review, comment, quote, and activity discovery
3. **Public BookWyrm search pages** when you provide book search queries
4. **Public HTML fallback** for visible metadata when structured sources do not expose enough data

It does not use browser automation by default. It does not log in, solve CAPTCHAs, bypass Cloudflare, bypass anti-bot pages, or access private/followers-only content.

For book URLs, the Actor follows public BookWyrm review pagination when it is visible on the book page. This is the cheapest way to collect hundreds or thousands of reviews for a book because it uses normal HTTP requests and Cheerio parsing, not a browser.

### ActivityPub support

BookWyrm often exposes ActivityPub JSON when a URL is requested with ActivityPub headers or when `.json` is appended to a public entity URL. The Actor supports public actors, outboxes, collections, collection pages, Review objects, Article review objects, Create activities, comments, quotes, books, shelves, and lists where those objects are exposed.

### RSS support

When you provide profile handles, the Actor automatically checks public BookWyrm profile feeds where available:

- `/rss-reviews` for public reviews
- `/rss` for public activity
- `/rss-quotes` for public quotes
- `/rss-comments` for public comments

RSS feeds are often the best way to collect profile-level reviews. Some RSS items include ratings in the title, such as `(5 stars)`. If a rating is not available in RSS or enrichment sources, the Actor returns `rating: null` and labels the source clearly.

### Important coverage limits

BookWyrm is not one centralized review database. A book page on one instance may not expose all reviews from all BookWyrm servers. Profile-level scraping is usually more complete because profile RSS feeds and ActivityPub outboxes are scoped to that user.

The Actor does not pretend to scrape every review for a book unless the public page or ActivityPub JSON actually exposes those review links. When a book page exposes paginated public reviews, the Actor follows those pages until `maxReviews`, the hidden safety page limit, or the end of pagination is reached. When book-level review discovery is incomplete, the book row labels that limitation with `bookReviewDiscoveryStatus`.

### Privacy and ethical use

This Actor is for public BookWyrm data only.

- No login is required or supported
- Private, followers-only, restricted, and login-only pages are skipped
- Cloudflare challenges, CAPTCHAs, and access controls are not bypassed
- robots.txt is respected where practical
- Defaults use public HTML fallback, low concurrency, and polite delays

Use this Actor only for lawful, ethical collection of public data from instances you are allowed to access.

### Troubleshooting

**No reviews found**

Add profiles as handles when possible. Book pages and book search results do not always expose review collections.

**The instance returned 403, 404, or 410**

The page may be private, deleted, restricted, unavailable through ActivityPub, or blocked by the instance. The Actor records the failed URL in run statistics and continues with other sources.

**RSS ratings are missing**

Some BookWyrm RSS feeds include ratings in titles, and some do not. If the Actor cannot find a rating in RSS, ActivityPub, or public HTML, it returns `null` instead of guessing.

**A book page did not return all reviews**

That is expected on some federated instances. Add profile handles for reviewers you care about to get better profile-level coverage.

**The instance rate-limited requests**

Lower the maximum number of reviews or search results and keep runs targeted to the profiles and books you need. The Actor uses polite built-in request delays and respects robots.txt where practical.

### Pricing suggestion

Recommended Apify Store model: **pay per event**. Do not use raw pay-per-result or automatic default dataset item charging as the primary pricing event, because the dataset intentionally contains both book metadata rows and review rows. Users should mainly pay for review rows.

- `review-scraped`: `$0.00075` per review row (`$0.75` per 1,000 reviews)
- `book-enriched`: `$0.00010` per book row (`$0.10` per 1,000 books)
- `profile-enriched`: `$0.00025` per full profile enrichment when reviewer profile enrichment is enabled
- Keep Apify's synthetic `apify-actor-start` event at the default low price if using pay-per-event monetization

Stress testing showed that BookWyrm review density varies heavily by instance and book. Some searches return many low-review books, while popular books can return more visible public review links. A review-first event price keeps small runs cheap while still covering the extra discovery work needed for low-density or zero-result books.

Suggested starting price: **$0.75 per 1,000 public reviews**, plus a small book metadata event. Revisit after real user runs and monitor cost per 1,000 reviews, zero-result search rates, average reviews per book, and profile enrichment usage.

### API usage

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
actor = client.actor("thescrapelab/bookwyrm-book-reviews-scraper")

run_input = {
    "books": [
        "https://bookwyrm.world/book/20954"
    ],
    "profiles": [
        "sigvie@bookwyrm.world",
        "mouse@bookwyrm.social",
    ],
    "search": [
        "Min skyld Abid Raja",
        "Sula Toni Morrison",
    ],
    "maxReviews": 100,
    "maxSearchResults": 10,
}

run = actor.call(run_input=run_input)
dataset = client.dataset(run["defaultDatasetId"])

for item in dataset.list_items().items:
    if item["entityType"] == "book":
        print("BOOK", item.get("title"), item.get("reviewsCount"))
    elif item["entityType"] == "review":
        print("REVIEW", item.get("reviewUrl"), item.get("rating"), item.get("book", {}).get("title"))
```

# Actor input Schema

## `books` (type: `array`):

Paste public BookWyrm book URLs. The Actor enriches each book and collects public reviews that the book page or ActivityPub data exposes.

## `profiles` (type: `array`):

Add one profile per line. Use a federated handle such as sigvie@bookwyrm.world, a profile URL, or instance | handle.

## `search` (type: `array`):

Add one book title, author, or ISBN per line. The Actor searches BookWyrm and processes matching book pages. You can also use instance | title to target a specific BookWyrm instance.

## `maxReviews` (type: `integer`):

Stop after this many public reviews have been collected.

## `maxSearchResults` (type: `integer`):

Maximum book results to process per search query.

## `includeReviewerProfiles` (type: `boolean`):

Fetch extra public reviewer profile pages and ActivityPub data. Leave off for faster large book runs; review rows still include visible reviewer name, handle, and profile URL when available.

## Actor input object example

```json
{
  "books": [
    "https://bookwyrm.world/book/20954"
  ],
  "profiles": [
    "sigvie@bookwyrm.world",
    "mouse@bookwyrm.social"
  ],
  "search": [
    "Min skyld Abid Raja",
    "Sula Toni Morrison",
    "bookwyrm.social | Sula Toni Morrison"
  ],
  "maxReviews": 1000,
  "maxSearchResults": 20,
  "includeReviewerProfiles": false
}
```

# Actor output Schema

## `results` (type: `string`):

All dataset rows returned by the Actor. The dataset contains one row for each book and one row for each public review.

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

Dataset view focused on public BookWyrm review rows, including rating, review text, reviewer details, book summary, source instance, discovery method, and scrape timestamp.

## `books` (type: `string`):

Dataset view focused on BookWyrm book metadata rows, including title, authors, ISBNs, publisher, page count, languages, cover URL, visible review counts, and review discovery status.

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

JSON run statistics with processed URL counts, review counts, request counts, skipped restricted pages, duplicate counts, warnings, and unavailable capabilities.

# 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 = {
    "books": [
        "https://bookwyrm.world/book/20954"
    ],
    "profiles": [
        "sigvie@bookwyrm.world",
        "mouse@bookwyrm.social"
    ],
    "search": [
        "Min skyld Abid Raja",
        "Sula Toni Morrison",
        "bookwyrm.social | Sula Toni Morrison"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("thescrapelab/bookwyrm-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 = {
    "books": ["https://bookwyrm.world/book/20954"],
    "profiles": [
        "sigvie@bookwyrm.world",
        "mouse@bookwyrm.social",
    ],
    "search": [
        "Min skyld Abid Raja",
        "Sula Toni Morrison",
        "bookwyrm.social | Sula Toni Morrison",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("thescrapelab/bookwyrm-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 '{
  "books": [
    "https://bookwyrm.world/book/20954"
  ],
  "profiles": [
    "sigvie@bookwyrm.world",
    "mouse@bookwyrm.social"
  ],
  "search": [
    "Min skyld Abid Raja",
    "Sula Toni Morrison",
    "bookwyrm.social | Sula Toni Morrison"
  ]
}' |
apify call thescrapelab/bookwyrm-book-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "BookWyrm Book Reviews Scraper",
        "description": "Scrape public BookWyrm reviews, ratings, book metadata, and reviewer details by book name, book URL, or profile handle from federated BookWyrm instances.",
        "version": "0.1",
        "x-build-id": "AsXH0aezfiRCrHErx"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/thescrapelab~bookwyrm-book-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-thescrapelab-bookwyrm-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~bookwyrm-book-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-thescrapelab-bookwyrm-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~bookwyrm-book-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-thescrapelab-bookwyrm-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": {
                    "books": {
                        "title": "Book URLs",
                        "type": "array",
                        "description": "Paste public BookWyrm book URLs. The Actor enriches each book and collects public reviews that the book page or ActivityPub data exposes.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "profiles": {
                        "title": "Profiles",
                        "type": "array",
                        "description": "Add one profile per line. Use a federated handle such as sigvie@bookwyrm.world, a profile URL, or instance | handle.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "search": {
                        "title": "Book search",
                        "type": "array",
                        "description": "Add one book title, author, or ISBN per line. The Actor searches BookWyrm and processes matching book pages. You can also use instance | title to target a specific BookWyrm instance.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "maxReviews": {
                        "title": "Maximum reviews",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Stop after this many public reviews have been collected.",
                        "default": 1000
                    },
                    "maxSearchResults": {
                        "title": "Maximum search results",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum book results to process per search query.",
                        "default": 20
                    },
                    "includeReviewerProfiles": {
                        "title": "Enrich full reviewer profiles",
                        "type": "boolean",
                        "description": "Fetch extra public reviewer profile pages and ActivityPub data. Leave off for faster large book runs; review rows still include visible reviewer name, handle, and profile URL when available.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
