apyhub
Back
▣ SEO

Research Keywords API

What it does

The Keyword Research API returns search metrics and new keyword ideas from SE Ranking's keyword database. Send a list of keywords or a seed term with a source database (for example de), and get JSON with volume, cpc, difficulty, competition, and intents for each keyword.

The export endpoint scores up to 5,000 keywords in one POST and can include monthly history with history_from and history_to. Four discovery endpoints expand a seed keyword into similar, related, question, and long-tail keywords. Filter ideas by volume, CPC, difficulty, competition, intent, SERP features, and word count, then sort and page through results with limit and offset.

Use this keyword research API as a keyword search volume API inside content tools, to build topic clusters from question keywords, to score a backlog of target terms by difficulty, or to feed PPC planning with CPC data. Agencies use the keyword API to pull research into client spreadsheets and dashboards.

Check who ranks for the winning terms with the SERP API, gauge the links needed to compete with the Backlinks API, and group keywords from existing articles with the Keyword Clustering API.

▣ ENDPOINT 01 / 05
POST
Export Keywords Metrics
https://api.eu.apyhub.com/se-ranking/keyword-research/v1/keywords/export

QUICKSTART

GUIDE

Quickstart

Export keyword research results for a source and a list of keywords.

curl -X POST "https://api.eu.apyhub.com/se-ranking/keyword-research/v1/keywords/export?source=de" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":["seo tools"]}'

What you'll get back

Returns a JSON array of objects. Each object can include keyword, cpc, volume, intents, difficulty, competition, history_trend, and is_data_found.

[
  {
    "keyword": "seo tools",
    "cpc": 2.34,
    "volume": 5400,
    "intents": ["I"],
    "difficulty": 42,
    "competition": 0.61,
    "history_trend": {
      "2026-01-01": 5200
    },
    "is_data_found": true
  }
]
TRY ITLIVE · 1000 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
body
keywords*
Day is ignored; defaults to current month.

About this endpoint

What it does

Exports bulk keyword metrics for the keywords you submit, using the selected source query parameter and request body options for sorting and optional history range filtering. The success response is a JSON array of keyword metric objects.

Query Parameter(s)

AttributeTypeDescription
sourceStringKeyword data source.

Request Body

ParameterTypeDescription
keywordsString ArrayList of keywords to export. Minimum 1 item, maximum 5000 items.
sortENUMSort field. Allowed values: volume, cpc, difficulty, competition. Default: cpc.
sort_orderENUMSort direction. Allowed values: asc, desc. Default: desc.
history_toStringDate in date format. Day is ignored; defaults to current month.
history_fromStringDate in date format. Day is ignored; only takes effect together with history_to.

Response

Returns a JSON array of objects. Each object may include keyword metrics such as keyword (string), volume (integer), cpc (number), difficulty (integer), competition (number), intents (string array of I, C, T, L, or N), history_trend (object keyed by YYYY-MM-DD with integer values), and is_data_found (boolean).

ParameterTypeDescription
cpcNumberCPC value as a floating-point number.
volumeIntegerSearch volume.
intentsString ArrayIntent codes. Allowed values: I, C, T, L, N.
keywordStringKeyword text.
difficultyIntegerKeyword difficulty.
competitionNumberCompetition value as a floating-point number.
history_trendObjectKeyed by YYYY-MM-DD (first of month). Values are integers.
is_data_foundBooleanIndicates whether data was found.

Notes

keywords accepts up to 5000 items, so large bulk exports should be split before submission if you need to stay within the schema limit.

▣ ENDPOINT 02 / 05
GET
Get longtail keywords
https://api.eu.apyhub.com/se-ranking/keyword-research/v1/keywords/longtail

QUICKSTART

GUIDE

Quickstart

Get long-tail keyword suggestions for a source and keyword, with optional pagination in the query string.

curl -X GET "https://api.eu.apyhub.com/se-ranking/keyword-research/v1/keywords/longtail?source=de&keyword=running%20shoes" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with a total integer and a keywords array of strings.

