Skip to main content
Thirdwatchthirdwatch
Social media

Scrape Public VK Community Posts with Python (2026)

Collect public VK community and profile posts with Python. Export text, authors, dates, reactions, reposts, views, media, and source URLs without a VK API key.

Aug 12, 2026 · 2 min read · 418 words
See the scraper →

Public VK communities can be useful sources for media research, brand monitoring, and regional market analysis, but copying posts by hand loses stable IDs, engagement counts, media details, and provenance. The VK Posts Scraper converts public profiles, communities, walls, and direct post URLs into structured rows without a VK access token, account, browser, or proxy.

Disclosure: Thirdwatch's Apify links include its referral parameter. This does not change your price.

Run a small VK scrape

Start with one known community and a strict cap. The Actor accepts the short handle as well as the full URL.

import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("thirdwatch/vk-posts-scraper").call(
    run_input={
        "targets": ["vk", "https://vk.com/wall1_2442097"],
        "maxPostsPerTarget": 20,
        "maxTotalPosts": 40,
        "includeReposts": True,
        "includePinned": True,
    }
)

posts = list(client.dataset(run["defaultDatasetId"]).iterate_items())
print(f"Saved {len(posts)} public VK posts")

Each row includes the source target, owner and post IDs, canonical URL, text, author, timestamps, pinned state, engagement, media, repost provenance, and scrape timestamp. Store ownerId plus postId as the durable key when loading multiple runs into a database.

Restrict the collection window

Historical exports often need an inclusive date range. Scheduled monitors usually need only recent posts.

run_input = {
    "targets": ["https://vk.com/vk"],
    "publishedAfter": "2026-08-01",
    "publishedBefore": "2026-08-31",
    "maxPostsPerTarget": 500,
    "maxPagesPerTarget": 25,
    "includeReposts": False,
    "includePinned": False,
}

The lower date bound also lets pagination stop once an older wall page has been reached. That reduces requests for recurring jobs. A direct-post target is fetched once, while a wall target follows offset pages until the requested result or page limit is met.

Normalize the output for analysis

The top-level engagement fields make table analysis straightforward, while the nested objects retain richer context.

import pandas as pd

df = pd.DataFrame(posts)
df["engagementTotal"] = (
    df["likesCount"].fillna(0)
    + df["commentsCount"].fillna(0)
    + df["repostsCount"].fillna(0)
)
df = df.sort_values("engagementTotal", ascending=False)
print(
    df[["authorName", "postedAt", "mediaTypes", "engagementTotal", "sourceUrl"]].head(
        10
    )
)

Views and reactions are public counters observed at scrape time, not immutable facts. Preserve scrapedAt when comparing runs, and expect counts to rise after publication.

Limitations and responsible use

The Actor does not access private profiles, private communities, deleted posts, members, messages, or login-gated content. A public page can change its payload or withhold older posts. Text may contain VK-specific aliases, and attachment availability can differ from the metadata visible on the source page.

Use public data for a defined, lawful purpose. Minimize personal data, retain source URLs and timestamps for auditability, and review applicable privacy, sanctions, research-ethics, and platform requirements before collecting sensitive regional or individual-level datasets.

Frequently asked questions

Does this require a VK access token or login?

No. The Actor reads publicly available profile, community, wall, and direct-post pages. Private or login-only content is outside its scope.

Which VK targets can I submit?

Use a public handle, numeric owner ID, club or public alias, wall URL, or direct wall-post URL. Multiple targets can be combined in one run.

Are skipped posts charged?

No. Date filters, repost filters, pinned-post filters, invalid targets, and duplicates are applied before a result is saved and billed.

Related

Try it yourself

100 free credits, no credit card.

About 30 real searches. Add the MCP to Claude or Cursor in two minutes.