Skip to main content
Thirdwatchthirdwatch
research

Build an Auditable Public VK Post Research Dataset

Design a reproducible VK research dataset with stable IDs, date bounds, author and repost provenance, media metadata, engagement snapshots, and ethical safeguards.

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

Reproducible social-media research begins with a sampling plan and provenance, not a large export. The VK Posts Scraper can collect public wall data, but the researcher remains responsible for defining the population, minimizing personal data, documenting gaps, and interpreting the sample cautiously.

Write the collection protocol first

Record why each public profile or community is included, the observation period, expected language, date bounds, repost policy, pinned-post policy, and maximum pages. Keep the exact Actor input and run ID with the resulting dataset.

{
  "targets": ["public_community_a", "public_community_b"],
  "maxPostsPerTarget": 1000,
  "maxTotalPosts": 2000,
  "publishedAfter": "2026-01-01",
  "publishedBefore": "2026-06-30",
  "includeReposts": true,
  "includePinned": true,
  "maxPagesPerTarget": 100
}

The limits are safety ceilings, not guarantees that every historical post is publicly accessible. Record empty targets and gaps. Never quietly replace a failed target with a different account after seeing the data.

Keep source and derived layers separate

The source layer should preserve text, timestamps, author, engagement, media, repost provenance, and scrape time. The derived layer can add language, topic, sentiment, entity, or moderation labels.

source = {(row["ownerId"], row["postId"]): row for row in posts}

analysis = []
for key, row in source.items():
    analysis.append(
        {
            "owner_id": key[0],
            "post_id": key[1],
            "text_length": len(row.get("text") or ""),
            "has_media": bool(row.get("media")),
            "is_repost": row.get("repost") is not None,
            "observed_views": row.get("viewsCount"),
        }
    )

Store model version, prompt or ruleset, confidence, and review state with every derived label. Translation should never overwrite the source-language text.

Document measurement limits

Engagement counters are snapshots. Public wall pagination may change. Deleted or restricted posts are missing by definition. Community audiences differ, and visible comments or reactions do not represent all viewers. A public handle can be renamed while numeric owner IDs remain stable.

These limits belong in the methods section and dataset card. Include the collection date, Actor version, input, run ID, number of requested and successful targets, row counts by owner, date coverage, duplicate policy, and known failures.

Apply ethical and legal safeguards

Public availability is not the same as low risk. Avoid collecting individual-level data when community-level counts answer the question. Do not infer protected or sensitive traits. Establish retention and deletion procedures. Consider whether quoting post text creates searchability or harm, and use paraphrases or aggregate statistics when raw examples are unnecessary.

Before collecting politically sensitive, sanctioned, conflict-related, or vulnerable-population data, obtain appropriate legal and ethical review. The Actor is a collection tool; it cannot make the research purpose legitimate by itself.

Frequently asked questions

Can this collect private VK data?

No. It is limited to public profile, community, wall, and direct-post pages available without login.

What should identify a post in a research database?

Use ownerId and postId together. Retain sourceUrl and scrapedAt as provenance, and do not use mutable text as the primary key.

Related

Try it yourself

100 free credits, no credit card.

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