Skip to main content

Rank::KeysSo - keys.so Parser

img

Parser Overview

Keys.so is a competitive intelligence tool. The service allows you to orient yourself with a list of your site's competitors, see which queries they rank for in search, and which queries their ads are displayed for. The largest query database in the Russian-speaking segment of the internet is available, with over 80 million keywords.

A-Parser functionality allows you to save parsing settings for future use (presets), set parsing schedules, and much more. You can use automatic query multiplication, substitution of subqueries from files, brute-force of alphanumeric combinations and lists to obtain the maximum possible number of results.

Saving results is possible in the form and structure you need, thanks to the built-in powerful Template Toolkit which allows you to apply additional logic to the results and output data in various formats, including JSON, SQL, and CSV.

Collected Data

  • Visibility rating in the Russian-speaking internet
  • Keyword coverage rating
  • Number of pages in TOP-50
  • Search traffic (Estimated number of users from organic search per day)
  • Number of pages in search results
  • Traffic per page
  • Number of queries per page
  • Performance score (Percentage of keys from TOP-50 occupying positions in TOP-5)
  • Number of sites owned by the domain owner in Adsense, Analytics, Leadia, and Relap.io
  • Number of subdomains of the domain owner
  • Number of queries in top-1, top-3, top-5, top-10, top-50
  • Pages in organic search results (gets a link to the page and the number of keys)
  • List of competitors (link to domain, number of common keys, degree of domain similarity, Yandex traffic)
  • Keywords (query, frequency, position)

For sites with contextual advertising:

  • Context traffic (Traffic estimate from context without considering any targeting. Product of exact frequency and CTR forecast, divided by 30 days)
  • Budget estimate (Budget estimate without considering any targeting. Product of exact frequency, CTR forecast, and cost per click)
  • Number of ads in context
  • Number of queries in context
  • Number of queries per ad
  • Ads in context (Ad and number of queries)
  • Competitors in context (Domain, number of common queries, total queries, number of ads)
  • Site queries in context (Query, frequency, position, placement, cost per click)

Capabilities

  • Choice of search region for Google and Yandex
  • Parsing with authorization (via cookie substitution)

Use Cases

  • Obtaining visibility rating in the Russian-speaking internet and keyword coverage
  • Obtaining the amount of traffic per page
  • Obtaining the number of queries in top-1, top-3, top-5, top-10, top-50
  • Searching for site competitors
  • Obtaining a list of queries for which a site ranks in search
  • Obtaining a site's contextual advertising ads
  • Obtaining competitors in context
  • Collecting data on regional search results for Google and Yandex

Queries

You must specify a domain as a query, for example:

a-parser.com

Output Results Examples

A-Parser supports flexible result formatting thanks to the built-in Template Toolkit, which allows it to output results in any form, as well as in structured formats like CSV or JSON.

Default Output

Result format:

Query - $query, By vision in runet - $by_vis, By keys - $by_keys, Requests in top 50 - $in_top50,  Search traf - $search_traff\n

Result example:

Query - a-parser.com, By vision in runet - 104606, By keys - 197798, Requests in top 50 - 1540,  Search traf - 57

Competitor List Output

Result format:

$comp_keys.format('$links, $total_keys, $similarity, $traff_y\n')

Result example:

http://youtube.com, 1360, 0.00, 8286326
http://habr.com, 1174, 0.04, 116283
http://vc.ru, 1172, 0.06, 40749
http://zen.yandex.ru, 923, 0.00, 5944772
http://spark.ru, 870, 0.33, 2062
http://zennolab.com, 828, 2.78, 216
http://web-data-extractor.net, 819, 35.11, 53

Competitor List Output in CSV

Result format:

[% FOREACH comp_keys;
tools.CSVline(links, total_keys, similarity, traff_y);
END %]

Result example:

http://vk.com,5316893,12.18,8682202
http://youla.ru,5222139,84.47,231703
http://moskva.tiu.ru,4812708,59.84,323103
http://youtube.com,4543041,8.27,8286326
http://moskva.regmarkets.ru,4106292,61.62,13983
http://ozon.ru,3783344,46.81,580266

