VK Content Scraper — Posts, Users, Communities avatar

VK Content Scraper — Posts, Users, Communities

Pricing

from $3.50 / 1,000 result returneds

Go to Apify Store
VK Content Scraper — Posts, Users, Communities

VK Content Scraper — Posts, Users, Communities

Scrape VK (VKontakte): search posts, users, communities. Russian-language social platform data.

Pricing

from $3.50 / 1,000 result returneds

Rating

0.0

(0)

Developer

EndSpec

EndSpec

Maintained by Community

Actor stats

1

Bookmarked

72

Total users

12

Monthly active users

20 days ago

Last modified

Share

VK Scraper — Search VK (VKontakte) Users and Communities

Search VK (vk.com) by keyword and get back matching user and community profiles as structured JSON — instantly, one row per result.


Simple Input-Output Example

Input:

{
"query": "технологии",
"count": 20
}

Output (one dataset row per result):

{
"id": "123",
"name": "Tech Community",
"username": "techcomm",
"owner_id": "techcomm:123",
"is_verified": false,
"image": "https://sun9-example.userapi.com/impg/techcomm_200.jpg",
"_query": "{\"query\":\"технологии\",\"count\":20}"
}

Important Notes:

  • Results are returned instantly — one search request per run, no browser, no crawling
  • Pay only per result returned$0.0040 per result; failed queries and zero-result runs cost nothing
  • This actor returns VK user and community profiles — it does not return post text, likes, comments, or media feeds
  • Search matches VK's own search index — Cyrillic queries generally return far more results than transliterated ones
  • All data comes from public sources only
  • Contact: contact@endspec.net

Full Actor Documentation

VK Scraper — Users and Communities

Find VK (VKontakte) users and communities by keyword. Run one search against vk.com, Russia's largest social network, and get every matching profile back as a clean dataset row — ID, display name, username, verification status, and avatar.


Overview

The VK Scraper is an Apify Actor that searches VK (vk.com) and extracts publicly available user and community profiles matching your keyword. It is built for Russian-market research, social listening across CIS countries, lead discovery, and academic study of VK communities.

Give it a search term. It returns the profiles VK's public search surfaces for that term, normalized into one dataset row per profile, ready to export as JSON, CSV, or Excel.

What This Actor Does Not Do

Being direct about scope saves you a wasted run:

  • It does not return posts. No post text, dates, like counts, repost counts, view counts, or attachments. The output is profiles only.
  • It does not return music, playlists, or video feeds.
  • It does not scrape a specific profile's wall or follower list. It searches; it does not enumerate a known account.
  • It does not access private, friends-only, or logged-in content.
  • It does not paginate. One run is one search request — see Cost, Performance, and Limits.

What You Can Do

  • Find VK communities by topic: Search any keyword and discover the public groups and pages organized around it
  • Find VK users by name or keyword: Surface public accounts matching a term
  • Check verification status: Every result carries an is_verified flag, so you can separate official pages from lookalikes
  • Build target lists: Collect community IDs and usernames for market research or outreach shortlists
  • Feed downstream pipelines: Export to CSV/JSON and push profile IDs into your own enrichment, CRM, or analysis workflow
  • Track a niche over time: Re-run the same query on a schedule and watch which communities appear or disappear

Data Availability

All data returned by this actor is publicly available information. It surfaces only profiles that VK itself exposes through public search — the same records any logged-out visitor can see on vk.com. No private, restricted, or friends-only data is accessed, and no login is performed.


Actor Input Parameters

The actor accepts the following input parameters:

query • Type: string • Required: Optional (but see Important Notes — a run without it is not useful) • Default: none (the input form is prefilled with технологии) • Description: The keyword to search on VK e.g., технологии, programming, Москва

count • Type: integer • Required: Optional • Default: 20 • Minimum: 1 • Maximum: 100 • Description: Maximum number of results to return from the search e.g., 50

Important Notes:

  • query is technically optional, but always provide it. The input schema marks no field as required, so a run with an empty input will start and will not crash — it will simply search for nothing and return no useful results. Treat query as required in practice.
  • count is a cap, not a quota. It is an upper bound applied to the result list. If the search matches fewer profiles than count, you get fewer rows — and you are only charged for the rows you actually receive.
  • count above the returned page size has no effect. A single search returns a single page of results. Raising count to 100 does not make VK's search return more profiles than it has for that term; it only raises the ceiling.
  • Cyrillic beats transliteration. VK's search index is Russian-language first. технологии returns substantially more than tekhnologii. If a query returns nothing, try it in Cyrillic before assuming there is no data.
  • Broad queries return broad results. The actor does not filter users from communities — both come back in the same dataset, distinguished by the shape of their records.