{
  "total": 3,
  "keywords": ["best running shoes for men", "running shoes for flat feet", "lightweight running shoes"]
}
TRY ITLIVE · 100 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Retrieves longtail keyword suggestions for a given source and keyword. The response returns the total number of results and a list of keyword strings.

Query Parameter(s)

AttributeTypeDescription
limitIntegerMaximum number of results to return. Default: 100.
offsetIntegerNumber of results to skip before returning items. Default: 0.
sourceStringSource to use for the keyword lookup.
keywordStringThe keyword to expand into longtail suggestions.

Response

Returns a JSON object with a total integer field and a keywords string array field. total is the number of matching results, and keywords contains the returned keyword strings.

ParameterTypeDescription
totalIntegerTotal number of matching results.
keywordsString ArrayList of keyword strings returned by the endpoint.
▣ ENDPOINT 03 / 05
GET
Get similar keywords
https://api.eu.apyhub.com/se-ranking/keyword-research/v1/keywords/similar

QUICKSTART

GUIDE

Quickstart

Fetch similar keywords for a given source and keyword, using the required query parameters.

curl -X GET "https://api.eu.apyhub.com/se-ranking/keyword-research/v1/keywords/similar?source=de&keyword=coffee"
-H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with a total integer and a keywords array. Each item in keywords is an object that can include keyword, volume, cpc, intents, difficulty, competition, history_trend, and serp_features.

{
  "total": 2,
  "keywords": [
    {
      "keyword": "coffee beans",
      "volume": 90500,
      "cpc": 1.24,
      "intents": ["I", "T"],
      "difficulty": 42,
      "competition": 0.37,
      "history_trend": null,
      "serp_features": ["Featured snippet"]
    }
  ]
}
TRY ITLIVE · 1000 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Returns a list of keywords similar to the keyword you provide, along with the total number of matches. The results can be sorted and filtered through query parameters, and the response includes keyword metrics such as volume, CPC, difficulty, and competition where available.

Query Parameter(s)

AttributeTypeDescription
sortENUMSort field. Allowed values: keyword, volume, cpc, difficulty, competition.
limitIntegerMaximum number of results to return. Default: 100.
offsetIntegerNumber of results to skip before returning items. Default: 0.
sourceStringThe keyword source to query.
keywordStringThe seed keyword used to find similar keywords.
sort_orderENUMSort direction. Allowed values: asc, desc. Default: desc.
history_trendBooleanWhether to include history trend data. Default: false.
filter[cpc][to]NumberMaximum CPC value.
filter[intents]StringFilter by intent(s). The schema does not define the exact format.
filter[cpc][from]NumberMinimum CPC value.
filter[volume][to]IntegerMaximum search volume.
filter[volume][from]IntegerMinimum search volume.
filter[serp_features]StringFilter by SERP features. The schema does not define the exact format.
filter[difficulty][to]IntegerMaximum difficulty score. Range: 0 to 100.
filter[competition][to]NumberMaximum competition score. Range: 0 to 1.
filter[difficulty][from]IntegerMinimum difficulty score. Range: 0 to 100.
filter[competition][from]NumberMinimum competition score. Range: 0 to 1.
filter[keyword_count][to]IntegerMaximum number of words in the keyword.
filter[keyword_count][from]IntegerMinimum number of words in the keyword.
filter[characters_count][to]IntegerMaximum character count.
filter[characters_count][from]IntegerMinimum character count.
filter[multi_keyword_excluded]StringExcluded multi-keyword values. The schema does not define the exact format.
filter[multi_keyword_included]StringIncluded multi-keyword values. The schema does not define the exact format.

Response

Returns a JSON object with a total integer field and a keywords array field. Each item in keywords is an object containing keyword data such as keyword, volume, cpc, difficulty, competition, intents, history_trend, and serp_features as defined by the schema.

