# Yandex Search API — Yandex web results, full SERP (ads, knowledge panel, related searches), Yandex Direct ads, image search, video search, autocomplete and news, by region and language, no account and no API key

> Yandex web search results from Yandex's web index: ranked pages with position, title, URL, snippet, displayed URL and the date Yandex shows, plus Yandex's own total-results estimate. Localise by region (`lr`) and domain, filter by document language (`lang`) and by date (`period`, or `date_from`/`date_to`), and page through results (`page`, 10 per page). Fast and cheap. The order is Yandex's web-index ranking, which is not the same blend as the yandex.ru results page (measured: about a third to a half of the top-10 domains in common). To track positions exactly as people see them on Yandex, use `serp`.
> ReefAPI engine `yandex-search` · 7 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/yandex-search/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free.
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Clients that add connectors by URL, such as ChatGPT and the Claude app, connect with OAuth 2.1 (the user pastes their key once on a ReefAPI page; discovery at `/.well-known/oauth-protected-resource/mcp`). Config files send the key as `Authorization: Bearer <key>`. `?key=<key>` in the URL also works as a last-resort fallback.

## Endpoints

### POST https://api.reefapi.com/yandex-search/v1/search — 1 credit
Yandex web search results from Yandex's web index: ranked pages with position, title, URL, snippet, displayed URL and the date Yandex shows, plus Yandex's own total-results estimate. Localise by region (`lr`) and domain, filter by document language (`lang`) and by date (`period`, or `date_from`/`date_to`), and page through results (`page`, 10 per page). Fast and cheap. The order is Yandex's web-index ranking, which is not the same blend as the yandex.ru results page (measured: about a third to a half of the top-10 domains in common). To track positions exactly as people see them on Yandex, use `serp`.

