OK.ru Scraper - Users, Groups, Posts, Videos & Games avatar

OK.ru Scraper - Users, Groups, Posts, Videos & Games

Pricing

from $1.40 / 1,000 result records

Go to Apify Store
OK.ru Scraper - Users, Groups, Posts, Videos & Games

OK.ru Scraper - Users, Groups, Posts, Videos & Games

Scrape public OK.ru users, groups, topics, posts, videos, games and greetings by keyword or URL. Extract profiles, feeds, views, likes, comments, players and ratings as clean JSON, with change tracking for recurring monitoring. No account required.

Pricing

from $1.40 / 1,000 result records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

11

Total users

8

Monthly active users

4 days ago

Last modified

Categories

Share

OK.ru Scraper: Profiles, Groups, Topics, Videos & Games

OK.ru Scraper turns Odnoklassniki (OK.ru), one of Russia's largest social networks, into structured data. Search users, groups, topic posts, videos or games by keyword, or paste any mix of ok.ru links, groups, topic posts, profiles, videos, the video showcase, the games catalogue or a single game, and greetings pages, each entry is auto-detected and read by the matching lane. Records come back as clean JSON: profiles with name, gender, birthday and location, groups with members and feed cards, videos with views, likes and comments, games with players and ratings. Everything works without logging in. Schedule the same input on a recurring basis and get only new and changed records, then export to JSON, CSV or Excel, or read the results through the API.

Why This Scraper?

  • No login, ever. Search, group feeds, topic posts, videos, games and profile enrichment all work from what the site shows logged out visitors; you never provide an account.
  • Many ways in. Search users, groups, topic posts, videos or games by keyword, or paste any mix of links, groups, topics, profiles, videos, the video showcase, the games catalogue or a single game, and greetings pages are each auto-detected.
  • Videos with real engagement. Every video row carries views, likes, duration and publish date; turn on Include comments to nest the first page of comments the site shows logged out visitors.
  • Games with real ratings. Players and rating with vote count for every game, plus genre, tags and developer where the site lists them, from the full catalogue, a genre page or a keyword search.
  • Profile enrichment out of the box. A profile ID or link alone returns name, gender, birthday, location and avatar, structured and typed.
  • Monitoring built in. Schedule the same input on a recurring basis and receive only new and changed records, each marked NEW or UPDATED.
  • Loud on blocks, quiet on anything else. When the site refuses every request, the run fails with a clear message instead of finishing quietly with no results.

Use Cases

  • Social listening and community research: track group membership, category and recent feed activity for public communities.
  • OSINT and public profile lookups: turn a bare profile ID or link into structured name, gender, birthday and location.
  • Video and channel monitoring: track views, likes and comments for individual OK.ru videos over time.
  • Casual games research: compare player counts, ratings and genres across the whole games catalogue or one genre.
  • Recurring content monitoring: schedule a search or a fixed list of links daily and get only what is new or changed.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