Dumping Competitor List to JSON

General output format:

[% IF notFirst;
",\n";
ELSE;
notFirst = 1;
END;

obj = {};
obj.query = query;
obj.competitors = [];

FOREACH item IN p1.comp_keys;
obj.competitors.push({
links = item.links
total_keys = item.total_keys
similarity = item.similarity
traff_y = item.traff_y
});
END;

obj.json %]

Initial text:

[

Final text:

]

Result example:

[
{
"query": "avito.ru",
"competitors": [
{
"traffic": "8682202",
"similarity": "12.18",
"total_keys": "5316893",
"links": "http://vk.com"
},
{
"traffic": "231703",
"similarity": "84.47",
"total_keys": "5222139",
"links": "http://youla.ru"
},
{
"traffic": "323103",
"similarity": "59.84",
"total_keys": "4812708",
"links": "http://moskva.tiu.ru"
}
]
}
]
tip

To make the "Initial text" and "End text" options available in the Task Editor, you need to activate "More options".

Keyword List Output

Result format:

$key_phrases.format('$req, $base_freq, $va_freq, $pos\n')

Result example:

a parser, 2870, 332, 1
a parser download torrent, 183, 181, 1
aparser, 435, 118, 1
a parser torrent, 285, 103, 1
a parser, 423, 101, 1
a parser com, 221, 87, 1
google search results parser, 66, 61, 1
a parser mass position checker, 53, 52, 1

Keyword List Output in CSV

Result format:

[% FOREACH key_phrases;
tools.CSVline(req, base_freq, va_freq, pos);
END %]

Result example:

"avito",59415062,9034027,1
"avito moscow",1782404,451582,1
"avito saint petersburg",634665,343183,1
avito,1207134,307012,1
"avito voronezh",629468,286035,1

Dumping Keyword List to JSON

General output format:

[% IF notFirst;
",\n";
ELSE;
notFirst = 1;
END;

obj = {};
obj.query = query;
obj.phrases = [];

FOREACH item IN p1.key_phrases;
obj.phrases.push({
req = item.req
base_freq = item.base_freq
va_freq = item.va_freq
pos = item.pos
});
END;

obj.json %]

Initial text:

[

Final text:

]

Result example:

[
{
"query": "avito.ru",
"phrases": [
{
"base_freq": "59415062",
"req": "avito",
"va_freq": "9034027",
"pos": "1"
},
{
"base_freq": "1782404",
"req": "avito moscow",
"va_freq": "451582",
"pos": "1"
},
{
"base_freq": "634665",
"req": "avito saint petersburg",
"va_freq": "343183",
"pos": "1"
}
]
}
]
tip

To make the "Initial text" and "End text" options available in the Task Editor, you need to activate "More options".

Organic Search Pages Output

Result format:

$organic_pages.format('$pages, $keys\n')

Result example:

http://a-parser.com/, 315
http://a-parser.com/wiki/parsers/, 115
http://a-parser.com/a-parser-for-e-commerce/, 56
http://a-parser.com/wiki/js-parsers/, 44
http://a-parser.com/wiki/html-emailextractor/, 40
http://a-parser.com/resources/21/, 39
http://a-parser.com/threads/1809/, 35
http://a-parser.com/threads/4253/, 32

Organic Search Pages Output in CSV

Result format:

[% FOREACH organic_page;
tools.CSVline(pages, keys);
END %]

Result example:

http://a-parser.com/, 315
http://a-parser.com/wiki/parsers/, 115
http://a-parser.com/a-parser-for-e-commerce/, 56
http://a-parser.com/wiki/js-parsers/, 44
http://a-parser.com/wiki/html-emailextractor/, 40
http://a-parser.com/resources/21/, 39
http://a-parser.com/threads/1809/, 35
http://a-parser.com/threads/4253/, 32

Dumping Organic Search Pages to JSON

General output format:

[% IF notFirst;
",\n";
ELSE;
notFirst = 1;
END;

obj = {};
obj.query = query;
obj.organic = [];

FOREACH item IN p1.organic_pages;
obj.organic.push({
pages = item.pages
keys = item.keys
});
END;

obj.json %]

Initial text:

[

Final text:

]

Result example:

[
{
"query": "avito.ru",
"organic": [
{
"keys": "4652",
"pages": "http://avito.ru/"
},
{
"keys": "4563",
"pages": "http://avito.ru/moskva/avtomobili"
},
{
"keys": "4484",
"pages": "http://avito.ru/moskva/kvartiry/sdam-ASgBAgICAUSSA8gQ"
}
]
}
]
tip

To make the "Initial text" and "End text" options available in the Task Editor, you need to activate "More options".

Contextual Ads Output

Result format:

$ads_context.format('$aheader, $atext, $acount\n')

Result example:

PC and Laptop Repair in Moscow, On-site! Since 2015 on Avito – Bronze status. Applications accepted 24/7! · Computers & Laptops. Tablets & Smartphones. Routers & WI - FI, 38658
Book a room on Avito. Travel together with Avito, Hotels and inns - many offers specifically for you. Now on Avito., 20122
Find a job in Moscow city. On Avito Work, Fresh vacancies in Moscow city. Avito - #1 classifieds service in Russia!, 20110

Contextual Ads Output in CSV

Result format:

[% FOREACH ads_context;
tools.CSVline(aheader, atext, acount);
END %]

Result example:

PC and Laptop Repair in Moscow","On-site! Since 2015 on Avito – – Bronze status. Applications accepted 24/7! · · Computers & & Laptops. Tablets & & Smartphones. Routers & WI - FI",38658
"Book a room on Avito. Travel together with Avito","Hotels and inns - many offers specifically for you. Now on Avito.",20122
"Find a job in Moscow city. On Avito Work","Fresh vacancies in Moscow city. Avito - #1 classifieds service №1 in Russia!",20110
"Dogs on Avito. Buy or adopt for free.","Hundreds of thousands of ads. Make profitable deals across Russia with Avito!",17306

Dumping Contextual Ads to JSON

General output format:

[% IF notFirst;
",\n";
ELSE;
notFirst = 1;
END;

obj = {};
obj.query = query;
obj.ads = [];

FOREACH item IN p1.ads_context;
obj.ads.push({
header = item.aheader
text = item.atext
count = item.acount
});
END;

obj.json %]

Initial text:

[

Final text:

]

Result example:

[
{
"ads": [
{
"count": "38658",
"text": "On-site! Since 2015 on Avito – – Bronze status. Applications accepted 24/7! · · Computers & & Laptops. Tablets & & Smartphones. Routers & WI - FI",
"header": "PC and Laptop Repair in Moscow"
},
{
"count": "20122",
"text": "Hotels and inns - many offers specifically for you. Now on Avito.",
"header": "Book a room on Avito. Travel together with Avito"
},
{
"count": "20110",
"text": "Fresh vacancies in Moscow city. Avito - #1 classifieds service №1 in Russia!",
"header": "Find a job in Moscow city. On Avito Work"
}
],
"query": "avito.ru"
}
]
tip

To make the "Initial text" and "End text" options available in the Task Editor, you need to activate "More options".

Context Competitors Output

Result format:

$comp_context.format('$link, $common, $req, $ads\n')

Result example:

http://uslugi.yandex.ru, 340399, 11188812, 30632
http://superjob.ru, 180179, 885168, 19065
http://mvideo.ru, 174070, 2840150, 344731
http://pleer.ru, 166815, 2577993, 238284
http://ru.jobsora.com, 124103, 596184, 99781
http://citilink.ru, 114529, 1903350, 94937
http://goods.ru, 113373, 2684645, 328750
http://pokupki.market.yandex.ru, 81527, 2657498, 326255

Context Competitors Output in CSV

Result format:

[% FOREACH comp_context; 
tools.CSVline(link, common, req, ads);
END %]

Result example:

