取引先の名称や所在地をそろえたいのか、補助金・特許などの活動を調べたいのか、提出された財務書類を読みたいのか。法人情報を扱うは、この目的によって選び方が変わります。このページでは、国税庁の法人番号システム、経済産業省のGビズインフォ、金融庁のを比較し、自社の顧客台帳と結び付けるまでを整理します。
基本3情報(法人番号・商号または名称・所在地)を軸にするなら国税庁、法人活動の補足ならGビズインフォ、開示書類を扱うならEDINETを検討します。全法人に全項目がそろうという前提にはしません。
比較から実装の判断まで進められるよう、提供元・入力と出力・保存する情報・確認が必要なケースを共通の順序でまとめています。まず 架空データのサンプル一式をダウンロードして、処理の結果を確かめることもできます。
目的に合うデータを選ぶ
法人名の文字列だけで一致判定すると、同名企業、略称、移転前の所在地などが混ざります。まず社内の顧客IDを残したまま、法人番号との対応表を作ります。入力時点で法人番号がなければ名称と所在地から候補を探し、候補が複数ある場合は担当者が確認する運用にします。名称が似ているという理由だけで、売上や取引履歴の紐付け先を自動変更しないことが大切です。
Gビズインフォは、法人基本情報に加えて政府等が保有する法人活動情報を参照する入口になります。ただし、補助金、調達、特許などは収録対象や時点が異なります。ある項目が空欄でも、その企業に活動が存在しないことを証明するものではありません。欠損値とゼロを分けて保存し、後から提供元と取得日をたどれるようにします。
EDINETは提出者の開示書類を扱う仕組みです。全取引先の住所辞書として使う用途とは異なり、書類の種類、対象期間、訂正の有無を確認して利用します。法人番号で基本情報につなげられる場合でも、書類の対象年度と社内データの年度を合わせる必要があります。APIの費用だけで選ばず、取得後にどの判断を支えるかを先に決めましょう。
| 用途・提供元 | 取得するもの | 利用開始・更新 | 設計上の注意 |
|---|---|---|---|
| 名称・所在地の確認/国税庁 | 法人番号、商号・名称、所在地など | アプリケーションIDの届出。差分取得や全件ダウンロードを使い分ける | Web-APIで全件取得はできない。必要な版・項目を仕様書で確認 |
| 法人活動の補足/Gビズインフォ | 基本情報、補助金・調達・特許などの収録情報 | 利用申請とトークン。現行案内はREST API 2.0でv1/v2の仕様を公開 | 項目ごとに収録範囲・更新時点が違う。固定の一律上限を仮定しない |
| 財務書類の調査/EDINET | 提出された開示書類とメタデータ | 利用登録と認証。最新のAPI仕様書を確認 | 全法人の詳細財務がそろうわけではない。訂正書類も確認 |
入力と出力をサンプルで確かめる
社内の顧客IDと、外部情報を想定した架空の会社IDを結合します。DEMO-A等は実在の法人番号ではなく、input.jsonも実際のAPI応答形式ではありません。追加ライブラリなしで、情報がそろう顧客・活動情報がない顧客・基本情報に一致しない顧客の3ケースを確認できます。
全て架空データです。Python 3があれば、APIキー・追加ライブラリ・外部通信なしで実行できます。ZIPを展開し、そのフォルダで下のコマンドを実行してください。入力はinput.jsonにあります。結果は画面に出るだけで、自動保存・送信はしません。
python3 example.py# 結果をローカルファイルに保存する場合python3 example.py > result.jsonimport jsonfrom pathlib import Path
# 架空データ。実際のAPI応答形式・法人番号ではありません。data = json.loads(Path(__file__).with_name("input.json").read_text(encoding="utf-8"))companies = {row["demo_id"]: row for row in data["companies"]}activities = {row["demo_id"]: row for row in data["activities"]}result = []for customer in data["customers"]: company = companies.get(customer["demo_id"]) activity = activities.get(customer["demo_id"], {}) result.append({ **customer, "name": company["name"] if company else None, "subsidy_records": activity.get("subsidy_records"), "status": "matched" if company else "review_required", })print(json.dumps(result, ensure_ascii=False, indent=2))[ { "customer_id": "C01", "demo_id": "DEMO-A", "name": "サンプル製作所", "subsidy_records": 2, "status": "matched" }, { "customer_id": "C02", "demo_id": "DEMO-B", "name": "サンプル商店", "subsidy_records": null, "status": "matched" }, { "customer_id": "C03", "demo_id": "DEMO-MISSING", "name": null, "subsidy_records": null, "status": "review_required" }]結果のC01は会社名と補助金件数が取得でき、C02は会社名だけが一致します。C02の補助金件数はnullのままです。ここをゼロにすると「受給がなかった」という別の意味になるためです。C03は一致先がないのでreview_requiredになります。照合できないレコードも出力に残し、確認待ちの件数を把握できるようにしています。
このサンプルは、認証・通信・実際の法人番号検証を含みません。実APIをつなぐときは、提供元の応答を自社の共通項目へ変換する処理を別に用意します。タイムアウト、ページ分割、再試行、重複キー、取得失敗を扱い、情報が取得できなかった日にも既存の正しい台帳を消さないようにします。サンプルの成功を、そのまま実APIの接続成功とは扱わないでください。
何をどこに保存するか
| 情報 | 本実装での保存先の例 | 残すべき状態 |
|---|---|---|
| 社内顧客IDと法人番号の対応 | 顧客マスタとは別の対応表 | 候補・確定・確認待ちを区別する |
| 取得した項目と提供元 | 利用条件に沿った保存領域 | 取得日時、元データの更新日、API版を別々に保持 |
| 活動情報の欠損・取得失敗 | 状態列と処理記録 | ゼロに置換せず、前回値と区別する |
運用では、正規化した値だけを上書き保存するより、社内で入力した元の名称、照合に使った法人番号、確認状態を分けて持つ方が、変更理由を説明しやすくなります。人が確定した対応関係を自動処理が黙って変更しないルールも必要です。担当者が確認する画面と、確認後にどの項目を更新するかまで決めると、導入後の手戻りを減らせます。
全件を初期投入したい場合と、日々変わった情報を追いたい場合では取得方法が異なります。国税庁は全件データのダウンロードを案内しており、APIの期間指定にも制限があります。Gビズインフォのv2にも期間指定などの個別制約があります。最初から大量の並列通信をせず、対象と期間を絞り、停止時にどこから再開するかを記録します。
更新頻度は全サービス・全項目に共通ではありません。毎日取得したからといって、元の財務情報も毎日更新されているとは限らないため、画面には取得日時だけでなく元情報の対象時点も表示します。提供元の情報は取引判断の材料であり、信用や安全性の自動判定を保証するものではありません。判断根拠が足りない場合に確認へ戻せる設計が必要です。
導入前に確認する制約
- 公開情報だけで企業の信用・実在性・取引の安全性を断定しない
- APIトークンをブラウザや公開ノートブックに置かない
- 収録なし・取得失敗・値がゼロを区別する
- 利用条件と提供元の変更告知を運用開始前にも確認する
自社の業務で試すには
「法人マスタの照合・更新を試作したい」という段階から相談できます。入力する項目、期待する出力、更新頻度、使う人、確認待ちになった場合の操作を整理すると、必要な試作範囲を具体的にできます。実データや秘密鍵をフォームに貼る必要はありません。まず匿名化した項目と困っている作業を教えてください。
この記事のテーマで相談する — 内容を確認して進め方を検討します。フォームを開いたり送信したりするだけで有料発注になることはありません。
関連する実装ガイド
確認した一次資料
比較の確認日は2026年10月11日です。提供元の利用条件・項目・認証・制限は変更されることがあるため、実装開始時にも公式資料を確認してください。このページのサンプルは結合や例外処理の動きを確かめるためのもので、外部APIの接続成功、実データの精度、事業成果を示すものではありません。