Документация API

Ниже представлены доступные эндпоинты для получения данных из поисковых систем и Вордстата. Машиночитаемая спека: openapi.json (OpenAPI 3.1).

Содержание


Аутентификация

Все методы API используют один и тот же ключ из личного кабинета. Передать его можно двумя способами: заголовком запроса или параметром key в адресе.

Заголовком запроса:

Authorization: Bearer ВАШ_КЛЮЧ

Параметром key:

https://jsonseo.ru/api/yandex?text=пицца&key=ВАШ_КЛЮЧ

Быстрая проверка через curl:

curl -H "Authorization: Bearer ВАШ_КЛЮЧ" "https://jsonseo.ru/api/yandex?text=пицца"

Параметры-флаги, описанные ниже как 0 или 1, принимают также true и false в любом регистре.


Коды ответов

Код Описание
200 Успешный запрос, в теле результат.
402 На балансе недостаточно средств. Пополните счёт.
403 API-ключ не передан или недействителен.
422 Ошибка валидации: не хватает обязательного параметра или значение вне допустимых. Детали в поле errors.
429 Превышен лимит бесплатных методов: 30 запросов в минуту на ключ.
503 Поиск временно недоступен. Деньги за такой запрос не списываются, повторите попытку позже.

AI-ответ (ai=1)

Над выдачей поисковики показывают блок нейросети: текст, собранный по найденным страницам, со ссылками на источники. У Яндекса это «Быстрый ответ Алисы AI», у Google - AI Overview, у Bing - ответ Copilot.

Параметр общий для /yandex, /google и /bing: по умолчанию блок не собирается, включается через ai=1.

curl "https://jsonseo.ru/api/yandex?text=чем+ipv6+отличается+от+ipv4&ai=1&key=ВАШ_КЛЮЧ"
curl "https://jsonseo.ru/api/google?q=чем+ipv6+отличается+от+ipv4&ai=1&key=ВАШ_КЛЮЧ"
curl "https://jsonseo.ru/api/bing?q=чем+ipv6+отличается+от+ipv4&ai=1&key=ВАШ_КЛЮЧ"

Рядом с results появляется aiAnswer - одинаковый у всех трёх:


{
    "pages": 1,
    "results": [ ... ],
    "aiAnswer": {
        "markdown": "IPv6 отличается от IPv4 длиной адреса: 128 бит против 32. [`1`](https://example.ru/ipv6)",
        "sources": [
            {
                "id": 1,
                "url": "https://example.ru/ipv6",
                "domain": "example.ru",
                "title": "Чем IPv6 отличается от IPv4",
                "description": "Разбираем адресацию, заголовок пакета и NAT",
                "citations": 1
            }
        ],
        "followUps": ["Почему IPv6 внедряется так медленно?"]
    }
}

Ответ приходит целиком либо не приходит вовсе.

Цена и время

Цена: +0.01 ₽ к запросу, и только если ответ пришёл. Если у поисковика ответа по запросу нет, поля aiAnswer не будет и запрос обойдётся в обычную цену.

Время: с ai=1 запрос идёт дольше - закладывайте это в таймауты. От pages задержка не зависит.

Доступен только с первой страницы. ai=1 вместе со смещением (page, p, start, first) - ошибка 422.

Отдаётся только в JSON. На /yandex/xml и /google/xml параметр ai отклоняется - в схеме Яндекс XML такого блока нет.


/balance

Текущий баланс аккаунта. Удобно для мониторинга остатка средств из ваших скриптов и интеграций.

Метод:

GET https://jsonseo.ru/api/balance

Стоимость запроса:

Бесплатно

Ключ обязателен: по нему находится аккаунт и считается лимит в 30 запросов в минуту.

Пример запроса:

curl "https://jsonseo.ru/api/balance?key=ВАШ_КЛЮЧ"

Пример ответа:


{
    "balance": 123.45,
    "currency": "RUB"
}

/yandex

Получение поисковой выдачи из Яндекс.

Метод:

GET https://jsonseo.ru/api/yandex

Параметры запроса:

Стоимость запроса:

0.01₽ × количество страниц