http://uslugi.yandex.ru, 340399, 11188812, 30632
http://superjob.ru, 180179, 885168, 19065
http://mvideo.ru, 174070, 2840150, 344731
http://pleer.ru, 166815, 2577993, 238284
http://ru.jobsora.com, 124103, 596184, 99781
http://citilink.ru, 114529, 1903350, 94937
http://goods.ru, 113373, 2684645, 328750
http://pokupki.market.yandex.ru, 81527, 2657498, 326255

Dumping Context Competitors to JSON

General output format:

[% IF notFirst;
",\n";
ELSE;
notFirst = 1;
END;

obj = {};
obj.query = query;
obj.competitors = [];

FOREACH item IN p1.comp_context;
obj.competitors.push({
link = item.link
common = item.common
req = item.req
ads = item.ads
});
END;

obj.json %]

Initial text:

[

Final text:

]

Result example:

[
{
"query": "avito.ru",
"competitors": [
{
"ads": "30632",
"link": "http://uslugi.yandex.ru",
"req": "11188812",
"common": "340399"
},
{
"ads": "19065",
"link": "http://superjob.ru",
"req": "885168",
"common": "180179"
},
{
"ads": "344731",
"link": "http://mvideo.ru",
"req": "2840150",
"common": "174070"
},

]
}
]
tip

To make the "Initial text" and "End text" options available in the Task Editor, you need to activate "More options".

Site Queries in Context Output

Result format:

$wreq_context.format('$request, $freq, $va_freq, $pos, $placement, $price\n')

Result example:

work in chelyabinsk, 202530, 40163, 3, Spec., 4
algebra 8th grade dorofeev, 217307, 18467, 2, Guar., 2
far cry 3, 113266, 23218, 5, Guar., 3
work in barnaul, 128775, 26402, 3, Spec., 4
harry potter and the chamber of secrets movie 2002, 36482, 30450, 2, Guar., 5
mazda 6, 554463, 25248, 6, Guar., 19
assassin s creed, 535915, 29419, 5, Guar., 5
avito ryazan, 325994, 137938, 3, Guar., 13

Site Queries in Context Output in CSV

Result format:

[% FOREACH wreq_context;
tools.CSVline(request, freq, va_freq, pos, placement, price);
END %]

Result example:

"work in chelyabinsk",202530,40163,3,"Spec.",4
"algebra 8th grade dorofeev",217307,18467,2,"Guar.",2
"far cry 3",113266,23218,5,"Guar.",3
"work in barnaul",128775,26402,3,"Spec.",4
"harry potter and the chamber of secrets movie 2002",36482,30450,2,"Guar.",5
"mazda 6",554463,25248,6,"Guar.",19
"assassin s creed",535915,29419,5,"Guar.",5
"avito ryazan",325994,137938,3,"Guar.",13
"avito ryazan region",72077,19586,2,"Guar.",20

Dumping Site Queries in Context to JSON

General output format:

[% IF notFirst;
",\n";
ELSE;
notFirst = 1;
END;

obj = {};
obj.query = query;
obj.wreq = [];

FOREACH item IN p1.wreq_context;
obj.wreq.push({
request = item.request
freq = item.freq
va_freq = item.va_freq
pos = item.pos
placement = item.placement
price = item.price
});
END;

obj.json %]

Initial text:

[

Final text:

]

Result example:

[
{
"query": "avito.ru",
"wreq": [
{
"request": "work in chelyabinsk",
"placement": "Spec.",
"freq": "202530",
"va_freq": "40163",
"price": "4",
"pos": "3"
},
{
"request": "algebra 8th grade dorofeev",
"placement": "Guar.",
"freq": "217307",
"va_freq": "18467",
"price": "2",
"pos": "2"
},
{
"request": "far cry 3",
"placement": "Guar.",
"freq": "113266",
"va_freq": "23218",
"price": "3",
"pos": "5"
}
]
}
]
tip

To make the "Initial text" and "End text" options available in the Task Editor, you need to activate "More options".

Possible Settings

ParameterDefault valueDescription
Search DBYandex MoscowSearch database selection
Cookie "userlogin="In this field, you must specify the value of the userlogin cookie, taken from the browser after authorization