Skip to content

Keyword difficulty index of up to 100 keywords by country.

This report provides keyword difficulty, an index that helps to estimate how difficult it would be to seize competitors’ positions in organic search within Google’s top 10 with a queried search term.

Job seo.keywords.difficulty

Your AI asks

checks the price first
telipot run semrush.seo.keywords.difficulty \
  --input-json '{"type":"phrase_kdi","phrase":"seo","database":"us","export_columns":"Ph,Kd"}' \
  --quote

Price

Semrush API units
Priced· before it runs

semrush.seo.keywords.difficulty

Semrush API unitsYour plan

Whose account it uses

1The person asking
not needed
2Your company’s Semrush plan
Selected identity for this example
3Our account
not used

What it sends

{
  "type": "phrase_kdi",
  "phrase": "seo",
  "database": "us",
  "export_columns": "Ph,Kd"
}

Your Semrush login is added for you. Your AI never sees it.

What it costs

50 API units

per result · no USD rate

rate50 API units per result, billed per result
sourcedocs · developer.semrush.com/api/v3/seo/keyword-reports/#keyword-difficulty · checked 2026-10-05
confidencedocumented
note50 API units per line returned, one line per keyword. Semrush does not charge a request that returns no data. Semrush publishes no USD price per API unit.

Preview the price first. --quote runs nothing.

For developers · run it

Shell · runs the task on the named account

telipot run semrush.seo.keywords.difficulty \
  --input-json '{"type":"phrase_kdi","phrase":"seo","database":"us","export_columns":"Ph,Kd"}'

type

string · required · const "phrase_kdi"

Fixed. Selects the Keyword Difficulty report.

phrase

string · required

From 1 to 100 keywords separated by semicolons.

database

string · required

Two-letter regional database code, such as us, uk, ca, de or fr. Keyword reports accept the plain two-letter codes only, not the mobile- and -ext variants. The full list is under Databases in the SEO API overview.

export_columns

string · default "Ph,Kd"

Comma-separated column codes, in the order wanted. Ph Keyword, Kd Keyword Difficulty Index (0 to 100, higher is harder).

output

string

CSV text: a header line of column names, then one line per keyword, columns separated by semicolons, in the order of export_columns. A body that starts with ERROR is a failure, for example ERROR 50 :: NOTHING FOUND.
Full output schema · JSONNested fields and constraints

Output JSON Schema

{
  "type": "string",
  "pattern": "^(?!\\s*ERROR)",
  "description": "CSV text: a header line of column names, then one line per keyword, columns separated by semicolons, in the order of export_columns. A body that starts with ERROR is a failure, for example ERROR 50 :: NOTHING FOUND."
}

A real answer

No example captured yet: one is recorded when telipot catalog verify passes.