gBizINFO を含む日本の行政 API は、pay-per-call-mcp から Claude 経由でまとめて利用できます。
この記事でわかること
- gBizINFO(経済産業省)API の概要と無料利用方法
- 法人番号・企業名からの会社情報取得(TypeScript)
- 財務情報・特許・許認可データの取得方法
- 国税庁インボイス API との組み合わせ活用例
- 取引先与信調査を自動化する実装パターン
はじめに
gBizINFO(jGBizINFO)は、経済産業省が運営する法人情報データベースです。法人番号をキーに、企業の基本情報・財務情報・認定・許認可・表彰・特許などを一括取得できます。
| 項目 | 内容 |
|---|---|
| 提供元 | 経済産業省 |
| 料金 | 無料 |
| 認証 | 不要(APIキー不要) |
| 形式 | JSON |
| 公式サイト | https://info.gbiz.go.jp |
API 仕様
ベース URL
https://info.gbiz.go.jp/hojin/v1
主なエンドポイント
| エンドポイント | 説明 |
|---|---|
GET /hojin/{corporateNumber} |
法人番号で基本情報取得 |
GET /hojin |
キーワード・条件で法人検索 |
GET /hojin/{corporateNumber}/finance |
財務情報 |
GET /hojin/{corporateNumber}/certification |
認定情報 |
法人番号は 13桁の数字です(国税庁の T付き番号から先頭の「T」を除いたもの)。
型定義
// types/gbizinfo.ts
export interface GBizHojin {
corporate_number: string;
name: string;
kana: string | null;
name_en: string | null;
postal_code: string | null;
location: string | null;
prefecture_name: string | null;
city_name: string | null;
phone_number: string | null;
founding_year: string | null;
capital_stock: number | null;
employee_number: string | null;
update_date: string;
close_date: string | null;
close_cause: string | null;
}
export interface GBizResponse<T> {
metadata: {
totalCount: number;
totalPage: number;
page: number;
};
hojin_infos: T[];
}
実装
単一法人の情報取得
// lib/gbizinfo.ts
const GBIZ_API_BASE = "https://info.gbiz.go.jp/hojin/v1";
export async function getCompanyInfo(
corporateNumber: string
): Promise<GBizHojin | null> {
if (!/^\d{13}$/.test(corporateNumber)) {
throw new Error(`不正な法人番号: ${corporateNumber}(13桁の数字である必要があります)`);
}
const url = `${GBIZ_API_BASE}/hojin/${corporateNumber}`;
let res: Response;
try {
res = await fetch(url, {
headers: { Accept: "application/json" },
signal: AbortSignal.timeout(10_000),
});
} catch (err) {
throw new Error(`gBizINFO API リクエスト失敗: ${err instanceof Error ? err.message : String(err)}`);
}
if (res.status === 404) return null;
if (!res.ok) throw new Error(`gBizINFO API エラー: ${res.status} ${res.statusText}`);
const data = await res.json() as GBizResponse<GBizHojin>;
return data.hojin_infos[0] ?? null;
}
複数法人の一括取得
export async function getMultipleCompanyInfo(
corporateNumbers: string[],
concurrency = 5
): Promise<Map<string, GBizHojin | null>> {
const results = new Map<string, GBizHojin | null>();
for (let i = 0; i < corporateNumbers.length; i += concurrency) {
const chunk = corporateNumbers.slice(i, i + concurrency);
const chunkResults = await Promise.allSettled(
chunk.map(async (num) => ({ num, info: await getCompanyInfo(num) }))
);
for (const r of chunkResults) {
if (r.status === "fulfilled") {
results.set(r.value.num, r.value.info);
} else {
console.warn(`取得失敗: ${r.reason}`);
}
}
if (i + concurrency < corporateNumbers.length) {
await new Promise((r) => setTimeout(r, 200));
}
}
return results;
}
キーワード検索
export interface GBizSearchOptions {
name?: string;
prefecture?: string;
business_type?: string;
page?: number;
limit?: number;
}
export async function searchCompanies(
options: GBizSearchOptions
): Promise<GBizResponse<GBizHojin>> {
const params = new URLSearchParams();
if (options.name) params.set("name", options.name);
if (options.prefecture) params.set("prefecture", options.prefecture);
if (options.business_type) params.set("business_type", options.business_type);
params.set("page", String(options.page ?? 1));
params.set("limit", String(options.limit ?? 10));
const res = await fetch(`${GBIZ_API_BASE}/hojin?${params}`, {
headers: { Accept: "application/json" },
signal: AbortSignal.timeout(10_000),
});
if (!res.ok) throw new Error(`検索エラー: ${res.status}`);
return res.json() as Promise<GBizResponse<GBizHojin>>;
}
実行例
const company = await getCompanyInfo("4010001052596"); // トヨタ自動車
if (company) {
console.log(`名称: ${company.name}`);
console.log(`所在地: ${company.location}`);
console.log(`資本金: ${company.capital_stock?.toLocaleString()}円`);
console.log(`設立: ${company.founding_year}`);
}
出力例:
名称: トヨタ自動車株式会社
所在地: 愛知県豊田市トヨタ町1番地
資本金: 397,049,973,200円
設立: 1937
国税庁インボイス API との組み合わせ
async function verifyCompany(corporateNumber: string) {
const [gbiz, nta] = await Promise.all([
getCompanyInfo(corporateNumber),
verifyInvoiceNumber(`T${corporateNumber}`),
]);
return {
corporateNumber,
gbizName: gbiz?.name ?? null,
ntaName: nta.trader?.name ?? null,
isInvoiceActive: nta.isActive,
};
}
注意点
- 個人事業主は登録なし — gBizINFO は法人のみ対象
-
閉鎖法人 —
close_dateが入っている場合は閉鎖済み - データの鮮度 — 登記変更直後は反映に時差が生じる場合がある
まとめ
- gBizINFO API は無料・認証不要で法人番号から企業情報を取得できる
- 国税庁インボイス API・freee API と組み合わせると与信・経理業務の自動化が可能
- 複数法人の一括取得は
Promise.allSettled+ 間隔制御で安全に並列処理
Claude から法人情報を調べる
- npm: https://www.npmjs.com/package/pay-per-call-mcp
- Glama: https://glama.ai/mcp/servers/@evid-ai/pay-per-call-mcp
試したい人へ
英語の Glama Playground が苦手な人は、以下のコマンドで日本のターミナルから動かせます:
npx -y pay-per-call-mcp@latest
# → 8 つのデモ API がすぐ使えます
設定不要、課金なし、サインアップ不要。
よくある質問
Q. gBizINFO は認証なしで使えますか?
A. はい、gBizINFO API は完全無料・認証不要です。APIキーの取得やアカウント登録は一切不要で、法人番号さえあればすぐに情報を取得できます。
Q. 法人番号がわからない場合はどうすれば?
A. 国税庁の「法人番号公表サイト」(https://www.houjin-bangou.nta.go.jp/)で社名から検索できます。また gBizINFO の /v1/hojin エンドポイントは企業名での検索にも対応しています。
Q. 取引先の与信チェックに使えますか?
A. 売上高・従業員数・設立年などの基本情報は取得できます。ただし信用スコアや支払い履歴は含まれないため、本格的な与信調査には帝国データバンクなどの専門サービスと組み合わせることを推奨します。