{
  "openapi": "3.0.1",
  "info": {
    "title": "Google AI Overview Tracker: Citations, Rank & Changes",
    "description": "Track if Google's AI Overview cites your domain or your competitors for your keywords, by country and language: the full answer, every source with its full URL, citation rank, and the citations gained or lost since your last run. Batch keywords, no Google account.",
    "version": "0.1",
    "x-build-id": "17ZrxS9mT0baIjphW"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/foxlabs~google-ai-overview-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-foxlabs-google-ai-overview-scraper",
        "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/foxlabs~google-ai-overview-scraper/runs": {
      "post": {
        "operationId": "runs-sync-foxlabs-google-ai-overview-scraper",
        "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/foxlabs~google-ai-overview-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-foxlabs-google-ai-overview-scraper",
        "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": "One search per line, as people type it into Google (\"what is generative engine optimization\", \"best crm for small business\"). Each keyword is one Google search and one result row. Duplicates are skipped.",
            "items": {
              "type": "string"
            }
          },
          "targetDomains": {
            "title": "Your domain(s)",
            "type": "array",
            "description": "The site(s) you want to see cited, one per line (\"example.com\"). Subdomains and every page count (blog.example.com, example.com/guide). Each row says whether the AI Overview cites you, at which rank and which of your pages. Leave empty to only collect the AI Overviews.",
            "items": {
              "type": "string"
            }
          },
          "competitorDomains": {
            "title": "Competitor domains",
            "type": "array",
            "description": "Competitors to check on the same keywords, one per line. Each row lists which of them the AI Overview cites, with rank and cited pages.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country",
            "enum": [
              "us",
              "gb",
              "ca",
              "au",
              "nz",
              "ie",
              "in",
              "sg",
              "za",
              "ph",
              "my",
              "ng",
              "ke",
              "pk",
              "ae",
              "sa",
              "eg",
              "hk",
              "de",
              "at",
              "ch",
              "fr",
              "be",
              "nl",
              "es",
              "it",
              "pt",
              "br",
              "mx",
              "ar",
              "co",
              "cl",
              "pe",
              "pl",
              "tr",
              "se",
              "no",
              "dk",
              "fi",
              "jp",
              "kr",
              "id",
              "vn",
              "th",
              "il",
              "gr",
              "cz",
              "ro",
              "hu",
              "ua"
            ],
            "type": "string",
            "description": "Which country's Google to search: the search runs from an IP in that country. Google shows AI Overviews only in some countries and languages; elsewhere the result is overviewState \"absent\".",
            "default": "us"
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "de",
              "fr",
              "es",
              "it",
              "pt",
              "nl",
              "pl",
              "tr",
              "sv",
              "no",
              "da",
              "fi",
              "ja",
              "ko",
              "id",
              "vi",
              "th",
              "he",
              "el",
              "cs",
              "ro",
              "hu",
              "uk",
              "ar",
              "hi"
            ],
            "type": "string",
            "description": "Google's interface language for the search. Leave empty to use the country's main language (English for the US, German for Germany, Turkish for Turkey)."
          },
          "trackChanges": {
            "title": "Track changes between runs",
            "type": "boolean",
            "description": "Compare every keyword with its previous check: citations gained and lost, whether the answer changed, and how often your domain was cited in the last runs (\"3/5\"). The history is kept in your Apify account, in the key-value store \"google-ai-overview-tracker\", under the tracking ID below. The first run is the baseline.",
            "default": true
          },
          "trackingId": {
            "title": "Tracking ID",
            "type": "string",
            "description": "Name of the history to compare with, for example a client or project name (\"acme-us\"). Letters, digits, \"-\", \"_\" and \".\". Leave empty to derive it from the keyword list, country and language: editing the keyword list then starts a new history, so set your own ID for long-term tracking."
          },
          "historyDepth": {
            "title": "Checks kept per keyword",
            "minimum": 2,
            "maximum": 30,
            "type": "integer",
            "description": "How many past checks of each keyword the history keeps (used for \"cited in the last runs\").",
            "default": 10
          },
          "resolveSourceUrls": {
            "title": "Full source URLs",
            "type": "boolean",
            "description": "Google links most sources through redirect tokens. On: each token is resolved to the real page URL with one short request (the page itself is not visited). Off: those sources keep only their domain.",
            "default": true
          },
          "maxKeywords": {
            "title": "Max keywords",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Upper limit of keywords checked in one run, to keep costs predictable. Each keyword is one check. 250 keywords took about 25 minutes in our tests; a run stops starting new keywords shortly before its timeout and saves what it has, so raise the timeout for long lists.",
            "default": 100
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}