Указывается максимальное количество страниц, которое нужно получить. Если поиск вернёт меньше страниц, чем вы запросили, списание произойдёт только за фактически полученные страницы. При ai=1 прибавляется ещё 0.01 ₽ - и только если ответ Алисы пришёл.

Пример запроса:

curl
curl "https://jsonseo.ru/api/yandex?text=купить+ноутбук&region=213&key=ВАШ_КЛЮЧ"
PHP
<?php

$params = http_build_query([
    'key' => 'ВАШ_КЛЮЧ',
    'text' => 'купить ноутбук',
    'region' => 213,
]);

$response = file_get_contents('https://jsonseo.ru/api/yandex?' . $params);
$data = json_decode($response, true);

foreach ($data['results'] as $index => $item) {
    echo ($index + 1) . '. ' . $item['url'] . PHP_EOL;
}
Python
import requests

response = requests.get(
    'https://jsonseo.ru/api/yandex',
    params={'text': 'купить ноутбук', 'region': 213},
    headers={'Authorization': 'Bearer ВАШ_КЛЮЧ'},
)
response.raise_for_status()

for index, item in enumerate(response.json()['results'], start=1):
    print(index, item['url'])
JavaScript
const params = new URLSearchParams({text: 'купить ноутбук', region: 213});

const response = await fetch(`https://jsonseo.ru/api/yandex?${params}`, {
    headers: {Authorization: 'Bearer ВАШ_КЛЮЧ'},
});

const data = await response.json();
data.results.forEach((item, index) => console.log(index + 1, item.url));

Пример ответа:


{
    "pages": 1,
    "exhausted": false,
    "breakDomainHit": false,
    "found": 116000000,
    "found_human": "нашлось 116 млн результатов",
    "lr": 213,
    "query": "купить ноутбук",
    "rawQuery": "купть ноутбук",
    "results": [
        {
            "url": "https://www.VZON.ru/category/noutbuki-15692/",
            "domain": "www.vzon.ru",
            "title": "Ноутбуки: купить ноутбук на VZON по низкой цене",
            "passage": "Покупайте ноутбуки на VZON по выгодным ценам, быстрая и бесплатная доставка...",
            "breadcrumbs": "vzon.ru›Электроника›Ноутбуки, планшеты и электронные книги"
        }
    ]
}

Поля ответа:


/yandex/xml

Получение поисковой выдачи Яндекса в формате XML.

Этот эндпоинт предназначен для интеграции в приложения и может использоваться вместо сервисов XMLRiver, XMLStock, XMLProxy, XMLSeo. Готовый URL для запросов доступен в личном кабинете.

Метод:

GET https://jsonseo.ru/api/yandex/xml

Параметры запроса:

Оплачивается только запрошенная страница: при page=1 и groupby=100 списывается за 10 страниц выдачи, а не за 20. Максимальная глубина - 20 страниц (200 результатов): потолок общий на page и groupby, поэтому при groupby=100 доступны две страницы: 0 и 1.
Все позиции сразу получают через groupby при page=0 - см. смещение выдачи.

Стоимость запроса:

0.01₽ × количество страниц

Количество страниц = количество позиций ÷ 10, независимо от page. Например: 100 позиций - 10 страниц - 0.1 ₽; при page=1 те же 100 позиций стоят те же 0.1 ₽, оплачивается только запрошенная страница.

Пример ответа:

<?xml version="1.0" encoding="utf-8"?>
<yandexsearch version="1.0">
    <response date="20260504T120000" dateiso="2026-05-04T12:00:00Z">
        <reqid>1746345600123456-1234567890123456789</reqid>
        <found priority="phrase">128929</found>
        <found priority="strict">128929</found>
        <found priority="all">128929</found>
        <found-human>нашлось 128 тыс. результатов</found-human>
        <misspell>
            <rule>Misspell</rule>
            <source-text>кпить ноутбук</source-text>
            <text>купить ноутбук</text>
        </misspell>
        <results>
            <grouping attr="" mode="flat" groups-on-page="10" docs-in-group="1">
                <page first="1" last="10">0</page>
                <group>
                    <doccount>1</doccount>
                    <doc id="ZC2633C719742EBE4">
                        <url>https://www.example.com/category/noutbuki/</url>
                        <domain>www.example.com</domain>
                        <title>Ноутбуки: купить ноутбук по низкой цене</title>
                        <breadcrumbs/>
                        <mime-type>application/pdf</mime-type>
                        <passages>
                            <passage>Покупайте ноутбуки по выгодным ценам, быстрая и бесплатная доставка...</passage>
                        </passages>
                        <contenttype>organic</contenttype>
                    </doc>
                </group>
            </grouping>
        </results>
    </response>
