{
  "openapi": "3.0.1",
  "info": {
    "title": "Competitor Keywords, Keyword Gap & Competitor Finder",
    "description": "Every Google keyword any website ranks for, the keywords competitors rank for and you don't, and who your organic competitors are. Position, URL, traffic, volume, CPC, difficulty, intent. Semrush and Ahrefs alternative: $2 per 1,000 keywords, $0.60 after 500.",
    "version": "0.1",
    "x-build-id": "RTCGLay9CEheEVs8L"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/pravus~competitor-keywords/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-pravus-competitor-keywords",
        "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/pravus~competitor-keywords/runs": {
      "post": {
        "operationId": "runs-sync-pravus-competitor-keywords",
        "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/pravus~competitor-keywords/run-sync": {
      "post": {
        "operationId": "run-sync-pravus-competitor-keywords",
        "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": [
          "targets"
        ],
        "properties": {
          "mode": {
            "title": "What to find",
            "enum": [
              "keywords",
              "gap",
              "competitors"
            ],
            "type": "string",
            "description": "\"keywords\": every keyword the targets rank for. \"gap\": keywords the targets (your competitors) rank for and your site doesn't. \"competitors\": the domains competing with each target for the same keywords.",
            "default": "keywords"
          },
          "targets": {
            "title": "Domains or page URLs",
            "type": "array",
            "description": "Up to 100 per run. A domain (\"example.com\", or a subdomain like \"blog.example.com\") covers the whole site; a full URL (\"https://example.com/pricing\") covers that page only (keywords mode). In keyword gap mode, list your competitors here.",
            "items": {
              "type": "string"
            }
          },
          "yourDomain": {
            "title": "Your domain (keyword gap)",
            "type": "string",
            "description": "Keyword gap mode: your own site, like \"example.com\". You get the keywords the targets rank for and this site doesn't."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Country whose Google results to check. Use a country name (\"United States\", \"Germany\"), a two-letter code (\"us\", \"uk\", \"de\") or a DataForSEO location code (2840).",
            "default": "United States"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Optional. Leave empty to use the country's main language (English for the US and UK, French for France...). For countries with several languages (Belgium, Switzerland...) keywords mode then covers all of them; keyword gap and competitors need one set here. Use a two-letter code (\"en\", \"es\") or a language name."
          },
          "maxKeywordsPerTarget": {
            "title": "Maximum keywords per domain",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Keywords and keyword gap modes: how many keywords to return for each domain, best first (up to 10,000).",
            "default": 100
          },
          "maxCompetitors": {
            "title": "Maximum competitors per domain",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Competitors mode: how many competing domains to return for each target, most shared keywords first (up to 1,000).",
            "default": 20
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "traffic",
              "searchVolume",
              "position"
            ],
            "type": "string",
            "description": "Keywords and gap modes. \"traffic\": keywords that bring the site the most estimated visits first (recommended). \"searchVolume\": biggest keywords first. \"position\": best rankings first. Competitors are always sorted by shared keywords.",
            "default": "traffic"
          },
          "gapType": {
            "title": "Gap type (keyword gap)",
            "enum": [
              "missing",
              "shared"
            ],
            "type": "string",
            "description": "\"missing\": keywords the competitor ranks for and you don't (content ideas). \"shared\": keywords you both rank for, with both positions (where they beat you).",
            "default": "missing"
          },
          "resultType": {
            "title": "Ranking type",
            "enum": [
              "organic",
              "paid",
              "featured_snippet",
              "ai_overview_reference",
              "local_pack",
              "all"
            ],
            "type": "string",
            "description": "Which Google results to include: organic results, paid ads, featured snippets, citations in Google's AI Overviews (keywords mode only), local pack (map) results, or all of them.",
            "default": "organic"
          },
          "maxPosition": {
            "title": "Worst position to include",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Only count rankings at this position or better (e.g. 10 = first page of Google, 3 = top 3). In competitors mode, only rankings this high count towards shared keywords.",
            "default": 100
          },
          "minSearchVolume": {
            "title": "Minimum monthly searches",
            "minimum": 0,
            "type": "integer",
            "description": "Keywords and gap modes: skip keywords with fewer monthly searches than this.",
            "default": 0
          },
          "keywordContains": {
            "title": "Keyword contains",
            "type": "string",
            "description": "Optional, keywords and gap modes. Only keywords containing this text (case-insensitive), e.g. \"pricing\" or \"how to\"."
          },
          "brandKeywords": {
            "title": "Brand keywords",
            "enum": [
              "auto",
              "exclude",
              "include"
            ],
            "type": "string",
            "description": "Keywords that contain the domain's brand name, e.g. \"adidas samba\" for adidas.com (and your own brand in gap mode). \"auto\" excludes them in keyword gap mode, where they can't be targeted, and keeps them otherwise.",
            "default": "auto"
          },
          "excludeTopDomains": {
            "title": "Exclude giant sites (competitors)",
            "type": "boolean",
            "description": "Competitors mode: leave out sites that compete with everyone (Wikipedia, Amazon, YouTube and similar), so you see real niche competitors.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}