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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/geogridapi-io:geogridapi-io-batches-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
openapi: 3.2.0
info:
title: GeoGrid Batches API
version: 1.0.0
description: 'Geo-grid rank tracking API for Google Maps (local SEO). Send a Google Business Profile and a keyword: GeoGridAPI measures the listing''s rank in the Google Maps results at every point of a grid around it (square 3×3 to 9×9, or circle, diamond, hexagon, cross, ellipse, rectangle), and returns the rank matrix, the competitors ranking ahead, the change since the previous grid and a PNG heatmap. 1 credit = 1 grid point. Test keys (gga_test_) return free mock grids.'
termsOfService: https://geogridapi.io/en/legal/terms
contact:
name: GeoGridAPI
url: https://geogridapi.io
email: sav@localnord.fr
servers:
- url: https://api.geogridapi.io
security:
- bearerAuth: []
tags:
- name: Batches
description: Several grids in one call.
paths:
/v1/batches:
post:
operationId: createBatch
tags:
- Batches
summary: Run up to 50 grids
description: One listing with several keywords, or several listings with one keyword, with the same format. Each grid is charged when it starts and refunded if it fails.
parameters:
- name: Idempotency-Key
in: header
required: false
schema:
type: string
maxLength: 200
description: Optional. The same key returns the grid already created, with no new charge.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateBatchRequest'
responses:
'202':
description: Batch created.
content:
application/json:
schema:
$ref: '#/components/schemas/Batch'
'400':
description: Invalid body.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Too many requests.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Not enough credits.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/v1/batches/{id}:
get:
operationId: getBatch
tags:
- Batches
summary: Get a batch
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: The batch.
content:
application/json:
schema:
$ref: '#/components/schemas/Batch'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Too many requests.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unknown batch.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
GridSummary:
type:
- object
- 'null'
properties:
average_rank:
type:
- number
- 'null'
description: Mean rank over the points where the listing appears.
average_rank_with_misses:
type:
- number
- 'null'
description: Mean rank with misses counted as 21.
top3_points:
type: integer
found_points:
type: integer
GridTarget:
type: object
required:
- keyword
properties:
place_id:
type: string
minLength: 3
maxLength: 256
description: Google place id of the listing (ChIJ…). Send place_id or query, never both.
query:
type: string
minLength: 2
maxLength: 200
description: Listing name and city; the first match is measured. Send place_id or query, never both.
center:
$ref: '#/components/schemas/Center'
keyword:
type: string
minLength: 1
maxLength: 120
description: Keyword searched on Google Maps.
example: plumber
BatchItem:
type: object
properties:
index:
type: integer
keyword:
type: string
query:
type:
- string
- 'null'
place:
type:
- object
- 'null'
properties:
place_id:
type: string
name:
type:
- string
- 'null'
address:
type:
- string
- 'null'
status:
type: string
enum:
- queued
- pending
- running
- completed
- failed
grid_id:
type:
- string
- 'null'
format: uuid
points_total:
type:
- integer
- 'null'
points_charged:
type: integer
summary:
$ref: '#/components/schemas/GridSummary'
error:
$ref: '#/components/schemas/GridError'
GridError:
type:
- object
- 'null'
description: Why a grid (or a batch item) failed; null otherwise.
required:
- code
- message
properties:
code:
type: string
example: place_not_found
message:
type: string
example: No Google Business Profile matches this place, or it has no public address.
GridFormat:
type: object
properties:
shape:
type: string
enum:
- square
- circle
- diamond
- hexagon
- cross
- ellipse
- rectangle
default: square
description: Grid shape.
size:
type: integer
enum:
- 3
- 5
- 7
- 9
description: 'Square only (default 7): side of the grid. Cost: size × size points. Not allowed with another shape.'
density:
type: string
enum:
- low
- medium
- high
description: 'Other shapes only (default medium). Points: circle 13/29/49, diamond 13/25/41, hexagon 17/27/47, cross 21/33/45, ellipse 19/35/45, rectangle 15/35/45.'
radius_km:
type: number
minimum: 0.5
maximum: 30
description: 'Distance from center to edge. Square: 0.5 to 30 km (defaults 1.5 / 2.5 / 3.5 / 4.5 km by size). Other shapes: 1 to 30 km.'
language:
type: string
pattern: ^[a-zA-Z]{2}$
description: Search language (2-letter code). Defaults to the account language.
example: en
country:
type: string
pattern: ^[a-zA-Z]{2}$
description: Search country (2-letter ISO code), optional.
example: US
webhook_url:
type: string
maxLength: 500
description: Public HTTPS URL called with the grid when it ends (grid.completed or grid.failed).
Error:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
example: invalid_body
message:
type: string
example: 'keyword: Too small: expected string to have >=1 characters'
additionalProperties: true
CreateBatchRequest:
allOf:
- $ref: '#/components/schemas/GridFormat'
- type: object
required:
- items
properties:
items:
type: array
minItems: 1
maxItems: 50
items:
$ref: '#/components/schemas/GridTarget'
example:
size: 7
items:
- query: Joe's Pizza, New York
keyword: pizza
- query: Joe's Pizza, New York
keyword: pizza delivery
Batch:
type: object
properties:
id:
type: string
format: uuid
object:
type: string
enum:
- batch
status:
type: string
enum:
- running
- completed
mode:
type: string
source:
type: string
enum:
- api
- mcp
- console
shape:
type: string
size:
type: integer
density:
type:
- string
- 'null'
radius_km:
type: number
items_count:
type: integer
counts:
type: object
properties:
queued:
type: integer
pending:
type: integer
running:
type: integer
completed:
type: integer
failed:
type: integer
credits_estimated:
type: integer
credits_charged:
type: integer
items:
type: array
items:
$ref: '#/components/schemas/BatchItem'
created_at:
type: string
format: date-time
launched_at:
type:
- string
- 'null'
format: date-time
Center:
type: object
required:
- lat
- lng
properties:
lat:
type: number
minimum: -90
maximum: 90
lng:
type: number
minimum: -180
maximum: 180
additionalProperties: false
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: gga_live_… or gga_test_… key from the console.
externalDocs:
description: Documentation
url: https://geogridapi.io/en/docs