VK Posts Scraper avatar

VK Posts Scraper

Pricing

$3.60 / 1,000 posts

Go to Apify Store
VK Posts Scraper

VK Posts Scraper

Collect public VK wall posts and direct posts from profiles and communities. Get structured rows with text, authors, dates, engagement counts, media details, repost data, target types, and source links.

Pricing

$3.60 / 1,000 posts

Rating

5.0

(1)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

254

Total users

64

Monthly active users

1.2 days

Issues response

2 days ago

Last modified

Share

🔎 Collect public VK posts as clean data

VK Posts Scraper helps researchers, analysts, and social media teams collect public VK posts. Give it handles, profile or community URLs, wall URLs, direct post URLs, or owner IDs. It returns one structured dataset row for each eligible public post, with text, author details, publication and edit times, engagement counts, media details, repost context, target types, and source links when VK provides them. This gives you structured data for research, comparison, and export.

📦 See each public VK post in one structured row

Each saved row represents the first eligible match for one public VK post. The row keeps the submitted target that first found it, target type, stable post and owner IDs, canonical post URL, visible text, publication and edit times, post state, author details, engagement counts, media metadata, and copied-post context when VK provides them.

Row contents

  • target and targetType identify the submitted target that first found the post.
  • postId, ownerId, and sourceUrl provide stable identity and the public post link.
  • text, postedAt, editedAt, postType, and isPinned describe the post when VK exposes those values.
  • author holds public author ID, name, type, profile link, avatar, and verification status when available.
  • engagement holds likes, comments, reposts, views, and reaction counts from VK.
  • media keeps one entry per source attachment with its type and available links or details.
  • repost holds the direct copied post and deeper copied-post context when VK provides it.

For attachment types that are not yet fully supported, media keeps the source type instead of dropping the attachment. If the same source post appears again through another submitted value, the later match is ignored. The saved row keeps the first target that found it, so no second row or post charge is created for that repeat. Private, deleted, hidden, unsupported, and no-result targets do not become rows.

🚀 Running the Actor

  1. Add public VK handles, profile or community URLs, wall URLs, direct post URLs, owner IDs, or community IDs.
  2. Set maxItems for the whole run and maxItemsPerTarget when you want a per-target cap. Leave either limit empty to collect all available matching posts until the relevant source is exhausted, subject to the other limit.
  3. Add publishedAfter and publishedBefore to keep wall posts in an inclusive date range.
  4. Run the Actor and open the dataset.

For a date-filtered wall collection, the Actor checks older wall pages as needed to find posts in the chosen range. It does not require a VK login for public content.

⚙️ Input

Input fields

FieldTypeWhat it does
targetsarray of stringsRequired list of public VK handles, profile or community URLs, wall URLs, direct post URLs, owner IDs, or community IDs. Other text is treated as a keyword target, but VK may not show keyword results without a login.
maxItemsintegerSets the most posts to save across the whole run. Leave it empty to return all available matching posts until the submitted sources are exhausted, subject to any per-target limit.
maxItemsPerTargetintegerSets the most posts to save for each submitted target. Leave it empty to return all available matching posts for each target until that source is exhausted, subject to the whole-run limit.
publishedAfterstringKeeps wall posts published on or after this date. The Actor checks older pages until it reaches this date or there are no more posts.
publishedBeforestringKeeps wall posts published on or before this date when VK provides a post date.

Example input

This is the public input from a successful current-beta default-input run:

{
"targets": [
"durov"
],
"maxItems": 10
}

🧾 Output

Run output link

The run output has one results link to the default dataset.

FieldTypeWhat it does
resultsstringOpens the default dataset overview for saved public VK posts.

Dataset rows

Each dataset row has one shape. Optional fields appear only when VK exposes them. repost.repost repeats the same repost shape for a deeper copied post.

