VK Scraper — Profiles, Walls, Posts & Comments avatar

VK Scraper — Profiles, Walls, Posts & Comments

Pricing

from $3.00 / 1,000 owner results

Go to Apify Store
VK Scraper — Profiles, Walls, Posts & Comments

VK Scraper — Profiles, Walls, Posts & Comments

Scrape public VK profiles, communities, walls, posts, comments, replies, engagement, reposts, and attachment metadata from known handles or URLs—without a VK token or login.

Pricing

from $3.00 / 1,000 owner results

Rating

0.0

(0)

Developer

ScrapingMonkey

ScrapingMonkey

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

1

Monthly active users

5 days ago

Last modified

Share

VK Scraper - Profiles, Communities, Posts, Comments and Monitoring

Collect public VK profiles, communities, wall posts, post details, comments, audience counters, attachments, and visible media summaries in one structured dataset.

  • Extract public user and community identity, descriptions, status, verification, profile images, and visible counters
  • Paginate public walls and preserve post text, dates, authors, views, likes, comments, reposts, and reactions
  • Retrieve individual wall posts and public top-level comments by URL or wallOWNER_POST identifier
  • Preserve available attachments and enrich profiles with visible subscriptions, follower samples, covers, and media summaries
  • Monitor public walls and save only new or changed posts on scheduled runs
  • Process multiple screen names, profile URLs, community URLs, owner IDs, and post URLs in one run
  • No VK account, access token, cookies, browser, or user-supplied proxy is required; requests use the built-in Apify Residential Proxy
  • Export results to JSON, CSV, Excel, XML, RSS, or access them through the Apify API

What can you do with this Actor?

Mode / actionInputOutputBest for
wallsPublic user or community screen names and URLsPaginated public post rowsContent research, publishing analysis, and monitoring
ownersPublic screen names, profile URLs, community URLs, or owner IDsNormalized owner rowsProfile and community intelligence
postsPublic wall post URLs or wallOWNER_POST identifiersComplete public post rowsPost-level content, media, and engagement analysis
commentsPublic wall post URLs or identifiersPublic top-level comment rowsAudience feedback and discussion research
profileMediaPublic user or community targetsowner rows enriched with visible media summariesPublic content inventory and profile auditing
autoMixed public profile, community, and wall-post URLs in startUrlsowner or post rows selected from each URLBatch processing mixed known targets
monitorPublic owner targets plus a stable monitorKeyOnly new or new-and-changed post rowsScheduled wall monitoring

Choose one mode per run. Multiple public targets can be processed together; walls can optionally add public top-level comments to the same Results dataset.

Quick start

  1. Open the Actor and click Try for free.
  2. Keep Walls selected or choose another workflow.
  3. Enter public screen names, profile/community URLs, owner IDs, or wall-post URLs and set the result limit.
  4. Click Start.
  5. Preview the single Results table or download it in your preferred format.

The default input collects recent public wall posts from durov and is ready to run.

Input examples

Public wall

{
"mode": "walls",
"targets": [
"durov"
],
"maxItems": 100,
"includeComments": false,
"country": "US"
}

Owner details

{
"mode": "owners",
"targets": [
"durov",
"team"
],
"country": "US"
}

Post details

{
"mode": "posts",
"targets": [
"https://vk.ru/wall1_456"
],
"country": "US"
}

Public comments

{
"mode": "comments",
"targets": [
"wall1_456"
],
"maxCommentsPerPost": 100,
"country": "US"
}

Monitor new wall posts

{
"mode": "monitor",
"targets": [
"durov"
],
"maxItems": 100,
"monitorKey": "durov-daily",
"country": "US"
}

Profile media summary

{
"mode": "profileMedia",
"targets": [
"durov"
],
"country": "US"
}

Auto-detect mixed public URLs

{
"mode": "auto",
"startUrls": [
"https://vk.ru/durov",
"https://vk.ru/wall1_456"
],
"country": "US"
}

maxItems limits retained rows per target. maxCommentsPerPost applies separately to each post when comment extraction is enabled.

Complete output examples

Every result row contains exactly 66 top-level fields. The same complete key set makes mixed result types predictable in JSON exports and keeps every field visible in the single Results view.

Complete owner row — 66 top-level fields

