Tony Wang8 分で読めますジオコーディングAPIの比較:無料・Google Maps・API(2026年版)
2026年、住所を座標に変換する3つの方法を比較 — 無料のNominatim/OSM、有料のGoogle Maps API、または統合APIの料金と使い方を実例コード付きで解説します。
2026年に住所を座標に(あるいは座標を住所に)変換する最も速い方法は、ジオコーディングAPIを呼び出すことです。地図サイトをスクレイピングしたり、自前の住所パーサーを書いたりする必要はありません。本当に考えるべきは「どのAPIを使うか」です。無料で公開されているNominatim/OpenStreetMapのインスタンス、Google Mapsの有料Geocoding API、あるいは同じオープンデータを1つのキーの背後でラップする統合APIのいずれかです。このガイドでは、2026年時点の実際の料金、実際のレート制限、そしてそれぞれの実行可能なコードを取り上げます。
なぜ大規模にジオコーディングするのか
- 物流と配送ルート — 顧客の住所リストを座標に変換してルート最適化に使う、あるいはドライバーのGPS位置情報を読める停車地に逆ジオコーディングする。
- 不動産と店舗検索データセット — 住所フィールドから物件や店舗の位置を地図にプロットする、あるいは既存データセットで欠けている座標を補完する。
- ユーザー生成の位置情報タグ付け — モバイルアプリが取得した緯度経度(チェックイン、写真のEXIF、配達のドロップピン)を、検索やフィルタリングのために市区町村・郵便番号・地域名へ逆ジオコーディングする。
- データエンリッチメント — CRMやリードリスト全体でばらばらな住所フォーマットを、重複排除やセグメンテーションのために共通の構造化された形(市区町村・都道府県・国・郵便番号)に正規化する。
- 市場調査と立地選定リサーチ — 競合や候補地の住所を一括でジオコーディングし、近接性・密度・カバレッジのギャップを計算する。
住所をジオコーディングするのは合法か?
概ね合法です。公開されている住所データをジオコーディングすること — 住所を座標に変換する、またはその逆 — は、確立された、議論の余地のない公開データの利用方法です。地図アプリに目的地を入力したときに行われている処理そのものです。注意すべきなのはジオコーディング自体ではなく、データソース側です。OpenStreetMapのデータはOpen Database License(ODbL)の下でライセンスされており、元の地図データを再配布する場合(そこから計算した座標だけでなく)は帰属表示とシェアアライク条件が求められます。Googleの利用規約は、ジオコーディング結果をGoogle Map以外の場所に表示することを制限しています。個人に紐づくデータ(個人の自宅住所など)をGDPR/CCPA上の適法な根拠なくジオコーディングしないでください。また各プロバイダーの利用ポリシーとレート制限を尊重してください。より広い法的枠組みについてはウェブスクレイピングは合法かを参照してください。これは法的助言ではありません。
選択肢1:Nominatim/OpenStreetMapでDIY(無料、そして注意点)
NominatimはOpenStreetMap自身の検索ボックスを支えるオープンソースのジオコーダーで、OpenStreetMap Foundationは誰でも呼び出せる無料の公開インスタンスを運用しています。登録もAPIキーも不要です。
import requests
import time
HEADERS = {"User-Agent": "MyApp/1.0 (contact@example.com)"} # required by the usage policy
def geocode_nominatim(address: str):
resp = requests.get(
"https://nominatim.openstreetmap.org/search",
params={"q": address, "format": "jsonv2", "addressdetails": 1, "limit": 1},
headers=HEADERS,
)
resp.raise_for_status()
results = resp.json()
return results[0] if results else None
addresses = ["350 5th Ave, New York, NY", "1600 Pennsylvania Ave, Washington, DC"]
for addr in addresses:
place = geocode_nominatim(addr)
if place:
print(addr, place["lat"], place["lon"])
time.sleep(1) # the policy's hard 1 request/second cap
これは本当に無料で、実際に動きます。しかしNominatim利用ポリシーは厳格で、構築前に読んでおく価値があります。
- 1秒あたり1リクエストの絶対上限。 どのクライアントでもバーストは許されず、例外もありません。
- 一括の単発ジョブはさらに制限され、1台のマシンから1分あたり4リクエストまで、分散スクリプトは不可です。
- 本物の
User-AgentまたはRefererが必須で、OpenStreetMapへの帰属表示も必要です。 - 結果は自分側でキャッシュする必要があります。 同じ住所を繰り返し問い合わせるのはポリシー違反です。
- SLAも稼働率保証もありません。 寄付されたインフラで動く無料の公開サービスです。負荷がかかると稀に一時的な
429/503エラーやタイムアウトが返ります — 私たち自身も後述の選択肢3で同じインスタンスをプロキシしていて経験しており、すべてのリクエストが一発で成功すると想定せず、自前でリトライの分類ロジックを追加する必要がありました。
数件の住所や個人プロジェクトなら、これが正解です。コストはかからず、管理するキーもありません。しかし1日に数千行をジオコーディングする本番パイプラインには、1秒あたり1リクエストという上限だけで非現実的になります(10,000件の住所を逐次処理すると少なくとも2.8時間かかります)。しかも稼働率保証のないサービスに対して、リトライやキャッシュのロジックを自前で構築することになります。
地域特化の無料代替手段もあります。 住所がすべて1つの国に集中しているなら、その国の地図作成機関自身のAPIの方が、その国に関してはグローバルなインデックスより速く正確なことが多いです。例えば日本の国土地理院(GSI)は、日本国内の住所向けに無料・登録不要のジオコーディングエンドポイントを提供しており、CORSも有効です。チームが国内カバレッジだけを必要とし、Google Mapsの料金を完全に避けたい場合によく使われる代替手段です。
選択肢2:Google Maps Geocoding API(公式・有料)
Googleのgeocoding APIは既存の定番ですが、その料金体系はこの1年で大きく変わりました。月額200ドルの一律クレジットは2025年3月に廃止されました。 その代わりに各APIごとに独自の月間無料枠が設定されており、Geocoding APIの場合は月10,000リクエストが無料、それ以降は以下の通りです。
| 月間利用量 | 1,000リクエストあたりの料金 |
|---|---|
| 0~10,000 | 無料 |
| 10,001~100,000 | $5.00 |
| 100,001~500,000 | $4.00 |
| 500,001~1,000,000 | $3.00 |
| 1,000,001~5,000,000 | $1.50 |
| 5,000,000以上 | $0.38 |
import requests
resp = requests.get(
"https://maps.googleapis.com/maps/api/geocode/json",
params={"address": "350 5th Ave, New York, NY", "key": "YOUR_GOOGLE_API_KEY"},
)
location = resp.json()["results"][0]["geometry"]["location"]
print(location["lat"], location["lng"])
注意すべき点:
- 10,000件/月の無料枠を使うだけでも、支払い設定済みのGoogle Cloudプロジェクト(クレジットカード登録済み)が必要です。 新規顧客には一度きりの300ドルのトライアルクレジットが付与されますが、継続的な月次クレジットではありません。
- Googleはサブスクリプションプランも販売しています。 Starter(月100ドル、50,000コール、GeocodingとDynamic Mapsをバンドル)、Essentials(月275ドル、より多くの製品にまたがる100,000コール)、Pro(月1,200ドル、250,000コール)— 利用量が安定しているなら従量課金と比較する価値があります。
- 帰属表示と表示条件が適用されます。 Googleの規約は、ジオコーディング結果をGoogle Map以外の地図に表示することを制限しており、内部パイプラインだけでなく一般公開の地図プロダクトを作る場合には重要な制約です。
- すでにEsriのGISエコシステムに深く関わっている場合、ArcGISのWorld Geocoding Serviceもリクエストごとにクレジット課金される、もう一つのエンタープライズ向け有料オプションです。GISファーストのスタックであれば検討に値しますが、多くのウェブアプリチームには不要でしょう。
選択肢3:統合ジオコーディングAPI
Google Cloudの請求アカウントを立ち上げたり、公開Nominatimインスタンスに対してレート制限やリトライのロジックを自前で組んだりせずに、予測可能なJSONが欲しいパイプラインには、geocoding APIが同じ基盤となるオープンなジオコーディングデータを1つのキーの背後で提供し、順方向検索・逆引き・OSM IDルックアップにわたって正規化されたレスポンスを返します。住所を順方向にジオコーディングする例です。
curl "https://api.crawlora.net/api/v1/geocoding/search?q=350+5th+Ave%2C+New+York%2C+NY&limit=1" \
-H "x-api-key: $CRAWLORA_API_KEY"
同じ呼び出しをPythonでリストに対してバッチ実行する例です。
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/geocoding"
addresses = ["350 5th Ave, New York, NY", "1 Infinite Loop, Cupertino, CA"]
rows = []
for addr in addresses:
data = requests.get(f"{base}/search", headers=h, params={"q": addr, "limit": 1}).json()["data"]
if data["results"]:
top = data["results"][0]
rows.append({"query": addr, "lat": top["lat"], "lon": top["lon"], "display_name": top["display_name"]})
print(rows)
実際のレスポンス(エンパイア・ステート・ビルディング、トップ結果のみに抜粋):
{
"data": {
"query": "350 5th Ave, New York, NY",
"results": [
{
"address": {
"house_number": "350",
"road": "5th Avenue",
"neighbourhood": "Koreatown",
"suburb": "Manhattan",
"city": "New York",
"county": "New York County",
"state": "New York",
"postcode": "10118",
"country": "United States",
"country_code": "us"
},
"display_name": "Empire State Building, 350, 5th Avenue, Koreatown, Manhattan Community Board 5, Manhattan, New York County, New York, 10118, United States",
"lat": "40.7484421",
"lon": "-73.9856589",
"osm_id": 34633854,
"osm_type": "way",
"importance": 0.5803438355141769,
"category": "office",
"addresstype": "office"
}
]
}
}
座標を逆ジオコーディングする例です。
data = requests.get(f"{base}/reverse", headers=h, params={"lat": 40.7484, "lon": -73.9857}).json()["data"]
print(data["display_name"])
OpenStreetMapのIDで場所をルックアップする例です(前回の検索結果に含まれるosm_idをすでに持っている場合に便利です)。
data = requests.get(f"{base}/lookup", headers=h, params={"osm_ids": "W34633854"}).json()["data"]
正直に言っておくべきこと。 このエンドポイントは、DIYの選択肢と同じオープンなNominatim/OSMデータをプロキシしているのであって、独自のインデックスではありません。公開インスタンスにはできない稼働率を魔法のように保証するものではないのです。代わりに得られるのは、検索・逆引き・ルックアップ全体で一貫したJSON形式を持つ1つのキー、こちら側で行われるレート制限とリトライの処理(上流の429/503/タイムアウトは分類され、生の形で表に出す前にリトライされます)、そして別途セットアップするGoogle Cloudの請求アカウントが不要なことです。Googleの独自インデックスの方が本当に精度で勝る住所(あいまいな住所や非常に新しい住所)については、選択肢2の方が依然として優れています。
どのアプローチを選ぶべきか
| DIY(Nominatim直接) | Google Maps Geocoding API | 統合ジオコーディングAPI | |
|---|---|---|---|
| コスト | 無料 | 月10,000件無料、以降1,000件あたり$5.00 | 無料枠に含まれる(月2,000クレジット、カード不要)、以降はクレジット消費 |
| セットアップ | キー不要だがUser-Agentと帰属表示が必須 | Google Cloudプロジェクト+支払いカード | APIキー1つ |
| レート制限 | 1秒あたり1リクエストの絶対上限、一括ジョブは1分4件 | デフォルト25 QPS(申請により引き上げ可) | キーの背後で処理 |
| リトライ/バックオフのロジック | 自分で書く | Googleのインフラ | サーバー側で処理 |
| データソース | OpenStreetMap | Google独自のインデックス | OpenStreetMap |
| SLA | なし — ベストエフォートの公開サービス | Googleの商用規約 | 正式なSLAはないが、同じ上流に対してリトライを代行 |
| 向いている用途 | プロトタイプ、個人プロジェクト、極めて低いボリューム | Google独自の精度が必要でGCPをすでに使っているチーム | ジオコーディングと500以上の他のスクレイピング/データエンドポイントを1つのキーでまとめたい場合 |
収集できるもの
住所または座標ごとに、座標(lat/lon)、完全な表示名、そして構造化された住所の内訳(番地、道路、近隣、地区、市区町村、郡、都道府県/州、郵便番号、国、ISO国コード)が、OpenStreetMapがその詳細レベルをマッピングしている範囲で得られます。各結果にはOpenStreetMapの識別情報(osm_id、osm_type)、場所の分類(category、addresstype、type)、相対的なimportanceスコア、そして複数の同名結果のうちどれが正しいかを判断する際に役立つboundingboxも含まれます。
制約とよくある課題
- カバレッジは地域によって異なります。 OpenStreetMapの住所密度はヨーロッパと北米の大部分で優れていますが、一部の国ではまだ薄い場合があります。国土地理院のような国別の代替手段が対象地域をよりよくカバーしているなら、まず確認する価値があります。
- 無料枠は実際のボリュームではすぐに上限に達します。 月10,000リクエスト(Google)や1秒あたり1リクエスト(Nominatim)は、一晩で処理する必要がある50,000件の住所のバッチジョブを前にすると、聞こえほど余裕はありません。
- あいまいな住所にはフォールバックが必要です。 都市名のない「350 5th Ave」は複数の州で結果を返す可能性があります。持っている情報(
city、state、country)はできる限り渡し、複数結果のレスポンスではimportance/place_rankを確認してください。 - どのソースも稼働率を保証するものではありません。 Nominatimを直接呼び出すにせよ、同じデータの上に構築された統合APIを経由するにせよ、本番パイプラインでは稀なリトライを見込んで予算を組んでください。
出典
収集を始める
まずは無料でお試しください: 任意の公開URLを無料ウェブスクレイパーにかけるか、Anti-Botチェッカーでサイトがボットをブロックするかどうかを確認できます。サインアップは不要です。
検索・逆引き・ルックアップの各エンドポイントをプレイグラウンドで試し、APIドキュメントでスキーマを確認し、料金をご覧ください。座標をGoogle Mapsの場所データと組み合わせて地元ビジネスの文脈を加えたり、ジオコーディングが必要な物件住所として不動産掲載データやZillowを使ったり、Numbeoの生活費データで場所を生活の質の統計でエンリッチしたりできます。より広い法的基礎についてはウェブスクレイピングは合法かを、エンドツーエンドのユースケースについては不動産市場インテリジェンスもあわせて参照してください。
私たちのhow-to-scrapeガイドシリーズの一部です — 対応するすべてのプラットフォームを1つのインデックスにまとめています。
よくある質問
無料のジオコーディングAPIはありますか?
はい。公開されているNominatim/OpenStreetMapインスタンスは登録もAPIキーも不要で無料ですが、1秒あたり1リクエストの絶対上限があり、1台のマシンからの単発の一括ジョブは1分あたり4リクエストに制限され、本物のUser-AgentまたはRefererと帰属表示が必須で、稼働率のSLAはありません。プロトタイプや低ボリューム利用には十分ですが、稼働率が保証された本番の依存先としては向いていません。
ジオコーディングAPIの料金比較はどうなっていますか?
Nominatim/OpenStreetMapは無料ですが1秒あたり1リクエストに制限されSLAはありません。GoogleのGeocoding APIは月10,000リクエストが無料(Google Cloudの請求設定が必要)、それ以降は1,000件あたり5.00ドルから始まり、月500万件超では0.38ドルまで段階的に下がります。Mapboxは月10万件の無料ジオコーディングリクエストを提供し、それ以降は1,000件あたりおよそ0.45〜0.75ドルです。OpenCageの無料枠(1日2,500件)はテスト専用で本番利用は想定されておらず、LocationIQの無料枠(1日約5,000件)は商用利用が可能です。Google独自のインデックスを必要としない汎用パイプラインであれば、同じオープンデータの上に構築された統合APIがこれらのどれよりも安く済む場合があります。
Google Maps geocoding APIの代替として良いものは何ですか?
ほとんどの用途では、無料の公開Nominatim/OpenStreetMap APIか、同じオープンデータの上に構築された統合ジオコーディングAPIで、Google Cloudの請求アカウントなしにカバーできます。MapboxとLocationIQも、より寛容な無料枠を持つ有料の代替手段として有効です。住所が1つの国に集中しているなら、その国自身の地図作成機関(例えば日本の国土地理院/GSI)が無料でグローバルなインデックスより正確な場合もあります。すでにそのスタックにいるならEsriのArcGIS World Geocoding Serviceがエンタープライズ向けGISオプションです。
逆ジオコーディングとは何ですか?どう呼び出しますか?
逆ジオコーディングは座標(緯度・経度)を読める住所に変換する処理で、通常のジオコーディングの逆方向です。GPS位置情報、配達のドロップピン、写真の位置情報を市区町村・郵便番号・地域名に変換するのに便利です。latとlonを指定して逆引きエンドポイントを呼び出すと(例:GET /geocoding/reverse?lat=..&lon=..)、最も近い場所を完全な構造化住所の内訳とともに返します。
ジオコーディングAPIの典型的なレート制限はどのくらいですか?
プロバイダーによって大きく異なります。Nominatimの無料公開インスタンスは1秒あたり1リクエストが絶対上限(一括ジョブは1分あたり4件)、Googleのデフォルトは1秒あたり25クエリ(申請により引き上げ可能)、MapboxやLocationIQのような有料プロバイダーは通常プランのティアに応じて1秒あたりのリクエスト数がスケールします。想定した上限を前提にバッチジョブを構築する前に、必ずそのプロバイダーの最新のポリシーを確認してください。
住所のリストをジオコーディングするのは合法ですか?
概ね合法です。公開されている住所を座標に(またはその逆に)変換することは、確立された議論の余地のない公開データの利用です。注意すべき点はデータソースのライセンス(OpenStreetMapのODbLは元の地図データを再配布する場合に帰属表示とシェアアライクを要求します)と、住所が特定可能な個人に紐づく場合の個人データルール(GDPR/CCPA)です。これは法的助言ではありません。