</yandexsearch>
Тег <mime-type> появляется только у документов (pdf, doc, xls и т.д.); у обычных страниц его нет. Блок <misspell> - только когда Яндекс сам исправил запрос и искал по исправленному: <source-text> - что прислали вы, <text> - по чему искали. При hlword=1 исправленные слова в <source-text> выделяются.

Коды ошибок:

Ошибка возвращается XML-ом с кодом ответа 200 - так же, как это делают Яндекс XML и агрегаторы: <error code="N">текст</error>. Номера совпадают с Яндекс XML.


/yandex/suggest

Поисковые подсказки Яндекса (саджест): фразы, которые Яндекс предлагает при вводе запроса. Подсказки собираются без персонализации и истории - только «чистый» список запросов, с учётом региона. Источник идей для расширения семантики и анализа спроса.

Метод:

GET https://jsonseo.ru/api/yandex/suggest

Параметры запроса:

Стоимость запроса:

0.01₽ за запрос

Пагинации нет - все подсказки (до 50) приходят за один запрос.

Пример запроса:

curl
curl "https://jsonseo.ru/api/yandex/suggest?text=купить+квартиру&region=213&key=ВАШ_КЛЮЧ"
PHP
<?php

$params = http_build_query([
    'key' => 'ВАШ_КЛЮЧ',
    'text' => 'купить квартиру',
    'region' => 213,
]);

$response = file_get_contents('https://jsonseo.ru/api/yandex/suggest?' . $params);
$data = json_decode($response, true);

foreach ($data['results'] as $suggestion) {
    echo $suggestion . PHP_EOL;
}
Python
import requests

response = requests.get(
    'https://jsonseo.ru/api/yandex/suggest',
    params={'text': 'купить квартиру', 'region': 213},
    headers={'Authorization': 'Bearer ВАШ_КЛЮЧ'},
)
response.raise_for_status()

for suggestion in response.json()['results']:
    print(suggestion)
JavaScript
const params = new URLSearchParams({text: 'купить квартиру', region: 213});

const response = await fetch(`https://jsonseo.ru/api/yandex/suggest?${params}`, {
    headers: {Authorization: 'Bearer ВАШ_КЛЮЧ'},
});

const data = await response.json();
data.results.forEach(suggestion => console.log(suggestion));

Пример ответа:


{
    "query": "купить квартиру",
    "results": [
        "купить квартиру в москве",
        "купить квартиру в новостройке",
        "купить квартиру в подмосковье",
        "купить квартиру вторичка",
        "купить квартиру от застройщика"
    ],
    "lr": "213"
}

Поля ответа:


/yandex/regions

Справочник регионов Яндекса: поиск кода региона (lr) по названию города или области. Метод бесплатный, но ключ нужен: по нему считается лимит в 30 запросов в минуту. Тот же справочник доступен на странице регионов Яндекса.

Метод:

GET https://jsonseo.ru/api/yandex/regions

Параметры запроса:

Возвращаются самые подходящие совпадения, не больше 30 за запрос: короткий запрос вроде «ново» совпадает с тысячами названий. Уточните название, если нужного региона нет в ответе.

Стоимость запроса:

Бесплатно

Пример запроса:

curl "https://jsonseo.ru/api/yandex/regions?name=Казань&key=ВАШ_КЛЮЧ"

Пример ответа:


{
    "name": "Казань",
    "lang": "ru",
    "regions": [
        {
            "id": 43,
            "name": "Казань",
            "subname": "Республика Татарстан",
            "lat": 55.796129,
            "lon": 49.106414
        }
    ]
}
id подставляется в параметр region (он же lr) методов /yandex, /yandex/xml, /yandex/suggest и /wordstat. Координаты lat и lon пригодятся для геолокации в /bing.

/google

Получение поисковой выдачи из Google (мобильная выдача google.com).

