Blog

Browse Geocoding Tutorials, Guides & Updates

PHP Geocoding API Tutorial: Guzzle Pools and Production Patterns

PHP Geocoding API Tutorial: Guzzle Pools and Production Patterns
PHP runs more geocoding workloads than the conference talks suggest. Magento and Shopware stores normalising checkout addresses, Laravel listing aggregators ingesting MLS feeds, WordPress directories with a million POIs, marketing-automation tools that want a lat,lng next to every CRM record. The language is everywhere this work actually happens, and the right tool for the HTTP layer has not cha...

Go Geocoding Tutorial: Goroutines, Bounded Concurrency, and Backoff

Go Geocoding Tutorial: Goroutines, Bounded Concurrency, and Backoff
Go is the language to reach for when you want concurrency without async/await ceremony. Goroutines are 2 KB stacks, channels are typed pipes, and the standard library net/http is good enough for production from day one. There is no event loop to learn, no await keyword to scatter through every function, and no colored-function problem. You write straight-line code, and you fan it out with go...

Geocoding UK Addresses: Postcodes, UPRN, and Edge Cases

Geocoding UK Addresses: Postcodes, UPRN, and Edge Cases
UK addresses look superficially similar to US addresses — house number, street, town, postcode — and that surface similarity is exactly what wrecks pipelines built by teams whose default mental model was forged in North America. The UK does not work like the US. The postcode is not a coarse zone; for a meaningful slice of the country it identifies a single building. People search by postcode alone...

HIPAA-Compliant Geocoding: no_record Patterns and BAA Considerations

HIPAA-Compliant Geocoding: no_record Patterns and BAA Considerations
A patient's home address, on its own, is just a string. Tied to a name, a diagnosis, a member ID, or any other identifier of an individual receiving care, it becomes Protected Health Information under HIPAA. Geocoding that string — turning it into a latitude and longitude — passes it through a third-party processor. That is the part most engineering teams underweight, and it is the part compliance...

How to Cache Geocoding Results: TTL, Keys, and 90% Cost Reduction

How to Cache Geocoding Results: TTL, Keys, and 90% Cost Reduction
A million geocoding lookups per month at $0.50 per thousand is $500. With a 90% cache hit rate, that bill drops to $50. With a 95% hit rate it drops to $25. Caching is not a nice-to-have at the bottom of a performance checklist — it is the single largest lever in geocoding economics, and most teams leave it half-pulled. This post is the practical version: cache key design, TTL strategies, the actu...

Benchmarking Geocoding APIs: Methodology, Pitfalls, and Honest Numbers

Benchmarking Geocoding APIs: Methodology, Pitfalls, and Honest Numbers
"I ran 1,000 addresses through 5 geocoders, here's the winner" is, almost without exception, the wrong methodology. The post that follows will show beautiful charts. The numbers will be precise to two decimals. The conclusion will be confident. And it will be wrong, because at least three load-bearing assumptions in the experiment were never examined. The three assumptions, in order of how much da...

Geocoding 1 Million Addresses: From 8 Hours to 12 Minutes

Geocoding 1 Million Addresses: From 8 Hours to 12 Minutes
A logistics customer ran a nightly geocode of roughly one million delivery addresses. The job started after the 22:00 cutoff for next-day routing and was supposed to finish before drivers logged in at 06:00. For months, it usually did. Then volume crept up, the job started bleeding into the morning, and one bad night it finished at 09:15 — by which point dispatch had already cut routes by hand. Th...

Streaming Geocoding at Scale: Backpressure, Memory, and Throughput

Streaming Geocoding at Scale: Backpressure, Memory, and Throughput
The difference between geocoding 100,000 rows on your laptop and 100,000,000 rows in production is one principle: never load the whole file. Stream it. Backpressure it. Bounded buffers everywhere. Get this wrong and your worker either OOMs at 3am or quietly thrashes the page file at 200 rows per minute. Get it right and the same 1GB worker that crashes on a naive script will chew through a 50GB CS...
By CSV2GEO Team | Updated Apr 28, 2026
Read Streaming Geocoding at Scale: Backpressure, M...

Python Geocoding API Tutorial: Async, Retries, and a 100K-Row CSV Pipeline

Python Geocoding API Tutorial: Async, Retries, and a 100K-Row CSV Pipeline
This is a working Python tutorial for geocoding addresses through a REST API. Every snippet in this post was written, copy-pasted into a file, and executed against the live API on a clean Python 3.11 install before publishing. Two dependencies ( httpx , aiofiles ) — no SDK, no framework, no magic. By the end of the post you will have a script that streams a CSV of any size, geocodes its rows conc...

Node.js Geocoding API Tutorial: Concurrency, Retries, and CSV Streaming

Node.js Geocoding API Tutorial: Concurrency, Retries, and CSV Streaming
This is a working Node.js tutorial for geocoding addresses through a REST API. The code in this post was written, copy-pasted into files, and executed before publishing. Every snippet runs on a clean Node 22 install with two dependencies (p-limit, csv-parse). No frameworks, no SDK, no magic. What you will end up with by the end of the post: a script that reads a CSV of addresses, geocodes them con...