{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Rank Tracker: Rank Grid API for Local SEO",
    "description": "Geo-grid local rank tracker for Google Maps: rank at every grid point, top 3 competitors and a heatmap. A Local Falcon alternative, MCP-ready.",
    "version": "0.1",
    "x-build-id": "ohvZM8uWE3sny8JEj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ocius-data~google-maps-rank-grid/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ocius-data-google-maps-rank-grid",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/ocius-data~google-maps-rank-grid/runs": {
      "post": {
        "operationId": "runs-sync-ocius-data-google-maps-rank-grid",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/ocius-data~google-maps-rank-grid/run-sync": {
      "post": {
        "operationId": "run-sync-ocius-data-google-maps-rank-grid",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "keywords"
        ],
        "properties": {
          "businessName": {
            "title": "Business name",
            "type": "string",
            "description": "Name of the business as it appears on Google Maps. The Actor looks it up to get its place ID and location, so the grid can be centred on it automatically. Give at least one of: business name, place ID or Maps URL."
          },
          "mapsUrl": {
            "title": "Google Maps URL (optional)",
            "type": "string",
            "description": "Link of the business listing on Google Maps (https://www.google.com/maps/place/... or https://maps.app.goo.gl/...). The most precise way to identify one branch of a chain."
          },
          "placeId": {
            "title": "Place ID (optional)",
            "type": "string",
            "description": "Google place ID of the business, starting with \"Ch\" (for example ChIJgSvKJARZwokRGGDLFY2oPEc). Matching by ID is exact. With a place ID only, also give the grid centre."
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Search terms to track, as a customer would type them in Google Maps (for example \"dentist\", \"emergency plumber\"). From 1 to 10 keywords. Each keyword checks every point of the grid.",
            "items": {
              "type": "string"
            }
          },
          "centerLat": {
            "title": "Centre latitude (optional)",
            "type": "number",
            "description": "Latitude of the grid centre. Leave empty to centre the grid on the business location."
          },
          "centerLng": {
            "title": "Centre longitude (optional)",
            "type": "number",
            "description": "Longitude of the grid centre. Give it together with the centre latitude."
          },
          "centerAddress": {
            "title": "Centre address (optional)",
            "type": "string",
            "description": "Address or place to centre the grid on, for example \"Times Square, New York\". Used when no centre latitude and longitude are given."
          },
          "gridSize": {
            "title": "Grid size",
            "minimum": 3,
            "maximum": 9,
            "type": "integer",
            "description": "Points per side: 3, 5, 7 or 9. 5 means a 5x5 grid of 25 points. Each point is one charged check per keyword.",
            "default": 5
          },
          "spacing": {
            "title": "Spacing between points",
            "minimum": 0.05,
            "maximum": 25,
            "type": "number",
            "description": "Distance between neighbouring points, in the unit below. A 5x5 grid with 1 km spacing covers 4 x 4 km.",
            "default": 1
          },
          "distanceUnit": {
            "title": "Distance unit",
            "enum": [
              "km",
              "mi"
            ],
            "type": "string",
            "description": "Unit of the spacing: kilometres or miles.",
            "default": "km"
          },
          "zoom": {
            "title": "Map zoom",
            "minimum": 10,
            "maximum": 18,
            "type": "integer",
            "description": "Google Maps zoom level used at each point. 14 is a neighbourhood view (about 7 x 5 km), 13 a district, 15 a few blocks. Use the same zoom between runs to compare results.",
            "default": 14
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Interface language for Google Maps, as a language code (en, es, pt-BR, fr, de...).",
            "default": "en"
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Two-letter country code of the Google domain (us, gb, co, mx, es...). Also selects the country of the residential proxy if it is needed.",
            "default": "us"
          },
          "includeAllBusinesses": {
            "title": "Include all businesses per point",
            "type": "boolean",
            "description": "Add the full list of up to 20 businesses at each point (name, place ID, rating, reviews count, category, address, coordinates, website). Same price per point.",
            "default": false
          },
          "compareWithPreviousRun": {
            "title": "Compare with the previous run",
            "type": "boolean",
            "description": "Shows how the rank changed at every point since the last run for the same business, keyword and grid (previousRank, rankChange, changeStatus and the change of the averages in the summary row). The previous ranks are kept in a named key-value store in your account. Free: no extra requests and no extra charge.",
            "default": true
          },
          "monitoringStoreName": {
            "title": "History store name",
            "type": "string",
            "description": "Name of the key-value store (kept between runs) that remembers the ranks of each run. Use the same name in every scheduled run. Letters, numbers and hyphens only.",
            "default": "maps-rank-grid-history"
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Points checked in parallel. Default 8.",
            "default": 8
          },
          "maxRetries": {
            "title": "Max attempts per point",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Attempts per point before it is marked as failed. Failed points are not charged.",
            "default": 4
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "By default: Apify datacenter proxy for the United States, and a residential IP in the selected country elsewhere, because Google ranks local results partly by where the searcher is. The Actor switches proxy automatically if Google blocks requests.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}