{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Keyword Search Volume & Seasonality",
    "description": "Get Google keyword search volume by month: 48 months of Google Ads data per keyword with CPC, competition, bids, seasonal peaks and a rank for the months you plan for. Keyword ideas, website keywords, any country or city. Keywords without data are free. JSON, CSV or API.",
    "version": "0.1",
    "x-build-id": "ucq9Ray7U4BxQkkag"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~google-keyword-search-volume/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-google-keyword-search-volume",
        "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/automation_craft~google-keyword-search-volume/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-google-keyword-search-volume",
        "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/automation_craft~google-keyword-search-volume/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-google-keyword-search-volume",
        "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",
        "properties": {
          "mode": {
            "title": "What to look up",
            "enum": [
              "volume",
              "ideas",
              "website"
            ],
            "type": "string",
            "description": "volume: monthly Google search volume for exactly the keywords you list. ideas: related keyword ideas for your seed keywords, each with its own monthly volume (the seeds are included). website: the keywords Google Ads finds for a domain or a page, or the keywords a domain ranks for.",
            "default": "volume"
          },
          "keywords": {
            "title": "Keywords (or seed keywords)",
            "type": "array",
            "description": "One keyword per line. In the volume mode up to 10,000 keywords; in the ideas mode up to 200 seed keywords. Google Ads accepts up to 80 characters and 10 words per keyword, and no emoji or symbols; a keyword it would refuse is listed in a free status row instead. Example: winter jacket.",
            "items": {
              "type": "string"
            }
          },
          "keywordsText": {
            "title": "Paste a keyword list",
            "type": "string",
            "description": "Optional: paste keywords here, one per line (commas also split). They are added after the Keywords list above. Useful for a column copied from a spreadsheet."
          },
          "websites": {
            "title": "Websites (website mode)",
            "type": "array",
            "description": "Website mode only: up to 100 domains such as example.com, or with Website scope page, page links such as https://example.com/shoes/. Each website is one lookup.",
            "items": {
              "type": "string"
            }
          },
          "websiteScope": {
            "title": "Website scope (website mode)",
            "enum": [
              "site",
              "page"
            ],
            "type": "string",
            "description": "Website mode only. site (the default): keywords for the whole domain. page: keywords for one page link."
          },
          "websiteSource": {
            "title": "Website keyword source (website mode)",
            "enum": [
              "google_ads",
              "ranked"
            ],
            "type": "string",
            "description": "Website mode only. google_ads (the default): keywords Google Ads suggests for the site or page. ranked: keywords the domain ranks for in Google search, with its ranking position, page, title and estimated traffic, from the Labs database (adds the Discovered keyword event per charged row)."
          },
          "ideasSource": {
            "title": "Keyword ideas source (ideas mode)",
            "enum": [
              "google_ads",
              "related",
              "suggestions",
              "autocomplete"
            ],
            "type": "string",
            "description": "Ideas mode only. google_ads (the default): Google Ads keyword ideas, up to 20 seeds a lookup. related: the searches Google shows as related to each seed, two levels deep. suggestions: longer searches that contain the seed. autocomplete: what Google suggests while typing the seed, then the seed followed by each letter. The last three add the Discovered keyword event per charged row; their keywords then get their monthly series from Google Ads."
          },
          "maxKeywords": {
            "title": "Maximum keyword ideas per location",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Ideas and website modes: the most keyword rows with data delivered per location (default 1,000). The volume mode delivers every keyword you list."
          },
          "maxIdeasPerSeed": {
            "title": "Maximum ideas per seed (ideas mode)",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Ideas mode only, optional: each seed gets its own lookup and at most this many keyword rows with data (with the Google Ads source, one lookup per seed instead of one per 20 seeds, so more Lookup events)."
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Up to 10 locations, one per line: a country (Switzerland), a two letter code (CH), a Google Ads location code (2756), Worldwide, or a region or city written the way Google Ads writes it (Zurich,Switzerland for the canton, Zurich,Zurich,Switzerland for the city). A name Google Ads does not know is refused in a free row that lists the closest names. Left out: United States (an empty list is refused).",
            "items": {
              "type": "string",
              "enumSuggestedValues": [
                "Worldwide",
                "United States",
                "United Kingdom",
                "Canada",
                "Australia",
                "Germany",
                "Switzerland",
                "Austria",
                "France",
                "Italy",
                "Spain",
                "Netherlands",
                "Belgium",
                "Sweden",
                "Norway",
                "Denmark",
                "Finland",
                "Poland",
                "Portugal",
                "Ireland",
                "Czechia",
                "India",
                "Brazil",
                "Mexico",
                "Argentina",
                "Japan",
                "South Korea",
                "Singapore",
                "United Arab Emirates",
                "Saudi Arabia",
                "South Africa",
                "New Zealand",
                "Turkey",
                "Israel",
                "Indonesia",
                "Philippines",
                "Zurich,Switzerland",
                "Geneva,Switzerland",
                "Bern,Switzerland",
                "California,United States",
                "New York,United States",
                "Texas,United States",
                "England,United Kingdom",
                "Bavaria,Germany",
                "Ontario,Canada"
              ]
            }
          },
          "language": {
            "title": "Language (ideas, website, insights)",
            "type": "string",
            "description": "Optional language: a code (de, fr, en), a name (German), a Google Ads language id (1001) or a locale tag (de-CH). Google Ads volumes do not depend on the language, so the volume mode does not send it; it narrows keyword ideas and website keywords, and picks the language of the Labs insights and of autocomplete."
          },
          "historyMonths": {
            "title": "Months of history",
            "minimum": 1,
            "maximum": 48,
            "type": "integer",
            "description": "How many months of monthly searches, ending with the latest month Google Ads has published (default 48, the most Google Ads keeps). The price does not depend on it. Use either this or Date from."
          },
          "dateFrom": {
            "title": "Date from (YYYY-MM)",
            "type": "string",
            "description": "Optional first month of the history, for example 2023-01. Google Ads keeps the last 48 months."
          },
          "dateTo": {
            "title": "Date to (YYYY-MM)",
            "type": "string",
            "description": "Optional last month of the history, for example 2025-12. Default: the latest month Google Ads has published (the current month is never available)."
          },
          "planningMonths": {
            "title": "Months to plan for",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "How many upcoming months get a planning rank (default 3: the three months after the month the run starts). Each keyword row gets the historical figures for those months, and one plan row per month ranks the keywords of the run."
          },
          "planFrom": {
            "title": "First month to plan for (YYYY-MM)",
            "type": "string",
            "description": "Optional first planned month, for example 2026-12. Default: the month after the run starts."
          },
          "minSearchVolume": {
            "title": "Minimum search volume",
            "minimum": 0,
            "type": "integer",
            "description": "Optional: only keywords whose average monthly searches are at least this many. Keywords below it are left out and not charged."
          },
          "includeWords": {
            "title": "Must contain words",
            "type": "array",
            "description": "Optional: keep only keywords that contain at least one of these words or phrases as whole words (for example damen, or rain jacket).",
            "items": {
              "type": "string"
            }
          },
          "excludeWords": {
            "title": "Must not contain words",
            "type": "array",
            "description": "Optional: leave out keywords that contain any of these words or phrases as whole words (the same matching rule as Must contain words).",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Order of keyword ideas",
            "enum": [
              "relevance",
              "search_volume",
              "competition_index",
              "low_top_of_page_bid",
              "high_top_of_page_bid",
              "cpc"
            ],
            "type": "string",
            "description": "Ideas and website modes with the Google Ads source only: the order that decides which ideas fill Maximum keyword ideas (default relevance). CPC reads the whole Google Ads answer and keeps the ideas with the highest CPC."
          },
          "mergeCloseVariants": {
            "title": "Merge close variants",
            "type": "boolean",
            "description": "Google Ads gives one combined figure to close variants (plurals, word order). A group is keywords with the same average, the same figure in every month and the same words in any order, a word and its regular plural with s, es or ies counting as one. Every row lists the variants of the same lookup that share its figures. With this on, the run delivers and charges one keyword of each group: the first in the order the run fills its rows (your list, keywords from your memory first; for ideas and websites the order of Google's answer, or the CPC order with Order of keyword ideas set to CPC). Every other member, in the same lookup, another lookup of the run or the memory, is left out before any maximum counts it, free; a free row names the positions in your list of members left out after an earlier lookup. It works with your own list, Google Ads keyword ideas and Google Ads website keywords; with related searches, suggestions, autocomplete or ranked keywords the run is refused, free (their candidates are counted before their figures are known)."
          },
          "searchPartners": {
            "title": "Include Google search partners",
            "type": "boolean",
            "description": "Add the searches of Google's search partner sites to the volumes (default off: Google search only)."
          },
          "includeAdultKeywords": {
            "title": "Include adult keyword ideas",
            "type": "boolean",
            "description": "Let Google Ads return adult keyword ideas (default off)."
          },
          "speed": {
            "title": "Speed",
            "enum": [
              "slow",
              "fast"
            ],
            "type": "string",
            "description": "slow: lookups go through the queue, usually ready in 10 to 60 seconds. fast: live lookups that skip the queue (on 2026-10-18 they took 23 to 161 seconds, longer than the queue; worth it on days the queue is long); each paid live lookup adds one Fast lookup event.",
            "default": "slow"
          },
          "includeInsights": {
            "title": "Add keyword insights (difficulty, intent, long history)",
            "type": "boolean",
            "description": "Optional add-on per charged keyword row: keyword difficulty (0 to 100), search intent, SERP features, Google result count, categories and about 8 years of monthly history from the Labs database, by country. Charged as one Keyword insight event per row that gets it."
          },
          "includeAiVolume": {
            "title": "Add AI search volume",
            "type": "boolean",
            "description": "Optional add-on per charged keyword row: how often the keyword is asked in AI tools, with 12 months, by country. Charged as one AI search volume event per row that gets it."
          },
          "includeBing": {
            "title": "Add Bing search volume",
            "type": "boolean",
            "description": "Optional: Bing search volume, CPC, competition and 24 months for the charged keyword rows, where Bing has data (Australia, Canada, France, Germany, the United Kingdom and the United States). Each Bing request that delivers figures is one Lookup event."
          },
          "memoryName": {
            "title": "Memory name (30 day memory)",
            "type": "string",
            "description": "Optional name of a memory kept in your account. A keyword, location and month range charged in the last 30 days under this name is delivered again free from the memory, with no new lookup (add-ons come along when they were bought for the same language and country). Use the same name for retries and repeat runs; runs that share a name must not overlap. Up to 30,000 keywords per name and 32 MB of stored figures (about 9,000 keywords with insights); past that, new rows are not delivered and not charged, with a free row that says so."
          },
          "refreshMemory": {
            "title": "Look up again and refresh the memory",
            "type": "boolean",
            "description": "With a memory name: look every keyword up again (charged) and store the new figures, instead of serving the stored ones."
          },
          "spendingLimitUsd": {
            "title": "Spending limit (USD)",
            "minimum": 0.01,
            "type": "number",
            "description": "Optional: the run stops before its charges would pass this amount (the start fee included). The run option Max total charge works the same way; the lower of the two applies."
          },
          "maxRunMinutes": {
            "title": "Run time limit (minutes)",
            "minimum": 1,
            "maximum": 1440,
            "type": "integer",
            "description": "Optional: after this many minutes no new lookup starts; the run delivers what it has and ends with its summary."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}