kind"profile" (also "group", "topic", "video", "game", "greeting")
id"123456789012"
urlok.ru link to the record
name"Sample Group" (profile, group and game records)
title / text"Sample topic title" / "Sample post text" (topic, video and greeting records)
firstName / lastName"First" / "Last" (profile)
gender / birthday"male" / "05-12" (profile)
location / avatar"Sample City, Sample Country" / avatar image URL (profile)
membersCount214187 (group)
description / category"Sample description" / "Board games" (group and game search rows; a greeting's category is its topic, for example "Happy birthday")
feedCount / feedTexts10 / recent feed post texts (group link rows)
groupId"53494783737943" (topic and video records)
commentsCount42 (topic and video records)
imagesimage URLs (topic records)
commentsfirst page of comments, with Include comments on (video and topic records)
durationSeconds / publishedAt125 / ISO timestamp (video)
viewsCount / likesCount150000 / 2400 (video)
dailyViews310 (video search rows)
channelName / channelUrl"Sample Channel" / channel link (video; the name only on video link and showcase rows)
ownerType / ownerId"group" / "1234567890" (video)
genre / tags"board" / ["Board games"] (game; genre only from the games catalogue and game links, not game search)
playersCount955000 (game)
rating / ratingVotes4.32 / 145000, null when a game has no votes yet (game)
developer"Sample Studio" (game search rows and single game links, not catalogue pages)
changeType / firstSeenAt / lastSeenAt"NEW" / ISO timestamps (incremental mode only)

Profile records also carry age and online status when the site's own search returns them. Video records also carry width, height, a thumbnail image URL, and isLive / isAdult flags where the site marks them; channelName and isAdult only come from a direct video link or the showcase, not from search rows. Game records also carry a shortName slug, is18plus and isNew flags, image and banner URLs, and a topicUrl link to the game's discussion topic when the site provides one. Greeting records also carry tags, the category link titles shown with that greeting.

How to Use

  1. Pick a mode: search (by keyword) or links (paste any mix of ok.ru links).
  2. In search mode, set the search query and the types to search. In links mode, paste your links; groups, topics, profiles, videos, games and greetings pages are each auto-detected.
  3. Turn on Include comments if you want the first page of video and topic comments nested in each row, and set Max items to control run size and cost.
  4. Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.

Search users by keyword:

{
"mode": "search",
"searchQuery": "котики",
"searchTypes": ["users"],
"maxItems": 100
}

Paste any mix of links; groups, topics and profiles are auto-detected per entry:

{
"mode": "links",
"links": [
"https://ok.ru/group/53494783737943",
"https://ok.ru/group/53494783737943/topic/158816426481751",
"https://ok.ru/profile/352769811913"
]
}

One query across videos, games and groups at once, with video and topic comments included:

{
"mode": "search",
"searchQuery": "котики",
"searchTypes": ["videos", "games", "groups"],
"maxItems": 50,
"includeComments": true
}

Daily monitoring of a group search, named so the state stays stable:

{
"mode": "search",
"searchQuery": "фитнес",
"searchTypes": ["groups"],
"incrementalMode": true,
"stateKey": "fitness-groups",
"maxItems": 200
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/ok-ru-scraper").call(run_input={
"mode": "search", "searchQuery": "котики", "searchTypes": ["users"]})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["kind"], row.get("name") or row.get("title"))

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/ok-ru-scraper').call({
mode: 'search', searchQuery: 'котики', searchTypes: ['users'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

How Max items applies

In search mode, Max items is a fresh budget for each selected type: three types with Max items 50 can return up to 150 records total, 50 of each. In links mode, Max items is one shared budget across the whole link list.

Search pagination (users, topic posts, groups, videos and games) stops as soon as one page brings nothing new, even if the site says more pages exist. This avoids looping forever on a search whose ranking repeats itself near the end of the results. The tradeoff: if the site serves one fully repeated page in the middle of a long result list, that search stops there and never reaches the genuinely new results further down. Those records are simply not collected in that run (and are not billed); in Incremental mode they show up as NEW on a later run that reaches them. If a broad query returns noticeably fewer records than Max items, run it again or split it into narrower queries.

The same rule applies across types in one run: Topic posts search also returns the groups those posts belong to, and Groups search skips any group already returned that way. A group is never returned twice, but if Topic posts runs first and already covered a whole page of group results, Groups search stops there. When you need a full group list, run Groups search on its own.

Resume and recurring updates

Two different features for two different situations:

  • Resume (resumeFromRunId): paste a previous run's run ID or dataset ID. It is meant to continue one interrupted crawl without returning records already collected there. Known issue: at the moment it skips nothing. A resumed run returns and bills every record again, including every record already in the earlier dataset, even though the run log says "Resume: skipping N record(s)". Until this is fixed, do not use Resume to save money: use Incremental mode (below) to avoid paying twice for records you already have, and Max items to cap run size.
  • Incremental mode (incrementalMode, default off): for scheduling this actor on a recurring basis (daily, hourly) with the same input, and getting only what changed. State is kept in a key value store. Without a stateKey, the key is derived from your whole input (everything except the connection settings), so changing any field, even Max items, starts a fresh state where everything is NEW again; set stateKey to keep one state across input changes, or to share it between tasks. State is saved only when the run finishes, so a run that is aborted or times out does not update it, and the records it returned come back as NEW (and are billed again) next time. Every record is classified NEW (first time seen for this state key), UPDATED (content changed since last seen) or UNCHANGED (nothing changed, suppressed and not billed unless emitUnchanged is on). This actor does not track or emit EXPIRED or REAPPEARED records: a record that disappears from the site simply stops appearing in later runs, it is not flagged. Every incremental record carries changeType, firstSeenAt and lastSeenAt. With incrementalMode off, output is unchanged: same records, same charges as before.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape, the Apify dataset is never changed.

What gets written to the connector: a condensed, human readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify, Settings, API & Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the connector input field. If the picker is empty, you have not authorized a connector yet.
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch runs the site's own search (profiles, groups, topic posts, videos or games); links reads any ok.ru links, auto-detected per entry.
searchQuerystring(none)Search mode: keyword or phrase, Russian or English.
searchTypesarray["users"]Search mode: one or more of users, groups, content, videos, games; each is searched for the same query and Max items applies to each type.
linksarraysample linksLinks mode: any mix of ok.ru links or bare profile IDs, groups, topics, profiles, videos, the video showcase, the games catalogue or a genre, one game, and greetings pages.
maxItemsinteger20Stop after this many records (0 = no limit). In search mode the limit applies to each selected type.
includeCommentsbooleanfalseNest the first page of comments (up to 20, oldest first) inside video and topic records. Each record returned with comments is charged one small Comments collected event; records without comments are not.
resumeFromRunIdstring(none)Paste a previous run ID or dataset ID to continue a large pull. Known issue: it currently skips nothing, so already collected records are returned and billed again (see Resume above).
incrementalModebooleanfalseTurn on for daily or recurring monitoring; returns only new and changed records on later runs.
stateKeystring(none)Name this monitoring campaign to keep its state stable. Leave empty to derive a key from the run settings.
emitUnchangedbooleanfalseAlso return (and bill) records that have not changed since the last run.
mcpConnectorsarray(none)Optional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which item pages are created.
maxNotifyListingsinteger50Cap on items written to each connector per run. Does not affect the dataset.
proxyConfigurationobjectApify ProxyConnection settings.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"kind": "profile",
"id": "123456789012",
"name": "First Last",
"firstName": "First",
"lastName": "Last",
"url": "https://ok.ru/profile/123456789012",
"gender": "male",
"birthday": "05-12",
"location": "Sample City, Sample Country",
"avatar": "https://i.okcdn.ru/i?r=SampleAvatar",
"changeType": "NEW",
"firstSeenAt": "2026-09-27T09:00:00+00:00",
"lastSeenAt": "2026-09-27T09:00:00+00:00"
}

