BlogData Mapping

OpenStreetMap vs Google geocoding accuracy: When free is enough

8 July 2026·8 min read

Google geocoding often returns precise rooftop coordinates, whilst OpenStreetMap relies heavily on interpolated street segments. Interpolated points place an address along a street block based on number ranges, which is mathematically estimated rather than surveyed. For routing or regional analysis, interpolated data is usually sufficient.

This breakdown is for logistics coordinators, local government analysts, and field service managers who need to process thousands of rows of messy spreadsheet data without paying enterprise API fees. By standardising your inputs and understanding the delta between rooftop and interpolated accuracy, you can map a 200-home farm across 5 crews efficiently, ending up with a clean, hosted dataset and zero billing surprises.

TL;DR
  • Google prioritises rooftop accuracy for postal addresses, while OpenStreetMap relies heavily on street interpolation.
  • Interpolation estimates coordinates based on street number ranges, which can cause positional offsets of several metres.
  • Building a cascade—trying an exact lookup first, then falling back to interpolation—provides accurate data without enterprise API costs.
  • InstaMaps handles this cascade directly in Google Sheets, offering 100 free lookups daily (1,000 with a free email unlock).
  • Using =CLEAN_ADDRESS() to standardise text formatting before geocoding significantly reduces failure rates across both providers.
  • Outputting your final coordinates into =INSTAMAP() generates a live, shareable map URL that updates as your sheet changes.

Rooftop vs interpolated: The honest reality of geocoding

When you type an address into a geocoder, the engine applies one of two methods to place the point. Rooftop geocoding matches the address to a specific building polygon, returning the exact centroid of that structure. Interpolation calculates the position based on the street network, estimating where number 42 falls mathematically between known points 40 and 44 on a line segment.

Google maintains a massive proprietary database of rooftop coordinates, built from satellite imagery, Street View surveys, and postal partnerships. Its accuracy drops in rural areas or new housing developments where physical structure data lags behind the postal database. OpenStreetMap (OSM) relies on user-contributed data. In heavily surveyed cities, OSM provides precise building outlines. In sparsely mapped regions, OSM defaults to street interpolation.

Neither system guarantees 100% rooftop accuracy. A common failure point for both engines is apartment buildings with internal unit numbers; geocoders usually return the building centroid rather than the specific flat. The practical difference for spreadsheet users is the failure rate on poorly formatted inputs. Google will often guess a close approximation and return a coordinate with an 'approximate' accuracy flag. OSM is more likely to fail and return null if the street segment lacks the necessary address range tags.

For operations simply trying to plot a delivery sequence or visualise a sales territory, interpolated points are usually sufficient. The gap between the two engines only matters when you require sub-10-metre precision, such as aligning utility asset drops or calculating property line setbacks.

Building a geocoding cascade in a spreadsheet

A single geocoding engine will always have blind spots. Google misses new developments; OpenStreetMap misses untagged rural lanes. To prevent row failures in a dataset, developers use a cascade-a system that queries a primary engine, checks for an error or low-confidence result, and automatically falls back to a secondary engine.

In a spreadsheet, you build this cascade using IF statements combined with InstaMaps formulas. The goal is to exhaust your daily quota of highly accurate lookups before leaning on open-source alternatives. The add-on is free, providing a free tier of 100 lookups/day (1,000/day with a free email unlock).

If you have a list of 1,500 rows, a straight Google query will exhaust your daily quota by row 1,000, leaving the remaining 500 blank. A cascade manages this pool intelligently. Assume your raw addresses are in column B.

  1. Primary Google lookup: In cell C2, enter `=GEOCODE(B2, "google")`. If Google cannot resolve the address, or if you hit your daily quota limit, the cell returns an `#ERROR!` or `#N/A`.

  2. Fallback OSM lookup: In cell D2, enter `=IF(ISERROR(C2), GEOCODE(B2, "osm"), C2)`. This formula checks the Google result. If Google succeeded, it uses that coordinate. If Google failed, it forces an OpenStreetMap lookup.

  3. Prioritising precision: If you know Google provides rooftop data for a specific postcode area but you want to save quotas, invert the logic. Query OSM first, then use Google strictly for the failures.

  4. Automating the chain: Instead of typing these formulas manually, open the sidebar via Extensions > InstaMaps > Enable formulas. The Build-the-workflow button writes these exact IF chains for you, ensuring no syntax errors disrupt the cascade logic across thousands of rows.

Standardising location data before geocoding

Geocoders fail most often because of bad input syntax, not bad mapping data. Extraneous punctuation, missing spaces, and mixed-case text confuse string-matching algorithms. An address reading '14 High St., Apt 2B!' might fail completely, while '14 High Street' resolves instantly.

You must standardise location data before sending it to a geocoding engine. InstaMaps provides the `=CLEAN_ADDRESS()` formula specifically for this preprocessing step.

