← All tools

Place

Geocode a list of addresses

geocode_batch

Turn a list of addresses, business names, postcodes or coordinates into points, with a confidence and the address parts for every row.

Read-onlySheets, files and runs by referenceBackground jobs for big lists

Use it when

  • ✓ A list of addresses needs coordinates before anything else happens
  • ✓ You need to know how sure each placement is before trusting it
  • ✓ You want a sheet-ready table (format: "csv") with city, county, state, postcode, UK council and UPRN

Not for

Usual chain: geocode_batch → filter_by_location or ask_table → plan_routes or render_map

Coverage: Worldwide; strongest in the US and Great Britain (house-level address data); council and UPRN in Great Britain.

Measured

  • US benchmark of 1,150 real addresses from business lists (12 Oct 2026): 873 placed; 636 of those could be checked against an independent reference, and 627 (98.6%) were within 150 m of it.
  • Rows it cannot place come back unplaced with a plain reason (for example "street not in our index"), never as a guess.

Sources

  • InstaMaps address index (OpenStreetMap, OpenAddresses) and postcodes.io (2026-10-08)

Inputs

addresses

array · up to 100

Addresses, one per row.

records

array · up to 100

Or rows with your own ids.

format

string

csv: also return every row as CSV text (csv), one line per row in the order sent, to save as a file in Drive or paste into a sheet. One of: json · csvDefault: "json"

columns

array

The fields for the CSV and for write_to_sheet, in order (CSV default: status, lat, lng, precision, confidence, reason, house_number, street, city, county, state, postcode, country, council, uprn, record_key; write_to_sheet default: lat, lng, status, address, city, county, state, postcode, country, precision, confidence). ID and input always lead the CSV. council (Great Britain: the local authority) and uprn (Great Britain: the nearest UPRN to a pin on a building, within 15 m) are blank elsewhere.

background

boolean

With source: run as a background job and answer at once with job_id (automatic past 100 rows). Check with get_job; write_to_sheet with the job_id puts the results in the sheet as they finish.

source

object

Instead of typing rows: { sheet: "<Google Sheets link>", tab?: "Sites" } (shared with the InstaMaps service account, or viewable by anyone with the link), { file: "<Drive link to a CSV or Excel file>" }, or { run: "<run_id from an earlier answer>" }. Columns are found by their headers (id, name, address or its parts, lat/lng); name them if they aren't obvious (id_column, address_column, lat_column, lng_column; from_column and to_column for road distances). Rows with coordinates are used as they are.
The full description, as the server gives it to an agent

Place up to 100 addresses in one call. Each record comes back with a status (placed, review, unplaced), the location and its precision (rooftop, interpolated, street, postcode, town), a confidence with the evidence behind it (the score is how often an answer that sure was right when measured; the same input always gets the same answer), the address quality, the admin parts (street, city, county, state, postcode, country), a stable record_key and the map version, and where one is close enough to be sure, the building at the point (residential or not: house, business, farm…). Coordinates in any common format ("53.8008, -1.5491", 51°30'03"N 0°07'40"W, "48.8584 N 2.2945 E"), or records with lat and lng, are placed as given and come back with the address at the point (nearest_address and the admin parts): this is also how to turn coordinates into addresses. Flats, units and suites are matched to their building. Every row carries its address parts (admin: house number, street, city, county, state, postcode, country); format "csv" also returns them as CSV to save in Drive or a sheet, and write_to_sheet puts them in the sheet as columns. Every row sent comes back in the order sent: unplaced rows with the reason, and rows past 100 as not looked up.

A real answer

Captured from the live server on 2026-10-13, trimmed to the first rows.

Request

{
  "records": [
    {
      "id": "hq",
      "address": "10 Downing Street, London SW1A 2AA"
    },
    {
      "id": "wh",
      "address": "1600 Pennsylvania Ave NW, Washington DC 20500"
    },
    {
      "id": "x",
      "address": "asdfgh"
    }
  ]
}

The answer's first line

3 rows: 2 placed, 0 to review, 1 unplaced · 2 of 3 high confidence (0 medium, 1 low). Caveats: not placed (1 row).

The answer (trimmed)

{
  "confidence": {
    "summary": "2 of 3 high confidence (0 medium, 1 low). Caveats: not placed (1 row).",
    "levels": {
      "high": 2,
      "medium": 0,
      "low": 1
    },
    "caveats": [
      {
        "basis": "not_placed",
        "level": "low",
        "rows": 1,
        "ids": [
          "x"
        ],
        "meaning": "This row could not be placed.",
        "next": "Leave it out of totals, say so, and ask the user for a postcode or coordinates."
      }
    ]
  },
  "records": [
    {
      "id": "hq",
      "input": "10 Downing Street, London SW1A 2AA",
      "record_key": "rk1_e9ec1ea25045e3a5e393",
      "address_quality": {
        "value": "full_street",
        "basis": "rule"
      },
      "status": "placed",
      "location": {
        "value": {
          "lat": 51.5034878,
          "lng": -0.1276965
        },
        "precision": "rooftop",
        "confidence": {
          "value": 0.95,
          "basis": "rule",
          "evidence": [
            "named site matched (10 Downing Street)",
            "house number 10 matched",
            "street matched (Downing Street)",
            "… 5 more"
          ]
        }
      },
      "admin": {
        "value": {
          "house_number": "10",
          "street": "Downing Street",
          "city": "London",
          "county": "Greater London",
          "state": "England",
          "postcode": "SW1A 2AA",
          "country": "GB",
          "council": "Westminster"
        },
        "basis": "rule",
        "evidence": [
          "open map data",
          "council from the official postcode directory"
        ]
      },
      "map_version": "osm-2026-10-03",
      "uprn": {
        "value": "100023336956",
        "distance_m": 6,
        "basis": "nearest"
      },
      "confidence": {
        "level": "high",
        "score": 0.95,
        "basis": "geocode_checked",
        "why": "rooftop"
      }
    },
    {
      "id": "wh",
      "input": "1600 Pennsylvania Ave NW, Washington DC 20500",
      "record_key": "rk1_0579e7bc70379e42dce9",
      "address_quality": {
        "value": "full_street",
        "basis": "rule"
      },
      "status": "placed",
      "location": {
        "value": {
          "lat": 38.8976387,
          "lng": -77.0365525
        },
        "precision": "rooftop",
        "confidence": {
          "value": 0.95,
          "basis": "rule",
          "evidence": [
            "house number 1600 matched",
            "street matched (Pennsylvania Avenue Northwest)",
            "postcode agrees (20500)",
            "… 4 more"
          ]
        }
      },
      "admin": {
        "value": {
          "house_number": "1600",
          "street": "Pennsylvania Avenue Northwest",
          "city": "Washington",
          "county": "District of Columbia",
          "state": "DC",
          "postcode": "20500",
          "country": "US"
        },
        "basis": "rule",
        "evidence": [
          "open map data"
        ]
      },
      "map_version": "osm-2026-10-03",
      "confidence": {
        "level": "high",
        "score": 0.95,
        "basis": "geocode_checked",
        "why": "rooftop"
      }
    },
    {
      "id": "x",
      "input": "asdfgh",
      "record_key": "rk1_8588310a98676af6e225",
      "address_quality": {
        "value": "town_only",
        "basis": "rule"
      },
      "status": "unplaced",
      "location": {
        "value": null,
        "precision": "none",
        "confidence": {
          "value": 0.2,
          "basis": "rule",
          "evidence": [
            "town differs (The Municipal District of Newcastle West on the map)",
            "position: the centre of the town",
            "nothing about it matches the input"
          ]
        },
        "why": "unreadable address: no street, town or postcode we recognise"
      },
      "admin": {
        "value": null,
        "basis": "rule",
        "evidence": [
          "open map data"
        ]
      },
      "map_version": "osm-2026-09-19",
      "confidence": {
        "level": "low",
        "score": 0.2,
        "basis": "not_placed",
        "why": "unreadable address: no street, town or postcode we recognise"
      }
    }
  ],
  "summary": {
    "records": 3,
    "status": {
      "placed": 2,
      "review": 0,
      "unplaced": 1
    },
    "precision": {
      "rooftop": 2,
      "none": 1
    },
    "vs_paid_reference": null,
    "vs_live_product": null,
    "declined_but_placed_by": {
      "paid_reference": [],
      "live_product": []
    },
    "sent": 3
  },
  "ms": 1875,
  "run": {
    "tool": "geocode_batch",
    "at": "2026-10-13T15:59:09.444Z",
    "rows": 3,
    "placed": 2,
    "review": 0,
    "unplaced": 1,
    "not_placed": 1,
    "sources": [
      {
        "name": "InstaMaps address index (OpenStreetMap, OpenAddresses) and postcodes.io",
        "as_of": "2026-10-08"
      }
    ],
    "run_id": "run_30182f16c73e3d50",
    "confidence": {
      "high": 2,
      "medium": 0,
      "low": 1
    }
  }
}

Use it in Claude

Add the connector https://get-instamaps.com/mcp and ask in plain words. 5,000 tool calls a day per person, reset at midnight UTC; a call counts once however many rows it carries; a sheet by reference is one call; checking a job is free.

How to add it →