Apify Actor ・ japan-tender-scraper

Japan buys ¥25 trillion a year through public tenders.
All of it announced in Japanese only.

This Actor searches Japan's official procurement portal, reads every announcement with an LLM, and returns structured JSON — deadlines, qualification grades, region requirements. Every extracted value ships with a verbatim quote from the source text. If a value can't be verified against the announcement, you get null — never a guess.

Run it on Apify → See a real record First run fits in Apify's free credits · no credit card
¥25TJapan's annual public procurement market
10,618/monew tenders on the official portal (measured)
52%of portal records have no category tag — the AI classifies them
0fabricated values across 31 human-adjudicated documents
検証可能 — verifiable by design

Not a scraper. A bilingual analyst.

Hover any JSON value — its verbatim source lights up in red
source ・ 原文

入札公告

令和8年7月23日 一般競争入札(事後審査型)
下水道工事に伴う 水道管移設 耐震化工事(第3工区)
山梨県韮崎市

1 入札参加資格

韮崎市競争入札参加有資格者名簿【工事:管】に登録されている者韮崎市内に本社(本店)がある者最新の総合評点が600点以上の者

2 日程

質問提出期限令和8年7月14日 午後3時入札参加申出受付期間令和8年7月6日 ~ 7月17日 午後3時入札書受付日時令和8年7月23日(木) 午前10時00分開札は、入札書提出の締め切り後「共通事項」指定の時刻に即日開札する

dataset item — real output, pipeline v2.4
{
"organization": "山梨県韮崎市",
"enrichmentStatus": "ok",
"enriched": {
"deadlines": {
"qa": "2026-07-14", // question deadline
"participation": "2026-07-17", // application deadline
"bidSubmission": "2026-07-23",
"opening": "2026-07-23" // same-day opening
},
"qualification": {
"grade": { "system": "local", "raw": "最新の総合評点が600点以上の者" },
"localRegistrationRequired": true,
"regionRequirement": "韮崎市内に本社(本店)がある者"
},
"confidence": 1,
"sourceQuotes": { /* one verbatim citation per field */ }
}
}

This is a real record — a water-main relocation tender from Nirasaki City, Yamanashi. Verification is mechanical: each citation is string-matched against the source after normalization. Values that fail the match are nulled and the record's confidence drops, so you can route doubtful records to human review.

why this exists

The data everyone else skips

JETRO and “Sell to State” style services cover Japan's WTO-threshold, central-government tenders in English. Everything below that line — the bulk of contract volume — has never been machine-readable in any language.

唯一

The only structured English feed for Japan's municipal & sub-threshold tenders

The long tail of city, town and village procurement that never gets translated. Search it by keyword, prefecture and category through the portal's official API — no fragile DOM scraping.

根拠

Every value ships with a verbatim citation

Extraction is only half the pipeline. The other half verifies each value against the announcement text, applies deterministic guards, and returns null rather than a guess. Corrections are disclosed in remediations.

補完

We classify what 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) and writes a one-line summary you can filter on.

how it works

From official API to citation-backed JSON, in six steps

STEP 01 ・ 検索

Query the official portal API

Keyword (full-text, portal syntax passes through), prefecture codes, category, date range — against 官公需情報ポータル (kkj.go.jp), rate-limited and sequential.

STEP 02 ・ 重複排除

Deduplicate twice

By portal key and by normalized title + issuing organization — the same tender really does appear under multiple entries and multiple queries. incrementalMode keeps scheduled runs new-items-only.

STEP 03 ・ 本文確保

Secure the full text

85% of announcements resolve from the API body alone. Otherwise: fetch the source PDF/HTML, detect index-page decoys, fall back to the attached 入札公告 document.

STEP 04 ・ 読解

LLM extraction

Temperature 0, tool-forced schema. Four deadline types, grade system, roster registration, region requirement, licenses, performance period, bidding method, summary.

STEP 05 ・ 逐語照合

Verify every quote

Each citation is mechanically matched against the source. Duplicate-copy habits, garbled-table swaps and vocabulary mix-ins are caught by deterministic guards — and disclosed in remediations.

STEP 06 ・ 出力

Ship — or null

Verified records ship with confidence. Unverifiable values become null. Failed fetches are labeled honestly (fetch_failed, list_page) and never billed the AI fee.

accuracy

Measured, not promised

Numbers below are from pipeline v2.4, measured on a frozen set of 31 real tender documents — national and municipal issuers — with human-adjudicated ground truth. We publish them because you can hold us to them.

FieldAccuracy
Bid opening date100% (31/31)
Bid submission deadline96.8% (30/31)
Qualification grade96.7% (29/30)
Participation deadline93.5% (29/31)
Roster registration requirement93.5% (29/31)
Region requirement93.5% (29/31)
Fabricated grades / invented values0

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 re-runs as a regression gate on every pipeline change — a change that degrades any field doesn't ship.

Per record, confidence exposes the share of fields whose citation verified, and remediations logs every deterministic correction — so low-confidence records can be routed to review automatically.

pricing — pay per event

About ¥6 per tender, read and structured for you

Compare that to building a Japanese-capable extraction pipeline yourself, subscribing to a domestic service at tens of thousands of yen per month — or reading the PDFs.

tender-basic
$2 / 1,000 items

Every result pushed to the dataset: portal metadata, source URL, attachments. Set enrich: false and this is all you pay.

tender-enriched
$59 / 1,000 items

AI extraction succeeded (enrichmentStatus: "ok"). Deadlines, grades, region requirements, citations, confidence. Failed records are never charged this fee.

tender-enriched-byok
$10 / 1,000 items

Bring your own Anthropic API key (llmApiKey, stored as a secret) and pay LLM costs directly — the heavy-user rate.

Tokyo service tenders,
every morning ≈ $17.7/mo

≈ 300 new items a month, structured and deduplicated before you wake up. Try before you buy: the Actor has no separate free tier, but Apify grants free platform credits to new accounts — your first runs fit inside them, no credit card required. The default input is a small, high-quality first run (keywords: ["清掃"], maxItems: 20).

mcp ・ ai agents

Built to be called by agents, not just people

Connect Claude, ChatGPT or any MCP-capable agent to Apify's MCP server and this Actor becomes a tool. The input schema is written to be self-explanatory to LLMs — an agent can fill it correctly on the first try.

You say

"Using the japan-tender-scraper actor, find cleaning-service tenders in Kanagawa announced this week and list bid deadlines with their source quotes."

The agent runs

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

Read this before you buy

The same discipline that nulls unverifiable values applies to our own marketing. These are the known limits, in writing.

Coverage

Only tenders listed on 官公需情報ポータル. The portal aggregates national and local procurement, but listing completeness varies by municipality — we do not promise exhaustiveness.

Freshness

Records appear on the portal about one day after the issuing organization publishes them. Anchor monitoring SLAs to portal registration time, not original publication.

Category tags

~52% of portal records carry no category. Prefer keyword search over the category filter, and use the AI-extracted industryCategory.

Garbled PDF tables

Some announcements publish schedules in tables that collapse when converted to text — the dominant source of remaining errors. Such records typically surface with lower confidence or entries in remediations.

日本語での概要

公告を「取ってくる」のではなく、読解して返す。

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

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

Your first 20 tenders are waiting.
Every value comes with a receipt.

Run it on Apify → Free within Apify's new-account credits · default input preset included