# PDF Text Extractor (`automation-lab/pdf-text-extractor`) Actor

Extract text, metadata, and page-by-page content from PDF files. Provide PDF URLs and get structured JSON with full text, per-page text, page count, author, title, creation date, and more. Export as JSON, CSV, or Excel. No browser or proxy needed.

- **URL**: https://apify.com/automation-lab/pdf-text-extractor.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Developer tools
- **Stats:** 6 total users, 4 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

### What does PDF Text Extractor do?

**PDF Text Extractor** downloads PDF files from any public URL and extracts structured text, metadata, and per-page content. It returns clean JSON with the full document text, individual page text, page count, and all PDF metadata (title, author, creation date, producer, and more).

Unlike browser-based PDF tools, this actor uses **pure server-side processing** with no browser overhead. It processes PDFs in parallel for maximum throughput and handles errors gracefully -- if one PDF fails, the rest still complete.

Try it now on the [Apify Store](https://apify.com/automation-lab/pdf-text-extractor) with the prefilled example URLs.

### Who is PDF Text Extractor for?

**AI/ML Engineers and Data Scientists**
- Extract text from research papers, whitepapers, and technical documentation for RAG pipelines
- Build training datasets from large PDF collections
- Feed document content into LLMs for summarization and analysis

**Legal and Compliance Teams**
- Extract text from contracts, filings, and regulatory documents
- Build searchable archives from PDF-only document repositories
- Automate document review workflows

**Researchers and Academics**
- Bulk-extract text from academic papers and journal articles
- Build citation databases from PDF collections
- Convert lecture notes and course materials to searchable text

**Developers and Automation Engineers**
- Integrate PDF text extraction into data pipelines via API
- Process invoices, receipts, and forms at scale
- Extract metadata for document management systems

### Why use PDF Text Extractor?

- **Pure server-side processing** -- no browser, no proxy, near-zero cost per PDF
- **Per-page text extraction** -- get text for each individual page, not just the whole document
- **Rich metadata** -- title, author, subject, keywords, creator, producer, creation/modification dates, PDF version
- **Parallel processing** -- configure concurrency to process multiple PDFs simultaneously
- **Graceful error handling** -- failed PDFs don't stop the entire batch
- **API access** -- integrate with 5,000+ apps via Zapier, Make, and the Apify API
- **Scheduled runs** -- set up recurring extractions for document monitoring
- **Multiple export formats** -- JSON, CSV, Excel, XML, HTML

### What data can you extract?

| Category | Fields |
|----------|--------|
| **Document text** | Full text, per-page text array |
| **Metadata** | Title, author, subject, keywords |
| **Producer info** | Creator application, producer application |
| **Dates** | Creation date, modification date (ISO 8601) |
| **Technical** | Page count, PDF version, file size in bytes |
| **Error handling** | Error message (null when successful) |

Each PDF produces one dataset row with **16 structured fields**.

### How much does it cost to extract text from PDFs?

PDF Text Extractor uses **pay-per-event** pricing. You only pay for what you use:

| Event | FREE tier | BRONZE | SILVER | GOLD |
|-------|-----------|--------|--------|------|
| Run started (one-time) | $0.005 | $0.005 | $0.005 | $0.005 |
| Per PDF extracted | $0.00345 | $0.003 | $0.00234 | $0.0018 |

**Example costs (BRONZE tier):**
- 10 PDFs: $0.005 + 10 x $0.003 = **$0.035**
- 100 PDFs: $0.005 + 100 x $0.003 = **$0.305**
- 1,000 PDFs: $0.005 + 1,000 x $0.003 = **$3.005**

With the **free $5 Apify credit**, you can extract text from approximately **1,600 PDFs** at no cost.

### How to extract text from PDF files

1. Go to the [PDF Text Extractor](https://apify.com/automation-lab/pdf-text-extractor) page on Apify Store
2. Click **Try for free** to open the actor in Apify Console
3. Paste your PDF URLs into the **PDF URLs** field (one per line)
4. Adjust concurrency and timeout settings if needed
5. Click **Start** to begin extraction
6. Download results in JSON, CSV, or Excel format

#### Example input

```json
{
    "urls": [
        "https://example.com/report-2024.pdf",
        "https://example.com/whitepaper.pdf",
        "https://example.com/invoice-january.pdf"
    ],
    "includePages": true,
    "maxConcurrency": 5
}
````

#### Minimal input

```json
{
    "urls": ["https://example.com/document.pdf"]
}
```

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `urls` | array of strings | (required) | Direct URLs to PDF files |
| `includePages` | boolean | `true` | Include per-page text breakdown |
| `maxConcurrency` | integer | `5` | Parallel PDF downloads (1-20) |
| `timeoutPerPdfSecs` | integer | `60` | Download timeout per PDF in seconds |

### Output example

```json
{
    "url": "https://www.orimi.com/pdf-test.pdf",
    "fileName": "pdf-test.pdf",
    "title": "PDF Test Page",
    "author": "Yukon Department of Education",
    "subject": null,
    "keywords": null,
    "creator": "Acrobat PDFMaker 7.0.7 for Word",
    "producer": "Acrobat Distiller 7.0.5 (Windows)",
    "creationDate": "2008-06-04T15:44:00.000Z",
    "modificationDate": "2008-06-04T15:47:36.000Z",
    "pageCount": 1,
    "fullText": "PDF Test File  Congratulations, your computer is equipped with a PDF reader...",
    "pages": [
        {
            "pageNumber": 1,
            "text": "PDF Test File  Congratulations, your computer is equipped with a PDF reader..."
        }
    ],
    "pdfVersion": "1.6",
    "fileSizeBytes": 20597,
    "error": null
}
```

### Tips for best results

- **Start small** -- test with 2-3 PDFs first to verify the URLs work and output meets your needs
- **Use direct PDF URLs** -- the URL must point directly to a .pdf file, not a page that contains a PDF viewer
- **Disable per-page text for large PDFs** -- set `includePages: false` to reduce output size when processing documents with hundreds of pages
- **Increase timeout for large files** -- if you are processing PDFs over 50 MB, increase `timeoutPerPdfSecs` to 120 or more
- **Check the error field** -- failed PDFs still appear in results with an `error` message, so you can identify and retry them
- **Schedule recurring runs** -- use Apify's scheduler to automatically extract new PDFs on a daily or weekly basis

### Integrations

- **PDF Text Extractor + Google Sheets** -- automatically populate a spreadsheet with extracted text and metadata from new PDF uploads
- **PDF Text Extractor + Slack** -- get notified when PDF extraction completes, with a summary of pages processed and any errors
- **PDF Text Extractor + Make/Zapier** -- trigger PDF extraction when new files are uploaded to Google Drive, Dropbox, or S3
- **PDF Text Extractor + OpenAI/LLM** -- chain extraction with AI summarization to create document summaries from PDF collections
- **Scheduled runs** -- monitor a document repository and extract text from newly published PDFs on a schedule
- **Webhooks** -- trigger downstream processing immediately when extraction completes

### Using the Apify API

#### Node.js

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('automation-lab/pdf-text-extractor').call({
    urls: [
        'https://example.com/report.pdf',
        'https://example.com/whitepaper.pdf',
    ],
    includePages: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => {
    console.log(`${item.fileName}: ${item.pageCount} pages, ${item.fullText.length} chars`);
});
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')

run = client.actor('automation-lab/pdf-text-extractor').call(run_input={
    'urls': [
        'https://example.com/report.pdf',
        'https://example.com/whitepaper.pdf',
    ],
    'includePages': True,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
for item in items:
    print(f"{item['fileName']}: {item['pageCount']} pages, {len(item['fullText'])} chars")
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/automation-lab~pdf-text-extractor/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "urls": ["https://example.com/report.pdf"],
    "includePages": true
  }'
```

### Use with AI agents via MCP

PDF Text Extractor is available as a tool for AI assistants that support the [Model Context Protocol (MCP)](https://docs.apify.com/platform/integrations/mcp).

Add the Apify MCP server to your AI client -- this gives you access to all Apify actors, including this one:

#### Setup for Claude Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

#### Setup for Claude Desktop, Cursor, or VS Code

Add this to your MCP config file:

```json
{
    "mcpServers": {
        "apify": {
            "url": "https://mcp.apify.com"
        }
    }
}
```

Your AI assistant will use OAuth to authenticate with your Apify account on first use.

#### Example prompts

Once connected, try asking your AI assistant:

- "Use automation-lab/pdf-text-extractor to extract all text from this research paper: https://arxiv.org/pdf/1706.03762"
- "Extract metadata and page count from these 5 PDF invoices and summarize the results"
- "Download and extract text from all PDFs linked on this page, then create a summary of each document"

Learn more in the [Apify MCP documentation](https://docs.apify.com/platform/integrations/mcp).

### Is it legal to extract text from PDFs?

PDF Text Extractor processes publicly accessible PDF files that you provide URLs for. The actor downloads files the same way a web browser would. Always ensure you have the right to access and process the documents you are extracting text from.

For personal data, comply with GDPR and applicable privacy laws. Review the terms of service for any document repositories you are accessing. Apify provides a general [web scraping legality](https://blog.apify.com/is-web-scraping-legal/) guide for reference.

### FAQ

**How fast is PDF Text Extractor?**
Processing speed depends on PDF file size and download speed. A typical 1 MB PDF takes 1-3 seconds to download and parse. With `maxConcurrency: 10`, you can process 100 average-sized PDFs in under a minute.

**How much does it cost to extract text from 1,000 PDFs?**
At BRONZE tier pricing: $0.005 (start) + 1,000 x $0.003 (per PDF) = **$3.005 total**. With the free $5 credit, you can process about 1,600 PDFs at no cost.

**Does it work with scanned PDFs?**
No. This actor extracts embedded text from PDFs. Scanned documents that contain only images (no selectable text) will return empty text. For scanned PDFs, you would need an OCR (Optical Character Recognition) solution.

**Why are some PDF fields returning null?**
Not all PDFs include metadata. The title, author, subject, and keywords fields depend on what the PDF creator set when generating the document. Many auto-generated PDFs leave these fields empty.

**Why did a PDF fail with "Invalid PDF structure"?**
The URL may not point to an actual PDF file. Ensure the URL returns a direct PDF download, not an HTML page with an embedded PDF viewer. Some servers also require specific headers or authentication.

**Can I extract text from password-protected PDFs?**
No. Password-protected (encrypted) PDFs cannot be parsed without the password. The actor will return an error for these files.

### Other PDF and document tools

- [Markdown to PDF Converter](https://apify.com/automation-lab/markdown-to-pdf) -- convert Markdown text into formatted PDF documents
- [HTML to PDF Converter](https://apify.com/automation-lab/html-to-pdf-converter) -- convert web pages and HTML into PDF files
- [Webpage to Markdown Converter](https://apify.com/automation-lab/webpage-to-markdown-converter) -- extract clean Markdown from any webpage
- [Fake Test Data Generator](https://apify.com/automation-lab/fake-test-data-generator) -- generate bulk test data in JSON, CSV, or Excel
- [Unicode Text Inspector](https://apify.com/automation-lab/unicode-text-inspector) -- analyze text encoding and hidden characters

# Actor input Schema

## `urls` (type: `array`):

List of direct URLs to PDF files. Each URL must point to a downloadable .pdf file.

## `maxConcurrency` (type: `integer`):

How many PDFs to download and process in parallel. Higher values are faster but use more memory.

## `timeoutPerPdfSecs` (type: `integer`):

Maximum time to wait for each PDF download. Large files may need higher values.

## `includePages` (type: `boolean`):

When enabled, output includes a 'pages' array with text for each individual page. Disable to reduce output size for large PDFs.

## Actor input object example

```json
{
  "urls": [
    "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
    "https://www.orimi.com/pdf-test.pdf"
  ],
  "maxConcurrency": 5,
  "timeoutPerPdfSecs": 60,
  "includePages": true
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "urls": [
        "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
        "https://www.orimi.com/pdf-test.pdf"
    ],
    "maxConcurrency": 5,
    "timeoutPerPdfSecs": 60,
    "includePages": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/pdf-text-extractor").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 = {
    "urls": [
        "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
        "https://www.orimi.com/pdf-test.pdf",
    ],
    "maxConcurrency": 5,
    "timeoutPerPdfSecs": 60,
    "includePages": True,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/pdf-text-extractor").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 '{
  "urls": [
    "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
    "https://www.orimi.com/pdf-test.pdf"
  ],
  "maxConcurrency": 5,
  "timeoutPerPdfSecs": 60,
  "includePages": true
}' |
apify call automation-lab/pdf-text-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/pdf-text-extractor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "PDF Text Extractor",
        "description": "Extract text, metadata, and page-by-page content from PDF files. Provide PDF URLs and get structured JSON with full text, per-page text, page count, author, title, creation date, and more. Export as JSON, CSV, or Excel. No browser or proxy needed.",
        "version": "0.1",
        "x-build-id": "ATLT6xgrOy2ulvJ09"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~pdf-text-extractor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-pdf-text-extractor",
                "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/automation-lab~pdf-text-extractor/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-pdf-text-extractor",
                "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/automation-lab~pdf-text-extractor/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-pdf-text-extractor",
                "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": [
                    "urls"
                ],
                "properties": {
                    "urls": {
                        "title": "📄 PDF URLs",
                        "type": "array",
                        "description": "List of direct URLs to PDF files. Each URL must point to a downloadable .pdf file.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxConcurrency": {
                        "title": "⚡ Max concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "How many PDFs to download and process in parallel. Higher values are faster but use more memory.",
                        "default": 5
                    },
                    "timeoutPerPdfSecs": {
                        "title": "⏱️ Timeout per PDF (seconds)",
                        "minimum": 10,
                        "maximum": 300,
                        "type": "integer",
                        "description": "Maximum time to wait for each PDF download. Large files may need higher values.",
                        "default": 60
                    },
                    "includePages": {
                        "title": "📑 Include per-page text",
                        "type": "boolean",
                        "description": "When enabled, output includes a 'pages' array with text for each individual page. Disable to reduce output size for large PDFs.",
                        "default": true
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
