{
  "openapi": "3.0.1",
  "info": {
    "title": "Competitor Keywords Finder",
    "description": "[from $1.50/1K keywords] Find every keyword a competitor domain or URL ranks for on Google: position, ranking URL, search volume, CPC, keyword difficulty, search intent, estimated traffic, position change. Find competitors too. No subscription, no run fee.",
    "version": "0.1",
    "x-build-id": "5iaTFlZhRnZfvp52I"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/blueskyscraper~competitor-keywords-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-blueskyscraper-competitor-keywords-finder",
        "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/blueskyscraper~competitor-keywords-finder/runs": {
      "post": {
        "operationId": "runs-sync-blueskyscraper-competitor-keywords-finder",
        "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/blueskyscraper~competitor-keywords-finder/run-sync": {
      "post": {
        "operationId": "run-sync-blueskyscraper-competitor-keywords-finder",
        "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": {
          "domains": {
            "title": "🌐 Competitor domains or URLs",
            "type": "array",
            "description": "Enter one competitor per line: a domain (<b>example.com</b>) for every keyword the site ranks for, or a page URL (<b>https://example.com/blog/post</b>) for the keywords of that one page. Several domains in one run are compared in one table.",
            "default": [
              "ahrefs.com"
            ],
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "📍 Country",
            "type": "string",
            "description": "Enter the Google country as a name or two-letter code: United States, US, GB, DE, IN, ID, AU… 94 countries are available; an unknown one gives a free error row with the full list.",
            "default": "United States"
          },
          "language": {
            "title": "🗣️ Language",
            "type": "string",
            "description": "Enter the search language as a name or code (English / en, German / de, Spanish / es…). If the language is not available for the country, the country's main language is used and the log says so.",
            "default": "English"
          },
          "maxKeywordsPerDomain": {
            "title": "💯 Max keywords per domain",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Set how many ranked keywords to return for each domain or URL (1–10,000). Keywords come sorted by the order below, so a low number gives the most valuable ones first.",
            "default": 20
          },
          "sortBy": {
            "title": "↕️ Sort keywords by",
            "enum": [
              "etv",
              "searchVolume",
              "position",
              "cpc",
              "keywordDifficulty"
            ],
            "type": "string",
            "description": "Choose which keywords come first. Sorting happens before the limit, so it decides which keywords you get.",
            "default": "etv"
          },
          "resultTypes": {
            "title": "🔎 Search result types",
            "type": "array",
            "description": "Pick which Google result types count as a ranking. Organic only is the classic SEO view; add Paid to see the keywords a competitor buys ads on.",
            "items": {
              "type": "string",
              "enum": [
                "organic",
                "paid",
                "featured_snippet",
                "local_pack",
                "ai_overview_reference"
              ],
              "enumTitles": [
                "Organic results",
                "Paid results (Google Ads)",
                "Featured snippets",
                "Local pack",
                "AI Overview references"
              ]
            },
            "default": [
              "organic"
            ]
          },
          "minSearchVolume": {
            "title": "Min search volume",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only keywords with at least this many monthly Google searches, e.g. <b>100</b>."
          },
          "maxPosition": {
            "title": "Max Google position",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Keep only keywords where the competitor ranks at this position or better, e.g. <b>10</b> for page one."
          },
          "maxKeywordDifficulty": {
            "title": "Max keyword difficulty",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keep only keywords with keyword difficulty (0–100) at or below this number, e.g. <b>30</b> for easier keywords."
          },
          "searchIntents": {
            "title": "Search intent",
            "type": "array",
            "description": "Keep only keywords with these search intents. Empty = all intents.",
            "items": {
              "type": "string",
              "enum": [
                "informational",
                "navigational",
                "commercial",
                "transactional"
              ],
              "enumTitles": [
                "Informational",
                "Navigational",
                "Commercial",
                "Transactional"
              ]
            }
          },
          "excludeBrandKeywords": {
            "title": "Exclude brand keywords",
            "type": "boolean",
            "description": "Switch on to drop keywords that contain the competitor's own name (for example <b>ahrefs</b> for ahrefs.com), so you see only the keywords you could win.",
            "default": false
          },
          "excludeWords": {
            "title": "Exclude keywords containing",
            "type": "array",
            "description": "Add words; keywords containing any of them are dropped before the limit and never billed.",
            "items": {
              "type": "string"
            }
          },
          "includeWords": {
            "title": "Only keywords containing",
            "type": "array",
            "description": "Add words to keep only keywords that contain at least one of them, e.g. <b>pricing</b>, <b>alternative</b>, <b>vs</b>.",
            "items": {
              "type": "string"
            }
          },
          "includeLostKeywords": {
            "title": "Include lost keywords",
            "type": "boolean",
            "description": "Switch on to add keywords the domain ranked for earlier but has since lost (marked <b>isLost = true</b>). Off = current rankings only.",
            "default": false
          },
          "findCompetitors": {
            "title": "Find competitors of each domain ($)",
            "type": "boolean",
            "description": "Switch on to add one row per organic competitor of every domain you entered: shared keywords, average position, competitor traffic. Billed per competitor found.",
            "default": false
          },
          "maxCompetitors": {
            "title": "Max competitors per domain",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Set how many competitors to return per domain when competitor discovery is on (sorted by shared keywords; Google, YouTube, Wikipedia and other giant sites are left out).",
            "default": 10
          },
          "analyzeCompetitorKeywords": {
            "title": "Also pull keywords of found competitors ($)",
            "type": "boolean",
            "description": "Switch on together with competitor discovery to get the ranked keywords of every competitor found, with the same limit and filters as your own domains. Each competitor's keywords are billed like any other keyword row.",
            "default": false
          },
          "includeDomainSummary": {
            "title": "Add a summary row per domain ($)",
            "type": "boolean",
            "description": "Switch on to add one row per domain with its organic keyword count, estimated organic traffic, traffic value, position distribution (top 3, top 10, 11–20, 21–100) and new / lost keywords. Counts follow your filters and result types. Adds a second row type to the dataset.",
            "default": false
          },
          "maxResults": {
            "title": "Max keyword rows per run",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Set a hard ceiling on keyword rows for the whole run, across all domains and competitors. The run stops when it is reached.",
            "default": 10000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}