日本の補助金・融資データ 13,578 件を 1 本の REST API にまとめた話¶
補助金を探すには「省庁ガチャ」を 10 回引かなければならない¶
「うちの会社で使える補助金、調べてくれますか」と言われたとき、 現実に何が起きるか。
農水省・経産省・中小企業庁・都道府県・市区町村の 各ポータルを個別に開き、PDFを開き、 該当しそうなものを10件見つけたら今度は「これと一緒に申請できないやつある?」 という「排他ルール」を要綱の脚注から掘り起こす。 これが現状です。
AutonoMath はそこに API 1 本を刺します。
- 13,578 件の補助金・融資・税制・認定制度
- 2,286 件の採択事例
- 108 件の融資(担保・個人保証人・第三者保証人 三軸分解)
- 1,185 件の行政処分事例
- 181 本の排他・前提条件ルール
source_url+fetched_atを 99%以上の行に付与 (12件は小規模自治体 CMS 不在のため URL 未取得)
一次資料(農水省・経産省・SMRJ・日本政策金融公庫等)だけを参照し、 アグリゲーターは一切使いません。
3 分で動かす¶
Step 1: 補助金を検索する¶
curl -s "https://api.autonomath.ai/v1/programs/search?q=設備投資&prefecture=埼玉県&limit=3" \
| python3 -m json.tool
{
"results": [
{
"unified_id": "saitama_subsidy_maff_sousetsu_a7f3c21",
"title": "令和8年度 農業経営強化支援交付金",
"authority": "農林水産省",
"amount_max": 50000000,
"amount_max_description": "5,000万円(補助率 1/2 以内)",
"target_types": ["法人", "認定農業者"],
"deadline": "2026-06-30",
"source_url": "https://www.maff.go.jp/j/aid/hozyo/2026/...",
"fetched_at": "2026-04-24T03:00:00+09:00"
}
],
"total": 47,
"next_cursor": "eyJvZmZzZXQiOjN9",
"has_more": true
}
Step 2: 排他ルールを判定する¶
候補が揃ったら、複数制度の「同時申請不可」を一括チェックします。
curl -s -X POST "https://api.autonomath.ai/v1/exclusions/check" \
-H "Content-Type: application/json" \
-d '{
"unified_ids": [
"saitama_subsidy_maff_sousetsu_a7f3c21",
"national_loan_jfc_keiei_a1b2c3d"
],
"applicant": {
"applicant_type": "法人",
"household_income": 12000000
}
}' \
| python3 -m json.tool
{
"hits": [
{
"rule_id": "MAFF_INCOME_CAP_2025",
"kind": "exclude",
"description": "世帯所得 1,000 万円超の申請者は除外",
"affected_ids": ["saitama_subsidy_maff_sousetsu_a7f3c21"],
"source_url": "https://www.maff.go.jp/..."
}
]
}
Step 3: API キー付きで認証する¶
匿名では 50 req/月(JST 月初 00:00 リセット)まで無料です。 それ以上は API キーを付けてください。
export AM_KEY="am_xxxxxxxxxxxxxxxx"
curl -s "https://api.autonomath.ai/v1/programs/search?q=クラウド&limit=5" \
-H "X-API-Key: $AM_KEY" \
| python3 -m json.tool
料金は ¥3/リクエスト(税別)、税込 ¥3.30。 Tier なし、座席課金なし、年次契約なし。
なぜこれを作ったか¶
一言で言えば「LLM に信頼できる補助金データを渡したかったから」です。
Claude や GPT に「うちの会社で使える補助金は?」と聞くと、 廃止済みの制度名・桁違いの金額・404 の URL が返ってくる。 これは LLM の性能の問題ではなく、信頼できるデータが LLM の外にないことの問題です。
AutonoMath を運営しているのは、東京の小さなソフトウェア会社 Bookyou株式会社(法人番号 T8010001213708)です。 ソロ運用・ゼロタッチ前提で設計しています。
アーキテクチャ概要¶
FastAPI (REST /v1/*)
└── SQLite FTS5 (trigram tokenizer)
├── programs (13,578 件)
├── case_studies (2,286 件)
├── loan_programs (108 件, 三軸担保分解)
├── enforcement_cases (1,185 件)
├── exclusion_rules (181 本)
├── laws (6,850+ 件 e-Gov CC-BY — 継続ロード中)
├── tax_rulesets (35 件 インボイス/電帳法 — live)
└── court_decisions / bids / invoice_registrants (スキーマ構築済み、データロード準備中)
FastMCP stdio サーバーも同じ SQLite を読むので、 REST と MCP でビジネスロジックの重複は一切ありません。
設計上のこだわり 3 点¶
1. null / [] / "" を意味で分ける¶
null = 未確認、[] = 該当なし(確認済み)、"" は使わない。
LLM は null を見て「別のツールで調べるべきか」と判断し、
[] を見て「これ以上探さなくてよい」と判断します。
2. エラーは日本語の自然言語で返す¶
{
"error": "prefecture には都道府県名(漢字)を指定してください。受け取った値: 'Tokyo'",
"suggested_values": ["東京都", "神奈川県", "埼玉県"],
"field": "prefecture"
}
LLM がエラーを読んで自己修正してリトライできます。
3. source_url は全件必須フィールド¶
全 13,578 件に source_url と fetched_at が付いています。
fetched_at は「私たちが最後に取得した日時」であり、
「制度が最終更新された日時」ではありません(景表法・消費者契約法上の誠実さ)。
レート制限の仕様¶
| 上限 | リセット | |
|---|---|---|
| 匿名(API キーなし) | 50 req/月 per IP | JST 月初 00:00 |
| 認証済み(API キーあり) | 使った分だけ課金 | なし |
HTTP 429 のレスポンスには次のリセット日時が入ります。
{
"error": "レート制限に達しました。JST 月初 00:00 にリセットされます。",
"retry_after_seconds": 604800,
"reset_at": "2026-05-01T00:00:00+09:00"
}
今後の展開¶
2026-04-24 拡張では法令 (e-Gov CC-BY, 6,850+ 件・継続ロード中) と税務ルールセット (インボイス+電帳法, 35 件) をライブ追加しました。判例・入札・国税庁適格事業者はスキーマと取込インフラが完成しており、 データロードはローンチ後に追って公開します。
まとめ¶
- 13,578 件の一次資料補助金データが
curl1 本で取れる - 181 本の排他ルールを POST 1 本で機械判定できる
- ¥3/req 税別(税込 ¥3.30)、匿名 50 req/月 per IP 無料
source_url+fetched_atを 99%以上の行に付与
AutonoMath: https://autonomath.ai
Bookyou株式会社 / [email protected]