A Dash app to benchmark geocoding providers easily

Hello!

It has been a while since I last show up in this community, but I’m back to share a little project I was working on: a Dash app that helps to compare geocoding providers (such as Google Maps), easily.

How the app works:

  1. Upload a .csv or excel file with addresses like “137 Teaticket Hwy, East Falmouth, MA, 2536
  2. Pick the providers you want to compare
  3. Get a side-by-side accuracy and cost breakdown.

Why did I build this ?

If you work with geolocated data, there are chances that you used Google Maps Places API to geocode, or another provider such as Nominatim (open source). The problem is that the quality of the geocoding greatly varies with the location, the cleanliness of the data, and the provider. So, analysis can take time. Comparing can take time.

Also, this tool helps understand how mixing providers (cascading providers) can help to get better results at a lower cost. If you are in the logistics industry for instance, you might need to geocode thousands of addresses for delivery every month. It can be costly. Cascading providers helps to reduce the cost by taking open source / free providers for easy to match addresses, then more expensive providers for more difficult addresses.

For example, I ran the benchmark for 500 US addresses, comparing 5 providers. What’s interesting here is that US Census (free, governmental provider) can already handle 92.2% of the addresses. Cascading with other providers can help to increase the accuracy by +1.4% and reduce the cost by 97%.

If you are interested into this topic, I wrote detailed blog posts:

How did I build this?

As always with my projects, this is a full Dash app with dash-bootstrap for the styles and some custom CSS styles. For tables, I used Dash AG Grid (obviously)

It uses Python RQ to “queue” the geocoding jobs, meanwhile a dcc.Interval polls for the update of the results. Geocoding uses the Coordable API.

I used AI for this project. :slight_smile: Here was my workflow:

  1. Built the UI with Google Gemini in full HTML + CSS by giving clear instructions on what I wanted (mockup drawn by hand on paper)
  2. Used Cursor to translate the HTML/CSS layout into a full Dash layout and to setup my project workspace
  3. Used OpenAI Codex to build the remaining parts, i.e. mapping the layout with Dash callbacks. I wrote clear instructions on how to write Dash callbacks and how to avoid “bad patterns” so that the AI can do a great job.
  4. Reviewed the whole stuff in Cursor

I first asked for HTML because I know AIs are better with plain HTML and CSS to design beautiful UI/UX. Also, I preferred to have the layouts fixed complete before writing any callback as I try to minimize AI refactors (it often ends up with bad code).


If you are working with text addresses and often deal with geocoding, I would love to get your feedback on this tool! Also, if you know somebody working with geocoding, send them the tool ; they’ll probably appreciate :slight_smile: (because, yes, comparing is painful!)

Fran

2 Likes