{
  "openapi": "3.0.1",
  "info": {
    "title": "Local AI Visibility Grid (Google AI Overviews + Maps)",
    "description": "Is your local business named in Google AI Overviews? Ask customer questions at every point of a map grid: AI visibility share per point, competitors AI names (matched to Maps place IDs), cited sites, and your Maps rank there. AI Mode beta.",
    "version": "0.1",
    "x-build-id": "mp8mwt4T0FYLNfiod"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/latentlark~local-ai-visibility-grid/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-latentlark-local-ai-visibility-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/latentlark~local-ai-visibility-grid/runs": {
      "post": {
        "operationId": "runs-sync-latentlark-local-ai-visibility-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/latentlark~local-ai-visibility-grid/run-sync": {
      "post": {
        "operationId": "run-sync-latentlark-local-ai-visibility-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": [
          "questions"
        ],
        "properties": {
          "businessName": {
            "title": "Business name",
            "type": "string",
            "description": "The business to check, as it appears on Google Maps (e.g. 'William Parrish Plumbing'). Add the city below. For an exact match (chains with many branches), paste the Google Maps URL instead."
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "City and state of the business, e.g. 'Raleigh, NC'. Used to find the business and to place the grid when no center is given."
          },
          "mapsUrl": {
            "title": "Google Maps URL (optional, most precise)",
            "type": "string",
            "description": "The business's Google Maps place link. Matching then uses its exact Google IDs, so other branches of the same chain are never counted as you."
          },
          "placeId": {
            "title": "Place ID (optional)",
            "type": "string",
            "description": "Google Place ID (starts with ChIJ…)."
          },
          "questions": {
            "title": "Questions customers ask",
            "type": "array",
            "description": "What people type into Google, e.g. 'best emergency plumber near me'. Each question is asked at every point. Up to 10.",
            "items": {
              "type": "string"
            }
          },
          "points": {
            "title": "Points (optional: overrides the grid)",
            "type": "array",
            "description": "Exact locations to check, one per line as 'lat,lng' or 'lat,lng|label'. Leave empty to use the N×N grid below around the center (or the business). The prefill checks downtown Raleigh plus 8 km north and 8 km west: clear it when you check your own business.",
            "items": {
              "type": "string"
            }
          },
          "center": {
            "title": "Grid center (optional)",
            "type": "string",
            "description": "Address, city or 'lat,lng'. Empty = the business's own location."
          },
          "gridSize": {
            "title": "Grid size",
            "minimum": 1,
            "maximum": 7,
            "type": "integer",
            "description": "Points per side, odd number: 1 = just the center, 3 = 9 points, 5 = 25, 7 = 49. Used when 'Points' is empty.",
            "default": 3
          },
          "gridSpacingKm": {
            "title": "Distance between points (km)",
            "minimum": 0.2,
            "maximum": 50,
            "type": "number",
            "description": "Spacing between neighbouring grid points. 2-3 km for a city, 5-8 km for a metro area. Ignored if 'Radius' is set.",
            "default": 3
          },
          "radiusKm": {
            "title": "Radius (km, optional)",
            "minimum": 0.2,
            "maximum": 100,
            "type": "number",
            "description": "Alternative to spacing: distance from the center to the grid edge."
          },
          "samplesPerPoint": {
            "title": "Samples per point",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many times each question is asked at each point. AI answers vary between asks; 2-3 samples give a steadier visibility share.",
            "default": 2
          },
          "includeAiOverviews": {
            "title": "Google AI Overviews",
            "type": "boolean",
            "description": "Check the AI Overview box at the top of Google results. Charged only when Google shows an AI Overview.",
            "default": true
          },
          "includeAiMode": {
            "title": "Google AI Mode (beta)",
            "type": "boolean",
            "description": "Also ask Google AI Mode. Beta and free (not charged). Google often blocks automated AI Mode visits, so many checks return no answer. Switched off for the rest of the run after 4 blocks in a row.",
            "default": false
          },
          "includeMapsRank": {
            "title": "Google Maps rank at each point",
            "type": "boolean",
            "description": "Also record the business's organic Google Maps rank (top 20) for each question at each point, so you can compare map rank with AI visibility.",
            "default": true
          },
          "mapsKeyword": {
            "title": "Maps keyword (optional)",
            "type": "string",
            "description": "Keyword for the Maps rank, e.g. 'plumber'. Empty = use each question as typed."
          },
          "maxAnswers": {
            "title": "Max paid answers",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Safety cap: the run stops cleanly after this many AI answers. Points × questions × samples should fit under it. You can also set a maximum cost per run in the run options.",
            "default": 60
          },
          "maxConcurrency": {
            "title": "Parallel browsers",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "Answers loaded at the same time. 1 is the default and is more reliable; 2 is faster but may raise blocks.",
            "default": 1
          },
          "country": {
            "title": "Country (gl)",
            "type": "string",
            "description": "Google country code. AI Overviews with local businesses are most reliable in the US.",
            "default": "us"
          },
          "language": {
            "title": "Language (hl)",
            "type": "string",
            "description": "Google interface language code.",
            "default": "en"
          },
          "saveScreenshots": {
            "title": "Save screenshots",
            "type": "boolean",
            "description": "Save a screenshot of every answer page to the key-value store (for proof or debugging).",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional fallback only. Leave off for normal use: the Actor pins location with Google's uule parameter and runs on Apify's US servers without a proxy (recommended). If a large grid returns many blocked rows, you can turn on a proxy (residential is the usual fallback). Proxy traffic is billed extra by Apify.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}