# VK Profile Scraper – Public User Data (`scrapingmonkey/vk-profile-details-scraper`) Actor

Extract public VK profiles by screen name. Get biographies, audience counts, images, account indicators, and published background or contact fields in one row.

- **URL**: https://apify.com/scrapingmonkey/vk-profile-details-scraper.md
- **Developed by:** [ScrapingMonkey](https://apify.com/scrapingmonkey) (community)
- **Stats:** 4 total users, 3 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 VK user-profile information from screen names. **VK Profile Scraper** returns identity, biography, audience and content counts, pictures, published occupation or education details, and contact fields when the profile exposes them.

Use it to enrich a known account list, organize public creator records, or compare profile changes across runs. Each unique processed screen name produces one row with the same fields in the table and JSON export.

| At a glance | Details |
|---|---|
| 📥 Input | Plain VK user screen names, such as `durov` |
| 📤 Output | Identity, bio, counts, images, account indicators, and published profile details |
| 🔐 Login required | No VK credentials or cookies |
| ⚡ Processing | Up to 5 requests concurrently with automatic retries |
| 💾 Delivery | One row per unique processed screen name |

### What the VK profile scraper extracts 👤

Available public profile fields include:

- ID, screen name, display name, profile URL, and name components
- Biography, status text, website, interests, and other published profile text
- City, country, hometown, and birthday when shown
- Follower, friend, subscription, and content counts
- Avatar sizes, cover images, and image dimensions
- Verification, privacy, deactivation, and other account indicators
- Public occupation, career, education, and related profile sections
- Published phone and connected-account fields
- Online or last-seen information when supplied by VK

Field availability varies by profile and public access. Counts describe the account; they do not include lists of followers, friends, or posts.

### How to scrape VK profile details 🚀

1. Add plain user screen names such as `durov`.
2. Omit `@` and full VK profile URLs.
3. Start the Actor and review success and failed rows.
4. Export the results or connect the dataset to your enrichment workflow.

```json
{
  "inputList": [
    "durov"
  ]
}
```

Duplicate screen names are processed once, ignoring letter case. The Actor checks that the resolved target is a user profile; community names belong in Community Details Scraper.

### VK profile fields and output 📦

| Field group | Included data |
|---|---|
| Identity | IDs, names, profile URL, avatar, and cover images |
| Public profile text | Bio, status, interests, website, and published location or birthday |
| Audience and content | Followers, friends, subscriptions, posts, and media counts |
| Account context | Privacy, verification, deactivation, last-seen, and access indicators |
| Background | Occupation and available career, education, personal, or related sections |
| Published connections | Connected accounts and public phone fields |

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

```json
{
  "input": "sample.creator",
  "status": "success",
  "avatar_url": "https://example.com/avatar-400.jpg",
  "profile_url": "https://vk.ru/sample.creator",
  "id": 123456789,
  "username": "sample.creator",
  "name": "Alex Morgan",
  "first_name": "Alex",
  "last_name": "Morgan",
  "nickname": "",
  "maiden_name": "",
  "sex": 0,
  "sex_name": "",
  "birth_date": "",
  "city.id": 1,
  "city.name": "Moscow",
  "country.id": 1,
  "country.name": "Russia",
  "home_town": "",
  "profile_status": "Sharing photography notes",
  "about": "Photographer and workshop organizer.",
  "activities": "Photography workshops",
  "interests": "Architecture, photography",
  "music": "",
  "movies": "",
  "tv": "",
  "books": "",
  "games": "",
  "quotes": "",
  "website": "https://example.com/portfolio",
  "avatar_thumbnails.size": [
    "100",
    "400_orig"
  ],
  "avatar_thumbnails.url": [
    "https://example.com/avatar-100.jpg",
    "https://example.com/avatar-400.jpg"
  ],
  "cover_url": "https://example.com/cover.jpg",
  "cover_images.url": [
    "https://example.com/cover.jpg"
  ],
  "cover_images.width": [
    1590
  ],
  "cover_images.height": [
    400
  ],
  "followers_count": 4200,
  "friends_count": 280,
  "subscriptions_count": 46,
  "posts_count": 125,
  "photos_count": 340,
  "videos_count": 18,
  "clips_count": 7,
  "audios_count": 0,
  "albums_count": 8,
  "gifts_count": 0,
  "articles_count": 4,
  "mutual_friends_count": 0,
  "online": false,
  "online_mobile": false,
  "last_seen_at": 1788868800,
  "last_seen_date": "2026-09-08T12:00:00Z",
  "last_seen_platform": 7,
  "is_verified": false,
  "is_trending": false,
  "is_private": false,
  "is_deactivated": false,
  "deactivated_reason": "",
  "is_memorial": false,
  "is_service": false,
  "is_nft": false,
  "is_no_index": false,
  "friend_status": 0,
  "can_access_closed": true,
  "can_message": false,
  "can_send_friend_request": false,
  "can_post": false,
  "can_see_all_posts": true,
  "can_see_audio": false,
  "occupation.id": 0,
  "occupation.name": "Independent photographer",
  "occupation.type": "work",
  "career.path": [
    "/0/company",
    "/0/position",
    "/0/from"
  ],
  "career.value": [
    "Example Studio",
    "Photographer",
    2021
  ],
  "schools.path": [],
  "schools.value": [],
  "universities.path": [
    "/0/name",
    "/0/graduation"
  ],
  "universities.value": [
    "Example Institute of Design",
    2020
  ],
  "military.path": [],
  "military.value": [],
  "relatives.path": [],
  "relatives.value": [],
  "personal.path": [],
  "personal.value": [],
  "connections.skype": "",
  "connections.facebook": "",
  "connections.facebook_name": "",
  "connections.twitter": "",
  "connections.instagram": "sample.creator",
  "connections.livejournal": "",
  "contacts.mobile_phone": "",
  "contacts.home_phone": ""
}
```

Each profile occupies one row in one table. JSON uses the same literal names, such as `city.name`. Avatar and cover lists match by position within their respective groups.

Variable profile sections use paired lists such as `career.path` and `career.value`. A path like `/0/company` identifies the company field in the first career entry; its value is at the same position in the value list. The same pattern covers schools, universities, military, relatives, and personal fields without placing JSON objects inside a column.

Successful rows preserve empty strings, empty lists, `0`, and `false` for omitted values. A zero count or false indicator is not always a confirmed fact about the account. Failed rows retain `input`, set `status` to `failed`, and use `null` for the profile-data fields.

### Input requirements and profile coverage ⚙️

| Parameter | Type | Required | Rules |
|---|---|---|---|
| `inputList` | array of strings | Yes | At least one user screen name |

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

The resolved target must be a VK user. Closed or restricted profiles may expose limited public details or be unavailable. Access and relationship indicators reflect the public response; they do not authorize actions on the account.

No pagination setting is needed. Profile Posts Scraper collects wall content when you need individual post rows.

### VK profile data use cases 🎯

#### Public account enrichment

Add profile names, biographies, websites, pictures, and publicly supplied background details to a known account list.

#### Creator research

Compare audience counts, activity descriptions, interests, and visible content totals while keeping missing values distinct from confirmed measurements.

#### Profile-change reporting

Schedule repeat runs and compare public names, status text, websites, images, and counts in your own database.

#### Cross-platform profile organization

Use published connected-account fields and canonical VK URLs to organize public profile records for further review.

### Pricing and billable profile rows 💰

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

Under dataset-item pricing, each saved success or failed row can count as one result. Duplicate screen names are normally processed once, and automatic retries do not independently create additional rows.

Career entries, images, and other repeated details stay in the profile row. They are not separate dataset items.

### VK profile API and integrations 🔌

Use the Actor ID from the 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":["durov"]}'
```

Trigger runs with REST, Apify client libraries, schedules, or webhooks. Export the default dataset to a spreadsheet, Make, Zapier, a public-profile database, or your own reporting workflow.

### Reliability and public profile limits ⚠️

The Actor processes up to five requests concurrently and retries temporary request failures. Invalid screen names, unavailable profiles, or a community submitted as a user produce failed rows while other inputs continue.

VK may omit counts, last-seen information, contact fields, or background sections. Last-seen values are returned only when exposed, and missing counts can default to zero. Public privacy and access indicators are descriptive fields, not a way to access hidden content.

Profile names and availability can change between runs. Image URLs can expire, and the Actor returns image references without downloading the files. A dataset-storage failure can stop a run.

### Frequently asked questions ❓

#### Can I paste a VK profile URL?

Enter only the screen name. For `https://vk.ru/durov`, use `durov`.

#### Can it extract a community profile?

Use Community Details Scraper for groups, public pages, and event communities. This Actor expects a user profile.

#### Does it return public contact details?

Phone and connected-account fields are included when VK supplies them publicly. The Actor does not discover hidden contact information.

#### Does it return friends or followers individually?

No. It returns aggregate counts and profile details. It does not collect friend or follower lists.

#### Why is a count zero on a successful profile?

VK may have reported zero or omitted the value. Missing numeric values default to zero, so compare them with the rest of the profile before drawing conclusions.

#### How do I read career or education values?

Match each path to the value at the same list position. Numbers within paths identify entries; for example, `/0/company` belongs to the first career entry.

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

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

Use public profile data in accordance with applicable privacy, contractual, copyright, and platform requirements.

# Actor input Schema

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

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

## Actor input object example

```json
{
  "inputList": [
    "durov"
  ]
}
```

# Actor output Schema

## `profiles` (type: `string`):

One success or failed Dataset row per VK profile input.

# 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": [
        "durov"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/vk-profile-details-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": ["durov"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/vk-profile-details-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": [
    "durov"
  ]
}' |
apify call scrapingmonkey/vk-profile-details-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapingmonkey/vk-profile-details-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/HbPHaDo9ydFrD4ph2/builds/bwMhQz6agYctQsSh8/openapi.json
