Coordinate Fetcher
Reuse known address coordinates to enrich CSV files and reduce repeated geocoding.
My contribution
I built the original Flask application in 2018 for uploading address lists and downloading coordinates. Version 2.1 modernizes it with a redesigned browser interface, a command-line option, and automated checks.
Result: Recorded local review: 183 automated tests and 17 browser checks passed; GitHub CI also passed.
Tools
- Python
- Flask
- JavaScript
- ArcGIS / Google adapters
Demo data and screenshots are synthetic. Live geocoding accuracy, adoption, performance gains, and production deployment are unverified.
Project gallery
Presentation layouts from the actual app, using synthetic data. Mobile views combine three scroll sections. 4 images. Select an image to view it full size.
Why this matters
Address lists exported from SQL often need coordinates for GIS work. Coordinate Fetcher reuses known locations from an existing address reference, so matching records do not need to be geocoded again. This can reduce paid geocoding requests and repeated in-house processing, while configured geocoding services handle unresolved addresses.
From addresses to coordinates
Upload a CSV, run address lookup, review the results, and download the enriched file. Row order, duplicate records, and original columns stay intact. Each result shows its match status and data provider.
Review on desktop or phone
Light and dark views offer a coordinate plot, search, filters, and pages of results. Downloads stay within each browser session, and refreshing keeps completed results. A one-click offline demo uses synthetic records.
Technical details
Original application: 2018 · Modernization: version 2.1
Address lists need coordinates for GIS work without losing the original records or hiding unsuccessful lookups.
- The original application combined a reference address table with geocoding fallbacks. Version 2.1 replaces the database dependency with configurable local reference data.
- Share one processing layer between the Flask browser interface and CLI. Validate the CSV before lookups, preserve row order, duplicate records, and original columns, and escape formula-like text for spreadsheet use.
- Use normalized exact address matching against a configurable local reference CSV. Optional ArcGIS and Google adapters require explicit configuration.
- Record a status and provider for each result, distinguishing matches, review candidates, missing addresses, and provider failures. Reuse repeated-address lookups within a batch, apply request limits, and stop repeated calls to a failing provider. Google export also requires an explicit configuration choice under the applicable agreement.
- Bind in-memory results and downloads to the browser session. Refreshing, searching, filtering, and paging reuse completed results without repeating provider requests. Results expire after up to 30 minutes and disappear on restart.
- Plot latitude and longitude without external map tiles, retaining outliers and grouping identical coordinates. Google results remain in the table and export but are excluded from the plot.
- Provide a one-click offline sample that makes no external requests. Native forms, result filtering, pagination, and downloads also work without JavaScript.
- Recorded validation: automated tests using pytest passed locally on Windows with Python 3.11. Browser checks covered desktop/mobile layouts, both themes, filtering, refresh, downloads, and operation without JavaScript. GitHub Actions CI passed all four Windows/Linux and Python 3.11/3.14 combinations.
- Provider tests use simulated responses; live service accounts and geocoding accuracy were not tested. This is a local, single-process tool without production authentication or durable job storage.
- SQL datasets can enter this workflow as CSV exports; the modernized tool does not connect directly to a database. Cost savings and the share of records resolved locally have not been measured.



