← All tools

Measure

Area reachable within a travel time

get_travel_time_area

The area reachable from a place within N minutes by car, on foot or by bike, and which of your records fall inside each band.

Read-onlySheets, files and runs by referenceBackground jobs for big listsKeeps a shareable map

Use it when

  • ✓ "Customers within a 30-minute drive"
  • ✓ Service areas and catchments
  • ✓ Comparing what two sites can reach

Not for

Coverage: Great Britain and the US on our roads, with measured weekday traffic for driving.

Sources

  • InstaMaps roads: OpenStreetMap routed with Valhalla (GB and US) (2026-10-08)
  • InstaMaps address index (OpenStreetMap, OpenAddresses) and postcodes.io (2026-10-08)

Basis: travel time on roads

Inputs

origin

object · required

An address or {lat, lng}.

minutes

array · up to 3

— Default: [30]

mode

string

— One of: drive · walk · cycleDefault: "drive"

records

array · up to 500

{id, address} or {id, lat, lng}. Send your own ids to merge results back.

addresses

array · up to 500

Or plain addresses/postcodes, numbered from 1.

include_geometry

boolean

— Default: false

render

boolean

Also keep the map (the bands, the origin and the records): a link, GeoJSON and KML. Default: false

title

string

The kept map's title when render is on.

background

boolean

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

traffic

string

weekday (default): road times with the area's measured weekday slowdown (DfT delay on local 'A' roads by council and on motorways in Great Britain; the Urban Mobility Report's Travel Time Index by US urban area). free_flow: empty roads. One of: weekday · free_flowDefault: "weekday"

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

The area you can reach from one place within 5 to 60 minutes (up to three bands) driving, walking or cycling, with its size; and, given records (up to 500 with lat/lng, or 200 addresses), which band each record falls in: "which customers are within 30 minutes' drive of the depot". Our own routing on Great Britain and US roads; elsewhere an open routing service. Set include_geometry to get the GeoJSON polygons (larger answer). The bands show on a map in the chat by itself. Set render to true only when the user wants to keep or share the map: it returns a link, GeoJSON and KML, and update_map can change it later.

A real answer

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

Request

{
  "origin": "Leeds LS1 4AP",
  "minutes": [
    15,
    30
  ],
  "addresses": [
    "York YO1 7HH",
    "Harrogate HG1 1HN"
  ]
}

The answer's first line

drive from Leeds LS1 4AP: 15 min 155 km² (0 records inside), 30 min 1023 km² (0 records inside) · 0 of 2 high confidence (2 medium, 0 low). Caveats: street or named place (1 row); postcode centre (1 row).

The answer (trimmed)

{
  "confidence": {
    "summary": "0 of 2 high confidence (2 medium, 0 low). Caveats: street or named place (1 row); postcode centre (1 row).",
    "levels": {
      "high": 0,
      "medium": 2,
      "low": 0
    },
    "caveats": [
      {
        "basis": "named_place",
        "level": "medium",
        "rows": 1,
        "ids": [
          "1"
        ],
        "meaning": "Placed on a street or a named place; no house number was given, so it is not a doorstep point.",
        "next": "Fine for area questions. For doorstep precision, send a house number or coordinates."
      },
      {
        "basis": "postcode_centre",
        "level": "medium",
        "rows": 1,
        "ids": [
          "2"
        ],
        "meaning": "The street address was not matched, so the row sits at its postcode centre, usually within 100-300 m of the real spot.",
        "next": "Fine for nearest-place questions and distances over a kilometre; check it before relying on street-level detail."
      }
    ]
  },
  "origin": {
    "input": "Leeds LS1 4AP",
    "lat": 53.795472,
    "lng": -1.555729,
    "confidence": {
      "level": "medium",
      "score": 0.65,
      "basis": "postcode_centre",
      "why": "at the centre of LS1 4AP"
    },
    "note": "Every band is drawn from this point. The street address was not matched, so the row sits at its postcode centre, usually within 100-300 m of the real spot. Fine for nearest-place questions and distances over a kilometre; check it before relying on street-level detail."
  },
  "mode": "drive",
  "engine": "our roads",
  "traffic": {
    "model": "weekday",
    "area": "Leeds (local A roads)",
    "factor_short_trips": 1.412,
    "factor_hour_plus": 1.205,
    "note": "Weekday estimate: free-flow road times × 1.41 for short trips in Leeds (local A roads), easing to × 1.21 on trips of an hour or more (DfT 2025 average delay on local 'A' roads and motorways).",
    "free_flow_minutes_drawn": [
      10.6,
      21.7
    ]
  },
  "rings": [
    {
      "minutes": 15,
      "area_km2": 155,
      "records_inside": 0
    },
    {
      "minutes": 30,
      "area_km2": 1023,
      "records_inside": 0
    }
  ],
  "summary": {
    "records": 2,
    "placed": 2,
    "inside_largest": 0
  },
  "records": [
    {
      "id": "1",
      "record_key": "rk1_d1ee5931d1454ef356c3",
      "input": "York YO1 7HH",
      "placed": true,
      "within_minutes": null,
      "lat": 53.96236,
      "lng": -1.08208,
      "confidence": {
        "level": "medium",
        "score": 0.7,
        "basis": "named_place"
      }
    },
    {
      "id": "2",
      "record_key": "rk1_0e7eb0a93b4f9efb7566",
      "input": "Harrogate HG1 1HN",
      "placed": true,
      "within_minutes": null,
      "lat": 53.98829,
      "lng": -1.53779,
      "confidence": {
        "level": "medium",
        "score": 0.65,
        "basis": "postcode_centre",
        "why": "at the centre of HG1 1HN"
      }
    }
  ],
  "run": {
    "tool": "get_travel_time_area",
    "at": "2026-10-13T15:59:31.172Z",
    "rows": 2,
    "placed": 2,
    "not_placed": 0,
    "sources": [
      {
        "name": "InstaMaps roads: OpenStreetMap routed with Valhalla (GB and US)",
        "as_of": "2026-10-08"
      },
      {
        "name": "InstaMaps address index (OpenStreetMap, OpenAddresses) and postcodes.io",
        "as_of": "2026-10-08"
      }
    ],
    "basis": "travel time on roads",
    "run_id": "run_2593691b6bc89263",
    "confidence": {
      "high": 0,
      "medium": 2,
      "low": 0
    }
  }
}

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 →