← Back to Blog

Why Your Business Needs a Geocoding API: Addresses, IP Location and Time Zones with My Geocode

Published · by RS Computers

Geocoding API Partners

A geocoding API turns an address into map coordinates, and coordinates back into an address. Most business software needs this sooner or later: checkout forms that should catch a wrong address before the parcel leaves, store locators, delivery planning, CRM maps, and fraud checks that compare a customer's IP location with the billing country. My Geocode does all of it through one plain HTTPS API. That covers forward and reverse geocoding, address autocomplete, IPv4 and IPv6 lookups, time zones, elevation and postal codes, with 2,500 free requests a day. It is a partner of RS Computers and many of our customers use it, so we tested every endpoint for this guide.

Key facts, checked on 9 October 2026:

Eight reasons companies end up needing geocoding

Nobody wakes up wanting a geocoding API. They want fewer returned parcels, a working store finder or a fraud rule, and discover that each one needs location data. These are the jobs we see most often among our customers:

  1. Clean addresses at checkout. Address autocomplete suggests real streets while the customer types. That means fewer typos, fewer failed deliveries and less time on the phone with couriers.
  2. Store and branch locators. Geocode every shop once, then geocode the visitor's postcode or address and sort branches by distance.
  3. Delivery zones and pricing. Coordinates let you decide in code whether an address is inside your delivery area, or how far it is from the warehouse.
  4. CRM and sales maps. A list of 10,000 customer addresses becomes points on a map, so sales territories and route days can be planned.
  5. Fraud and risk checks. An IP lookup gives the country, network owner and flags such as data centre or VPN. An order whose IP is far from its billing country can be held for review.
  6. Local content. The visitor's IP country can preselect language, currency or the nearest office without asking.
  7. Scheduling across time zones. A time zone lookup gives the IANA zone name, the UTC offset and daylight saving status for any point. Booking systems, call centres and reminder emails get the local time right.
  8. Terrain and site planning. Elevation answers questions for solar installers, telecom planners and outdoor apps, up to 100 points per call.

What we got back: a tour of the API with real answers

Every request below was run on 9 October 2026 without a key, from an ordinary terminal. You can paste them into a terminal on any Linux server, Mac or Windows PC with curl. pretty=1 makes the JSON readable.

Address to coordinates (forward geocoding)

# on any computer with curl
curl "https://api.mygeocode.com/v1/forward?q=Nieuwe+Hemweg+26,+Amsterdam&limit=1&pretty=1"

The answer named Nieuwe Hemweg 26, 1013 CX Amsterdam, The Netherlands at latitude 52.395256, longitude 4.863544, with "precision": "house" and a confidence of 0.89. It added the postcode we didn't send, and extra codes such as a Plus Code and a geohash. The data centre at that address is where our Amsterdam network sits.

Coordinates to address (reverse geocoding)

# on any computer with curl
curl "https://api.mygeocode.com/v1/reverse?lat=42.6629&lon=21.1655&pretty=1"

For a point in the centre of Prishtina it returned Pristina, Kosovo, with "precision": "city" and the distance to the matched place, 1,098 metres. City precision is honest here: for that point, the API didn't claim to know the street.

Address suggestions while typing (autocomplete)

# on any computer with curl
curl "https://api.mygeocode.com/v1/autocomplete?q=Nieuwe+Hemw&pretty=1"

After eleven typed characters the suggestion was Nieuwe Hemweg, The Netherlands, with coordinates. This is the request a checkout form sends on each keystroke. Wait about 300 milliseconds after the last key before sending, so a fast typist doesn't spend twenty requests on one street name.

Where is this IP address? (IPv4 and IPv6 lookup)

# on any computer with curl
curl "https://api.mygeocode.com/v1/ipv4?ip=193.0.6.139&pretty=1"

For an address of the RIPE NCC, the registry for European IP space, it returned Amsterdam, the Netherlands, the network AS3333 and its name, the announced prefix 193.0.0.0/21 and "is_datacenter": true. It also gave a threat section with blocklist status. The /v1/ipv6 endpoint does the same for IPv6, and for one of our own Amsterdam IPv6 addresses it returned the right country and the announced /40 prefix. Leave out the ip parameter and the API looks up the address the request came from.

