SEOpost/keyword-ideas

Keyword ideas from seed keywords

Keywords
Cost / request

$0.01

Response format

JSON

Protocol

REST

Description

Expands up to 200 seed keywords into related keyword ideas, each with search volume, CPC, competition and keyword difficulty (difficulty is at keyword_properties.keyword_difficulty in each row; volume and CPC at keyword_info). Ideas come from category-level expansion, so sorting by search volume surfaces unrelated head terms; the default order is relevance, keep it for topical work and filter instead. Cost scales with rows returned, so keep `limit` at the default 100 unless the task genuinely needs more (hard cap 1000).

Parameters

bodyRequest Bodyrequired

Content type: application/json

{
  "type": "object",
  "required": [
    "keywords"
  ],
  "properties": {
    "keywords": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 200,
      "description": "Seed keywords to expand (1-200)."
    },
    "location_code": {
      "type": "integer",
      "description": "Geo target as a location code. Default 2840 (United States).",
      "default": 2840
    },
    "language_code": {
      "type": "string",
      "description": "Two-letter language code. Default 'en'.",
      "default": "en"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000,
      "default": 100,
      "description": "Max keyword ideas to return. Default 100. Cost scales with rows, so raise only when needed."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Pagination offset."
    },
    "filters": {
      "type": "array",
      "items": {},
      "description": "Optional filter expression as [field, operator, value] triples joined by 'and'/'or'. Operators: =, <>, <, <=, >, >=, in, not_in, like, not_like (use %% wildcards with like). Recipes: [[\"keyword_info.search_volume\",\">\",100]] · keep only on-topic ideas: [[\"keyword\",\"like\",\"%deliverability%\"]] · combine: [[\"keyword_info.search_volume\",\">\",100],\"and\",[\"keyword_properties.keyword_difficulty\",\"<\",40]]."
    },
    "order_by": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Sort rules, e.g. [\"keyword_info.search_volume,desc\"]."
    }
  }
}

Responses

Keyword ideas with volume, CPC, competition and difficulty in `result[0].items`.

{
  "type": "object"
}

Agent / Developer Schema

Machine-readable formats for integrating this endpoint into AI agents and toolchains.

{
  "operationId": "keyword_ideas",
  "method": "post",
  "path": "/keyword-ideas",
  "summary": "Keyword ideas from seed keywords",
  "description": "Expands up to 200 seed keywords into related keyword ideas, each with search volume, CPC, competition and keyword difficulty (difficulty is at keyword_properties.keyword_difficulty in each row; volume and CPC at keyword_info). Ideas come from category-level expansion, so sorting by search volume surfaces unrelated head terms; the default order is relevance, keep it for topical work and filter instead. Cost scales with rows returned, so keep `limit` at the default 100 unless the task genuinely needs more (hard cap 1000).",
  "parameters": [],
  "requestBody": {
    "required": true,
    "content": {
      "application/json": {
        "schema": {
          "type": "object",
          "required": [
            "keywords"
          ],
          "properties": {
            "keywords": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "maxItems": 200,
              "description": "Seed keywords to expand (1-200)."
            },
            "location_code": {
              "type": "integer",
              "description": "Geo target as a location code. Default 2840 (United States).",
              "default": 2840
            },
            "language_code": {
              "type": "string",
              "description": "Two-letter language code. Default 'en'.",
              "default": "en"
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000,
              "default": 100,
              "description": "Max keyword ideas to return. Default 100. Cost scales with rows, so raise only when needed."
            },
            "offset": {
              "type": "integer",
              "minimum": 0,
              "description": "Pagination offset."
            },
            "filters": {
              "type": "array",
              "items": {},
              "description": "Optional filter expression as [field, operator, value] triples joined by 'and'/'or'. Operators: =, <>, <, <=, >, >=, in, not_in, like, not_like (use %% wildcards with like). Recipes: [[\"keyword_info.search_volume\",\">\",100]] · keep only on-topic ideas: [[\"keyword\",\"like\",\"%deliverability%\"]] · combine: [[\"keyword_info.search_volume\",\">\",100],\"and\",[\"keyword_properties.keyword_difficulty\",\"<\",40]]."
            },
            "order_by": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Sort rules, e.g. [\"keyword_info.search_volume,desc\"]."
            }
          }
        },
        "example": {
          "keywords": [
            "email warmup",
            "cold email deliverability"
          ],
          "limit": 100
        }
      }
    }
  },
  "responses": [
    {
      "statusCode": "200",
      "description": "Keyword ideas with volume, CPC, competition and difficulty in `result[0].items`.",
      "content": {
        "application/json": {
          "schema": {
            "type": "object"
          }
        }
      }
    },
    {
      "statusCode": "400",
      "description": "Bad request or upstream task error."
    },
    {
      "statusCode": "401",
      "description": "Unauthorized."
    },
    {
      "statusCode": "429",
      "description": "Too many requests."
    },
    {
      "statusCode": "5XX",
      "description": "Upstream error."
    }
  ]
}

Pricing

$0.01per successful request

Credits are deducted from your agntdata balance on each successful API call. Failed requests (4xx/5xx) are not charged.

Start using this endpoint

Generate your API key and make your first call in under a minute. Free tier available with transparent pricing.