FieldTypeWhat it does
targetstringSubmitted target that first found the post.
targetTypestringKind of submitted VK target.
postIdstringStable owner-and-post ID for joining and deduplication.
ownerIdintegerVK ID of the profile or community wall.
sourceUrlstringPublic URL of the post.
textstringVisible post text. It can be empty for a media-only post.
postedAtstring (date-time, optional)Publication time from VK.
editedAtstring (date-time, optional)Last edit time from VK.
postTypestring (optional)Post type reported by VK.
isPinnedboolean (optional)Whether VK marks the post as pinned.
authorobjectPublic author details.
author.idintegerVK profile or community ID.
author.namestringPublic profile or community name.
author.typestring (optional)Author kind: profile or community when VK provides it.
author.profileUrlstring (optional)Public author profile or community URL.
author.avatarUrlstring (optional)Public author image URL.
author.isVerifiedboolean (optional)Whether VK marks the author as verified.
engagementobjectPublic counts and reaction details from VK.
engagement.likesintegerNumber of likes.
engagement.commentsintegerNumber of comments.
engagement.repostsintegerNumber of reposts.
engagement.viewsintegerNumber of views.
engagement.reactionsarray of objects (optional)Counts grouped by VK reaction type.
engagement.reactions[].typestringVK name for a reaction.
engagement.reactions[].countintegerNumber of reactions of that type.
mediaarray of objectsOne entry for each source attachment, in source order.
media[].typestringSource attachment type. It stays present for unsupported attachment types.
media[].idinteger (optional)VK attachment ID.
media[].ownerIdinteger (optional)VK ID of the attachment owner.
media[].accessKeystring (optional)VK key used to open the attachment.
media[].albumIdinteger (optional)VK photo album ID.
media[].urlstring (optional)Public source or destination URL.
media[].playerUrlstring (optional)Public video player URL.
media[].titlestring (optional)Attachment title.
media[].captionstring (optional)Attachment caption.
media[].textstring (optional)Attachment text.
media[].descriptionstring (optional)Attachment description.
media[].postedAtstring (date-time, optional)Attachment publication time.
media[].durationinteger (optional)Video length in seconds.
media[].widthinteger (optional)Main image width in pixels.
media[].heightinteger (optional)Main image height in pixels.
media[].thumbnailUrlstring (optional)Public preview image URL.
media[].variantsarray of objects (optional)Useful image sizes supplied by VK.
media[].variants[].urlstringPublic image URL for this size.
media[].variants[].widthinteger (optional)Image width in pixels.
media[].variants[].heightinteger (optional)Image height in pixels.
media[].variants[].typestring (optional)VK name for this image size.
repostobject (optional)Direct copied parent post and any deeper copied-post context.
repost.postIdstringStable owner-and-post ID for the copied post.
repost.ownerIdintegerVK ID of the wall with the copied post.
repost.sourceUrlstringPublic URL for the copied post.
repost.textstringVisible copied post text.
repost.postedAtstring (date-time, optional)Copied post publication time.
repost.authorobjectPublic author details for the copied post.
repost.author.idintegerCopied post author's VK ID.
repost.author.namestringCopied post author's public name.
repost.author.typestring (optional)Copied post author kind when VK provides it.
repost.author.profileUrlstring (optional)Public copied post author URL.
repost.author.avatarUrlstring (optional)Public copied post author image URL.
repost.author.isVerifiedboolean (optional)Whether VK marks the copied post author as verified.
repost.mediaarray of objectsAttachments in the copied post, in source order. Each entry uses the media[] fields above.
repost.media[].typestringCopied attachment type.
repost.media[].idinteger (optional)Copied attachment ID.
repost.media[].ownerIdinteger (optional)VK ID of the copied attachment owner.
repost.media[].accessKeystring (optional)VK key used to open the copied attachment.
repost.media[].albumIdinteger (optional)Copied photo album ID.
repost.media[].urlstring (optional)Public copied attachment URL.
repost.media[].playerUrlstring (optional)Public copied video player URL.
repost.media[].titlestring (optional)Copied attachment title.
repost.media[].captionstring (optional)Copied attachment caption.
repost.media[].textstring (optional)Copied attachment text.
repost.media[].descriptionstring (optional)Copied attachment description.
repost.media[].postedAtstring (date-time, optional)Copied attachment publication time.
repost.media[].durationinteger (optional)Copied video length in seconds.
repost.media[].widthinteger (optional)Copied main image width in pixels.
repost.media[].heightinteger (optional)Copied main image height in pixels.
repost.media[].thumbnailUrlstring (optional)Public copied preview image URL.
repost.media[].variantsarray of objects (optional)Image sizes supplied for the copied attachment.
repost.media[].variants[].urlstringPublic copied image URL for this size.
repost.media[].variants[].widthinteger (optional)Copied image width in pixels.
repost.media[].variants[].heightinteger (optional)Copied image height in pixels.
repost.media[].variants[].typestring (optional)VK name for this copied image size.
repost.repostobject (optional)A deeper copied post using this same repost shape.

