# VK Community Posts Scraper – Public Wall Export (`scrapingmonkey/vk-community-posts-scraper`) Actor

Collect public VK community posts by screen name. Export text, authors, dates, engagement counts, media references, and community details with wall pagination.

- **URL**: https://apify.com/scrapingmonkey/vk-community-posts-scraper.md
- **Developed by:** [ScrapingMonkey](https://apify.com/scrapingmonkey) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

Collect public wall posts from VK groups and public pages, with the source community's details attached to each result. **VK Community Posts Scraper** returns post text, authors, dates, engagement counts, media references, and available repost context.

Use it to compare brand content, follow community announcements, or build a public content dataset. A page budget controls how far to collect from each community, while every post remains a separate row.

| At a glance | Details |
|---|---|
| 📥 Input | Plain VK community screen names, such as `vk` |
| 📤 Output | One row per collected post, with source-community context |
| 📄 Pagination | Configurable pages per community; wall offsets advance by 10 |
| 📎 Media | Available attachment metadata, URLs, previews, and supplied repost details |
| 🔐 Login required | No VK credentials or cookies |

### What the VK community posts scraper collects 📰

Each collected wall post can include:

- Composite post ID, numeric ID, wall owner ID, and permalink
- Text, author name and ID, profile link, and avatar
- Publication timestamp, UTC date, and visible date text
- Like, comment, repost, and view counts
- Photo, video, document, link, poll, or other attachment metadata when exposed
- Supplied repost history and available copyright or geographic context
- Pinned, advertising, favorite, and action indicators
- Public source-community details

The source community's identity, description, member count, links, and other available details repeat on each post. This keeps the result usable when posts are filtered or exported separately.

### How to scrape VK community posts 🚀

1. Add plain community screen names such as `vk`.
2. Choose `pagesPerCommunity` for the wall-page budget.
3. Start the Actor and review the collected posts and any failed rows.
4. Export the dataset or pass selected post URLs to another workflow.

```json
{
  "inputList": [
    "vk"
  ],
  "pagesPerCommunity": 2
}
```

Duplicate screen names are processed once case-insensitively. Repeated post IDs are removed across pages of the same wall.

### VK community post fields and output 📦

| Field group | Included data |
|---|---|
| Post identity | Input, status, composite ID, numeric post ID, wall owner, and URL |
| Content and author | Text, author identity, avatar, dates, and timestamp |
| Engagement | Likes, comments, reposts, and views |
| Media and context | Attachments, supplied repost history, copyright, geography, and post indicators |
| Source community | Community ID, name, type, description, website, audience counts, images, and available contacts or business details |

Complete illustrative output item with all 110 fields. The post, community, and values below are fictional examples, not a live result:

```json
{
  "input": "sample.workshop",
  "status": "success",
  "url": "https://vk.ru/wall-12345678_250",
  "id": "-12345678_250",
  "post_id": 250,
  "owner_id": -12345678,
  "author_id": -12345678,
  "text": "Our next photography workshop takes place this Saturday. See the schedule on our website.",
  "date": "2026-09-08T11:00:00Z",
  "timestamp": 1788865200,
  "date_text": "8 сен 2026 в 14:00",
  "author.id": -12345678,
  "author.name": "Example Photography Workshop",
  "author.url": "https://vk.ru/sample.workshop",
  "author.avatar_url": "https://example.com/community-400.jpg",
  "likes_count": 84,
  "comments_count": 12,
  "reposts_count": 7,
  "views_count": 2400,
  "attachments.path": [
    "/0/type",
    "/0/id",
    "/0/owner_id",
    "/0/album_id",
    "/0/text",
    "/0/timestamp",
    "/0/url",
    "/0/width",
    "/0/height",
    "/0/thumbnails/0/url",
    "/0/thumbnails/0/width",
    "/0/thumbnails/0/height",
    "/0/thumbnails/0/type"
  ],
  "attachments.value": [
    "photo",
    987654321,
    -12345678,
    -7,
    "Workshop studio",
    1788865200,
    "https://example.com/workshop-photo.jpg",
    1280,
    853,
    "https://example.com/workshop-photo.jpg",
    1280,
    853,
    "x"
  ],
  "reposted_posts.path": [],
  "reposted_posts.value": [],
  "post_type": "post",
  "signer_id": 0,
  "is_pinned": false,
  "is_ad": false,
  "is_favorite": false,
  "can_like": false,
  "can_comment": false,
  "can_repost": false,
  "copyright.path": [
    "/name",
    "/link"
  ],
  "copyright.value": [
    "Example Photography Workshop",
    "https://example.com/workshops"
  ],
  "geo.path": [],
  "geo.value": [],
  "community.avatar_url": "https://example.com/community-400.jpg",
  "community.community_url": "https://vk.ru/sample.workshop",
  "community.id": 12345678,
  "community.username": "sample.workshop",
  "community.name": "Example Photography Workshop",
  "community.type": "page",
  "community.activity": "Photography",
  "community.description": "Public photography workshops and community events.",
  "community.community_status": "New workshop dates are available",
  "community.website": "https://example.com/workshops",
  "community.members_count": 8200,
  "community.posts_count": 250,
  "community.photos_count": 680,
  "community.videos_count": 22,
  "community.clips_count": 14,
  "community.is_verified": false,
  "community.is_closed": false,
  "community.can_access_closed": true,
  "community.contacts.user_id": [
    123456789
  ],
  "community.contacts.name": [
    "Alex Morgan"
  ],
  "community.contacts.description": [
    "Workshop coordinator"
  ],
  "community.contacts.phone": [
    ""
  ],
  "community.contacts.email": [
    "workshops@example.com"
  ],
  "community.links.id": [
    42
  ],
  "community.links.name": [
    "Workshop schedule"
  ],
  "community.links.description": [
    "Dates and registration"
  ],
  "community.links.url": [
    "https://example.com/workshops"
  ],
  "community.links.photo_url": [
    "https://example.com/workshop-thumbnail.jpg"
  ],
  "community.city.id": 1,
  "community.city.name": "Moscow",
  "community.country.id": 1,
  "community.country.name": "Russia",
  "community.address": "Workshop studio",
  "community.market.path": [
    "/enabled"
  ],
  "community.market.value": [
    false
  ],
  "community.business_data.path": [
    "/company_name"
  ],
  "community.business_data.value": [
    "Example Photography Workshop"
  ],
  "community.friends_count": 0,
  "community.articles_count": 8,
  "community.topics_count": 5,
  "community.docs_count": 2,
  "community.addresses_count": 1,
  "community.avatar_thumbnails.size": [
    "100",
    "400_orig"
  ],
  "community.avatar_thumbnails.url": [
    "https://example.com/community-100.jpg",
    "https://example.com/community-400.jpg"
  ],
  "community.cover_url": "https://example.com/community-cover.jpg",
  "community.cover_images.url": [
    "https://example.com/community-cover.jpg"
  ],
  "community.cover_images.width": [
    1590
  ],
  "community.cover_images.height": [
    400
  ],
  "community.latitude": "55.75",
  "community.longitude": "37.62",
  "community.closed_type": 0,
  "community.is_member": false,
  "community.is_advertiser": false,
  "community.is_no_index": false,
  "community.age_limits": 0,
  "community.main_section": 0,
  "community.member_status": 0,
  "community.can_message": false,
  "community.can_post": false,
  "community.can_see_all_posts": true,
  "community.can_upload_doc": false,
  "community.can_upload_video": false,
  "community.start_at": 0,
  "community.start_date": "",
  "community.finish_at": 0,
  "community.finish_date": "",
  "community.event_status": "",
  "community.action_button.path": [
    "/type",
    "/url"
  ],
  "community.action_button.value": [
    "open_url",
    "https://example.com/workshops"
  ],
  "community.community_channel.path": [],
  "community.community_channel.value": [],
  "community.addresses.path": [
    "/main_address/id",
    "/main_address/address"
  ],
  "community.addresses.value": [
    1,
    "Workshop studio"
  ],
  "community.menu.path": [],
  "community.menu.value": []
}
```

Each post occupies one row in one table. JSON uses the same literal keys as the columns, including `author.name` and `community.name`. The source community is repeated within each post row rather than saved as a separate result.

Variable attachment fields use matching `attachments.path` and `attachments.value` lists. For example, `/0/type` identifies the first attachment's type; the corresponding value is at the same list position. Reposted content, copyright, and geography use the same paired-list pattern. Variable community sections, such as `community.market.path` and `community.market.value`, use the same pattern. Community contacts, links, avatars, and cover images use aligned lists within each field group.

Successful results preserve empty strings, empty lists, `0`, and `false` when values are omitted. Missing counts should not automatically be interpreted as confirmed zero engagement or audience. Failed results retain `input`, set `status` to `failed`, and use `null` for the other fields.

### Input requirements and wall coverage ⚙️

| Parameter | Type | Default | Rules |
|---|---|---|---|
| `inputList` | array of strings | Required | At least one VK community screen name |
| `pagesPerCommunity` | integer | `1` | Minimum 1; no fixed upper limit |

Screen names must contain 1–64 letters, digits, underscores, or periods. Surrounding whitespace is trimmed. Accepted: `vk`. Rejected: `@vk`, `https://vk.ru/vk`, or a name containing spaces.

The name must resolve to a community rather than a user profile. Groups and public pages can expose different amounts of wall content. Closed or restricted communities may return limited public data or fail.

Wall pages use offsets that advance by 10. Collection continues while a page contains posts, within the requested page budget and any reported wall total. An empty page ends that wall's pagination. A page containing only previously seen posts adds no duplicates but can still lead to another request.

An empty wall before any posts have been collected produces a failed row. An empty page after successful collection adds no failure. Page budgets do not guarantee exactly 10 saved posts per page or a complete historical archive.

### VK community post use cases 🎯

#### Community content research

Collect public announcements, campaign posts, and media references from a defined list of groups or brand pages.

#### Brand-content comparisons

Compare post formats, publication dates, and public engagement while retaining member counts and source-community identity.

#### Repeated post collection

Schedule runs and compare composite post IDs in your database to identify newly observed community posts.

#### Discussion follow-up

Select relevant post URLs from the wall results and collect their public comments with Post Comments Scraper.

### Pricing and billable post rows 💰

Check the Actor's **Pricing** tab for the current charging model and rate.

Under dataset-item pricing, each saved post or failed row can count as a result. An unavailable community, an empty wall, or a page that remains unavailable after retries can produce a failed row. Automatic retries do not independently create additional rows.

Source-community details, attachments, and repost history remain in each post row. Increasing `pagesPerCommunity` can increase the number collected, but it sets a page budget rather than an exact result count.

### VK community posts API and integrations 🔌

Use the ID shown in the Actor's API tab for `$ACTOR_ID` and your Apify token for `$APIFY_TOKEN`:

```bash
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputList":["vk"],"pagesPerCommunity":2}'
```

Call the Actor through REST, Apify client libraries, schedules, or webhooks. Send its default dataset to a spreadsheet, Make, Zapier, a content database, or your own reporting workflow. Composite post IDs are useful for comparing repeated runs.

### Reliability and public wall limits ⚠️

The Actor processes up to five requests concurrently and retries temporary request failures. An invalid screen name, wrong target type, or unavailable page produces a failed row while other communities continue.

A later-page failure leaves previously saved posts in the dataset and adds a failed row for the same input. Duplicate suppression applies within a wall's pagination; repeated runs need their own ID-based comparison.

VK may restrict wall history, omit counts or attachments, and change public page layouts. Supplied repost history is included to a maximum of three levels; original source posts are not separately crawled. Media URLs may expire, and the Actor does not download binary files.

### Frequently asked questions ❓

#### Can I submit full VK links?

Enter plain community screen names. For `https://vk.ru/vk`, submit `vk`.

#### Will two pages always produce 20 posts?

No. Wall offsets advance by 10, but short responses, duplicates, restrictions, and the end of available content can reduce the number saved.

#### Are community details a separate result?

No. The source community's public details are included on every post row, so the exported post keeps its account context.

#### Does it collect all historical wall posts?

It collects the pages available within your budget. Public restrictions, source totals, and empty pages can end collection before a complete history is available.

#### Does it return comments or download media?

It returns the available comment count and media references. Use Post Comments Scraper for individual comments; binary media files are not downloaded.

#### What happens when a wall is empty?

If no posts have been collected, an empty wall produces a failed row. An empty page after successful collection simply ends pagination.

### Support, responsible use, and related actors 🛟

For a reproducible issue, share the run ID, a public community screen name, the page budget, and the expected behavior through the Actor's support channel.

Use public wall content in accordance with applicable privacy, copyright, contractual, and platform requirements.

# Actor input Schema

## `inputList` (type: `array`):

Enter one VK community screen name per item, for example vk. Use only the screen name without @ or a VK link.

## `pagesPerCommunity` (type: `integer`):

Choose how many wall pages to request for each community. Collection stops automatically when VK returns no more posts.

## Actor input object example

```json
{
  "inputList": [
    "vk"
  ],
  "pagesPerCommunity": 1
}
```

# Actor output Schema

## `posts` (type: `string`):

One success Dataset row per unique VK community post, plus failed rows for inputs or pages that could not be processed.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "inputList": [
        "vk"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/vk-community-posts-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "inputList": ["vk"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/vk-community-posts-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "inputList": [
    "vk"
  ]
}' |
apify call scrapingmonkey/vk-community-posts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapingmonkey/vk-community-posts-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/LRphI85lJYhaWqQXy/builds/RO7jd2T7mdNbdek22/openapi.json