{
"recordType": "owner",
"sourceMode": "owners",
"sourceTarget": "example-target",
"sourceUrl": "https://example.com/public-result",
"sourceEndpoints": [],
"ownerId": "123456",
"ownerType": null,
"screenName": null,
"firstName": null,
"lastName": null,
"name": "Example public record",
"description": "Example public content",
"status": "Example public content",
"profileUrl": "https://example.com/public-result",
"birthDate": null,
"city": {},
"country": {},
"sex": 0,
"verified": false,
"isClosed": false,
"online": false,
"followersCount": 0,
"followingCount": 0,
"friendsCount": 0,
"photosCount": 0,
"videosCount": 0,
"clipsCount": 0,
"articlesCount": 0,
"giftsCount": 0,
"site": "https://example.com/public-result",
"occupation": {},
"counters": {},
"profilePhotoUrl": "https://cdn.example.com/image.jpg",
"cover": {},
"subscriptions": {},
"followerSample": [],
"mediaOverview": {},
"postId": "example-id",
"canonicalUrl": "https://example.com/public-result",
"text": "Example public content",
"textHtml": "Example public content",
"publishedAt": "2026-08-13T12:00:00Z",
"editedAt": "2026-08-13T12:00:00Z",
"authorId": "123456",
"authorName": "Example public record",
"authorUrl": "https://example.com/public-result",
"postType": null,
"viewsCount": 0,
"likesCount": 0,
"commentsCount": 0,
"repostsCount": 0,
"reactions": {},
"attachments": [],
"copyHistory": [],
"commentId": "123456",
"parentCommentId": "123456",
"replyToUser": "123456",
"dateLabel": null,
"attributes": {},
"temporaryMediaUrlsIncluded": false,
"isPartial": false,
"monitorStatus": null,
"changedFields": [],
"previousCapturedAt": "2026-08-13T12:00:00Z",
"capturedAt": "2026-08-13T12:00:00Z",
"raw": {}
}

Complete post row — 66 top-level fields

{
"recordType": "post",
"sourceMode": "walls",
"sourceTarget": "example-target",
"sourceUrl": "https://example.com/public-result",
"sourceEndpoints": [],
"ownerId": "123456",
"ownerType": null,
"screenName": null,
"firstName": null,
"lastName": null,
"name": "Example public record",
"description": "Example public content",
"status": "Example public content",
"profileUrl": "https://example.com/public-result",
"birthDate": null,
"city": {},
"country": {},
"sex": 0,
"verified": false,
"isClosed": false,
"online": false,
"followersCount": 0,
"followingCount": 0,
"friendsCount": 0,
"photosCount": 0,
"videosCount": 0,
"clipsCount": 0,
"articlesCount": 0,
"giftsCount": 0,
"site": "https://example.com/public-result",
"occupation": {},
"counters": {},
"profilePhotoUrl": "https://cdn.example.com/image.jpg",
"cover": {},
"subscriptions": {},
"followerSample": [],
"mediaOverview": {},
"postId": "example-id",
"canonicalUrl": "https://example.com/public-result",
"text": "Example public content",
"textHtml": "Example public content",
"publishedAt": "2026-08-13T12:00:00Z",
"editedAt": "2026-08-13T12:00:00Z",
"authorId": "123456",
"authorName": "Example public record",
"authorUrl": "https://example.com/public-result",
"postType": null,
"viewsCount": 0,
"likesCount": 0,
"commentsCount": 0,
"repostsCount": 0,
"reactions": {},
"attachments": [],
"copyHistory": [],
"commentId": "123456",
"parentCommentId": "123456",
"replyToUser": "123456",
"dateLabel": null,
"attributes": {},
"temporaryMediaUrlsIncluded": false,
"isPartial": false,
"monitorStatus": null,
"changedFields": [],
"previousCapturedAt": "2026-08-13T12:00:00Z",
"capturedAt": "2026-08-13T12:00:00Z",
"raw": {}
}

Complete comment row — 66 top-level fields

