DEV Community

Cover image for How to Geocode Thousands of Addresses for Free

How to Geocode Thousands of Addresses for Free

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.

GeoSearch Online upload page

Upload a CSV or Excel file containing addresses and geocode up to 2,500 records for free.

How it works

  1. Export your address list to a CSV or Excel file.
  2. Upload the file to GeoSearch Online.
  3. Select the address column to geocode.
  4. Start the geocoding process.
  5. 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

  1. Create a free account at Geoapify and obtain an API key.
  2. Send an address and your API key to the geocoding API.
  3. The API searches for the best matching location.
  4. Receive latitude, longitude, and additional address details in the response.
  5. 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);
  });
Enter fullscreen mode Exit fullscreen mode

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);
});
Enter fullscreen mode Exit fullscreen mode

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

  1. Create a free account at Geoapify and obtain an API key.
  2. Prepare a list of addresses to geocode.
  3. Submit the addresses as a batch job.
  4. Wait for the job to complete.
  5. 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);
Enter fullscreen mode Exit fullscreen mode

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.

Related Resources

Top comments (0)