InstaMaps Around a place API

The Around a place API from InstaMaps — 2 operation(s) for around a place.

GitHub OpenAPI

Operations 2

POST /v1/find_nearby The nearest, the count, or a list of places of a kind (stations, schools… #
POST /v1/find_official_places The official record: A&E departments, hospitals, GP practices, care homes and… #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/get-instamaps-com:get-instamaps-com-around-a-place-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

get-instamaps-com-around-a-place-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: InstaMaps Around a place API
  version: 0.6.0
  description: 'Location data for lists, as one REST endpoint per job: geocode with a confidence per row, straight-line and road distances,

    multi-driver route plans, drive-time areas, official facts (census tract, HUBZone, flood zones), flood, crime and natural-hazard

    risk, live warnings, places nearby, plain-English questions over a table, and hosted maps. Strongest in the US and Great Britain,

    on our own address index, roads and official data. The same tools as the InstaMaps MCP server, as plain HTTP.


    **Auth.** Authorization: Bearer (or X-API-Key). Keys are free: sign in with Google at /developers/portal.


    **Free.** 2,500 lookups a day per account, every endpoint, reset at midnight UTC. No card.


    **What counts as a lookup.**

    - One lookup per row a call carries: an address placed, a journey measured, a stop routed, a place checked.

    - A question to ask_table is 10 lookups, however long the table.

    - A drive-time area is 10 lookups a band, plus one per place checked against it.

    - Maps, live hazards and postcode-radius lists are one lookup a call. Checking a background job (get_job) is free.

    - Rows sent by reference (a Google Sheet, a Drive file or an earlier run) are counted from the answer.


    **Keep what you get.** No 30-day cache rule: store the results in your own database for as long as you like. Every answer names its sources and their dates.


    **Every answer:**

    - Nothing is dropped: every row sent comes back, in order, under your own id; rows that cannot be placed or answered say why. An answer that would lose rows fails loudly instead.

    - Every row carries confidence {level: high | medium | low, score, basis}; basis is a stable code (rooftop, postcode_centre, not_placed…) and the answer''s confidence object says what each basis present means and what to do about it.

    - Every row carries record_key, the same place ID from every tool, so answers from different tools join on it.

    - Every answer ends with a run block: when, how many rows, sources with their dates, the confidence counts, calls used and left today, and a run_id that any tool can take as source {run} and render_map as from_run.

    - Lists by reference: pass a Google Sheet, a Drive file or a run_id instead of typing rows. Every tool but one only reads; write_to_sheet puts an answer into the sheet as new dated columns or a new tab, never overwriting.

    - No vendor or model names in answers; every source is named with its date.


    Docs: https://get-instamaps.com/developers'
  contact:
    name: InstaMaps
    email: hello@get-instamaps.com
    url: https://get-instamaps.com/developers
  termsOfService: https://get-instamaps.com/terms
servers:
- url: https://get-instamaps.com
  description: InstaMaps
security:
- apiKey: []
tags:
- name: Around a place
paths:
  /v1/find_nearby:
    post:
      operationId: find_nearby
      summary: The nearest, the count, or a list of places of a kind (stations, schools…
      description: 'For up to 500 addresses or points in the UK and the US: the nearest places of a kind (mode nearest), how many are within a radius (count), or a list (list). One answer carries up to 300 places (records × n); count mode has no such limit. Categories: pharmacy, station, supermarket, school, GP, hospital, pub, cafe, restaurant, car park, EV charger, bus stop, bank, post office, gym, park and more (an unknown word gets the full list back). From open map data on our own index: classic amenities are well covered, trades patchily. For A&E, hospitals, GP practices, care homes, dentists and NHS pharmacies in England, find_official_places answers from the CQC and NHS registers, with ratings: open map data mixes these up.


        Use when:

        - "Nearest station to each property"

        - Counting competitors or amenities around sites

        - Site selection


        Not for:

        - Official records with ratings (CQC, NHS, food hygiene): find_official_places


        Coverage: UK and US, from OpenStreetMap; each answer says how well that kind of place is mapped.


        Reference: https://get-instamaps.com/mcp-server/tools/find_nearby'
      tags:
      - Around a place
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                category:
                  type: string
                mode:
                  type: string
                  enum:
                  - nearest
                  - count
                  - list
                  default: nearest
                radius_km:
                  type: number
                  maximum: 25
                  description: Default 10 km for nearest, 2 km otherwise.
                n:
                  type: integer
                  minimum: 1
                  maximum: 50
                  description: How many places to return per record.
                records:
                  type: array
                  maxItems: 500
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: Your id for the row; results come back under it.
                      name:
                        type: string
                        description: What to call the place on the map.
                      address:
                        type: string
                      lat:
                        type: number
                      lng:
                        type: number
                  description: '{id, address} or {id, lat, lng}. Send your own ids to merge results back.'
                addresses:
                  type: array
                  maxItems: 500
                  items:
                    type: string
                  description: Or plain addresses/postcodes, numbered from 1.
                background:
                  type: boolean
                  description: '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.'
                source:
                  type: object
                  description: '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.'
                  properties:
                    sheet:
                      type: string
                    tab:
                      type: string
                    range:
                      type: string
                      description: e.g. "A1:H501"; the first row is the header.
                    file:
                      type: string
                    run:
                      type: string
                    id_column:
                      type: string
                    name_column:
                      type: string
                    address_column:
                      type: string
                    lat_column:
                      type: string
                    lng_column:
                      type: string
                    from_column:
                      type: string
                    to_column:
                      type: string
              required:
              - category
            example:
              category: pharmacy
              addresses:
              - Leeds LS1 4AP
              n: 3
      responses:
        '200':
          description: 'The answer. For example: "Pharmacy (nearest, 10 km): 1 of 1 placed · 0 of 1 high confidence (1 medium, 0 low). Caveats: postcode centre (1 row); open map data, not the official register (1 row)."'
          headers:
            X-Lookups-Used:
              schema:
                type: integer
              description: Lookups this call cost.
            X-Lookups-Remaining:
              schema:
                type: integer
              description: Free lookups left today.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: The answer in one or two sentences.
                additionalProperties: true
        '400':
          description: The request could not be answered; error says why.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
        '401':
          description: No API key, or an unknown or revoked one.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
        '404':
          description: No such endpoint.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
        '429':
          description: Today's free lookups are used up (or the call needs more than are left), or too many requests a minute.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
  /v1/find_official_places:
    post:
      operationId: find_official_places
      summary: 'The official record: A&E departments, hospitals, GP practices, care homes and…'
      description: 'What open map data doesn''t have, from the official registers. England (the Care Quality Commission''s register, our copy, with each place''s latest rating and date): A&E departments (NHS hospitals with a full emergency department: CQC rates their urgent and emergency services and critical care; with the A&E''s rating and the NHS trust that runs it), urgent care (urgent treatment centres and minor injuries units, including hospitals whose A&E became one), hospitals (NHS or independent), GP practices, care homes, nursing homes, dentists, hospices; and NHS community pharmacies from the NHS''s own register (England, Wales, Isle of Man; ODS code and UPRN, on their building where the register gives it). UK (the Food Standards Agency, live): food businesses with their hygiene rating. For up to 500 addresses or points (100 for food): the nearest (mode nearest), how many within a radius (count) or a list (list), straight-line km; or mode at: the registered place AT each address (send the business name as name), e.g. the hygiene rating of each restaurant on a customer list or the CQC rating of each care home, matched by name and postcode and saying how; a row that can''t be matched says why and lists what is registered there. Filter by rating (Outstanding, Good, Requires improvement, Inadequate, not rated), NHS or independent, food type, hygiene score. Each place carries its register IDs (CQC location, NHS ODS code, UPRN, FSA FHRS), a link to its official page and its source; CQC covers England and the NHS pharmacy register England and Wales; addresses outside a register are told so. Use find_nearby for everything else (shops, stations, parks).


        Use when:

        - "Nearest A&E to each site and who runs it"

        - Care home ratings near an address

        - The hygiene rating of each restaurant on a list


        Not for:

        - Shops, stations and other everyday places: find_nearby


        Coverage: England for CQC, England and Wales for NHS pharmacies, the UK for food hygiene.


        Reference: https://get-instamaps.com/mcp-server/tools/find_official_places'
      tags:
      - Around a place
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                kind:
                  type: string
                  enum:
                  - ae
                  - hospital
                  - urgent_care
                  - gp
                  - care_home
                  - nursing_home
                  - dentist
                  - hospice
                  - pharmacy
                  - food
                mode:
                  type: string
                  enum:
                  - nearest
                  - count
                  - list
                  - at
                  default: nearest
                  description: 'at: the registered place at each address itself (send name).'
                radius_km:
                  type: number
                  maximum: 100
                  description: 'How far to look. Defaults: A&E 60, hospital 30, GP 10, care home 10, pharmacy 5, food 1.'
                n:
                  type: integer
                  minimum: 1
                  maximum: 50
                  description: How many places to return per record.
                rating:
                  type: array
                  items:
                    type: string
                  description: CQC ratings to keep, e.g. ["Requires improvement", "Inadequate"]. For A&E, the rating of its urgent and emergency services.
                nhs:
                  type: boolean
                  description: 'Hospitals: true for NHS only, false for independent only.'
                include_specialist:
                  type: boolean
                  default: false
                  description: 'A&E: also the eye and children''s hospitals'' emergency departments (left out by default).'
                food_type:
                  type: string
                  description: restaurant, takeaway, pub, supermarket, shop, hotel, school, caring, mobile or manufacturer.
                min_hygiene:
                  type: integer
                  minimum: 0
                  maximum: 5
                max_hygiene:
                  type: integer
                  minimum: 0
                  maximum: 5
                records:
                  type: array
                  maxItems: 500
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: Your id for the row; results come back under it.
                      name:
                        type: string
                        description: What to call the place on the map.
                      address:
                        type: string
                      lat:
                        type: number
                      lng:
                        type: number
                  description: '{id, address} or {id, lat, lng}. Send your own ids to merge results back.'
                addresses:
                  type: array
                  maxItems: 500
                  items:
                    type: string
                  description: Or plain addresses/postcodes, numbered from 1.
                background:
                  type: boolean
                  description: 'With source: run as a background job and answer at once with job_id (automatic past 200 rows). Check with get_job; write_to_sheet with the job_id puts the results in the sheet as they finish.'
                source:
                  type: object
                  description: '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.'
                  properties:
                    sheet:
                      type: string
                    tab:
                      type: string
                    range:
                      type: string
                      description: e.g. "A1:H501"; the first row is the header.
                    file:
                      type: string
                    run:
                      type: string
                    id_column:
                      type: string
                    name_column:
                      type: string
                    address_column:
                      type: string
                    lat_column:
                      type: string
                    lng_column:
                      type: string
                    from_column:
                      type: string
                    to_column:
                      type: string
              required:
              - kind
            example:
              kind: gp
              addresses:
              - Leeds LS1 4AP
              n: 2
      responses:
        '200':
          description: 'The answer. For example: "GP practice (nearest, 10 km): 1 of 1 records have one · 0 of 1 high confidence (1 medium, 0 low). Caveats: postcode centre (1 row)."'
          headers:
            X-Lookups-Used:
              schema:
                type: integer
              description: Lookups this call cost.
            X-Lookups-Remaining:
              schema:
                type: integer
              description: Free lookups left today.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: The answer in one or two sentences.
                additionalProperties: true
        '400':
          description: The request could not be answered; error says why.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
        '401':
          description: No API key, or an unknown or revoked one.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
        '404':
          description: No such endpoint.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
        '429':
          description: Today's free lookups are used up (or the call needs more than are left), or too many requests a minute.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
components:
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: im_live_…
      description: 'Authorization: Bearer <your API key> (or X-API-Key). Keys are free: sign in with Google at /developers/portal.'
externalDocs:
  description: Docs, pricing and examples
  url: https://get-instamaps.com/developers