# VK Videos Search Scraper (`maximedupre/vk-videos-search-scraper`) Actor

Search public VK and VKVideo videos by keyword or search URL. Export video titles, descriptions, source links, media URLs when available, thumbnails, engagement counts, dimensions, permissions, and scrape timestamps.

- **URL**: https://apify.com/maximedupre/vk-videos-search-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.45 / 1,000 videos

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

### 🔎 VK videos search scraper for public video results

VK Videos Search Scraper collects public video search results from [VKVideo](https://vkvideo.ru/) and VK video search pages. Add one or more keywords, or paste a VK/VKVideo search URL such as `https://vkvideo.ru/?q=bike`, then export clean rows with video titles, descriptions, source links, player links, media URLs when available, thumbnails, engagement counts, dimensions, permissions, subtitles when exposed, and scrape timestamps.

Use this VK videos search scraper when you need public VK video data for content research, social media monitoring, brand tracking, media review, archiving, or reporting. The Actor is built for public video search results. It does not ask for VK cookies, VK login details, or your own API key.

For a quick first run, keep the prefilled `bike` keyword and the default limit of `25` videos per keyword. The Actor saves one row per accepted public video result, so you can open the dataset while the run is still in progress and export it as JSON, CSV, Excel, XML, RSS, or HTML.

### ✅ What this Actor does

- Searches public VK and VKVideo videos by keyword.
- Accepts VK and VKVideo search result URLs that contain a `q` search query.
- Saves one dataset row per public video result.
- Extracts video IDs, owner IDs, titles, descriptions, source URLs, player URLs, duration, publish time when exposed, and scrape time.
- Returns direct media URLs when VK exposes them, including MP4 qualities and HLS links.
- Adds thumbnails, first frames, dimensions, available qualities, subtitle tracks when present, and public engagement counts.
- Adds permissions such as like, repost, and download availability when VK exposes them.
- Lets you cap rows per keyword or search URL to control run size and cost.
- Handles empty searches as clean zero-row runs instead of saving placeholder rows.

This Actor focuses on public VK video search results. It does not scrape VK posts, followers, people, groups, market listings, games, private videos, deleted videos, login-only videos, account recommendations, or short-video clips as a separate clips search product.

### 📦 Data you can export

Each output row represents one public VK video result. Depending on what VK exposes for that video, rows can include:

- `target`, `targetType`, and `searchKeyword`
- `sourceRank`
- `videoId`, `ownerId`, and `vkVideoId`
- `sourceUrl` and `playerUrl`
- `title` and `description`
- `durationSeconds`, `publishedAt`, and `videoType`
- `engagement` with views, likes, reposts, comments, and total engagement when available
- `media.bestVideoUrl`, `media.hlsUrl`, `media.files`, `media.availableQualities`, and `media.mediaLinksAvailable`
- `thumbnails`, `bestThumbnail`, and `firstFrames`
- `specs.width`, `specs.height`, and `specs.hasSubtitles`
- `subtitles`
- `permissions`
- `scrapedAt`

Some fields can be empty when VK does not expose that value for a public video. Direct media links are returned when available from the source, but not every public video exposes every quality, subtitle, comment count, or downloadable media URL.

### 🚀 How to run

1. Add one or more terms in **Search keywords**.
2. Optional: paste VK or VKVideo search URLs in **VK video search URLs**.
3. Keep **Videos per keyword** at `25` for a small first run.
4. Start the Actor.
5. Open the dataset and export the rows or read them through the Apify API.

Example input:

```json
{
	"keywords": ["bike", "music"],
	"searchUrls": [
		{
			"url": "https://vkvideo.ru/?q=bike"
		}
	],
	"maxVideosPerKeyword": 25
}
````

### ⚙️ Input

| Field | What to enter |
| ----- | ------------- |
| `keywords` | VK video search terms. Each keyword is searched separately. |
| `searchUrls` | Optional VK or VKVideo search result URLs with a `q` query, such as `https://vkvideo.ru/?q=bike`. |
| `maxVideosPerKeyword` | Maximum video rows to save for each keyword or search URL. Default is `25`, maximum is `10000`. |

You can use keywords only, search URLs only, or both. Search URLs that do not contain a clear search query are ignored because this Actor is for the same keyword-search job.

### 📊 Output example

```json
{
	"target": "bike",
	"targetType": "keyword",
	"searchKeyword": "bike",
	"sourceRank": 1,
	"videoId": "-72701555_456239262",
	"ownerId": -72701555,
	"vkVideoId": 456239262,
	"sourceUrl": "https://vkvideo.ru/video-72701555_456239262",
	"playerUrl": "https://vkvideo.ru/video_ext.php?oid=-72701555&id=456239262",
	"title": "Example VK video title",
	"description": "Visible public video description",
	"durationSeconds": 785,
	"publishedAt": "2024-01-24T15:15:03.000Z",
	"engagement": {
		"views": 6012,
		"likes": 44,
		"reposts": 5,
		"comments": 4,
		"total": 6065
	},
	"media": {
		"bestVideoUrl": "https://example.com/video_1080.mp4",
		"hlsUrl": "https://example.com/video.m3u8",
		"files": [
			{
				"quality": "1080",
				"url": "https://example.com/video_1080.mp4"
			}
		],
		"availableQualities": ["1080"],
		"mediaLinksAvailable": true
	},
	"bestThumbnail": {
		"url": "https://example.com/thumbnail.jpg",
		"width": 1280,
		"height": 720
	},
	"specs": {
		"width": 1920,
		"height": 1080,
		"hasSubtitles": false
	},
	"permissions": {
		"canLike": true,
		"canRepost": true,
		"canDownload": true
	},
	"scrapedAt": "2026-06-12T19:00:00.000Z"
}
```

### 💸 Pricing

This Actor uses pay-per-event pricing. You pay `$0.00445` for each public video row that is saved, equal to `$4.45 per 1,000 saved videos`.

Runs that find no public videos do not create paid video events. Invalid, empty, private, deleted, login-only, or unsupported targets are handled in logs and are not saved as paid placeholder rows.

### ⚠️ Limits and caveats

- The Actor works with public VK and VKVideo video search results only.
- It does not download media files to Apify storage. It returns source media URLs when VK exposes them.
- Direct media URLs are opportunistic source fields. Some videos may expose HLS, MP4 qualities, thumbnails, subtitles, or comment counts differently.
- The Actor does not bypass privacy controls and does not use your VK account.
- Very large keyword batches should start with a small limit first so you can inspect output shape and cost.

### ❓ FAQ

#### 🔒 Can this scrape private VK videos?

No. It only works with public videos that VK exposes without a user login.

#### 💾 Does it download video files?

No. The Actor returns video metadata and source media URLs when available. It does not save video files to Apify storage in this release.

#### 🔗 Can I paste a VKVideo search URL instead of a keyword?

Yes. Paste a search URL with a `q` query, for example `https://vkvideo.ru/?q=bike`. The Actor treats it as the same search job as the keyword `bike`.

#### 📭 Why are some media fields empty?

VK does not expose every media quality, subtitle, permission, or engagement field for every public video. The Actor saves the usable row and leaves unavailable fields empty.

### 📝 Changelog

- 0.0: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~vk-videos-search-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [VK Posts Scraper ↗](https://apify.com/maximedupre/vk-posts-scraper) - Scrape public VK wall posts, authors, engagement, media metadata, and source links.
- [TikTok Video Downloader ↗](https://apify.com/maximedupre/tiktok-video-downloader) - Save public TikTok video or audio files with captions, author data, stats, and storage links.
- [Facebook Media Downloader ↗](https://apify.com/maximedupre/facebook-media-downloader) - Extract public Facebook video and reel media links, thumbnails, captions, and engagement.
- [Pinterest Video Downloader ↗](https://apify.com/maximedupre/pinterest-video-downloader) - Extract public Pinterest pin video and image URLs with pinner, board, and media variant data.
- [YouTube Trending Videos Scraper ↗](https://apify.com/maximedupre/youtube-trending-videos-scraper) - Collect ranked YouTube trending videos by region and category with channel and view data.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `keywords` (type: `array`):

Enter VK video search terms. Each keyword is searched separately.

## `searchUrls` (type: `array`):

Optional. Paste VK or VKVideo search result URLs you already use.

## `maxVideosPerKeyword` (type: `integer`):

Maximum video rows to save for each keyword or search URL. Keep 25 for a useful first run.

## Actor input object example

```json
{
  "keywords": [
    "bike"
  ],
  "searchUrls": [],
  "maxVideosPerKeyword": 25
}
```

# Actor output Schema

## `results` (type: `string`):

Open the dataset with one row per saved public VK video search result.

# 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 = {
    "keywords": [
        "bike"
    ],
    "searchUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/vk-videos-search-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 = {
    "keywords": ["bike"],
    "searchUrls": [],
}

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

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

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

```

## CLI example

```bash
echo '{
  "keywords": [
    "bike"
  ],
  "searchUrls": []
}' |
apify call maximedupre/vk-videos-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=maximedupre/vk-videos-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "VK Videos Search Scraper",
        "description": "Search public VK and VKVideo videos by keyword or search URL. Export video titles, descriptions, source links, media URLs when available, thumbnails, engagement counts, dimensions, permissions, and scrape timestamps.",
        "version": "0.0",
        "x-build-id": "r2mT73bfnodws3jFJ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/maximedupre~vk-videos-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-maximedupre-vk-videos-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/maximedupre~vk-videos-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-maximedupre-vk-videos-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/maximedupre~vk-videos-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-maximedupre-vk-videos-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "keywords": {
                        "title": "Search keywords",
                        "maxItems": 500,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Enter VK video search terms. Each keyword is searched separately.",
                        "items": {
                            "type": "string",
                            "minLength": 1
                        }
                    },
                    "searchUrls": {
                        "title": "VK video search URLs",
                        "type": "array",
                        "description": "Optional. Paste VK or VKVideo search result URLs you already use.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxVideosPerKeyword": {
                        "title": "Videos per keyword",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum video rows to save for each keyword or search URL. Keep 25 for a useful first run.",
                        "default": 25
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
