{
  "openapi": "3.0.1",
  "info": {
    "title": "Keyword Search Volume Scraper — Google Keyword Planner, CPC",
    "description": "Google Ads monthly search volume, CPC and competition for your keyword list — real Keyword Planner figures, nothing modelled; a keyword with no data is never charged. From $2.00 per 1,000 keyword results; one $0.19 fresh-lookup fee per run that buys new data (cached runs pay none).",
    "version": "1.0",
    "x-build-id": "Bm7X5IRSPNKKiVEdZ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/steadyfetch~keyword-search-volume-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-steadyfetch-keyword-search-volume-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/steadyfetch~keyword-search-volume-scraper/runs": {
      "post": {
        "operationId": "runs-sync-steadyfetch-keyword-search-volume-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/steadyfetch~keyword-search-volume-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-steadyfetch-keyword-search-volume-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": "The keywords to look up, e.g. [\"project management software\", \"crm for startups\"] — any length; a keyword with no Google data is never charged, so send the whole list. Leave it empty in the console and the run is a two-keyword sample, charged like any run. Settings you do change scope that sample: it runs in your market, on your network, under your limits, and one uncharged row names them.",
            "default": [
              "_demo"
            ],
            "items": {
              "type": "string"
            }
          },
          "keywordsText": {
            "title": "Keyword list (paste)",
            "type": "string",
            "description": "Paste a whole list here instead — one keyword per line, or comma-separated. Merged with the list above; duplicates are charged once."
          },
          "mode": {
            "title": "What to return",
            "type": "string",
            "description": "Metrics only: volume and CPC for the keywords you supplied. Ideas: expand each keyword into new keyword suggestions with the same metrics. Both: do both.",
            "default": "metrics-only"
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Pick a country, or type a code or name — US, USA, GB, United Kingdom, a locale tag like en-GB, the first country in a list like \"Dubai, United Arab Emirates\", and the Google Ads country location code (2840) all work. One country per run: search volume is published per market, so there is no worldwide, EU or region-wide figure. A value we cannot place runs on the default market, United States, and an uncharged first row names both the value you sent and the market used — a market the source has no data for, a whole-region ask and a pasted block are refused instead, uncharged, each row naming the values that work.",
            "default": "US"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Pick a language, or type a code or name — en, eng, en-US, English all work.",
            "default": "en"
          },
          "network": {
            "title": "Network",
            "type": "string",
            "description": "Google search only, or Google plus its search partners (partner volumes are higher).",
            "default": "google"
          },
          "maxIdeasPerSeed": {
            "title": "Max keyword ideas per keyword",
            "minimum": 1,
            "type": "integer",
            "description": "Only used in the ideas modes. Your keywords are expanded together in one lookup, so this is the run's idea ceiling divided by the keywords expanded: three keywords at 200 is up to 600 ideas for the run. The ceiling is filled from the top of one list sorted by search volume, so a keyword with few suggestions does not strand its share. Up to 2,000; ask for more and the run continues at 2,000, with one uncharged row saying so.",
            "default": 200
          },
          "maxIdeaSeeds": {
            "title": "Max keywords to expand",
            "minimum": 1,
            "type": "integer",
            "description": "Only used in the ideas modes. Caps how many of your keywords are expanded in one run; the rest are reported back uncharged. They are expanded together in a single lookup, so expanding twenty costs the same as expanding one, and twenty is the most one lookup takes. Ask for more and the run continues at 20, with one uncharged row saying so.",
            "default": 5
          },
          "maxItems": {
            "title": "Max keyword rows for the whole run",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on charged rows across the whole run — up to 100,000. Ask for more and the run continues at 100,000, with one uncharged row saying so.",
            "default": 1000
          },
          "maxRunSeconds": {
            "title": "Max run seconds",
            "type": "integer",
            "description": "The run stops cleanly before this many seconds and reports what is left, instead of being killed by a timeout. Anything from 30 seconds to an hour; ask outside that and the run continues at the nearest end of it, with one uncharged row saying so.",
            "default": 900
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}