Assume your raw CRM export sits in column A, containing messy strings like ' 12b OAKLEY road\n' or 'unit 4, 55 evergreen tce'.

  1. Apply the cleaner: In cell B2, enter `=CLEAN_ADDRESS(A2:A500)`.

  2. The formula strips trailing spaces, standardises capitalisation, and translates common abbreviations. It converts 'St.' to 'Street' and 'Rd' to 'Road'. It removes line breaks and special characters that cause HTTP request failures in the background.

  3. Geocode the cleaned result: In cell C2, enter `=GEOCODE(B2:B500)`.

Worked example: Auditing a 200-home delivery route

Consider a regional farm box delivery service auditing its routing. The dataset contains 200 active customer homes, serviced by 5 distinct crews, with 47 total stops scheduled for a given Tuesday. The goal is to map Tuesday's stops and generate shareable URLs for each crew driver.

Setup your sheet with specific column ranges. Column A holds the Customer ID (A2:A201). Column B contains the raw, unparsed delivery addresses.

  1. Standardise the input: In cell C2, enter `=CLEAN_ADDRESS(B2:B201)`. This processes the 200 raw text strings into standardised addresses, removing unit numbers where they cause conflicts and fixing inconsistent abbreviations.

  2. Geocode the addresses: In cell D2, apply a cascade to ensure zero missing points for the 200 homes. Use `=GEOCODE(C2:C201)`. The engine processes the cleaned data.

  3. Filter for Tuesday's route: Assume Column E dictates the delivery day and Column F assigns the crew. For the 47 stops assigned to 'Tuesday' and 'Crew A', extract those specific coordinates.

  4. Sort the stops efficiently: For the 47 stops, use `=SORT_BY_DISTANCE()` on the filtered coordinates. This sequences them logically, preventing backtracking across the delivery zone.

  5. Generate the live map: InstaMaps uses the `=INSTAMAP()` function to generate a hosted, interactive map URL. Select the coordinate range for the 47 Crew A stops. If those coordinates sit in cells D50:D96, enter `=INSTAMAP(D50:D96)` in cell G1.

  6. Share with the driver: The `=INSTAMAP()` formula outputs a live URL. When the sheet updates-say a customer cancels and you delete row 60-the hosted map updates automatically.

  7. Build driver navigation links: The map displays the pins, but drivers need turn-by-turn navigation. Use `=ROUTE_LINK()`. Google Maps officially caps this at a maximum of 11 stops. You must break the 47-stop route into five separate `=ROUTE_LINK()` formulas for the driver.

Step-by-step: Setting up the InstaMaps cascade

1. Open Google Sheets and install InstaMaps from the Workspace Marketplace.

2. Navigate to Extensions > InstaMaps > Enable formulas. This opens the sidebar interface.

3. Highlight your raw text data. For a 200-home delivery spreadsheet, raw text sits in column A (A2:A201). Inputs are typically inconsistent, containing strings like '12 high st' or '44 kingston rd, flat b'.

4. In the sidebar, click the Build-the-workflow button. The tool detects your selected range and automatically writes the formula chains in the adjacent empty columns.

5. Column B receives the =CLEAN_ADDRESS() formula. For row 2, the sidebar inserts =CLEAN_ADDRESS(A2). This standardises capitalisation, corrects minor spelling errors, and extracts fragmented data into a uniform structure. Drag this down to B201 to process the remaining 199 rows.

6. Column C receives the coordinates. The sidebar writes =GEOCODE(B2) to process the newly cleaned data. For bulk processing, type =GEOCODE(B2:B201) directly into C2 to populate the entire array at once.

7. Map the coordinates by selecting column C and clicking the map generation button in the sidebar, which inserts =INSTAMAP(C2:C201). This generates a live, hosted shareable map URL in cell D1.

Any changes made to the addresses in column A automatically cascade through the =CLEAN_ADDRESS() and =GEOCODE() formulas. The =INSTAMAP() output updates automatically, reflecting the new coordinates without requiring manual data refreshes. To prepare this workflow for daily routing, use =STREETVIEW_LINK(C2) in column D. Before a driver leaves the depot, they can click the generated link to visually verify the drop-off point, catching any interpolated errors where the geocoder placed the pin on the wrong side of a divided motorway. The free tier covers 100 lookups per day (1,000/day with a free email unlock), allowing you to run this entire 200-row array daily without hitting quota ceilings.

Limits and honest alternatives

Free tiers possess hard boundaries. The InstaMaps add-on processes 100 lookups per day. A free email unlock raises this limit to 1,000 lookups per day. If you attempt to process a 2,500-row CRM export using =GEOCODE(A2:A2501) on the standard tier, the formula halts at row 101.

Accuracy ceilings also dictate results. Geocoding engines differentiate between rooftop accuracy (exact building coordinates) and interpolated accuracy (estimating a position based on a street segment). Google maintains proprietary rooftop data for commercial venues, while OpenStreetMap relies on community-collected street segments, heavily utilising interpolation. Both systems struggle with edge cases: new housing developments, rural routes without formal numbering, and newly constructed industrial estates frequently lack verified coordinates. Interpolation errors occur frequently on long rural lanes. If the database only knows the start and end points of a 5-kilometre road, it divides the house numbers mathematically. Number 45 might land 400 metres from the actual driveway.

