Python SDK for CSV2GEO Geocoding API — 461M+ addresses, 200+ countries, 18 endpoints. Forward, reverse, batch, places, divisions, autocomplete. 1,000 free requests/day.
Project description
CSV2GEO Python SDK
Official Python SDK for the CSV2GEO Geocoding API - fast, accurate geocoding powered by 461M+ addresses worldwide.
Installation
pip install csv2geo
Quick Start
from csv2geo import Client
# Initialize with your API key
client = Client("your_api_key")
# Forward geocoding (address → coordinates)
result = client.geocode("1600 Pennsylvania Ave, Washington DC")
if result:
print(f"Lat: {result.lat}, Lng: {result.lng}")
print(f"Address: {result.formatted_address}")
# Reverse geocoding (coordinates → address)
result = client.reverse(38.8977, -77.0365)
if result:
print(f"Address: {result.formatted_address}")
Features
- Forward geocoding - Convert addresses to coordinates
- Reverse geocoding - Convert coordinates to addresses
- Batch processing - Geocode up to 10,000 addresses per request
- Auto-retry - Automatic retry on rate limits
- Type hints - Full type annotations for IDE support
API Reference
Initialize Client
from csv2geo import Client
client = Client(
api_key="your_api_key",
base_url="https://api.csv2geo.com/v1", # optional
timeout=30, # optional, seconds
auto_retry=True, # optional, retry on rate limit
)
Forward Geocoding
# Simple - returns best match or None
result = client.geocode("1600 Pennsylvania Ave, Washington DC")
# With country filter
result = client.geocode("123 Main St", country="US")
# Full response with all matches
response = client.geocode_full("1600 Pennsylvania Ave")
for result in response.results:
print(f"{result.formatted_address}: {result.accuracy_score}")
Reverse Geocoding
# Simple - returns best match or None
result = client.reverse(38.8977, -77.0365)
# Full response with all matches
response = client.reverse_full(38.8977, -77.0365)
Batch Geocoding
# Geocode multiple addresses (up to 10,000)
addresses = [
"1600 Pennsylvania Ave, Washington DC",
"350 Fifth Avenue, New York, NY",
"1 Infinite Loop, Cupertino, CA",
]
results = client.geocode_batch(addresses)
for response in results:
if response.best:
print(f"{response.query}: {response.best.lat}, {response.best.lng}")
else:
print(f"{response.query}: Not found")
Batch Reverse Geocoding
# Reverse geocode multiple coordinates
coordinates = [
(38.8977, -77.0365),
(40.7484, -73.9857),
]
results = client.reverse_batch(coordinates)
for response in results:
if response.best:
print(response.best.formatted_address)
GeocodeResult Object
result = client.geocode("1600 Pennsylvania Ave, Washington DC")
# Coordinates
result.lat # 38.8977
result.lng # -77.0365
result.location # Location(lat=38.8977, lng=-77.0365)
# Address
result.formatted_address # "1600 PENNSYLVANIA AVE NW, WASHINGTON, DC 20500, US"
result.accuracy # "rooftop"
result.accuracy_score # 1.0
# Components
result.components.house_number # "1600"
result.components.street # "PENNSYLVANIA AVE NW"
result.components.city # "WASHINGTON"
result.components.state # "DC"
result.components.postcode # "20500"
result.components.country # "US"
Error Handling
from csv2geo import Client, AuthenticationError, RateLimitError, InvalidRequestError
client = Client("your_api_key")
try:
result = client.geocode("123 Main St")
except AuthenticationError as e:
print(f"Invalid API key: {e.message}")
except RateLimitError as e:
print(f"Rate limited. Retry after {e.retry_after} seconds")
except InvalidRequestError as e:
print(f"Invalid request: {e.message}")
Rate Limits
The client tracks rate limit headers automatically:
client.geocode("123 Main St")
print(client.rate_limit) # Max requests per minute
print(client.rate_limit_remaining) # Requests remaining
print(client.rate_limit_reset) # Unix timestamp when limit resets
With auto_retry=True (default), the client automatically waits and retries when rate limited.
Context Manager
with Client("your_api_key") as client:
result = client.geocode("123 Main St")
print(result.lat, result.lng)
# Session automatically closed
Get Your API Key
Sign up at csv2geo.com to get your API key.
Documentation
License
MIT License - see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file csv2geo-1.0.1.tar.gz.
File metadata
- Download URL: csv2geo-1.0.1.tar.gz
- Upload date:
- Size: 9.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b8fc62d523bc025de9edbd7acb23600b011bb51e7ec6584d64c004797d52292
|
|
| MD5 |
1b9fc2cbb49f0e34486d6edd56a4e6ea
|
|
| BLAKE2b-256 |
a582a2cf0cb4952ab803c536a336fc53e65234bdb7fa74259589314418efda78
|
File details
Details for the file csv2geo-1.0.1-py3-none-any.whl.
File metadata
- Download URL: csv2geo-1.0.1-py3-none-any.whl
- Upload date:
- Size: 8.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dfb5a711848a4bec77c5ec27c15b5eadebf3017df512e3f1691dd0287fe85399
|
|
| MD5 |
1f1a0c23bc29e69465c975a3a4d77608
|
|
| BLAKE2b-256 |
5f03a15adfb381dee51657935fdcaa2918df0984849261c072dff417fb72682f
|