# Japan Government Tenders Scraper + AI Extraction（官公需・入札情報） (`minako-ph/japan-tender-scraper`) Actor

Structured Japanese public tenders: deadlines, qualification grades, region requirements — every field with a verbatim source citation.

- **URL**: https://apify.com/minako-ph/japan-tender-scraper.md
- **Developed by:** [Minako Yamamoto](https://apify.com/minako-ph) (community)
- **Categories:** AI, Developer tools
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $59.00 / 1,000 tender (enriched with ai)s

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

## Japan Government Tenders Scraper + AI Extraction（官公需・入札情報）

**Search Japan's official government procurement portal and get tenders as structured, citation-backed JSON.** Every run queries the official API of 官公需情報ポータル (kkj.go.jp), fetches each tender announcement, and has an LLM extract deadlines, qualification grades, region requirements and more — **every extracted value ships with a verbatim quote from the source text**, so you can verify it instead of trusting it. Values that cannot be verified against the source are returned as `null`, never guessed.

Here is a real output record (a water-main relocation works tender from Nirasaki City, Yamanashi):

```jsonc
{
  "key": "eWFtYW5hc2hpL25pcmFzYWtpX2NpdHkvMjAyNi8yMDI2MDcwNl8wMDE2Nwo=",
  "projectName": "令和8年7月23日一般競争入札予定（下水道工事に伴う 水道管移設 耐震化工事（第3工区））",
  "prefecture": "山梨県",
  "organization": "山梨県韮崎市",
  "categoryPortal": "工事",
  "cftIssueDate": "2026-07-06T00:00:00+09:00",
  "sourceUrl": "https://www.city.nirasaki.lg.jp/material/files/group/1/koukoku147.docx",
  "dataSource": "官公需情報ポータルサイト（kkj.go.jp）のAPIを利用しています / Powered by the official API of the Government Procurement Portal: https://www.kkj.go.jp/s/",
  "enrichmentStatus": "ok",
  "enriched": {
    "summary": "韮崎市が発注する下水道工事に伴う水道管移設耐震化工事（第3工区）の一般競争入札（事後審査型）。施工延長L=521.6m。契約日の翌日から令和9年3月31日までの工期。",
    "industryCategory": { "major": "construction", "detail": "水道管移設耐震化工事" },
    "deadlines": {
      "qa": "2026-07-14",            // question deadline
      "participation": "2026-07-17", // pre-participation application deadline
      "bidSubmission": "2026-07-23", // bid submission deadline
      "opening": "2026-07-23"        // bid opening (same-day opening)
    },
    "qualification": {
      "grade": { "system": "local", "allowed": [], "raw": "最新の総合評点が600点以上の者" },
      "localRegistrationRequired": true,
      "regionRequirement": "韮崎市内に本社(本店)がある者",
      "licenses": []
    },
    "performancePeriod": { "start": "2026-07-24", "end": "2027-03-31" },
    "electronicBidding": false,
    "biddingMethod": "lowest_price",
    "confidence": 1,
    "sourceQuotes": {
      "deadlines.qa": "質問提出期限令和8年7月14日 午後3時",
      "deadlines.participation": "入札参加申出受付期間令和8年7月6日 ～ 7月17日 午後3時",
      "deadlines.bidSubmission": "入札書受付日時令和8年7月23日(木) 午前10時00分",
      "deadlines.opening": "開札は、入札書提出の締め切り後「共通事項」指定の時刻に即日開札する",
      "qualification.grade.raw": "最新の総合評点が600点以上の者",
      "qualification.localRegistrationRequired": "韮崎市競争入札参加有資格者名簿【工事：管】に登録されている者",
      "qualification.regionRequirement": "韮崎市内に本社(本店)がある者"
      // …one verbatim citation per extracted field
    },
    "remediations": [],
    "schemaVersion": "2.4",
    "model": "claude-haiku-4-5"
  }
}
````

### What it does

- **Extract bid deadlines and qualification grades from Japanese tenders** — Q\&A, participation, bid submission and opening dates, each independently verified against the announcement text
- **Scrape Japan's government procurement portal (官公需情報ポータル / kkj.go.jp)** via its official search API — no fragile DOM scraping
- **Search Japanese public tenders by keyword, prefecture (JIS code) and category**, including municipal and small-value tenders
- **Monitor new Japanese government tenders daily** — incremental mode returns only tenders you haven't seen, ready for schedules and webhooks
- **Get Japan bid information as machine-readable JSON with verbatim source citations** for compliance-grade downstream use
- **Classify tenders the portal doesn't**: about 52% of portal records carry no category tag; the AI classifies every tender (construction / goods / services + a short industry label)
- **Call it from AI agents (MCP)** — the input schema is written to be agent-readable

### Accuracy — measured, not promised

Measured on a frozen set of 31 real tender documents (cleaning-services and construction, national + municipal issuers), with human-adjudicated ground truth:

| Field | Accuracy |
|---|---|
| Bid opening date | 100% (31/31) |
| Bid submission deadline | 96.8% (30/31) |
| Qualification grade | 96.7% (29/30) |
| Participation deadline | 93.5% (29/31) |
| Roster registration requirement | 93.5% (29/31) |
| Region requirement | 93.5% (29/31) |
| Fabricated grades / invented values | 0 |

**How we measured**: blind double extraction by two different models → mechanical verbatim matching → 152 cells adjudicated by a human against the original announcements → the resulting frozen 31-document suite is re-run as a regression gate on every pipeline change. Numbers above are from pipeline v2.4. Extraction accuracy is also exposed per record as `confidence` (share of fields whose citation verified) and `remediations` (a log of every deterministic correction the pipeline applied) — so you can route low-confidence records to human review.

### Pricing

| Event | Price | When charged |
|---|---|---|
| `tender-basic` | $2 / 1,000 items | every result pushed to the dataset |
| `tender-enriched` | $59 / 1,000 items | AI extraction succeeded (`enrichmentStatus: "ok"`) |
| `tender-enriched-byok` | $10 / 1,000 items | same, when you bring your own Anthropic API key |

That is **about ¥6 (~$0.06) per tender, read and structured for you**. Example: watching all service tenders in Tokyo every morning ≈ 300 new items/month ≈ **$17.7/month** — compare that to reading 300 Japanese PDFs yourself.

Failed records (`fetch_failed` / `parse_failed` / `list_page`) are **never** charged the enriched fee.

**Trying it out**: this Actor has no separate free tier of its own, but Apify grants free platform credits to new accounts — you can run your first extractions within those credits, **no credit card required** (credit amounts are set by Apify and may change). The default input is preset to a small, high-quality first run (`keywords: ["清掃"]`, `maxItems: 20`).

### Honest limitations

- **Coverage**: only tenders listed on 官公需情報ポータル. The portal aggregates national and local government procurement, but listing completeness varies by municipality — we do not promise exhaustiveness.
- **Freshness**: records appear on the portal about 1 day after the issuing organization publishes them. Monitoring SLAs should be anchored to **portal registration time**, not original publication.
- **Category tags**: ~52% of portal records carry no category. Prefer keyword search (`keywords`) over the `category` filter, and use the AI-extracted `enriched.industryCategory`.
- **Garbled PDF tables**: some announcements publish schedules in tables that collapse when converted to text. Deadline attribution can be wrong in those documents — this is the dominant source of the remaining errors in the accuracy table. Such records typically surface with lower `confidence` or entries in `remediations`.

### Using from AI agents (MCP)

This Actor works with Apify's MCP integration, so Claude, ChatGPT and other MCP-capable agents can call it as a tool:

1. Connect your agent to the Apify MCP server (`https://mcp.apify.com`) with your Apify token.
2. Ask the agent, e.g.: *"Using the japan-tender-scraper actor, find cleaning-service tenders in Kanagawa announced this week and list bid deadlines with their source quotes."*
3. The agent fills the input schema (it is written to be self-explanatory to LLMs):

```json
{ "keywords": ["清掃"], "prefectures": ["14"], "maxItems": 20, "enrich": true }
```

### FAQ

**How is this different from JETRO or "Sell to State" style English tender services?**
Those cover Japan's WTO-threshold and central-government tenders in English. This Actor is the only structured English feed covering **Japan's municipal & sub-threshold tenders** — the long tail of city/town/village procurement that never gets translated, which is the bulk of contract volume.

**Do I pay for records where extraction failed?**
No. Failed records are pushed with `enrichmentStatus` set to the failure reason and are charged as basic items only, never the enriched fee.

**Can I use my own Anthropic API key?**
Yes (BYOK). Set `llmApiKey` in the input — it is stored as a secret, never appears in logs or error messages, and enriched items are then billed at the reduced `tender-enriched-byok` rate while LLM costs go to your key.

**Why do some fields come back `null` even though the announcement mentions them?**
Every value must be backed by a verbatim quote found in the source text. If the model cannot produce a verifiable citation, the pipeline discards the value rather than guessing — `null` means "not verifiably stated", by design.

**Can I run it on a schedule?**
Yes — use Apify Schedules with `incrementalMode: true` (default). Repeat runs with the same search conditions return only new tenders, so a daily schedule plus a webhook gives you a monitoring feed.

### Data source & legal

This Actor uses the official API of **官公需情報ポータルサイト (Government Procurement Portal)**: <https://www.kkj.go.jp/s/> — the same credit is embedded in every output record (`dataSource` field). Output contains factual data, short summaries, minimal verbatim quotes for verification, and links to the original announcements; full announcement texts are not republished. Personal names and personal contact details are excluded from output by design.

***

### 日本語での概要

**官公需情報ポータル（kkj.go.jp）の公式APIを検索し、公告本文をAIが読解して構造化JSONで返すActorです。** 抽出した全フィールドに原文からの逐語引用（sourceQuotes）が付くため、値を検算できます。根拠を示せない値は推測せず null で返します。

- **検索**: キーワード（例: 清掃・警備・舗装）／都道府県コード／カテゴリ／公告日範囲
- **抽出**: 質問締切・参加申請期限・入札書提出期限・開札日／等級（統一資格・自治体格付・経審評点）／名簿登載要否／地域要件／許認可／履行期間／電子入札／落札方式／業種分類／要約
- **精度**: 凍結31実文書＋人裁定による実測で 開札100%・入札書96.8%・等級96.7%・参加/名簿/地域93.5%・捏造0（v2.4）。confidence と remediations を全件開示
- **料金**: 構造化成功1件 $0.059（約6円）。自前キー持ち込み（BYOK）なら $0.010/件。失敗レコードにAI課金なし。Actor独自の無料枠はありませんが、**Apifyが新規アカウントに付与する無料クレジットの範囲で、カード登録なしに試せます**
- **制約（正直に）**: ポータル収載分のみ／掲載まで約1日遅延（SLA起点=ポータル登録時刻）／カテゴリ未タグ約52%のためキーワード検索推奨／表組み崩れPDFでは期限帰属に既知の限界
- **定期監視**: incrementalMode（既定ON）で同一条件の2回目以降は新着のみ。スケジュール＋Webhookで毎朝の監視フィードに

本Actorは官公需情報ポータルサイトのAPIを利用しています: <https://www.kkj.go.jp/s/>

# Actor input Schema

## `keywords` (type: `array`):

Search keywords, combined with OR (each keyword is queried separately and results are deduplicated). Searches the full announcement text, not just titles. Japanese keywords work best — e.g. 清掃 (cleaning), 警備 (security), 舗装 (paving), システム保守 (system maintenance). The portal's own query syntax (AND / OR / ANDNOT / parentheses) passes through inside a single keyword, e.g. "清掃 AND 委託". Either keywords or prefectures is required.

## `prefectures` (type: `array`):

JIS X 0401 prefecture codes, two digits with leading zero: "13" = Tokyo, "14" = Kanagawa, "27" = Osaka … "01" = Hokkaido to "47" = Okinawa. Multiple codes allowed. Either keywords or prefectures is required.

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

Portal category filter: goods (物品) / construction (工事) / services (役務). Caution: only ~48% of portal records carry a category tag, so filtering by category misses untagged tenders. Prefer keyword search and use the AI-extracted `enriched.industryCategory` in the output, which classifies every tender.

## `certification` (type: `array`):

Filter by the portal's unified qualification grade tag: any of "A", "B", "C", "D". This is portal metadata (present on some records only); the AI-extracted `enriched.qualification.grade` is more complete.

## `dateFrom` (type: `string`):

Only tenders announced on/after this date, format YYYY-MM-DD. Note: records appear on the portal about 1 day after the issuing organization publishes them.

## `dateTo` (type: `string`):

Only tenders announced on/before this date, format YYYY-MM-DD.

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

Maximum number of unique tenders to output (after deduplication). 1–1000.

## `enrich` (type: `boolean`):

When true (default), each tender's announcement text is read by an LLM and structured into deadlines, qualification requirements (grade / registration / region / licenses), performance period, bidding method and a summary — every value verified against the source text by verbatim-quote matching; values that cannot be verified are returned as null, never guessed. When false, only the portal metadata is returned (cheaper: billed as basic items only).

## `llmApiKey` (type: `string`):

Bring your own Anthropic API key to pay LLM costs yourself — enriched items are then billed at the reduced BYOK rate. The key is stored as a secret and never appears in logs or error messages.

## `incrementalMode` (type: `boolean`):

When true (default), tenders already delivered by previous runs with the same search conditions are skipped, so scheduled runs return only new tenders (ideal for daily monitoring + webhook). Set false to re-fetch everything.

## `batch` (type: `boolean`):

Reserved for a future version (Anthropic Batch API, ~50% lower LLM cost, up to 24h latency). Not accepted yet: setting true makes the run fail with an explanatory message before any charge.

## Actor input object example

```json
{
  "keywords": [
    "清掃"
  ],
  "category": "all",
  "maxItems": 20,
  "enrich": true,
  "incrementalMode": true,
  "batch": false
}
```

# 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 = {
    "keywords": [
        "清掃"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("minako-ph/japan-tender-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 = {
    "keywords": ["清掃"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("minako-ph/japan-tender-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 '{
  "keywords": [
    "清掃"
  ],
  "maxItems": 20
}' |
apify call minako-ph/japan-tender-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Japan Government Tenders Scraper + AI Extraction（官公需・入札情報）",
        "description": "Structured Japanese public tenders: deadlines, qualification grades, region requirements — every field with a verbatim source citation.",
        "version": "0.1",
        "x-build-id": "KlSJKnfmuswK698Li"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/minako-ph~japan-tender-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-minako-ph-japan-tender-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/minako-ph~japan-tender-scraper/runs": {
            "post": {
                "operationId": "runs-sync-minako-ph-japan-tender-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/minako-ph~japan-tender-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-minako-ph-japan-tender-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": {
                    "keywords": {
                        "title": "Keywords（キーワード）",
                        "type": "array",
                        "description": "Search keywords, combined with OR (each keyword is queried separately and results are deduplicated). Searches the full announcement text, not just titles. Japanese keywords work best — e.g. 清掃 (cleaning), 警備 (security), 舗装 (paving), システム保守 (system maintenance). The portal's own query syntax (AND / OR / ANDNOT / parentheses) passes through inside a single keyword, e.g. \"清掃 AND 委託\". Either keywords or prefectures is required.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "prefectures": {
                        "title": "Prefectures（都道府県コード）",
                        "type": "array",
                        "description": "JIS X 0401 prefecture codes, two digits with leading zero: \"13\" = Tokyo, \"14\" = Kanagawa, \"27\" = Osaka … \"01\" = Hokkaido to \"47\" = Okinawa. Multiple codes allowed. Either keywords or prefectures is required.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "category": {
                        "title": "Category（カテゴリ）",
                        "enum": [
                            "all",
                            "goods",
                            "construction",
                            "services"
                        ],
                        "type": "string",
                        "description": "Portal category filter: goods (物品) / construction (工事) / services (役務). Caution: only ~48% of portal records carry a category tag, so filtering by category misses untagged tenders. Prefer keyword search and use the AI-extracted `enriched.industryCategory` in the output, which classifies every tender.",
                        "default": "all"
                    },
                    "certification": {
                        "title": "Certification grades（統一資格等級）",
                        "type": "array",
                        "description": "Filter by the portal's unified qualification grade tag: any of \"A\", \"B\", \"C\", \"D\". This is portal metadata (present on some records only); the AI-extracted `enriched.qualification.grade` is more complete.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "dateFrom": {
                        "title": "Announced from（公告日 From）",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Only tenders announced on/after this date, format YYYY-MM-DD. Note: records appear on the portal about 1 day after the issuing organization publishes them."
                    },
                    "dateTo": {
                        "title": "Announced until（公告日 To）",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Only tenders announced on/before this date, format YYYY-MM-DD."
                    },
                    "maxItems": {
                        "title": "Max items（最大件数）",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of unique tenders to output (after deduplication). 1–1000.",
                        "default": 50
                    },
                    "enrich": {
                        "title": "AI extraction（LLM構造化）",
                        "type": "boolean",
                        "description": "When true (default), each tender's announcement text is read by an LLM and structured into deadlines, qualification requirements (grade / registration / region / licenses), performance period, bidding method and a summary — every value verified against the source text by verbatim-quote matching; values that cannot be verified are returned as null, never guessed. When false, only the portal metadata is returned (cheaper: billed as basic items only).",
                        "default": true
                    },
                    "llmApiKey": {
                        "title": "Your Anthropic API key (BYOK)",
                        "type": "string",
                        "description": "Bring your own Anthropic API key to pay LLM costs yourself — enriched items are then billed at the reduced BYOK rate. The key is stored as a secret and never appears in logs or error messages."
                    },
                    "incrementalMode": {
                        "title": "Incremental mode（差分実行）",
                        "type": "boolean",
                        "description": "When true (default), tenders already delivered by previous runs with the same search conditions are skipped, so scheduled runs return only new tenders (ideal for daily monitoring + webhook). Set false to re-fetch everything.",
                        "default": true
                    },
                    "batch": {
                        "title": "Batch mode (reserved)",
                        "type": "boolean",
                        "description": "Reserved for a future version (Anthropic Batch API, ~50% lower LLM cost, up to 24h latency). Not accepted yet: setting true makes the run fail with an explanatory message before any charge.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