{
"recordType": "comment",
"sourceMode": "comments",
"sourceTarget": "example-target",
"sourceUrl": "https://example.com/public-result",
"sourceEndpoints": [],
"ownerId": "123456",
"ownerType": null,
"screenName": null,
"firstName": null,
"lastName": null,
"name": "Example public record",
"description": "Example public content",
"status": "Example public content",
"profileUrl": "https://example.com/public-result",
"birthDate": null,
"city": {},
"country": {},
"sex": 0,
"verified": false,
"isClosed": false,
"online": false,
"followersCount": 0,
"followingCount": 0,
"friendsCount": 0,
"photosCount": 0,
"videosCount": 0,
"clipsCount": 0,
"articlesCount": 0,
"giftsCount": 0,
"site": "https://example.com/public-result",
"occupation": {},
"counters": {},
"profilePhotoUrl": "https://cdn.example.com/image.jpg",
"cover": {},
"subscriptions": {},
"followerSample": [],
"mediaOverview": {},
"postId": "example-id",
"canonicalUrl": "https://example.com/public-result",
"text": "Example public content",
"textHtml": "Example public content",
"publishedAt": "2026-08-13T12:00:00Z",
"editedAt": "2026-08-13T12:00:00Z",
"authorId": "123456",
"authorName": "Example public record",
"authorUrl": "https://example.com/public-result",
"postType": null,
"viewsCount": 0,
"likesCount": 0,
"commentsCount": 0,
"repostsCount": 0,
"reactions": {},
"attachments": [],
"copyHistory": [],
"commentId": "123456",
"parentCommentId": "123456",
"replyToUser": "123456",
"dateLabel": null,
"attributes": {},
"temporaryMediaUrlsIncluded": false,
"isPartial": false,
"monitorStatus": null,
"changedFields": [],
"previousCapturedAt": "2026-08-13T12:00:00Z",
"capturedAt": "2026-08-13T12:00:00Z",
"raw": {}
}

What data can you extract?

CategoryFields
Source and capturerecordType, sourceMode, sourceTarget, sourceUrl, sourceEndpoints, capturedAt
Owner identityownerId, ownerType, screenName, firstName, lastName, name, profileUrl
Public profile datadescription, status, birthDate, city, country, sex, verified, isClosed, online, site, occupation
Audience and content countsfollowersCount, followingCount, friendsCount, photosCount, videosCount, clipsCount, articlesCount, giftsCount, counters
Profile media and relationshipsprofilePhotoUrl, cover, subscriptions, followerSample, mediaOverview
Posts and engagementpostId, canonicalUrl, text, textHtml, publishedAt, editedAt, authorId, authorName, authorUrl, postType, viewsCount, likesCount, commentsCount, repostsCount, reactions, attachments, copyHistory
CommentscommentId, parentCommentId, replyToUser, dateLabel, attributes
Monitoring and diagnosticstemporaryMediaUrlsIncluded, isPartial, monitorStatus, changedFields, previousCapturedAt, raw

Nested fields such as city, country, occupation, counters, cover, subscriptions, followerSample, mediaOverview, reactions, attachments, copyHistory, attributes, and optional raw retain VK's public source structure. Their nested keys are source-controlled and can change; the 66 top-level keys above are fixed by the Actor.

Input parameters

ParameterTypeRequiredDefaultDescription
modestringNo"walls"auto, owners, walls, posts, comments, profileMedia, or monitor.
targetsstring[]In all target modes["durov"]Public screen names, profile/community URLs, wall-post URLs, or wallOWNER_POST identifiers.
startUrlsstring[]In auto[]Mixed public profile, community, or wall-post URLs.
maxItemsintegerNo100Maximum retained rows per target, from 1 to 10,000.
maxPagesintegerNo20Maximum public wall pages per owner, from 1 to 500.
maxCommentsPerPostintegerNo100Maximum top-level comments per post, from 0 to 10,000; 0 skips them.
includeCommentsbooleanNofalseFetch public top-level comments for wall posts with extra requests.
includeAttachmentsbooleanNotruePreserve public attachment objects on post rows.
includeTemporaryMediaUrlsbooleanNotruePreserve observed public media URLs even when their CDN lifetime may be limited.
publishedAfterstringNo""Optional ISO date/timestamp lower bound applied after extraction.
publishedBeforestringNo""Optional ISO date/timestamp upper bound applied after extraction.
maxConcurrencyintegerNo3Concurrent public targets, from 1 to 10.
requestTimeoutSecsintegerNo60Per-request timeout in seconds, from 15 to 120.
countrystringNo"US"Two-letter ISO country used for the internal residential proxy region.
includeRawbooleanNofalseInclude the redacted public source object; increases dataset size.
monitorModestringNo"off"off, onlyNew, or newAndChanged.
monitorKeystringWith monitoring"default"Stable comparison-state namespace for recurring runs.
maxSessionRotationsintegerNo3Fresh residential sessions tried after blocks, from 1 to 6.