Метод:

GET https://jsonseo.ru/api/google

Параметры запроса:

Стоимость запроса:

0.01₽ × количество страниц

Указывается максимальное количество страниц, которое нужно получить. Если поиск вернёт меньше страниц, чем вы запросили, списание произойдёт только за фактически полученные страницы. При ai=1 прибавляется ещё 0.01 ₽ - и только если AI Overview пришёл.

Пример запроса:

curl
curl "https://jsonseo.ru/api/google?q=купить+ноутбук&region=1011969&key=ВАШ_КЛЮЧ"
PHP
<?php

$params = http_build_query([
    'key' => 'ВАШ_КЛЮЧ',
    'q' => 'купить ноутбук',
    'region' => 1011969,
]);

$response = file_get_contents('https://jsonseo.ru/api/google?' . $params);
$data = json_decode($response, true);

foreach ($data['results'] as $index => $item) {
    echo ($index + 1) . '. ' . $item['url'] . PHP_EOL;
}
Python
import requests

response = requests.get(
    'https://jsonseo.ru/api/google',
    params={'q': 'купить ноутбук', 'region': 1011969},
    headers={'Authorization': 'Bearer ВАШ_КЛЮЧ'},
)
response.raise_for_status()

for index, item in enumerate(response.json()['results'], start=1):
    print(index, item['url'])
JavaScript
const params = new URLSearchParams({q: 'купить ноутбук', region: 1011969});

const response = await fetch(`https://jsonseo.ru/api/google?${params}`, {
    headers: {Authorization: 'Bearer ВАШ_КЛЮЧ'},
});

const data = await response.json();
data.results.forEach((item, index) => console.log(index + 1, item.url));

Пример ответа:


{
    "pages": 1,
    "exhausted": false,
    "breakDomainHit": false,
    "query": "купить ноутбук",
    "rawQuery": "купть ноутбук",
    "region": "Москва, Россия",
    "url": "https://www.google.com/search?q=...",
    "results": [
        {
            "url": "https://www.example.com/category/noutbuki/",
            "domain": "www.example.com",
            "title": "Ноутбуки: купить ноутбук по низкой цене",
            "passage": "Покупайте ноутбуки по выгодным ценам, быстрая и бесплатная доставка...",
            "breadcrumbs": "example.com › Электроника › Ноутбуки"
        }
    ]
}

Поля ответа:


/google/xml

Получение поисковой выдачи Google в формате XML.

Ответ имеет ту же структуру, что и /yandex/xml, поэтому эндпоинт подходит программам, которые умеют работать с Яндекс XML (Key Collector, TopSite и другие), и может использоваться вместо сервисов XMLRiver, XMLStock, XMLProxy, XMLSeo. Готовый URL для запросов доступен в личном кабинете.

Метод:

GET https://jsonseo.ru/api/google/xml

Параметры запроса:

Оплачивается только запрошенная страница: при page=1 и groupby=100 списывается за 10 страниц выдачи, а не за 20. Максимальная глубина - 20 страниц (200 результатов): потолок общий на page и groupby, поэтому при groupby=100 доступны две страницы: 0 и 1.
Все позиции сразу получают через groupby при page=0 - см. смещение выдачи.

Стоимость запроса:

0.01₽ × количество страниц

Количество страниц = количество позиций ÷ 10, независимо от page. Например: 100 позиций - 10 страниц - 0.1 ₽; при page=1 те же 100 позиций стоят те же 0.1 ₽, оплачивается только запрошенная страница.

Пример ответа:

<?xml version="1.0" encoding="utf-8"?>
<yandexsearch version="1.0">
    <response date="20260504T120000" dateiso="2026-05-04T12:00:00Z">
        <found priority="phrase">100</found>
        <found priority="strict">100</found>
        <found priority="all">100</found>
        <misspell>
            <rule>Misspell</rule>
            <source-text>recieve payment</source-text>
            <text>receive payment</text>
        </misspell>
        <results>
            <grouping attr="" mode="flat" groups-on-page="10" docs-in-group="1">
                <page first="1" last="10">0</page>
                <group>
                    <doccount>1</doccount>
                    <doc id="ZC2633C719742EBE4">
                        <url>https://www.example.com/category/noutbuki/</url>
                        <domain>www.example.com</domain>
                        <title>Ноутбуки: купить ноутбук по низкой цене</title>
                        <breadcrumbs>example.com › Электроника › Ноутбуки</breadcrumbs>
                        <mime-type>application/pdf</mime-type>
                        <passages>
                            <passage>Покупайте ноутбуки по выгодным ценам, быстрая и бесплатная доставка...</passage>
                        </passages>
                        <contenttype>organic</contenttype>
                    </doc>
                </group>
            </grouping>
        </results>
    </response>