Input Examples

{
"query": "технологии",
"count": 20
}

When to use: The standard case. A Russian-language keyword and a modest result cap. This is the recommended starting point for any new topic.

Example 2: Wider Sweep for Research

{
"query": "маркетинг",
"count": 100
}

When to use: When you want the broadest view of a niche in one run and are willing to pay for every profile returned. 100 is the schema maximum.

Example 3: Narrow Probe / Cheap Test

{
"query": "Москва",
"count": 1
}

When to use: Testing a new query cheaply before committing to a large run. 1 is the schema minimum — you get one row and are charged for one result.

Example 4: Latin-Script Query (Error-Prone — Expect Fewer Results)

{
"query": "programming",
"count": 20
}

Result: This runs fine, but VK's search index is Russian-language first. A Latin-script query often returns far fewer profiles than its Cyrillic equivalent (программирование), and may return none at all. If you get an empty dataset here, that is the expected behavior — not a failure. Retry in Cyrillic.


Output Structure

The actor writes results to the Apify dataset — one row per profile returned. Results can be downloaded as JSON, CSV, Excel, XML, or RSS from the run's Storage tab, or pulled via the Apify API.

Successful Output Format

Each successful row follows this structure:

{
"id": "string",
"name": "string",
"username": "string",
"owner_id": "string",
"is_verified": false,
"image": "string",
"_query": "string"
}

Field Descriptions:

id • Type: string • Description: The numeric VK identifier for the user or community, as a string

name • Type: string • Description: The public display name of the user or community (e.g. Tech Community)

username • Type: string • Description: The VK screen name / vanity handle — the part that appears in vk.com/<username>

owner_id • Type: string • Description: VK's owner reference for the record, combining the handle and the numeric ID

is_verified • Type: boolean • Description: Whether VK marks this profile as verified (true) or not (false)

image • Type: string • Description: URL of the profile's or community's public avatar image

_query • Type: string • Description: A JSON-encoded echo of the input you submitted (query and count), so rows remain traceable to their search after you merge datasets from multiple runs

A note on field completeness: The fields above are what VK's public search returns for a profile record. Individual records may omit fields VK does not publish for that profile — always null-check before consuming a field downstream. Do not assume every row carries every key.

Error Output Format

When a search fails, the actor writes a single error row instead of results, and does not charge for it:

{
"status": "error",
"_query": "string",
"error": "string"
}

Field Descriptions:

status • Type: string • Description: Always the literal "error" on a failed run. Note that successful rows do not carry a status field — presence of status is itself the error signal.

_query • Type: string • Description: JSON-encoded echo of the input that failed

error • Type: string • Description: A human-readable description of what went wrong. When the service is rate-limited this is a fixed message (see Example 4 below); for other failures the text varies and may include an HTTP status code.


Output Examples

Example 1: Successful Search With Results

Input { "query": "технологии", "count": 20 } — each matching profile arrives as its own row:

{
"id": "123",
"name": "Tech Community",
"username": "techcomm",
"owner_id": "techcomm:123",
"is_verified": false,
"image": "https://sun9-example.userapi.com/impg/techcomm_200.jpg",
"_query": "{\"query\":\"технологии\",\"count\":20}"
}

Example 2: A Verified Community

{
"id": "124",
"name": "Tech News",
"username": "technews",
"owner_id": "technews:124",
"is_verified": true,
"image": "https://sun9-example.userapi.com/impg/technews_200.jpg",
"_query": "{\"query\":\"технологии\",\"count\":20}"
}

Interpretation: is_verified: true marks this as a VK-verified page — useful for filtering official brand and media accounts out of a noisy result set.

Example 3: No Results Found (Successful Run, Empty Dataset)

When the search matches nothing, the run succeeds and the dataset is empty — zero rows, not a row containing an empty list:

[]

The run log will read Done. Returned 0 item(s). This is the normal, non-error outcome for a query VK's index has nothing for. You are not charged, because charges are per returned result. If you expected results here, retry the query in Cyrillic (see Input Example 4).

Example 4: Rate-Limited (Service Busy)

When the service is temporarily rate-limited, a single row is written with this exact message:

{
"status": "error",
"_query": "{\"query\":\"технологии\",\"count\":20}",
"error": "Our servers are busy right now — please retry shortly. You were not charged."
}

What to do: Wait a few minutes and re-run. You were not charged for this row.