What time is it there? (time zone lookup)

# on any computer with curl
curl "https://api.mygeocode.com/v1/timezone?lat=53.3498&lon=-6.2603&pretty=1"

For Dublin it returned Europe/Dublin, UTC+01:00 with daylight saving on, the current local time, the Windows time zone name GMT Standard Time, and the date of the next clock change. That last field is what reminder systems get wrong twice a year.

How high is it? (elevation)

# on any computer with curl
curl -X POST -H "Content-Type: application/json" \
  -d '{"locations":[{"lat":52.3953,"lon":4.8635},{"lat":53.3498,"lon":-6.2603},{"lat":42.6629,"lon":21.1655}]}' \
  "https://api.mygeocode.com/v1/elevation"

One call answered for all three of our cities: Amsterdam 1 metre, Dublin 11 metres and Prishtina 599 metres above sea level, each with the grid resolution of the terrain model (about 464 metres).

Postal codes

# on any computer with curl
curl "https://api.mygeocode.com/v1/postcode?code=10000&pretty=1"

The code 10000 exists in several countries, and the API returned all of them: Troyes in France, a district of Mexico City, a town in South Korea and more. Add country=FR when you know the country. Coverage differs between countries; for a Kosovo postcode we got an empty list, so check the coverage page for the countries you serve.

Switching from Google Maps or another provider

The feature that saves the most work is the drop-in hosts. My Geocode runs copies of other providers' APIs on its own hostnames, with the same paths, parameters and response format. For Google, maps.googleapis.com becomes gapi.mygeocode.com:

# on any computer with curl
curl "https://gapi.mygeocode.com/maps/api/geocode/json?address=Dam+Square,+Amsterdam"

The answer came back in Google's own format, with address_components, formatted_address and geometry.location (52.3729318, 4.8933621, "location_type": "ROOFTOP"). Code written for Google's Geocoding API reads it without changes. The same works for IP lookups: ipapi.mygeocode.com/json/193.0.6.139 answered in ip-api.com's format. The full list of 17 hosts, plus loaders for the Google Maps JavaScript API, Bing Maps V8, Leaflet and MapLibre, is on the compatibility page.

What it costs at real volumes

Requests per monthMy GeocodeGoogle Geocoding API
30,000 (1,000 a day)€0, inside the 2,500 free requests a day$100 (10,000 free, 20,000 at $5 per 1,000)
100,000About €2.50 (75,000 free in a 30-day month, 25,000 at €0.0001)$450 (10,000 free, 90,000 at $5 per 1,000)
Any volume, flat€50 a month with an Unlimited keyNo flat plan; $4.00 per 1,000 from 100,001, falling to $0.38 above 5 million

The My Geocode figures assume requests spread evenly over the days, because the free allowance is daily. Google's figures use its first pricing tier, which runs to 100,000 requests a month; both price lists are linked above. My Geocode's terms allow caching and storing results, as long as you don't resell the raw data as a geocoding service of your own, so every address you have looked up once is free from then on.

Geocode a whole customer list, with a cache

A common first job is adding coordinates to an existing spreadsheet of customers or branches. This script reads a CSV file, asks the API once per address, and keeps every answer in a small SQLite database. Run it again after adding rows, and it only asks about the new addresses. It needs Python 3 and nothing else. Save your list as addresses.csv with a header line customer,address, then save this as geocode_csv.py:

#!/usr/bin/env python3
"""Add coordinates to a CSV of addresses with the My Geocode API, caching every answer in SQLite."""
import csv
import json
import os
import sqlite3
import sys
import time
import urllib.parse
import urllib.request

API = "https://api.mygeocode.com/v1/forward"
KEY = os.environ.get("MYGEOCODE_KEY", "")          # optional: without a key you get the anonymous daily allowance

db = sqlite3.connect("geocache.sqlite")
db.execute("CREATE TABLE IF NOT EXISTS cache (address TEXT PRIMARY KEY, answer TEXT)")


def geocode(address):
    row = db.execute("SELECT answer FROM cache WHERE address = ?", (address,)).fetchone()
    if row:
        return json.loads(row[0])
    url = API + "?" + urllib.parse.urlencode({"q": address, "limit": 1})
    headers = {"User-Agent": "geocode-csv/1.0 (you@example.com)"}
    if KEY:
        headers["X-API-Key"] = KEY
    req = urllib.request.Request(url, headers=headers)
    answer = json.load(urllib.request.urlopen(req, timeout=20))
    db.execute("INSERT INTO cache VALUES (?, ?)", (address, json.dumps(answer)))
    db.commit()
    time.sleep(0.2)                                  # be gentle with the API
    return answer


with open(sys.argv[1], newline="", encoding="utf-8") as src, open(sys.argv[2], "w", newline="", encoding="utf-8") as dst:
    reader = csv.DictReader(src)
    writer = csv.DictWriter(dst, fieldnames=reader.fieldnames + ["lat", "lon", "precision", "formatted"])
    writer.writeheader()
    for row in reader:
        results = geocode(row["address"]).get("results") or [{}]
        best = results[0]
        row.update(lat=best.get("lat"), lon=best.get("lon"), precision=best.get("precision"), formatted=best.get("formatted"))
        writer.writerow(row)
        print(f'{row["customer"]:15} {best.get("precision") or "not found":8} {best.get("formatted") or ""}')
# in the folder with both files
python3 geocode_csv.py addresses.csv geocoded.csv

Our test list had four rows, and the output taught two lessons:

Address we sentPrecisionWhat came back
Nieuwe Hemweg 26, AmsterdamhouseNieuwe Hemweg 26, 1013 CX Amsterdam, The Netherlands
Grafton Street 1, DublinhouseProvost's House, 1 Grafton Street, Dublin 2
Sheshi Nëna Terezë, PrishtinacityPristina, Kosovo
Nowhere Street 99, AtlantiscityAtlantis, Western Cape, South Africa

The first run took 3.6 seconds; the second took 0.15 seconds, all from the cache. The first lesson is in the last row: our made-up address matched a real town called Atlantis in South Africa. Always read precision before you trust a result. A delivery app should accept house and ask the customer again for anything coarser. The second lesson is the User-Agent line. Without it, Python's default user agent got 403 Forbidden from the API's network protection, so give your scripts a name.

Why run this on a VPS

The API runs on My Geocode's servers, but the code that calls it has to live somewhere, and a small server is the natural place:

A store locator or checkout backend with a cache fits easily on a VPS Micro (2 vCPU, 2 GB). Nightly batch jobs over hundreds of thousands of records, or an app that also renders map tiles, are more comfortable on VPS Mini or VDS Small. If you build with automation tools, the same API calls work from an HTTP Request node in n8n on your own server.

Good habits with any geocoding API

Frequently asked questions

What is a geocoding API?

A geocoding API converts an address or place name into latitude and longitude (forward geocoding), and coordinates back into an address (reverse geocoding). Businesses use it for address checks, store locators, delivery zones and maps.

Is My Geocode free?

Each account, and each anonymous address, gets 2,500 free requests a day. Beyond that, requests cost €0.0001 each from prepaid credit that doesn't expire, or you can buy an Unlimited key for €50 a month.

Can I replace the Google Maps Geocoding API without rewriting my code?

Often, yes. My Geocode's host gapi.mygeocode.com answers Google Geocoding requests in Google's response format, so you change the hostname and keep your parsing code. In our test, a Google-style request for Dam Square in Amsterdam returned a standard Google answer with ROOFTOP precision.

Can I store geocoding results in my own database?

My Geocode's terms allow caching and storing results. The one restriction is reselling the raw data as a geocoding service of your own. Storing results is also the easiest way to save requests and money.

How accurate is IP geolocation?

IP lookups are reliable for the country and the network owner, and less precise for the city, because many networks register addresses at a central office. Use them for risk scores and defaults, not as proof of where a person is.

Why did my script get a 403 error?

In our test, requests with Python's default user agent were refused with 403 Forbidden by the API's network protection. Setting a descriptive User-Agent header fixed it at once.

Start with the free tier, then size the server

Try the requests in this guide, or the live demo, before you write any code. Then create a free My Geocode key for your app. When you need a home for the app, its cache and its nightly jobs, pick a plan on our VPS page or message us on Telegram. Many of our customers already run exactly this pairing.

← All articles

Chat on Telegram