ParameterTypeDescription
totalIntegerTotal number of matching keywords.
keywordsObject ArrayArray of keyword objects. Each item can include cpc (Number), volume (Integer), intents (String Array of I, C, T, L, N), keyword (String), relevance (Integer; only present on the "related keywords" endpoint), difficulty (Integer), competition (Number), history_trend (Object or null; additional properties are integers), and serp_features (String Array).
▣ ENDPOINT 04 / 05
GET
Get question keywords
https://api.eu.apyhub.com/se-ranking/keyword-research/v1/keywords/questions

QUICKSTART

GUIDE

Quickstart

Search for question-style keyword ideas for a source and keyword.

curl -X GET "https://api.eu.apyhub.com/se-ranking/keyword-research/v1/keywords/questions?source=de&keyword=seo+tools" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with a total integer and a keywords array. Each item in keywords is an object that may include keyword, volume, cpc, difficulty, competition, intents, history_trend, and serp_features.

{
  "total": 2,
  "keywords": [
    {
      "keyword": "seo tools for small business",
      "volume": 2400,
      "cpc": 1.85,
      "difficulty": 36,
      "competition": 0.42,
      "intents": ["I", "C"],
      "history_trend": null,
      "serp_features": ["Featured snippet", "People also ask"]
    }
  ]
}
TRY ITLIVE · 1000 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Returns question keyword suggestions for the provided keyword and source, with optional sorting, pagination, and query filters applied.

Query Parameter(s)

AttributeTypeDescription
sortENUMSort field. Allowed values: keyword, volume, cpc, difficulty, competition.
limitIntegerMaximum number of results to return. Default: 100.
offsetIntegerNumber of results to skip before returning items. Default: 0.
sourceStringData source to query.
keywordStringKeyword to expand into question keyword suggestions.
sort_orderENUMSort direction. Allowed values: asc, desc. Default: desc.
history_trendBooleanWhether to include the history_trend field in each keyword item. Default: false.
filter[cpc][to]NumberUpper bound for cpc.
filter[intents]StringFilter by intent values.
filter[cpc][from]NumberLower bound for cpc.
filter[volume][to]IntegerUpper bound for volume.
filter[volume][from]IntegerLower bound for volume.
filter[serp_features]StringFilter by SERP features.
filter[difficulty][to]IntegerUpper bound for difficulty.
filter[competition][to]NumberUpper bound for competition.
filter[difficulty][from]IntegerLower bound for difficulty.
filter[competition][from]NumberLower bound for competition.
filter[keyword_count][to]IntegerUpper bound for keyword count.
filter[keyword_count][from]IntegerLower bound for keyword count.
filter[characters_count][to]IntegerUpper bound for character count.
filter[characters_count][from]IntegerLower bound for character count.
filter[multi_keyword_excluded]StringExcluded multi-keyword term(s).
filter[multi_keyword_included]StringIncluded multi-keyword term(s).

Response

Returns a JSON object with a total integer field and a keywords array field. Each item in keywords is an object containing keyword metrics and related metadata as defined by the output schema.

ParameterTypeDescription
totalIntegerTotal number of matching keyword items.
keywordsObject ArrayArray of keyword result objects. Each item may include:
- cpc (Number): Cost per click.
- volume (Integer): Search volume.
- intents (String Array): Intent codes. Allowed values: I, C, T, L, N.
- keyword (String): The keyword text.
- relevance (Integer): Only present on the "related keywords" endpoint.
- difficulty (Integer): Difficulty score.
- competition (Number): Competition score.
- history_trend (Object): Nullable object with additional integer properties.
- serp_features (String Array): SERP feature names.
▣ COMMON ERRORS

Errors any endpoint can return

400bad_request

Required parameter missing or malformed body.

401unauthorized

API key missing, revoked, or not authorized for this service.

429rate_limited

Your plan's per-second rate exceeded. Retry with exponential backoff.

503upstream_busy

Backend temporarily unavailable. Try again in a few seconds.