{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Rank Tracker – Geo-Grid Local SEO Heatmap",
    "description": "Check where a business ranks on Google Maps from every point of a grid around it (3×3 to 15×15). Rank per point, top competitors, average rank and top-3 share, plus a shareable heatmap image and map report. No proxy costs. $0.49 per 7×7 grid.",
    "version": "0.1",
    "x-build-id": "ZwocYPtpZi76b2Qfz"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ecclesiasteslabs~google-maps-rank-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ecclesiasteslabs-google-maps-rank-tracker",
        "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/ecclesiasteslabs~google-maps-rank-tracker/runs": {
      "post": {
        "operationId": "runs-sync-ecclesiasteslabs-google-maps-rank-tracker",
        "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/ecclesiasteslabs~google-maps-rank-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-ecclesiasteslabs-google-maps-rank-tracker",
        "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": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "What customers type into Google Maps, e.g. \"dentist\", \"emergency plumber\", \"pizza near me\". Each keyword is checked on its own grid (and priced as its own grid).",
            "items": {
              "type": "string"
            }
          },
          "businessName": {
            "title": "Business name",
            "type": "string",
            "description": "The business to track, as it appears on Google Maps, e.g. \"Park Slope Dentistry\". The actor finds it near the grid center and then tracks it by its Google id. Leave empty (and the link below too) to only map the top results per point."
          },
          "placeUrlOrId": {
            "title": "Google Maps link or place ID (most precise)",
            "type": "string",
            "description": "Optional but recommended: the business's Google Maps link (also short maps.app.goo.gl links), its place ID (ChIJ...) or CID number. This makes matching exact, even for chains with many branches. If you leave the center empty, the location in the link is used as the center."
          },
          "centerAddress": {
            "title": "Grid center: address",
            "type": "string",
            "description": "Address or place the grid is centered on, e.g. \"586 President St, Brooklyn, NY\". Usually the business's own address. Leave empty to center on the business itself (found from the Maps link or the name)."
          },
          "centerLat": {
            "title": "Grid center: latitude",
            "minimum": -90,
            "maximum": 90,
            "type": "number",
            "description": "Instead of an address, give exact coordinates, e.g. 40.67644. Overrides the address."
          },
          "centerLng": {
            "title": "Grid center: longitude",
            "minimum": -180,
            "maximum": 180,
            "type": "number",
            "description": "e.g. -73.983251"
          },
          "gridSize": {
            "title": "Grid size",
            "enum": [
              "3",
              "5",
              "7",
              "9",
              "11",
              "13",
              "15"
            ],
            "type": "string",
            "description": "Number of points per side. 7 × 7 = 49 points is the usual weekly report; 3 × 3 is a cheap quick check; 13 × 13 or 15 × 15 covers a whole city in detail. You pay per point checked.",
            "default": "7"
          },
          "spacing": {
            "title": "Distance between points",
            "minimum": 0.05,
            "maximum": 50,
            "type": "number",
            "description": "How far apart neighbouring points are. Typical: 0.5–1 km (0.3–0.6 mi) in a city, 2–5 km in suburbs or for service-area businesses. The grid's total width = (grid size − 1) × distance.",
            "default": 1
          },
          "spacingUnit": {
            "title": "Distance unit",
            "enum": [
              "km",
              "mi"
            ],
            "type": "string",
            "description": "Kilometres or miles.",
            "default": "km"
          },
          "maxRank": {
            "title": "How deep to look",
            "enum": [
              "20",
              "40",
              "60",
              "100"
            ],
            "type": "string",
            "description": "Check the top 20 results per point (like Local Falcon) or go deeper. If the business isn't found, the point shows \"20+\" (or 40+ etc.). Same price either way.",
            "default": "20"
          },
          "competitorsPerPoint": {
            "title": "Competitors listed per point",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "How many of the businesses ranking at each point to include in each point's row (the ones above you first). The summary row also ranks the top 10 competitors across the whole grid.",
            "default": 3
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Two-letter language code for Google Maps, e.g. en, es, de, fr. It changes the language of names and categories, and can slightly change results.",
            "default": "en"
          },
          "country": {
            "title": "Country code (optional)",
            "type": "string",
            "description": "Leave empty to detect it from the grid center. Or set a two-letter code such as us, gb, ca, au, de."
          },
          "searchMode": {
            "title": "Search mode",
            "enum": [
              "searcherAtPoint",
              "mapView"
            ],
            "type": "string",
            "description": "'Searcher at each point' (default) simulates someone standing at the point and searching on their phone – the standard for geo-grid rank tracking, and the results don't depend on where our servers are. 'Map view only' centers the map on the point without a searcher location; results then spread wider and vary more.",
            "default": "searcherAtPoint"
          },
          "zoom": {
            "title": "Map zoom",
            "minimum": 8,
            "maximum": 18,
            "type": "integer",
            "description": "Google Maps zoom level of the simulated search (14 ≈ a neighbourhood). It matters little in the default mode; in 'Map view only' mode lower numbers show results from a wider area.",
            "default": 14
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Not needed: the actor works without a proxy and automatically retries through Apify Proxy if a request fails. Set this only if you want every request to go through a specific proxy.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}