**Parameters:**
- `q` (string, required) — Search query, in any language (Russian, Turkish, English, Kazakh, …). Yandex uses up to the first 40 words.
- `domain` (enum, optional, default "yandex.ru") — Which Yandex domain to query. It sets the interface language of the page and the default region; the web index is the same. yandex.ru (Russia, default region Moscow 213), yandex.com (international, 84 = USA), yandex.com.tr (Turkey, 11508 = Istanbul), yandex.kz (162 = Almaty), yandex.by (157 = Minsk), yandex.uz (10335 = Tashkent), ya.ru (= yandex.ru). [one of: yandex.ru, yandex.com, yandex.com.tr, yandex.kz, yandex.by, yandex.uz, ya.ru]
- `lr` (integer, optional) — Yandex region id that results are localised for (213 Moscow, 2 Saint Petersburg, 225 Russia, 11508 Istanbul, 983 Turkey, 162 Almaty, 157 Minsk, 84 USA, 102 UK, 96 Germany). Default: the chosen domain's home region. Every response reports the region Yandex applied in meta.region_id.
- `lang` (enum, optional) — Only return documents written in this language (Yandex's own language filter). Measured: `Moscow` with lang=en returns English pages, lang=tr Turkish pages. [one of: ru, en, tr, uk, be, kk, uz, de, fr, es, it, pl]
- `ui_lang` (enum, optional) — Interface language of the page (affects only the total-results sentence). Default: the domain's own. [one of: ru, en, tr, uk, be, kk]
- `page` (integer, optional, default 1) — 1-based results page, 1-25 (about 10 results a page; Yandex serves at most 25 pages = 250 results per query). A page past the end of a shorter result set comes back ok with no rows and has_next_page=false (meta.page_out_of_range).
- `period` (enum, optional) — Only documents Yandex dated inside this window (ending today, UTC). Ignored if date_from/date_to is given. [one of: day, week, two_weeks, month, three_months, half_year, year]
- `date_from` (string, optional) — Custom date range start, YYYY-MM-DD (inclusive).
- `date_to` (string, optional) — Custom date range end, YYYY-MM-DD (inclusive). Default today when only date_from is given.

**Returns:** query, page, organic_results[]{position,title,url,displayed_url,domain,snippet,date,date_text,favicon,more_from_site}, total_results, total_results_text, has_next_page

**Example request body:**
```json
{
  "q": "купить ноутбук",
  "lr": 213
}
```

### POST https://api.reefapi.com/yandex-search/v1/serp — 3 credits
The live Yandex results page as a person sees it (mobile layout), for rank tracking: organic results in Yandex's own order with sitelinks, the paid ads placed in the results, the knowledge panel (entity card with description, facts, sources and 'see also' lists), the video block, and 'people also search' related queries. `features` lists every block Yandex placed on the page. Slower than `search` (reads the full mobile page); use `search` when you only need the ranked web results.

**Parameters:**
- `q` (string, required) — Search query, in any language (Russian, Turkish, English, Kazakh, …). Yandex uses up to the first 40 words.
- `lr` (integer, optional) — Yandex region id (213 Moscow, 11508 Istanbul, 162 Almaty, 157 Minsk, 84 USA). Optional: without it Yandex localises to the exit's country. Passing it makes a request take more attempts on average (measured), so expect a few seconds more.
- `page` (integer, optional, default 1) — 1-based results page, 1-25 (about 10 results a page; Yandex serves at most 25 pages = 250 results per query). A page past the end of a shorter result set comes back ok with no rows and has_next_page=false (meta.page_out_of_range).
- `domain` (enum, optional, default "yandex.com.tr") — Yandex domain the full results page is read from. The web index is the same on every domain; the domain only changes interface labels. Results follow `lr`, or, without `lr`, the exit's country (reported in meta.region_id). [one of: yandex.com.tr, yandex.kz, yandex.uz, yandex.by]

**Returns:** query, page, organic_results[]{position,title,url,site_name,displayed_url,domain,snippet,sitelinks[]}, ads[]{position,block_position,title,domain,displayed_url,description,sitelinks[],url (advertiser landing page when Yandex prints it, else null),tracking_url (Yandex click counter: never follow it, it bills the advertiser)}, knowledge_graph{title,subtitle,description,facts[],sources[],see_also[]}, video_results[], related_searches[], features[], has_next_page

**Example request body:**
```json
{
  "q": "рецепт борща"
}
```

### POST https://api.reefapi.com/yandex-search/v1/ads — 2 credits
Every Yandex Direct ad Yandex shows for a query (the 'commercial offers' page): ad title, advertiser domain, displayed URL, ad text, sitelinks and the Yandex click-tracking URL. Localise with `lr`. Useful for competitor ad research.

**Parameters:**
- `q` (string, required) — Search query, in any language (Russian, Turkish, English, Kazakh, …). Yandex uses up to the first 40 words.
- `lr` (integer, optional) — Yandex region id that results are localised for (213 Moscow, 2 Saint Petersburg, 225 Russia, 11508 Istanbul, 983 Turkey, 162 Almaty, 157 Minsk, 84 USA, 102 UK, 96 Germany). Default: the chosen domain's home region. Every response reports the region Yandex applied in meta.region_id.
- `page` (integer, optional, default 1) — 1-based page of ads.

**Returns:** query, ads[]{position,title,domain,displayed_url,description,sitelinks[],tracking_url (Yandex click counter: never follow it), url (always null on this page)}

**Example request body:**
```json
{
  "q": "купить ноутбук",
  "lr": 213
}
```

### POST https://api.reefapi.com/yandex-search/v1/images — 2 credits
Yandex image search: full-size image URL, dimensions, file size, thumbnail, the page the image is on and its title. ~30 images per page. Filter by size, orientation, type, colour, file format and site.

**Parameters:**
- `q` (string, required) — Search query, in any language (Russian, Turkish, English, Kazakh, …). Yandex uses up to the first 40 words.
- `page` (integer, optional, default 1) — 1-based page.
- `size` (enum, optional) — Image size bucket. [one of: large, medium, small, wallpaper]
- `orientation` (enum, optional) — Image orientation. [one of: horizontal, vertical, square]
- `type` (enum, optional) — Kind of image. [one of: photo, clipart, lineart, face, demotivator]
- `color` (enum, optional) — Dominant colour (`color` = any colour, `gray` = black & white). [one of: color, gray, red, orange, yellow, cyan, green, blue, violet, white, black]
- `file_type` (enum, optional) — File format. [one of: jpg, png, gif]
- `site` (string, optional) — Only images from this site.
- `family` (enum, optional) — Adult-content filter for images and videos. [one of: off, moderate, strict]

**Returns:** query, page, images[]{position,title,image_url,width,height,file_size_bytes,thumbnail,source_url,source_domain,description,other_sizes,is_gif}, has_next_page

**Example request body:**
```json
{
  "q": "istanbul kedi"
}
```

### POST https://api.reefapi.com/yandex-search/v1/videos — 2 credits
Yandex video search across YouTube, VK Video, RuTube, OK and others: video title, watch URL, platform, channel, duration, views, publish date, description and thumbnail. ~17 per page.

**Parameters:**
- `q` (string, required) — Search query, in any language (Russian, Turkish, English, Kazakh, …). Yandex uses up to the first 40 words.
- `page` (integer, optional, default 1) — 1-based page.
- `family` (enum, optional) — Adult-content filter for images and videos. [one of: off, moderate, strict]

**Returns:** query, page, videos[]{position,video_id,title,url,platform,channel,duration_seconds,duration,views_text,published,published_at,description,thumbnail,embed_url}, total_results, has_next_page

**Example request body:**
```json
{
  "q": "как приготовить борщ"
}
```

### POST https://api.reefapi.com/yandex-search/v1/suggest — 1 credit
Yandex search autocomplete for a partial query, in Yandex's order. Rows that Yandex answers inline (weather and similar facts) carry the fact too. Fast and cheap; good for keyword research in Russian, Turkish and CIS languages.

**Parameters:**
- `q` (string, required) — Search query, in any language (Russian, Turkish, English, Kazakh, …). Yandex uses up to the first 40 words.
- `domain` (enum, optional, default "yandex.ru") — Which Yandex domain to query. It sets the interface language of the page and the default region; the web index is the same. yandex.ru (Russia, default region Moscow 213), yandex.com (international, 84 = USA), yandex.com.tr (Turkey, 11508 = Istanbul), yandex.kz (162 = Almaty), yandex.by (157 = Minsk), yandex.uz (10335 = Tashkent), ya.ru (= yandex.ru). [one of: yandex.ru, yandex.com, yandex.com.tr, yandex.kz, yandex.by, yandex.uz, ya.ru]
- `lr` (integer, optional) — Yandex region id that results are localised for (213 Moscow, 2 Saint Petersburg, 225 Russia, 11508 Istanbul, 983 Turkey, 162 Almaty, 157 Minsk, 84 USA, 102 UK, 96 Germany). Default: the chosen domain's home region. Every response reports the region Yandex applied in meta.region_id.

**Returns:** query, suggestions[]{text,type(query|fact),fact_type,fact}, completion

**Example request body:**
```json
{
  "q": "погода в"
}
```

### POST https://api.reefapi.com/yandex-search/v1/news — 2 credits
Yandex News search (Yandex News is now served on dzen.ru): story headline, publisher, article URL, snippet, publish time, the story's size and other publishers covering it.

**Parameters:**
- `q` (string, required) — Search query, in any language (Russian, Turkish, English, Kazakh, …). Yandex uses up to the first 40 words.
- `sort` (enum, optional, default "relevance") — Result order. [one of: relevance, date]

**Returns:** query, news[]{position,title,url,source,snippet,published_at,time_text,story_url,story_size,more_sources[]}

**Example request body:**
```json
{
  "q": "курс рубля"
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=yandex-search
- Human docs page: https://reefapi.com/docs/yandex-search
- Overview page: https://reefapi.com/yandex-search-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