Pay-per-event result types

EventCharged when
owner-resultOne owner row is accepted by the Dataset.
post-resultOne post row is accepted by the Dataset.
comment-resultOne comment row is accepted by the Dataset.

The Actor does not emit a paid error event. Failed targets are counted by category in RUN_SUMMARY; successful targets continue. Actual event prices are shown on the Actor's Pricing tab.

Use cases

Profile and community intelligence

Collect public identity, descriptions, audience counters, profile imagery, visible subscriptions, follower samples, and media summaries.

Content and engagement analysis

Export wall posts with text, timestamps, authors, reactions, views, likes, comments, reposts, attachments, and repost chains.

Public comment research

Collect top-level public comments for feedback analysis, community research, and moderation dashboards outside VK.

Monitoring and data pipelines

Schedule recurring runs and send new rows through webhooks to Google Sheets, Airtable, Make, Zapier, n8n, Airbyte, or a data warehouse.

Performance and cost

Direct HTTP generally uses substantially less memory and bandwidth than launching a browser, but source response size, retries, optional enrichment, raw objects, and pagination determine actual cost. Start with a small limit, inspect the Dataset and RUN_SUMMARY, then scale. Lower concurrency is usually more reliable on stricter public sites.

API usage

Replace YOUR_USERNAME with the publishing Apify username after publication:

curl -X POST \
"https://api.apify.com/v2/acts/YOUR_USERNAME~vk-public-scraper/runs?token=APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "walls",
"targets": ["durov"],
"maxItems": 100,
"country": "US"
}'

The request body is the same JSON used in Apify Console. Read results from the run's default Dataset or use the output link that opens view=overview.

Best for / not for

Best for: public profile and community details, known wall targets, post enrichment, public top-level comments, media summaries, and scheduled monitoring.

Not for: keyword search, private or login-only content, complete nested reply trees, authenticated API methods, account actions, or permanent media hosting.

Limits and good to know

VK keyword search, private profiles and communities, nested reply expansion, login-only content, and authenticated API methods are intentionally excluded. Public page payloads and endpoints can differ by owner type and region.

A missing public value is returned as null or an empty array. One failed input does not create a frightening error row in Results. If every input fails, the run fails after writing diagnostic counts to RUN_SUMMARY.

Frequently asked questions

What input should I provide?

Use a public screen name, profile/community URL, numeric owner ID, full wall-post URL, or wallOWNER_POST identifier that matches the selected mode.

How many results can I extract?

maxItems accepts 1-10,000 per target, maxPages accepts 1-500, and maxCommentsPerPost accepts 0-10,000 per post. Public availability and VK pagination can return fewer rows.

Can I process multiple inputs?

Yes. Add multiple public targets or URLs; target failures are isolated and successful targets continue.

Can I schedule recurring runs?

Yes. Use Apify schedules with mode: "monitor", a stable monitorKey, and webhooks for downstream notifications.

Does this Actor open a browser?

No. Runtime extraction uses direct HTTP only and contains no Playwright, Selenium, Chromium, or browser installation.

Do I need an account or cookies?

No. The supported modes use public pages and anonymous endpoints. Cookies or authorization values from research captures are never embedded in the release.

Do I need to configure a proxy?

No. On Apify, the Actor creates a Residential Proxy configuration internally and does not expose proxy settings in Input. Local developers may privately point the documented test-only environment variable at a proxy file; that variable is not an Actor input and is ignored on the platform.

Why are some fields empty?

The single Results view covers every result type. Fields that do not apply to a row remain empty, while the complete key set is preserved in JSON.

Responsible use

Collect only public VK data you are permitted to process. Respect applicable law, privacy rights, platform terms, rate limits, and intellectual-property rights. This Actor is not affiliated with or endorsed by VK.

Support

For a reproducible issue, include the Apify run ID, mode, a non-sensitive public target, expected result, and actual result. Never send account credentials, cookies, access tokens, proxy passwords, or private content.

Local development

For local read-only smoke tests only, VK_TEST_PROXY_FILE may point to a private file containing one login:password@host:port proxy per line. The file is never read on Apify and must not be committed.