</yandexsearch>

/google/suggest

Поисковые подсказки Google (autocomplete): фразы, которые Google предлагает при вводе запроса. Подсказки собираются без персонализации - «чистый» список запросов с учётом региона. Источник идей для расширения семантики и анализа спроса.

Метод:

GET https://jsonseo.ru/api/google/suggest

Параметры запроса:

Стоимость запроса:

0.01₽ за запрос

Пагинации нет - все подсказки (до ~15) приходят за один запрос.

Пример запроса:

curl
curl "https://jsonseo.ru/api/google/suggest?q=купить+ноутбук&region=1011969&key=ВАШ_КЛЮЧ"
PHP
<?php

$params = http_build_query([
    'key' => 'ВАШ_КЛЮЧ',
    'q' => 'купить ноутбук',
    'region' => 1011969,
]);

$response = file_get_contents('https://jsonseo.ru/api/google/suggest?' . $params);
$data = json_decode($response, true);

foreach ($data['results'] as $suggestion) {
    echo $suggestion . PHP_EOL;
}
Python
import requests

response = requests.get(
    'https://jsonseo.ru/api/google/suggest',
    params={'q': 'купить ноутбук', 'region': 1011969},
    headers={'Authorization': 'Bearer ВАШ_КЛЮЧ'},
)
response.raise_for_status()

for suggestion in response.json()['results']:
    print(suggestion)
JavaScript
const params = new URLSearchParams({q: 'купить ноутбук', region: 1011969});

const response = await fetch(`https://jsonseo.ru/api/google/suggest?${params}`, {
    headers: {Authorization: 'Bearer ВАШ_КЛЮЧ'},
});

const data = await response.json();
data.results.forEach(suggestion => console.log(suggestion));

Пример ответа:


{
    "query": "купить ноутбук",
    "results": [
        "купить ноутбук игровой",
        "купить ноутбук бу",
        "купить ноутбук недорого",
        "купить ноутбук apple",
        "купить ноутбук в москве"
    ]
}

Поля ответа:


/google/regions

Справочник регионов Google: поиск числового ID региона по названию города или страны. Вместе с ID возвращается готовый параметр uule, который можно подставить прямо в адрес выдачи Google. Метод бесплатный, но ключ нужен: по нему считается лимит в 30 запросов в минуту. Те же данные есть на страницах регионов Google и генератора UULE.

Метод:

GET https://jsonseo.ru/api/google/regions

Параметры запроса:

Возвращаются самые популярные совпадения, не больше 30 за запрос: короткий запрос вроде «ново» совпадает с тысячами названий. Уточните название, если нужного региона нет в ответе.

Стоимость запроса:

Бесплатно

Пример запроса:

curl "https://jsonseo.ru/api/google/regions?name=Казань&key=ВАШ_КЛЮЧ"

Пример ответа:


{
    "name": "Казань",
    "lang": "ru",
    "regions": [
        {
            "id": 1012054,
            "name": "Казань",
            "subname": "Республика Татарстан, Россия",
            "type": "city",
            "type_name": "город",
            "canonical_name": "Kazan,Republic of Tatarstan,Russia",
            "uule": "w+CAIQICIiS2F6YW4sUmVwdWJsaWMgb2YgVGF0YXJzdGFuLFJ1c3NpYQ",
            "lat": 55.7878944,
            "lon": 49.1233293
        }
    ]
}
id подставляется в параметр region методов /google и /google/xml: сервер сам соберёт UULE и подставит страну. uule нужен, только если вы обращаетесь к Google напрямую. canonical_name всегда английское: именно из него собирается UULE. Параметр lang меняет только name и subname.

/bing

