VK Posts Scraper
Pricing
from $1.20 / actor start
VK Posts Scraper
Extract wall posts from public VK (VKontakte) profiles and communities: post text, exact UTC timestamps, attachment URLs with VK object IDs, media types and repost flags. Add a VK access token to also get engagement counts, authors and comment threads. Export to JSON, CSV or Excel.
Pricing
from $1.20 / actor start
Rating
0.0
(0)
Developer
Divya Raj
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
What does VK Posts Scraper do?
VK Posts Scraper extracts wall posts from public VK (VKontakte) profiles and communities — post text, publication timestamps, attachment URLs with their VK object IDs, repost chains, and engagement counts. Give it a handle like durov, a community URL, an owner ID, or a direct post link, and it walks the wall and returns structured JSON.
It runs on the Apify platform, so you get scheduling, a REST API, webhook and integration support, automatic proxy rotation, and run monitoring without maintaining any infrastructure yourself.
The scraper has two modes. Without a VK access token it scrapes VK's public HTML, which returns text, dates, and media links. With a token it uses the official VK API and returns everything — engagement counts, author profiles, comment threads, polls, and geotags. See Extraction modes for exactly which fields each mode fills.
Why use VK Posts Scraper?
- Competitor and brand monitoring — track what communities in your market publish, and how often.
- Content research — pull a community's back catalogue to analyse topics, formats, and posting cadence.
- Media and archival work — capture posts with their attachment URLs before they change or disappear.
- Dataset building — collect Russian-language social text for analysis, with exact timestamps.
- Feeding other tools — schedule runs and push results to Google Sheets, S3, a webhook, or your own API.
How to use VK Posts Scraper
- Click Try for free (or Start if you already have it).
- In the Input tab, add one or more targets to VK targets — for example
kinopoisk,https://vk.com/durov, or-220754053. - (Recommended) Paste a VK access token. This unlocks engagement counts, authors, and comments. See Getting an access token.
- Set Maximum posts to control how much you collect.
- Click Start and wait — most runs finish in under a minute.
- Open the Output tab, or download the dataset as JSON, CSV, Excel, or HTML.
Input
Configure everything from the Input tab. Only vkTargets is required.
| Field | Type | Default | Description |
|---|---|---|---|
vkTargets | array | required | Handles (durov), profile/community URLs, signed owner IDs (-220754053), or post links (https://vk.com/wall1_45678). |
accessToken | string (secret) | — | VK API token with the wall scope. Strongly recommended. |
maxItems | integer | 50 | Total posts across all targets. Raise it for a full crawl, and raise the run timeout with it. |
postsPerTarget | integer | — | Optional per-target cap. |
publishedAfter | string | — | YYYY-MM-DD or ISO-8601. Pagination stops at older posts. |
publishedBefore | string | — | YYYY-MM-DD or ISO-8601. A bare date includes the whole day. |
postFilter | enum | all | all, owner, or others. API mode only. |
includeComments | boolean | false | Fetch comment threads with replies. API mode only. |
maxComments | integer | 100 | Comments per post when the above is on. |
keepUndatedPosts | boolean | false | Keep posts whose date could not be read, even when a date filter is set. |
htmlTimezone | string | Europe/Moscow | Timezone VK renders times in. HTML mode only. |
includeRawPost | boolean | false | Attach the unmodified VK API object as rawPost. |
proxyConfiguration | object | Residential | VK blocks most datacenter IPs. |
{"vkTargets": ["https://vk.com/vkvideo", "kinopoisk"],"accessToken": "vk1.a.…","maxItems": 200,"publishedAfter": "2026-01-01","includeComments": true}
Output
One dataset item per post. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel, or pull it through the Apify API.
{"postId": "-220754053_278663","ownerId": -220754053,"text": "Попали под чары Лены Журавлёвой и даже не сопротивляемся…","postedAt": "2026-08-13T12:03:00.000Z","sourceUrl": "https://vk.com/wall-220754053_278663","stats": { "likes": 1240, "comments": 87, "reposts": 33, "views": 98000, "engagement": 1360 },"mediaTypes": ["photo"],"mediaCount": 6,"attachments": [{ "type": "photo", "id": "-220754053_457265754", "url": "https://vk.com/photo-220754053_457265754" }],"isRepost": false,"repostChain": [],"target": "https://vk.com/vkvideo","targetType": "url","scrapedAt": "2026-08-15T19:06:24.168Z"}
Data fields
| Field | Description |
|---|---|
postId | VK identifier as ownerId_postId. |
ownerId | Signed ID of the wall (negative for communities). |
author, authorId | Who wrote the post. Differs from the wall owner on community posts. |
text | Post body. |
postedAt, editedAt | ISO-8601 timestamps in UTC. |
sourceUrl | Canonical vk.com link. |
stats | likes, comments, reposts, views, engagement. |
mediaTypes, mediaCount | Attachment types and how many. |
attachments | Photos, videos, audio, docs, links and polls with VK object IDs and URLs. |
isRepost, repostChain | Whether the post reposts other content, and the originals. |
comments | Comment threads with replies, when enabled. |
geo, isPinned, isAd, signer | Post metadata. |
target, targetType | Which input produced this row. |
scrapedAt | When it was extracted. |
Extraction modes
Field availability differs by mode. This table is the honest version — check it before you rely on a field.
| Field | HTML mode (no token) | API mode (with token) |
|---|---|---|
text, postedAt, sourceUrl | ✅ | ✅ |
attachments with URLs and IDs | ✅ | ✅ (plus sizes, durations, titles) |
mediaTypes, isRepost, isPinned | ✅ | ✅ |
stats (likes, views, comments) | ⚠️ often null | ✅ |
author, wallOwner | ❌ null | ✅ |
repostChain contents | ❌ empty | ✅ |
comments | ❌ | ✅ |
Polls, geotags, signer, isAd | ❌ | ✅ |
| Whole wall depth | ⚠️ limited by VK | ✅ |
| Private walls your token can read | ❌ | ✅ |
HTML mode is a convenience tier. It is genuinely useful for text and media, but VK does not put engagement numbers in reliably-parseable public markup, so stats is frequently null. If you need engagement data, use a token.
Nothing is ever invented. A field VK does not provide is null, never a guess.
Getting an access token
- Create a standalone application at dev.vk.com.
- Open its settings and copy the service access key.
- Paste it into the VK access token field. It is stored encrypted and never appears in logs.
This takes about two minutes and needs no OAuth flow. For walls only a user account can read, generate a user token with the wall scope instead.
How much does it cost to scrape VK?
This Actor is billed by Apify platform usage (compute units, proxy traffic, storage). Runs are light: a browser is only launched in HTML mode, and API mode uses plain HTTP.
Rough guide from real runs:
- 30 posts, HTML mode — around 15 seconds of a 4 GB run
- 500 posts, API mode — a handful of HTTP requests, no browser
Keep costs down by setting maxItems to what you actually need, using a token so the run skips the browser entirely, and narrowing with publishedAfter.
Tips and advanced options
- Use a token. It is faster, cheaper, more complete, and more reliable than HTML mode.
- Raise the timeout when you raise
maxItems. The run stops itself shortly before its timeout and keeps what it gathered, so a largemaxItemson a short timeout returns a partial wall rather than an error. Both live in the run options. - Residential proxies matter. VK blocks most datacenter ranges, and rate-limits anonymous traffic per IP with a "not a robot" page. The Actor detects that page and retries from another exit, but a rotating residential pool is what makes those retries land. If runs fail to connect, set the proxy country to
RUin Proxy configuration. - Date filters stop pagination early.
publishedAfterhalts the crawl once older posts appear, so a narrow window is much cheaper than a wide one. - Undated posts are dropped when a date filter is set, because they cannot be checked against it. Set
keepUndatedPosts: trueto keep them. - Scraping several communities? Put them all in
vkTargets— one run, deduplicated across targets. - Schedule it. Use the Schedules tab for daily monitoring, and integrations to push results onward.
FAQ
Does this work without a VK account or token? Yes, in HTML mode — with the field limitations in the table above.
Why is stats null on some posts?
VK does not expose engagement counts in parseable public markup consistently, and it renames the markup that does carry them without notice. Use an access token for reliable numbers.
The run failed saying VK served a bot challenge. What now?
VK rate-limits anonymous traffic per IP and answers with a "not a robot" page. The Actor detects this and retries from a different proxy exit automatically. If every exit is refused, run again later, keep Proxy configuration on residential, or supply an accessToken — the official API is not rate-limited this way.
Why did I get fewer posts than I asked for? One of two things, and the run log always says which. Either VK stopped serving the wall — it limits how much it hands an anonymous visitor, and a token lifts that — or the run reached its time budget. The Actor stops itself just before the run timeout and keeps what it has collected rather than being killed with nothing to show, so raising Timeout in the run options collects more.
Are timestamps in my timezone?
No — always UTC. In HTML mode, VK's displayed times are interpreted using htmlTimezone (Moscow by default) and converted to UTC.
Can it scrape private profiles? No. Only public walls, or walls the supplied token can legitimately read. This Actor does not bypass VK's access controls.
Legal and support
This Actor collects publicly available data only. You are responsible for how you use it, including compliance with VK's Terms of Service, GDPR, and any other applicable law. Scraping personal data may require a lawful basis — consult a lawyer if you are unsure. Do not use this Actor to collect personal data without a legitimate reason.
Found a bug or need a field that is missing? Open a ticket in the Issues tab. If you need a tailored VK dataset or a custom integration, get in touch through the same channel.