Example 5: Other Failure

Any other failure produces an error row whose error text describes the problem and may carry an HTTP status code:

{
"status": "error",
"_query": "{\"query\":\"технологии\",\"count\":20}",
"error": "Our servers returned HTTP 403: null"
}

What to do: These are almost always transient service-side conditions. Re-run a few minutes later. If the same failure persists across several runs, email contact@endspec.net with your run ID — see Support. You were not charged for this row.


Use Cases

For Market Researchers and Analysts

CIS Market Mapping: Identify which VK communities own a topic in the Russian-speaking market — their size signals, verification status, and naming conventions tell you who the incumbents are before you spend on entry.

Example Workflow:

  1. List the Cyrillic keywords that define your category
  2. Run the actor once per keyword with count: 100
  3. Export all datasets to CSV and merge on _query to keep terms separated
  4. Filter on is_verified to separate official pages from fan and spam accounts
  5. Rank the remaining communities and build your target map

For Social Listening and Brand Teams

Brand Presence Audit: Find every VK community using your brand name — official pages, fan groups, and impersonators alike.

Example Workflow:

  1. Run the actor with your brand name as query, in both Cyrillic and Latin script
  2. Pull name, username, and is_verified from the results
  3. Flag unverified profiles using your brand name as review candidates
  4. Re-run on a weekly schedule and diff id sets to catch new impersonators as they appear

For Lead Generation and Sales

Community Prospecting: Build a shortlist of VK communities whose audience matches your ICP, then approach the ones worth a partnership.

Example Workflow:

  1. Search your niche keyword in Cyrillic
  2. Export results and keep the username column — it gives you vk.com/<username> for each target
  3. Manually qualify the shortlist by visiting the top candidates
  4. Route qualified handles into your CRM as outreach targets

Note: This actor returns profiles, not contact details. Qualification and contact discovery are manual steps after the search.

For Academic Researchers

Community Structure Studies: Sample the VK community landscape for a topic reproducibly, with the query preserved alongside every record.

Example Workflow:

  1. Define your keyword set and fix count across all runs so samples are comparable
  2. Run the actor once per keyword
  3. Use the _query field on every row to keep provenance attached through merges
  4. Repeat the identical run at fixed intervals to build a longitudinal panel
  5. Analyze verification rates, naming patterns, and turnover between waves

For Developers

Pipeline Integration: Call the actor from the Apify API and treat it as a VK search endpoint that returns clean JSON.

Example Workflow:

  1. Trigger runs via the Apify API with your query and count
  2. Read the default dataset when the run finishes
  3. Branch on the status field — its presence means the row is an error, its absence means the row is a result
  4. Retry rows carrying the busy message after a backoff
  5. Store the results keyed on id

Best Practices

Query Construction

  • Search in Cyrillic first. VK's index is Russian-language first; this single choice drives result volume more than anything else.
  • Test a term with count: 1 before a wide run. One row is the cheapest possible confirmation that a query returns anything at all.
  • Run one keyword per run. The actor takes a single query string. Multiple terms means multiple runs — which also keeps _query meaningful as a provenance label.
  • Keep queries specific. A term like Москва matches an enormous, low-signal set. Narrower topical terms return more usable profiles.

Cost Control

  • Set count to what you will actually use. You are charged per result returned, so a count of 100 on a term you only need ten profiles from is money spent on rows you will discard.
  • Empty and failed runs are free. Exploratory searching costs nothing when it comes back empty — there is no penalty for probing a term.

Error Handling

  • Branch on the presence of status. Successful rows have no status field; error rows always do. Do not test for status === "success" — it never appears.
  • Retry the busy message. Our servers are busy right now — please retry shortly. You were not charged. means rate-limited, not broken. Back off and retry.
  • Do not parse the error string. Its wording varies for non-rate-limit failures. Treat any row with status: "error" as failed and retry; do not build logic on the message text.
  • Log run IDs. When contacting support, the Apify run ID is the fastest path to an answer.

Data Usage

  • Verify before acting. Profile records reflect VK's search index at the moment of the run and can change. Re-check anything time-sensitive.
  • Respect privacy. Use profile data only for legitimate business and research purposes.
  • Follow applicable law. GDPR and equivalent regimes apply to personal data regardless of whether it was public when you collected it.

Cost, Performance, and Limits

Pricing

  • Pay per result returned$0.0040 per result row
  • Pay-as-you-go — no monthly subscription, no minimum commitment
  • No charge for zero-result runs — an empty dataset costs nothing
  • No charge for errors — rate-limit and failure rows are never billed

