Query search analytics
Run a live Yandex Webmaster query, with clicks, impressions, CTR and average position by query, optionally for one device type.
https://api.rankparse.com/v1/yandex/search-analyticsFreeAPI key + connected Yandex accountReads one host's popular search queries live from Yandex Webmaster for a date range: clicks, impressions, click-through rate and average position. It answers in the same shape as Google Search Console, with the same filters, sorting, paging and compareTo. It covers any query Yandex reports, not only tracked keywords.
Yandex reports queries for the whole host only: there is no page or country dimension, and asking for one returns 400 unsupported_filter. One read covers the first 1000 queries ordered by impressions.
Query parameters
sitestringrequiredThe host, as returned by List properties, or a bare host or URL such as example.com, which is matched to a verified host (https first, www ignored). A host with no match returns 404 yandex_site_not_found with valid_properties. Missing returns 400 missing_site.
startDatestringrequiredFirst day, YYYY-MM-DD. Missing returns 400 missing_dates; any other format returns 400 invalid_date. The same applies to endDate, which must not be before startDate.
endDatestringrequiredLast day, YYYY-MM-DD.
dimensionstringdefault queryquery (popular queries) or date (a daily trend). Anything else returns 400 invalid_dimension; page is not available because Yandex has no page dimension.
date returns one row per day, chronological, for the whole host, or for one query when you send filterQuery. Rows carry clicks, impressions, ctr and, when Yandex sends them, position. The query must be one of the host's popular queries for the date range, otherwise the call returns 404 yandex_query_not_found. A trend takes no compareTo (read two date ranges instead) and no filterQueryContains. The default rowLimit is 500.
devicestringOnly traffic from this device type: desktop, mobile or tablet. Anything else returns 400 invalid_device.
filterQuerystringKeep rows whose query equals this, ignoring letter case. Cannot be combined with filterQueryContains.
filterQueryContainsstringKeep rows whose query contains this text, ignoring letter case.
minImpressionsnumberKeep rows with at least this many impressions. With compareTo, a row passes when either period meets it, so a page that lost everything still shows.
minClicksnumberKeep rows with at least this many clicks (same rule with compareTo).
minPositionnumberKeep rows with an average position at or above this number. Excludes rows with no position.
maxPositionnumberKeep rows with an average position at or below this number.
maxCtrnumberKeep rows with a CTR at or below this, as a fraction from 0 to 1.
compareTostringprevious_period also reads the period of the same length that ends the day before startDate and adds previous, delta and status to every row. Every delta reads positive is better: clicks, impressions and ctr are current minus previous, and position is previous minus current, so a positive position means the row moved up. status is both, new (only in the current period) or lost (only in the previous one). Anything else returns 400 invalid_compare_to.
sortstringclicks, impressions, ctr or position; with compareTo also clicks_delta, impressions_delta, ctr_delta or position_delta. The default order is clicks, then impressions. Anything else returns 400 invalid_sort.
orderstringasc or desc. The default is largest first, except position, where the best (lowest) comes first. For the biggest losers use sort=clicks_delta&order=asc.
fieldsstringComma-separated subset of keys, clicks, impressions, ctr, position, previous, delta and status. Keeps a large response small. An unknown name returns 400 invalid_fields.
startRowintegerdefault 0Offset into the sorted rows, to read past the first page. Use next_start_row from a response that says has_more.
rowLimitintegerdefault 100Rows to return, at most 1000.
Response
sourcestringbing or yandex.
sitestringThe website that was read.
requested_sitestringPresent only when your site was matched to a different website (for example a bare host); site then holds the one used.
rowsarrayResult rows.
Show propertiesHide properties
keysarray of stringsOne value per dimension: the query, the page, or the query then the page.
clicksnumberClicks.
impressionsnumberImpressions.
ctrnumberClick-through rate, a fraction from 0 to 1.
positionnumber | nullAverage position, weighted by impressions across the period. null when the provider reports none.
click_positionnumber | nullAverage position of the results that were clicked, weighted by clicks.
previousobject | nullWith compareTo: that period's clicks, impressions, ctr and position, or null for a new row.
deltaobjectWith compareTo: the change, where positive is better. position is null when the row is in only one period.
statusstringWith compareTo: both, new or lost.
row_countintegerRows in this response.
total_matchedintegerRows that passed every filter, before rowLimit and startRow.
has_morebooleantrue when more matching rows follow this page.
next_start_rowintegerPresent when has_more is true: pass it as startRow for the next page.
notestringWhat this data does and does not cover.
devicestringEchoed when you sent device.
comparison_may_be_incompletebooleanWith compareTo: true when either period had more than the 1000 queries one read covers, so a row marked new or lost may only be outside the rows read.
Behavior and limits
- Credits: 0. Rate limit 60 requests per minute per key, and a daily cap of 300 live Yandex reads per workspace (
429 yandex_daily_cap_reached). - Two reads with
compareTo: the previous period is a second Yandex request. - Host only: no pages, no countries.
Errors
See the shared errors. Parameter errors are 400 with the codes named above.
Related
MCP tools: get_yandex_top_queries, get_yandex_date_trends, get_yandex_query_trend.