Example dataset row

This is a genuine, unshortened row from a successful current-beta run. The values and public source URL are copied from that dataset.

{
"target": "https://vk.ru/vniissoktools",
"targetType": "wallUrl",
"postId": "-230816011_130",
"ownerId": -230816011,
"sourceUrl": "https://vk.com/wall-230816011_130",
"text": "Воздуходувка аккумуляторная Vniissok V0041, бесщёточный двигатель, Li-Ion аккумулятор 4 Ач\n\n💨Бесщёточный мотор — надёжно и надолго.\n\n💨Без проводов — полная свобода на участке.\n\n💨Мощный поток — листва исчезает за минуты.\n\n💨Лёгкая и удобная — руки не устают.\n\n💨Компактная — хранить одно удовольствие.",
"author": {
"id": -230816011,
"name": "VNIISSOK ИНСТРУМЕНТЫ",
"type": "community",
"profileUrl": "https://vk.com/vniissoktools",
"avatarUrl": "https://sun1-83.userapi.com/s/v1/ig2/how5aAwbD9TUaBSI6S2u0fqCDSggqG6xkuVHia60_qYU8m2EM6j_Lm5U4d9mm1ov2bNiPcQ3po6VWYxLrwGoaAq2.jpg?quality=95&crop=45,45,655,655&as=32x32,48x48,72x72,108x108,160x160,240x240,360x360,480x480,540x540,640x640&ava=1&u=jmyHaWC6JhKEsA8N48Z6V2eeSVileDHC61dCz2oAFuo&cs=100x100",
"isVerified": false
},
"engagement": {
"likes": 3,
"comments": 0,
"reposts": 0,
"views": 52,
"reactions": [
{
"type": "0",
"count": 3
}
]
},
"media": [
{
"type": "video",
"id": 456239311,
"ownerId": -230816011,
"url": "https://vk.com/video-230816011_456239311",
"title": "Clip by @vniissoktools",
"description": "Осень — самое время обзавестись воздуходувкой: горы листвы на участке больше не будут проблемой! Аккумуляторная бесщёточная воздуходувка VNIISSOK V0041 — отличный выбор: мощный поток воздуха быстро очистит дорожки, газон и зону вокруг дома...",
"duration": 34,
"postedAt": "2026-09-08T09:07:54.000Z",
"width": 1080,
"height": 1920,
"thumbnailUrl": "https://iv.okcdn.ru/videoPreview?id=19741364324932&idx=1&type=43&tkn=UWSkzjH3BdjW4wsVz18E1VnFWMU&cs=1080x1920",
"variants": [
{
"url": "https://iv.okcdn.ru/videoPreview?id=19741364324932&idx=1&type=39&tkn=GKCGBzwMsAjlRs3UhZ6GCgWQsGU&fn=vid_u&cs=320x569",
"width": 320,
"height": 569
},
{
"url": "https://iv.okcdn.ru/videoPreview?id=19741364324932&idx=1&type=39&tkn=GKCGBzwMsAjlRs3UhZ6GCgWQsGU&fn=vid_u&cs=720x1280",
"width": 720,
"height": 1280
},
{
"url": "https://iv.okcdn.ru/videoPreview?id=19741364324932&idx=1&type=39&tkn=GKCGBzwMsAjlRs3UhZ6GCgWQsGU&fn=vid_u&cs=405x720",
"width": 405,
"height": 720
},
{
"url": "https://iv.okcdn.ru/videoPreview?id=19741364324932&idx=1&type=43&tkn=UWSkzjH3BdjW4wsVz18E1VnFWMU&cs=405x720",
"width": 405,
"height": 720
},
{
"url": "https://iv.okcdn.ru/videoPreview?id=19741364324932&idx=1&type=43&tkn=UWSkzjH3BdjW4wsVz18E1VnFWMU&cs=135x240",
"width": 135,
"height": 240
},
{
"url": "https://iv.okcdn.ru/videoPreview?id=19741364324932&idx=1&type=43&tkn=UWSkzjH3BdjW4wsVz18E1VnFWMU&cs=720x1280",
"width": 720,
"height": 1280
},
{
"url": "https://iv.okcdn.ru/videoPreview?id=19741364324932&idx=1&type=43&tkn=UWSkzjH3BdjW4wsVz18E1VnFWMU&cs=1080x1920",
"width": 1080,
"height": 1920
}
]
},
{
"type": "action_button"
}
],
"postedAt": "2026-09-08T09:08:24.000Z",
"editedAt": "2026-09-08T09:10:33.000Z",
"postType": "post"
}

