# semrush.seo.domain.keywords

Keywords a domain ranks for in Google organic, by country

> This report lists keywords that bring users to a domain via Google’s top 100 organic search results.

Page: https://telipot.com/catalog/tasks/semrush.seo.domain.keywords · Markdown: https://telipot.com/catalog/tasks/semrush.seo.domain.keywords/md · JSON: https://telipot.com/catalog/tasks/semrush.seo.domain.keywords/json

| Field | Value |
| --- | --- |
| provider | [Semrush](https://telipot.com/catalog/providers/semrush) `semrush` |
| capability | [`seo.domain.keywords`](https://telipot.com/catalog/capabilities/seo.domain.keywords) |
| kind | data |
| tier | core |
| price | Semrush API units (10 API units / result · docs) |
| price note | 10 API units per line returned. Semrush does not charge a request that returns no data. Semrush publishes no USD price per API unit. |
| identity | Your plan |
| auth | `api_key · in query as key` |
| scope | any_account |
| principal | organization |
| required_scopes | none |
| retention | standard |
| route | `GET https://api.semrush.com/` |
| verification | Not verified yet. Not checked yet. We test with a real request before we mark it. |
| status | live |
| docs | https://developer.semrush.com/api/v3/seo/domain-reports/#domain-organic-search-keywords |

## Preview the price · nothing runs

```bash
telipot run semrush.seo.domain.keywords \
  --input-json '{"type":"domain_organic","domain":"stripe.com","database":"us","display_limit":1,"export_columns":"Ph,Po,Nq,Ur"}' \
  --quote
```

## Run it

```bash
telipot run semrush.seo.domain.keywords \
  --input-json '{"type":"domain_organic","domain":"stripe.com","database":"us","display_limit":1,"export_columns":"Ph,Po,Nq,Ur"}'
```

```bash
curl https://api.telipot.com/v1/tasks/semrush.seo.domain.keywords/run \
  -H "Authorization: Bearer $TELIPOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type":"domain_organic","domain":"stripe.com","database":"us","display_limit":1,"export_columns":"Ph,Po,Nq,Ur"}'
```

## Input

| Field | In | Type | Required | Constraints | Note |
| --- | --- | --- | --- | --- | --- |
| `type` | queryParams | string | yes | const "domain_organic" | Fixed. Selects the Domain Organic Search Keywords report. |
| `domain` | queryParams | string | yes |  | Unique name of the website to investigate. |
| `database` | queryParams | string | yes |  | Two-letter regional database code, such as us, uk, ca, de or fr. Domain reports also take the mobile- and -ext codes listed under Databases in the SEO API overview. |
| `display_limit` | queryParams | integer | yes | 1 to 100000 | Lines returned, which is what Semrush bills. Semrush returns up to 10,000 lines when the parameter is omitted or 0, so this task requires it. Semrush returns at most 100,000 lines per call. |
| `display_offset` | queryParams | integer | no | at least 0 | Lines to skip before the report starts. Semrush counts display_limit from the first line, so set display_limit to display_offset plus the lines wanted. |
| `display_sort` | queryParams | string | no | one of "po_asc", "po_desc", "tg_asc", "tg_desc", "tr_asc", "tr_desc", "tc_asc", "tc_desc", "nq_asc", "nq_desc", "co_asc", "co_desc", "kd_asc", "kd_desc", "cp_asc", "cp_desc", "nr_asc", "nr_desc", "ts_asc", "ts_desc" | Sort rule, one per call, such as tr_desc for the biggest traffic share first. |
| `display_positions` | queryParams | string | no | one of "new", "lost", "rise", "fall" | Keeps only keywords that are new in the top 100, lost from it, moved up (rise) or moved down but still in it (fall). |
| `display_filter` | queryParams | string | no |  | Filters written as sign\|column\|operation\|value, joined with \|. Sign + includes and - excludes. Columns: Ph, Po, Nq, Cp, Ur, Tg, Tr, Tc, Nr, Co, Pp, Pd, Fp, Fk, In, Br. Operations: Eq, Gt, Lt for numbers; Bw, Ew, Eq, Co, Wm for text. At most 25 filters. Write it in plain text; the + must reach Semrush as %2B. |
| `export_columns` | queryParams | string | no | default "Ph,Po,Pp,Pd,Nq,Cp,Ur,Tr,Tc,Co,Nr,Td" | Comma-separated column codes, in the order wanted. Ph Keyword, Po Position, Pp Previous Position, Pd Position Difference, Nq Search Volume, Cp CPC in USD, Ur Url, Tr Traffic (%), Tg Traffic, Tc Traffic Cost (%), Co Competition (0 to 1), Nr Number of Results, Td Trends, Kd Keyword Difficulty Index, Fp and Fk SERP Features, Ts Timestamp, In Intents (0 Commercial, 1 Informational, 2 Navigational, 3 Transactional), Pt Position type. |

## Input schema

```json
{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "description": "Fixed. Selects the Domain Organic Search Keywords report.",
      "const": "domain_organic"
    },
    "domain": {
      "type": "string",
      "description": "Unique name of the website to investigate.",
      "examples": [
        "stripe.com"
      ]
    },
    "database": {
      "type": "string",
      "description": "Two-letter regional database code, such as us, uk, ca, de or fr. Domain reports also take the mobile- and -ext codes listed under Databases in the SEO API overview.",
      "examples": [
        "us"
      ]
    },
    "display_limit": {
      "type": "integer",
      "description": "Lines returned, which is what Semrush bills. Semrush returns up to 10,000 lines when the parameter is omitted or 0, so this task requires it. Semrush returns at most 100,000 lines per call.",
      "examples": [
        10
      ],
      "minimum": 1,
      "maximum": 100000
    },
    "display_offset": {
      "type": "integer",
      "description": "Lines to skip before the report starts. Semrush counts display_limit from the first line, so set display_limit to display_offset plus the lines wanted.",
      "minimum": 0
    },
    "display_sort": {
      "type": "string",
      "description": "Sort rule, one per call, such as tr_desc for the biggest traffic share first.",
      "enum": [
        "po_asc",
        "po_desc",
        "tg_asc",
        "tg_desc",
        "tr_asc",
        "tr_desc",
        "tc_asc",
        "tc_desc",
        "nq_asc",
        "nq_desc",
        "co_asc",
        "co_desc",
        "kd_asc",
        "kd_desc",
        "cp_asc",
        "cp_desc",
        "nr_asc",
        "nr_desc",
        "ts_asc",
        "ts_desc"
      ]
    },
    "display_positions": {
      "type": "string",
      "description": "Keeps only keywords that are new in the top 100, lost from it, moved up (rise) or moved down but still in it (fall).",
      "enum": [
        "new",
        "lost",
        "rise",
        "fall"
      ]
    },
    "display_filter": {
      "type": "string",
      "description": "Filters written as sign|column|operation|value, joined with |. Sign + includes and - excludes. Columns: Ph, Po, Nq, Cp, Ur, Tg, Tr, Tc, Nr, Co, Pp, Pd, Fp, Fk, In, Br. Operations: Eq, Gt, Lt for numbers; Bw, Ew, Eq, Co, Wm for text. At most 25 filters. Write it in plain text; the + must reach Semrush as %2B.",
      "examples": [
        "+|Ph|Co|seo"
      ]
    },
    "export_columns": {
      "type": "string",
      "description": "Comma-separated column codes, in the order wanted. Ph Keyword, Po Position, Pp Previous Position, Pd Position Difference, Nq Search Volume, Cp CPC in USD, Ur Url, Tr Traffic (%), Tg Traffic, Tc Traffic Cost (%), Co Competition (0 to 1), Nr Number of Results, Td Trends, Kd Keyword Difficulty Index, Fp and Fk SERP Features, Ts Timestamp, In Intents (0 Commercial, 1 Informational, 2 Navigational, 3 Transactional), Pt Position type.",
      "default": "Ph,Po,Pp,Pd,Nq,Cp,Ur,Tr,Tc,Co,Nr,Td"
    }
  },
  "required": [
    "type",
    "domain",
    "database",
    "display_limit"
  ],
  "additionalProperties": false
}
```

## Output schema

```json
{
  "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."
}
```