When =GEOCODE() hits this ceiling, it returns interpolated coordinates placed at the centre of a postcode district, or a null value if the address is entirely absent from the database. When automation hits its ceiling, manual verification workflows take over.

Insert a verification column next to your coordinates. If =GEOCODE() returns a null value for a new build in row 42, input =STREETVIEW_LINK(C42) in column E. This generates a direct URL to Google Street View for the returned coordinates. For a 5-crew service team handling 47 daily stops, manual checking resolves the 2 or 3 new builds the mapping database lacks. Reviewing the generated Street View links takes minutes. If the imagery shows an empty field instead of a newly constructed warehouse, the operator manually searches the correct coordinates, pastes them directly into cell C42, and the =INSTAMAP() formula automatically reflects the manual correction on the live map.

Who this workflow is for

This workflow targets specific operational scales.

  1. Solo delivery drivers and local dispatchers: Operators managing 50 to 100 daily stops benefit directly. The 1,000 lookups per day limit handles this volume comfortably, and =CLEAN_ADDRESS() corrects customer postcode errors before routing begins.

  2. Small field service teams: A 3-person plumbing business tracking job locations in Google Sheets. They require a simple visual map to assign technicians based on location. They use =INSTAMAP() to share a live hosted URL with the team each morning, avoiding expensive GIS software subscriptions.

  3. Local event coordinators: Organisers mapping 200 attendee postcodes to plan shuttle bus pick-up clusters. They need to visualise data density on a map, not calculate complex topographical drive times across mountainous terrain.

  4. National logistics managers: Operators processing 10,000+ daily addresses will immediately hit the API quota limits. They require dedicated, paid routing infrastructure with direct database access.

  5. Civic planners and surveyors: Professionals needing sub-metre accuracy, parcel-level polygon data, and zoning boundaries. Spreadsheet formulas return single-point coordinates, not the complex vector polygons required for infrastructure planning.

Try it free

Map your Salesforce accounts in under 5 minutes — no admin setup.

Install Free →

Common Questions

What is the actual difference between rooftop and interpolated geocoding?

Rooftop geocoding returns coordinates that correspond to the exact physical centroid of a building footprint, requiring highly curated parcel data. Interpolated geocoding estimates a position by placing the address along a street segment based on its number relative to the block's start and end points. For example, if house numbers range from 100 to 200, the system places number 150 precisely halfway down the road. Interpolation is computationally cheaper and standard in open datasets, making it highly effective for routing logistics, though it often fails for specific pad placement on large rural plots.

Is OpenStreetMap geocoding less accurate than Google Maps?

Yes, OpenStreetMap is generally less granular than Google Maps because it relies on community-contributed and interpolated data rather than proprietary satellite imagery and street-view verification. Google maintains a higher percentage of true rooftop coordinates, particularly in urban centres and specific postal code systems. However, OpenStreetMap accuracy varies wildly by region; it occasionally outperforms Google in rural European mapping contexts where local community contributions are exceptionally detailed. For determining a 47-stop delivery sequence or regional density, OpenStreetMap provides entirely adequate coordinate sets.

How many addresses can I geocode for free in Google Sheets?

With the InstaMaps add-on, the base free tier allows 100 lookups per day. You can increase this limit to 1,000 lookups per day by completing a free email unlock within the add-on. If you need to process a 200-row spreadsheet, you simply write the =GEOCODE(A2:A50) formula across your columns, and the system will process the batch up to your daily limit. For ongoing monthly processing without enterprise fees, staggering your batches ensures you remain within the free bounds.

Why does my address geocode to the middle of the street instead of the building?

This occurs because the underlying provider, often OpenStreetMap, does not possess the exact parcel polygon for that specific address. Instead, it relies on street interpolation, mathematically guessing the location based on the block's address range. It can also happen if the specific house number is newly built, invalid, or missing from the local council's open dataset. Standardising the address using =CLEAN_ADDRESS(A2) to remove unit designators or odd punctuation can sometimes force a more specific parcel match.

How do I standardise an address before geocoding it?

Address standardisation fixes syntax errors, such as missing commas, erratic capitalisation, and varied suffixes like 'Street' versus 'St'. In InstaMaps, you apply the =CLEAN_ADDRESS(A2) formula to your raw text column, generating a uniform syntax that geocoding engines can parse reliably. For optimal results, chain this directly into your geocoding process by applying =GEOCODE() to the clean output column rather than the raw input. You can access these formulas without typing by clicking the sidebar via Extensions > InstaMaps > Enable formulas.

How do I create a shareable map from geocoded spreadsheet data?

Once you have latitude and longitude coordinates in two separate columns, select the range and apply the =INSTAMAP(A2:D50) formula. This generates a live, hosted shareable map URL that automatically updates whenever you change the underlying sheet data. You can pass this link to external stakeholders who do not have access to your Google Sheet. If you need to route a subset of these points for a specific crew, the =ROUTE_LINK() formula will generate a Google Maps URL with a maximum of 11 stops.

Process your address data without API fees

Stop paying for enterprise geocoding tiers when you just need to clean farm lists and map spreadsheet data. Install InstaMaps to standardise addresses and batch geocode directly inside Google Sheets.

Install InstaMaps free