The billed event is result-returned, charged once per profile row written to the dataset.

Performance

  • Single request per run. No browser, no crawling, no page rendering — a run is one search and completes in seconds.
  • Lightweight. Minimal memory and compute; safe to run at the smallest available memory setting.
  • Scales by running in parallel. For many keywords, start many short runs rather than trying to widen one.

Limits

  • One query per run. The input takes a single query string.
  • count range: 1–100. Enforced by the input schema; the default is 20.
  • No pagination. A run returns a single page of search results. count caps that page — it cannot reach past it. If a term has more profiles on VK than one page holds, this actor will not retrieve them.
  • Profiles only. No posts, comments, media, or feeds — see What This Actor Does Not Do.
  • Rate limits are possible. Under load the actor may return the busy message instead of results. Retry after a short wait; you are not charged.

Data Sources and Legality

All data returned by this actor is publicly available information from vk.com. The actor surfaces only user and community profiles that VK itself publishes through public search — records visible to any logged-out visitor. It does not log in, does not access private or friends-only content, and does not circumvent access controls.

Your responsibilities:

  • You are responsible for complying with all applicable laws and regulations, including GDPR and other data-protection regimes, when collecting, storing, and using this data.
  • You are responsible for complying with VK's terms of service.
  • Personal data remains personal data even when it is public. Have a lawful basis before you process it.
  • Use the results for legitimate business, research, or analytical purposes only.
  • Honor removal and opt-out requests from individuals whose profiles appear in your results.

This section is factual guidance, not legal advice. If your use case involves personal data at scale, consult a qualified professional.


Frequently Asked Questions

Q: Does this actor return VK posts? A: No. Despite what a keyword search might suggest, the output is user and community profiles only — no post text, dates, like counts, repost counts, view counts, or attachments. If you need post content, this is not the actor for you.

Q: Why did my search return zero results? A: Most often because the query was in Latin script. VK's search index is Russian-language first — try the Cyrillic form (технологии, not tekhnologii). Otherwise, VK's public search may simply have nothing for that term. Either way, an empty run costs nothing.

Q: How do I tell a user from a community in the results? A: The actor does not label them; both come back in one dataset. In practice, name and username are the tell — communities read as topics or brands, users as personal names. Visiting vk.com/<username> confirms it.

Q: I set count: 100 but got 12 rows. Is that a bug? A: No. count is a maximum, not a target. VK's search returned 12 matching profiles for that term, so you received 12 rows — and were charged for 12, not 100.

Q: Can I get more results by paginating? A: Not with this actor. One run is one search request returning one page. There is no cursor or offset input. To cover a topic more broadly, run several narrower, related queries instead of one broad one.

Q: Can I search several keywords in one run? A: No — one query per run. Run the actor once per keyword; the _query field on each row keeps the results attributable after you merge the datasets.

Q: How do I detect an error in my code? A: Check whether the row has a status field. Successful result rows have none; error rows always carry status: "error". Do not check for status: "success" — the actor never emits it.

Q: I got "Our servers are busy right now" — what now? A: That is a rate-limit condition, not a failure of your input. Wait a few minutes and re-run. You were not charged.

Q: Am I charged for failed or empty runs? A: No. Charging happens once per result row actually returned. Zero results, rate limits, and errors all cost nothing.

Q: Can I use this actor commercially? A: Yes. The data is publicly available. You remain responsible for complying with applicable law and VK's terms of service — see Data Sources and Legality.

Q: In what formats can I get the results? A: The Apify dataset exports to JSON, CSV, Excel, XML, and RSS from the run's Storage tab, and is available through the Apify API.

Q: How often should I re-run the same query? A: VK communities appear, rename, and disappear over time. For monitoring use cases, weekly or monthly re-runs and diffing on id works well.


Contact & Support

Questions? Need Help? We're Here for You!

For any questions, technical support, feature requests, or general inquiries about the VK Scraper, please reach out:

Email: contact@endspec.net

Response Time: We guarantee a response within 24 hours during business days.

What to Include in Your Inquiry:

  • Your question or issue description
  • Actor run ID (if applicable)
  • The exact input you used (query and count)
  • Any error rows from the dataset, and the run log if relevant
  • What you expected to get back

You can also report issues directly through the Issues tab on this actor's Apify page.

We're committed to helping you get the most out of this actor — whether you're integrating it into a pipeline, troubleshooting a query that returns nothing, or working out whether it fits your use case.



Last Updated: July 2026