Geocoding large address datasets (finding latitude and longitude coordinates for addresses) can quickly become expensive, especially when you need to process hundreds or thousands of records. This can be a challenge for businesses, researchers, and individuals working with limited budgets.
Fortunately, there are several ways to geocode thousands of addresses completely free of charge, and in this article we’ll explore the most practical options.
How to Geocode Thousands of Addresses for Free
Yes. While most geocoding services charge based on usage, many providers offer free quotas that are large enough for one-time projects, research, testing, and small business needs.
Note: "Free" does not necessarily mean unlimited. Most services apply daily quotas, rate limits, or file-size restrictions. In some cases, free usage may require more effort, such as splitting large datasets into smaller batches, waiting for daily quotas to reset, or processing data over multiple days.
However, with the right approach, these limits are often sufficient to geocode thousands—or even tens of thousands—of addresses without spending money.
The exact limits depend on the approach you choose. Here are three practical ways to geocode thousands of addresses for free:
| Method | Free Limit | Best For |
|---|---|---|
| Online Tool | 2,500 addresses per run | CSV files, no coding |
| Geocoding API | 3,000 addresses/day | Applications and automation |
| Batch Geocoding API | Up to 6,000 addresses/day (priority 0.5) | Large datasets |
| Self-Hosted Geocoder | Depends on your infrastructure | Very large datasets |
Let's take a closer look at each option and see when it makes the most sense to use it.
Method #1: Use an Online Geocoding Tool
The simplest way to geocode a large address dataset is to use an online geocoding tool. This approach requires no coding, no API integration, and no software installation. You simply upload a CSV or Excel file containing addresses and download the results.
For example, GeoSearch Online allows you to upload CSV and Excel files and geocode up to 2,500 addresses per run for free. The service returns latitude and longitude coordinates along with standardized address information and other useful location data.
Upload a CSV or Excel file containing addresses and geocode up to 2,500 records for free.
How it works
- Export your address list to a CSV or Excel file.
- Upload the file to GeoSearch Online.
- Select the address column to geocode.
- Start the geocoding process.
- Download the resulting file with coordinates.
Example
The following example shows how a list of addresses can be enriched with coordinates and standardized address data.
Before geocoding:
| original_address |
|---|
| 1 Apple Park Way, Cupertino, CA |
| 350 5th Ave, New York, NY |
After geocoding:
| original_address | lat | lon | formatted |
|---|---|---|---|
| 1 Apple Park Way, Cupertino, CA | 37.3302112 | -122.010771 | 1 Apple Park Way, Cupertino, CA 94087, United States of America |
| 350 5th Ave, New York, NY | 40.7484421 | -73.9856589 | Empire State Building, 350 5th Avenue, New York, NY 10118, United States of America |
In addition to latitude and longitude coordinates, geocoding services often return standardized address components such as house numbers, street names, postcodes, cities, states, countries, and confidence scores. This enriched data can help with address validation, data cleaning, analytics, and mapping applications.
Summary
| Pros | Cons |
|---|---|
| • No coding required • Works directly with CSV and Excel files • Fast and easy to use • Suitable for one-time projects |
• Requires manual file upload • Large datasets may need to be split into multiple files • Not suitable for automated workflows |
Free Limit: Up to 2,500 addresses per run.
Best for: Businesses, researchers, students, and anyone who needs to geocode a spreadsheet without writing code.
Method #2: Use a Geocoding API
If you need to geocode addresses regularly or integrate geocoding into an application, a geocoding API is often a better choice than an online tool. Instead of uploading files manually, your application sends addresses directly to the API and receives the results programmatically.
Unlike online tools that process an entire file at once, geocoding APIs typically work synchronously. Your application sends an address, waits for the response, and immediately receives latitude, longitude, and standardized address information. This makes APIs a great choice for websites, mobile apps, internal tools, and automated workflows that require real-time geocoding.
For example, the Geoapify Geocoding API provides up to 3,000 free requests per day.
How it works
- Create a free account at Geoapify and obtain an API key.
- Send an address and your API key to the geocoding API.
- The API searches for the best matching location.
- Receive latitude, longitude, and additional address details in the response.
- Store or use the results in your application.
Example: Geocode a Single Address
const apiKey = "YOUR_API_KEY";
const address = "1 Apple Park Way, Cupertino, CA";
fetch(
`https://api.geoapify.com/v1/geocode/search?text=${encodeURIComponent(address)}&apiKey=${apiKey}`
)
.then(response => response.json())
.then(result => {
console.log(result.features[0].properties);
});
The response contains coordinates, a formatted address, and additional location details that can be used for mapping, analytics, and address validation.
Respecting Rate Limits
Since each address requires a separate API request, it’s important to respect the API’s rate limits.
For example, the Geoapify free plan allows up to 5 requests per second and 3,000 requests per day. A rate-limiting library can help automatically distribute requests over time.
Example: Using a Rate Limiter
The @geoapify/request-rate-limiter package helps distribute requests according to your plan limits.
const RequestRateLimiter = require('@geoapify/request-rate-limiter');
const apiKey = 'YOUR_API_KEY';
// Function that geocodes a single address
async function geocodeAddress(address) {
const response = await fetch(
`https://api.geoapify.com/v1/geocode/search?text=${encodeURIComponent(address)}&apiKey=${apiKey}`
);
return await response.json();
}
// List of addresses to geocode
const addresses = [
"1 Apple Park Way, Cupertino, CA",
"350 5th Ave, New York, NY",
"1600 Amphitheatre Parkway, Mountain View, CA"
];
// Convert each address into a request function
const requests = addresses.map(address => {
return () => geocodeAddress(address);
});
// Process requests while respecting rate limits
RequestRateLimiter.rateLimitedRequests(
requests,
5, // Maximum requests per interval
1000 // Interval duration in milliseconds
)
.then(results => {
console.log('All addresses processed');
console.log(results);
})
.catch(error => {
console.error('Error processing requests:', error);
});
Summary
| Pros | Cons |
|---|---|
| • Easy to automate • Integrates directly into applications and scripts • Returns results immediately • No manual file uploads |
• Requires programming knowledge • Daily usage limits apply • Requests must respect rate limits • Large datasets may take time to process |
Free limit: Up to 3,000 requests per day.
Best for: Applications, websites, scripts, and automated workflows that need real-time geocoding.
Method #3: Use a Batch Geocoding API
If you need to geocode thousands of addresses at once, a batch geocoding API can be more efficient than sending individual requests through a standard geocoding API.
Unlike synchronous APIs that process one address per request and return results immediately, batch geocoding APIs work asynchronously. You submit a large set of addresses as a job, wait for the processing to complete, and then download the results. This approach is designed specifically for large datasets and avoids the need to manage thousands of individual requests.
For example, the Geoapify Batch Geocoding API allows you to submit up to 1,000 addresses per job. If your dataset is larger, you can simply submit multiple batch jobs and process them independently.
An additional advantage of batch geocoding is the priority parameter. Lower-priority jobs cost fewer credits because they are processed when system resources are available. For example, using a priority=0.5 reduces the processing cost by 50%. As a result, the free plan’s daily quota can process up to 6,000 addresses per day instead of 3,000.
How it works
- Create a free account at Geoapify and obtain an API key.
- Prepare a list of addresses to geocode.
- Submit the addresses as a batch job.
- Wait for the job to complete.
- Download the results containing coordinates and standardized address information.
Example: Batch Geocoding with a Library
While you can work directly with the Batch Geocoding API, using the @geoapify/batch-geocoding library simplifies the asynchronous workflow by handling job creation, polling, and result retrieval.
import { Batcher } from "@geoapify/batch-geocoding";
// Create SDK client with your API key
const batcher = new Batcher("YOUR_API_KEY");
// Submit a batch geocoding job
const job = batcher.geocode(
[
{
text: "1000 5th Ave, New York, NY 10028, United States"
},
{
text: "11 W 53rd St, New York, NY 10019, United States"
},
/* Up to 1,000 addresses can be submitted in a single batch job*/
],
{
priority: 0.5 // Lower-priority processing
}
);
// Wait for processing to complete and retrieve results
const jsonResult = await job.getResults().then(result => result.json());
console.log(jsonResult);
The library submits the batch job, waits for processing to complete, and returns the geocoding results, making it much easier to work with large datasets.
Summary
| Pros | Cons |
|---|---|
| • Designed for large datasets • Processes many addresses in a single job • Higher free throughput than synchronous APIs • Supports discounted low-priority processing |
• Results are not immediate • Requires programming knowledge • Jobs may take time to complete • Not suitable for real-time geocoding |
Free limit: Up to 3,000 addresses per day, or up to 6,000 addresses per day when using priority=0.5.
Best for: Large address datasets, data enrichment projects, migrations, and bulk geocoding workflows.
Method #4: Use a Self-Hosted Geocoding Engine
If you need complete control over your geocoding infrastructure or want to process very large datasets without API quotas, you can run an open-source geocoding engine on your own server.
Unlike hosted geocoding services, self-hosted solutions require you to install, configure, and maintain the software, as well as regularly update the underlying geographic data. In return, you are not limited by API quotas and can process as many addresses as your hardware can handle.
Several mature open-source geocoding engines are available:
| Engine | Description | Documentation | Installation |
|---|---|---|---|
| Nominatim | The most widely used OpenStreetMap geocoder | Docs | Install |
| Pelias | A highly scalable geocoder built for large deployments | Docs | Install |
| Photon | A lightweight geocoder based on OpenStreetMap data and Elasticsearch | Docs | Install |
While self-hosting removes usage limits, it introduces infrastructure costs and operational complexity. Importing and indexing OpenStreetMap data can require significant disk space, memory, and processing time, depending on the geographic area covered.
Summary
| Pros | Cons |
|---|---|
| • No API quotas • Full control over data and infrastructure • Suitable for very large datasets • Can be integrated into internal systems |
• Requires server infrastructure • Installation and maintenance effort • Data updates must be managed manually • Results may vary depending on data quality and configuration • Higher technical complexity |
Free limit: No API quotas. Limited only by your infrastructure.
Best for: Organizations processing large volumes of addresses, companies with strict data requirements, and teams that need full control over their geocoding infrastructure.
Which Method Should You Choose?
The best option depends on your dataset size, technical skills, and automation requirements.
| Method | Free Limit | Coding Required | Best For |
|---|---|---|---|
| Online Tool | 2,500 addresses per run | No | One-time CSV or Excel processing |
| Geocoding API | 3,000 addresses per day | Yes | Applications and automation |
| Batch Geocoding API | Up to 6,000 addresses per day (priority 0.5) | Yes | Large datasets |
| Self-Hosted Geocoder | Depends on infrastructure | Yes | Very large datasets and full control |
- Choose an online geocoding tool if you have a spreadsheet and need a quick, no-code solution.
- Choose a geocoding API if you need real-time geocoding in an application, website, or automated workflow.
- Choose a batch geocoding API if you need to process thousands of addresses efficiently and don't need immediate results.
- Choose a self-hosted geocoding engine if you need full control over your infrastructure and are prepared to manage the software and data yourself.
For most users, an online tool is the easiest place to start. If you need automation, APIs provide more flexibility, while batch processing and self-hosted solutions are better suited for large-scale geocoding projects.
Conclusion
Geocoding thousands of addresses for free is entirely possible. Whether you prefer a simple online tool, a geocoding API, a batch processing service, or a self-hosted solution, the best choice depends on your dataset size, automation requirements, and technical expertise.
For most users, an online tool is the easiest option, while APIs and batch processing provide more flexibility for larger and recurring geocoding tasks.

Top comments (0)