Получение поисковой выдачи из Bing (bing.com). Тарификация постраничная: одна страница - 0.01 ₽ независимо от числа результатов в ней.

Метод:

GET https://jsonseo.ru/api/bing

Параметры запроса:

Локация: при нескольких параметрах Bing берёт верхний, остальные игнорирует. Без них: выдача по России (mkt=ru-RU).

Стоимость запроса:

0.01₽ × количество страниц

Указывается максимальное количество страниц, которое нужно получить. Если поиск вернёт меньше страниц, чем вы запросили, списание произойдёт только за фактически полученные страницы. При ai=1 прибавляется ещё 0.01 ₽ - и только если ответ Copilot пришёл.

Пример запроса:

curl
curl "https://jsonseo.ru/api/bing?q=пицца&ll=55.753930,37.620795&key=ВАШ_КЛЮЧ"
PHP
<?php

$params = http_build_query([
    'key' => 'ВАШ_КЛЮЧ',
    'q' => 'пицца',
    'll' => '55.753930,37.620795',
]);

$response = file_get_contents('https://jsonseo.ru/api/bing?' . $params);
$data = json_decode($response, true);

foreach ($data['results'] as $index => $item) {
    echo ($index + 1) . '. ' . $item['url'] . PHP_EOL;
}
Python
import requests

response = requests.get(
    'https://jsonseo.ru/api/bing',
    params={'q': 'пицца', 'll': '55.753930,37.620795'},
    headers={'Authorization': 'Bearer ВАШ_КЛЮЧ'},
)
response.raise_for_status()

for index, item in enumerate(response.json()['results'], start=1):
    print(index, item['url'])
JavaScript
const params = new URLSearchParams({q: 'пицца', ll: '55.753930,37.620795'});

const response = await fetch(`https://jsonseo.ru/api/bing?${params}`, {
    headers: {Authorization: 'Bearer ВАШ_КЛЮЧ'},
});

const data = await response.json();
data.results.forEach((item, index) => console.log(index + 1, item.url));

Пример ответа:


{
    "pages": 1,
    "exhausted": false,
    "breakDomainHit": false,
    "query": "пицца",
    "rawQuery": "пицца",
    "region": "Москва, Москва",
    "url": "https://www.bing.com/search?q=...",
    "results": [
        {
            "url": "https://lolo-pizza.ru/",
            "domain": "lolo-pizza.ru",
            "title": "Лоло Пицца: кушай и ржи",
            "passage": "Заказать горячую и ржачную пиццу с доставкой за 30 минут...",
            "breadcrumbs": "https://lolo-pizza.ru"
        }
    ]
}

Поля ответа:


/bing/suggest

Поисковые подсказки Bing (autocomplete): фразы, которые Bing предлагает при вводе запроса. Источник идей для расширения семантики и анализа спроса.

Метод:

GET https://jsonseo.ru/api/bing/suggest

Параметры запроса:

Стоимость запроса:

0.01₽ за запрос

Пагинации нет - все подсказки приходят за один запрос.

Пример запроса:

curl "https://jsonseo.ru/api/bing/suggest?q=купить+ноутбук&ll=55.753930,37.620795&key=ВАШ_КЛЮЧ"

Пример ответа:


{
    "query": "купить ноутбук",
    "results": [
        "купить ноутбук игровой",
        "купить ноутбук бу",
        "купить ноутбук недорого"
    ]
}

Поля ответа:


/wordstat

Списки популярных и похожих запросов из Яндекс Вордстата - материал для расширения семантики. Частота самой фразы - отдельным методом /wordstat/frequency.

Метод:

GET https://jsonseo.ru/api/wordstat

Параметры запроса:

Стоимость запроса:

0.01₽ за запрос

Фиксированная цена за запрос. Вордстат отдаёт полные списки популярных и похожих запросов сразу, пагинации нет - параметр pages больше не используется.

Пример запроса:

curl
curl "https://jsonseo.ru/api/wordstat?text=ремонт+айфона&region=213&key=ВАШ_КЛЮЧ"
PHP
<?php

$params = http_build_query([
    'key' => 'ВАШ_КЛЮЧ',
    'text' => 'ремонт айфона',
    'region' => 213,
]);

$response = file_get_contents('https://jsonseo.ru/api/wordstat?' . $params);
$data = json_decode($response, true);

foreach ($data['results']['popular'] as $item) {
    echo $item['text'] . ': ' . $item['value'] . PHP_EOL;
}
Python
import requests

response = requests.get(
    'https://jsonseo.ru/api/wordstat',
    params={'text': 'ремонт айфона', 'region': 213},
    headers={'Authorization': 'Bearer ВАШ_КЛЮЧ'},
)
response.raise_for_status()

for item in response.json()['results']['popular']:
    print(item['text'], item['value'])
JavaScript
const params = new URLSearchParams({text: 'ремонт айфона', region: 213});

const response = await fetch(`https://jsonseo.ru/api/wordstat?${params}`, {
    headers: {Authorization: 'Bearer ВАШ_КЛЮЧ'},
});

const {results} = await response.json();
results.popular.forEach((item) => console.log(item.text, item.value));

Пример ответа:


{
    "text": "ремонт айфона",
    "region": "213",
    "device": "desktop,phone,tablet",
    "results": {
        "popular": [
            {
                "text": "ремонт айфонов",
                "value": 128927
            },
            {
                "text": "сколько ремонт айфона",
                "value": 8365
            }
        ],
        "associations": [
            {
                "text": "починить телефон",
                "value": 30546
            }
        ]
    }
}

/wordstat/frequency

Частота запроса из Вордстата одним числом. Вид частотности задаётся параметром kind - операторы расставляются автоматически, фразу передавайте без кавычек.

Метод:

GET https://jsonseo.ru/api/wordstat/frequency

Параметры запроса:

Те же, что у /wordstat: text*, kind, region, device.

Стоимость запроса:

0.01₽ за запрос

Пример запроса:

curl "https://jsonseo.ru/api/wordstat/frequency?text=ремонт+айфона&kind=exact&region=213&key=ВАШ_КЛЮЧ"

Пример ответа:


{
    "text": "\"!ремонт !айфона\"",
    "region": "213",
    "device": "desktop,phone,tablet",
    "results": {
        "totalValue": 27356
    }
}
В text возвращается фраза, как она ушла в Вордстат - с операторами, подставленными по kind. Снять четыре вида частотности по всему ядру - четыре вызова на фразу, по 0.01 ₽ каждый; какой вид когда нужен - в статье про виды частотности.

/wordstat/graph

Динамика показов запроса: по месяцам и неделям - история с 2018 года, по дням - последние 60 дней. Подходит для оценки сезонности и тренда спроса.

Метод:

GET https://jsonseo.ru/api/wordstat/graph

Параметры запроса:

Стоимость запроса:

0.01₽ за запрос

Пример запроса:

curl "https://jsonseo.ru/api/wordstat/graph?text=купить+ёлку&graph_type=month&key=ВАШ_КЛЮЧ"

Пример ответа:


{
    "text": "купить ёлку",
    "region": "all",
    "device": "desktop,phone,tablet",
    "type": "month",
    "results": {
        "graph": [
            {
                "date": "2026-06-01",
                "text": "июнь 2026",
                "absolute": 9042,
                "relative": 0.0001
            },
            {
                "date": "2026-07-01",
                "text": "июль 2026",
                "absolute": 11780,
                "relative": 0.0001
            }
        ]
    }
}
absolute - показы за период, relative - доля показов запроса среди всех показов Яндекса за тот же период (удобно сравнивать сезонность без влияния роста самого поиска).

/wordstat/map

Распределение показов запроса по регионам и городам России. Параметр region здесь не применяется: метод сам раскладывает спрос по всем регионам.

Метод:

GET https://jsonseo.ru/api/wordstat/map

Параметры запроса:

Стоимость запроса:

0.01₽ за запрос

Пример запроса:

curl "https://jsonseo.ru/api/wordstat/map?text=купить+ноутбук&map_type=regions&key=ВАШ_КЛЮЧ"

Пример ответа:


{
    "text": "купить ноутбук",
    "device": "desktop,phone,tablet",
    "type": "regions",
    "results": {
        "rows": [
            {
                "type": "regions",
                "text": "Москва и область",
                "absolute": 111666,
                "popularity": 117.07,
                "relative": 0.005483,
                "region_id": 1
            },
            {
                "type": "regions",
                "text": "Центр",
                "absolute": 178801,
                "popularity": 108.69,
                "relative": 0.00509,
                "region_id": null
            }
        ]
    }
}
absolute - показы из региона за период, popularity - региональная популярность (affinity-индекс: 100 - средний интерес по стране, выше - повышенный), relative - доля запроса среди всех показов региона. region_id - ID региона Яндекса из справочника: его можно сразу передавать в параметр region других методов. null - когда название неоднозначно (в стране одиннадцать «Дзержинских районов») или это сводный макрорегион Вордстата вроде «Центра».

/geoip

Определение геолокации по IP-адресу: страна, регион и координаты. ID региона совпадает с ID региона Яндекса: результат можно сразу использовать в параметре region эндпоинтов /yandex и /wordstat.

Метод:

GET https://jsonseo.ru/api/geoip

Аутентификация:

Метод бесплатный, но ключ обязателен: по нему считается лимит в 30 запросов в минуту.

Параметры запроса:

Пример запроса:

curl "https://jsonseo.ru/api/geoip?ip=77.88.55.242&key=ВАШ_КЛЮЧ"

Пример ответа:


{
    "ip": "77.88.55.242",
    "latitude": 55.753215,
    "longitude": 37.622504,
    "region": {
        "id": 213,
        "name": "Москва"
    },
    "country": {
        "id": 225,
        "name": "Россия",
        "iso_name": "RU"
    }
}
Если IP-адрес удалось привязать только к стране, поле region отсутствует, а координаты указывают на центр страны.

Смещение выдачи (page)

По умолчанию выдача собирается с первой страницы, а pages задаёт, сколько страниц собрать подряд. Параметр page сдвигает начало: он говорит, с какой страницы начинать, и работает вместе с pages. page=3&pages=5 - страницы 3–7.

По умолчанию 0. Доступен в /yandex, /google, /bing и в XML-методах.

Нумерация страниц

Нумерация начинается с нуля: page=0 - первая страница. В JSON-методах она всегда такая; параметр page_base там не принимается и возвращает ошибку 422.

В XML-методах нумерацию можно переключить на счёт с единицы - это нужно при переезде с сервисов, где она другая. Описание ниже, в разделах /yandex/xml и /google/xml.

Максимальная глубина

20 страниц, то есть 200 результатов. Предел общий для смещения и ширины окна: сумма page и pages больше 20 - ошибка 422. Одинаково во всех методах, включая XML, где глубина считается как (page + 1) × groupby; там та же ошибка приходит кодом 37 внутри XML с HTTP-статусом 200.

Параметры поисковых систем

То же смещение принимается под теми именами, которыми его называют сами поисковые системы. При одновременной передаче с page используется параметр поисковой системы.

Значение передаётся поисковой системе без изменений. Это единственный способ задать смещение, которое не попадает на границу страницы - например first=19 у Bing.

Особенности Bing

Точное попадание на запрошенное смещение у Bing не гарантируется: границы страниц он двигает сам. page запрашивает круглые границы: page=1 уходит как first=11, page=2 - как first=21. Обычно страницы там и начинаются. При меньшем числе результатов на странице граница смещается, например на 19-й результат - на неё page уже не наведёшь. Ровно на такую границу ставит только first; само значение можно взять из ссылки «Следующая страница» в выдаче Bing.

Ограничения

Когда лучше pages

Несколько страниц подряд следует запрашивать одним запросом через pages, а не несколькими запросами со смещением: выдача динамическая и успевает измениться между обращениями. Разбор - в статье Параметр page: смещение выдачи и почему pages надёжнее. Про расхождение нумерации между сервисами - в статье Нумерация страниц: с нуля или с единицы.

Пример запроса:

curl "https://jsonseo.ru/api/yandex?text=купить+ноутбук&page=2&pages=3&key=ВАШ_КЛЮЧ"
curl "https://jsonseo.ru/api/google?q=купить+ноутбук&start=20&pages=3&key=ВАШ_КЛЮЧ"
curl "https://jsonseo.ru/api/bing?q=купить+ноутбук&first=21&pages=3&key=ВАШ_КЛЮЧ"