Plan Requirement

The default connection setting works out of the box for every mode. If the site refuses every request in a run, the run fails with a clear message instead of finishing quietly with no results, so "nothing matched" is never confused with "nothing could be read".

FAQ

How much does it cost?

You pay per record returned, plus a small extra charge for records returned with comments when Include comments is on. The Pricing tab shows the current rates. Use Max items to cap the cost of any run.

This actor collects only publicly available data that the site itself shows to logged out visitors. You are responsible for how you use it: follow OK.ru's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Names, photos and other personal data may be subject to privacy and data protection rules in your jurisdiction.

Can I get only new or changed records on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Later runs then return only new and updated records; unchanged ones are not billed unless you turn on Emit unchanged. There is no EXPIRED or REAPPEARED tracking: a record that disappears from the site just stops showing up, it is not flagged.

Why did I get fewer records than Max items?

In search mode, a search stops as soon as one page brings nothing new, even if the site says more pages exist, so on a broad query it can stop before the real end of the results; those records are not collected (or billed) in that run. Run it again or split it into narrower queries. If you selected both Topic posts and Groups, groups already returned by the topic posts search are skipped, and Groups search can stop early for the same reason; run Groups search on its own for a full list. See How Max items applies above. In links mode, each entry is read once, so the count depends only on how many links you pasted and what the site returns for each.

Does Resume from a previous run skip records I already have?

No, not at the moment. This is a known issue: Resume currently skips nothing, so a resumed run returns and bills every record again, including all records already in the earlier dataset, even though the log reports them as skipped. To avoid paying twice for records you already have, use Incremental mode with a fixed stateKey instead, and Max items to cap run size.

Why did my run fail instead of returning an empty dataset?

If the site refuses every request, the run stops with a clear message so "nothing found" is never confused with "nothing could be read". The same applies in links mode when none of your links can be read, for example because they do not exist on OK.ru: the run fails instead of returning empty or placeholder records. Run it again in a few minutes, or check the link.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

🔗 More scrapers you might like

Pair this actor with these related scrapers from the same team:

🧩 Pikabu Scraper
Scrape Pikabu (Пикабу): keyword search, hot/new/best feeds, communities, tags, full story...
🧩 Dzen.ru Scraper
Scrape Dzen.ru (ex Yandex.Zen): articles, videos and channels. Full article text with...
🧩 Roblox Scraper
Scrape Roblox experiences, marketplace items, users and communities. Player counts...
🏠 Domclick RU Property Scraper
Extract property listings from domclick.ru, one of Russia’s largest real estate portals...
🛒 Ozon.ru Scraper
Extract structured product data from Ozon.ru, Russia’s largest marketplace. Search by...
🧩 TikTok Comments Scraper
Scrape comments from TikTok videos using one or more video URLs or IDs. Extract comment...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.