💳 Pricing

Charged outcome

This Actor uses pay-per-event pricing. The primary event is one public VK post saved to the dataset. No-result, inaccessible, private, hidden, unsupported, and duplicate matches are not saved as public post events. There is no separate Actor-start charge.

🔌 Integrations

Connect your data

Use the Apify API to start runs and read dataset items. Schedule runs, send finished runs to webhooks, or use supported Apify integrations to move rows to other tools. Export the dataset as JSON, CSV, Excel, XML, RSS, or HTML.

❓ FAQ

What happens when the same post is found twice?

The first eligible occurrence is saved. If another submitted handle, URL, or ID finds it later, that match is ignored. target keeps the first value that found the saved row, and the repeat does not create another row or post charge.

Are date filters inclusive?

Yes. publishedAfter includes posts on that date and later. publishedBefore includes posts on that date and earlier when VK provides a post date. They apply to outer wall posts, not dates inside repost. The Actor checks older wall pages as needed.

What if a target is private or returns no posts?

No row is saved for private, login-only, deleted, hidden, unsupported, inaccessible, or no-result targets. The Actor is for public VK content and does not require a VK login.

What happens if one target cannot be reached?

Rows already saved stay in the dataset, and later independent targets are still checked. If unresolved source instability blocks all remaining truthful work, the run can fail with the saved rows preserved.

Does the Actor download media files?

No. It returns public links and named metadata for supported photos, videos, clips, and links. Other attachment types keep their source type when they cannot be fully normalized.

What does repost contain?

When VK exposes copied-post context, repost includes the copied post ID, source URL, text, author, publication time, media, and a deeper copied-post chain.

Which output values can be missing?

Optional values appear only when VK provides them. A media-only post can have empty text, and attachment arrays can be empty.

Can I collect several VK walls in one run?

Yes. Put multiple same-kind public values in targets. The Actor saves each eligible post once and keeps the first submitted value that found it.

How do the post limits work?

maxItems caps the whole run. maxItemsPerTarget caps each submitted target. Leave a limit empty to return all available matching posts until the relevant source is exhausted, subject to the other limit.

Can I run it through the Apify API?

Yes. Start the Actor through the Apify API and read the default dataset through its API link. The public input and output fields stay the same.

Can I collect posts without a VK login?

Yes, for publicly accessible VK content. Private or login-only content is outside the Actor's scope.

📝 Changelog

v1.0 (10-09-2026)

  • Startup logs no longer show dependency and runtime details before the first public message.
  • Dataset rows omit collection timestamps and unknown author types when VK does not provide them.

v0.0

  • Restored targetType and scrapedAt.
  • Added named repost and richer media data.
  • Date filters can search older wall pages.
  • Runs resume after an Apify migration without repeating saved posts or post charges.
  • Duplicate posts are not saved or charged.
  • Saved rows remain when one target fails.
  • includeRawPost, rawPost, matchedKeywords, and engagement.total remain unsupported.

v0.0

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré