# WeChat Channels User Videos Scraper (`opspilot.cc/wechat-channels-user-videos-scraper`) Actor

EN — Pull all videos uploaded by a WeChat Channels (视频号) creator: video metadata + media URL + metrics, with pagination via `last_buffer`. ZH — 通过视频号 finder username 抓取创作者的全部作品：视频元数据 + 媒体地址 + 互动数据，支持 `last_buffer` 翻页。

- **URL**: https://apify.com/opspilot.cc/wechat-channels-user-videos-scraper.md
- **Developed by:** [wang wei](https://apify.com/opspilot.cc) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.10 / actor start

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## WeChat Channels User Videos Scraper

**EN — Scrape all videos uploaded by a WeChat Channels (视频号) creator. Get one or many pages of video metadata with author, media URL, decode\_key, like / comment / share counts, plus a `next_buffer` for chaining.**

**ZH — 通过视频号 finder username 抓取创作者的全部作品：视频元数据 + 媒体地址 + 互动数据，支持 `last_buffer` 翻页。**

### What you get

For one creator `username` you get back **one record per video** (across as many pages as `max_pages` allows):

- **Identity** — `id` (string), `objectNonceId` (string), `username`, `nickname`
- **Content** — `title` / `description` / `shortTitle` / `coverImgUrl` / `objectType` / `createTime` (unix seconds)
- **Location** — city / country / `poiName` (when posted from a tagged location)
- **Media download** — `media.url` + `media.url_token` + `media.full_url` + `media.decode_key` (decrypt and combine to actually download)
- **Metrics** — `read_count` / `like_count` / `fav_count` / `forward_count` / `comment_count`
- **Provenance** — `sourceEndpoint`, `fetchedAt`

The Actor also writes a SUMMARY record to its KV store with `nextBuffer` / `pagesFetched` / `totalPushed` so the next page can be pulled without re-running the search.

### Use it together with the other WeChat Actors

| Where in the pipeline | Actor | Console | Use it to |
|---:|---|---|---|
| before / step ① | [WeChat Channels User Profile Scraper](https://console.apify.com/actors/YTWhw209Ic7PxM8d0) | opspilot.cc/wechat-channels-user-profile-scraper | step ① — find a creator's `username` from a nickname or signature |
| before / step ① | [WeChat Channels Video Search Scraper](https://console.apify.com/actors/VAtqWhR0gxKlezuPU) | opspilot.cc/wechat-channels-video-search-scraper | step ① — find creator usernames from a keyword |
| **You are here** | **WeChat Channels User Videos Scraper** | opspilot.cc/wechat-channels-user-videos-scraper | step ② — turn a username into a catalog of `object_id`s |
| after / step ③ | [WeChat Channels Video Detail Scraper](https://console.apify.com/actors/7qMMl0n4LMJaCsx0F) | opspilot.cc/wechat-channels-video-detail-scraper | step ③ — enrich each `object_id` with the full detail payload |
| after / step ③ | [WeChat Channels Video Comments Scraper](https://console.apify.com/actors/YtFcmpVepdn5hBP9q) | opspilot.cc/wechat-channels-video-comments-scraper | step ③ — feed each `object_id` to harvest the comment thread |

### Input

The Actor requires `username` in `v2_<hex>@finder` format (10–256 chars). Two optional fields control scope:

- `last_buffer` (base64 cursor, optional) — pass back the `nextBuffer` field from a previous run's SUMMARY to continue where you left off.
- `max_pages` (integer, 1–50, default 1) — cap the run. Each page returns ~15 videos. Use 1 for a quick test, 5+ for a full catalog.
- `raw` (`true`/`false`, default `false`) — attach the unprocessed upstream payload per video as `raw`.

If `username` is missing or malformed the Actor fails fast with `username is required (v2_<hex>@finder format).` — no upstream charge.

### Pricing & Limits

- **Free tier**: 5 runs/day, capped at the Actor's default KV store
- **Paid tier**: $0.01 per `user-videos-result` event (one charge per page fetched)
- **Hard caps**: 50 pages per run; ~15 videos per page = up to ~750 videos per run
- **Upstream latency**: ~30 s on the upstream side; this Actor uses a 60 s client timeout to avoid billing-without-response

### Caveats

- **64-bit numeric IDs (`id`, `objectNonceId`, `decodeKey`) are returned as strings** to preserve precision (JavaScript `Number` overflows past 2^53)
- `media.url` returns **encrypted bytes**; to actually download a playable video you must combine it with `media.decode_key`
- `last_buffer` is **opaque** — pass it back verbatim, do not parse or re-encode
- A creator's full catalog can span 100+ pages; budget accordingly with `max_pages`
- The first page typically returns up to 15 videos; later pages may have fewer

### Support

Open an issue on the [Apify Console run page](https://console.apify.com/actors) for this Actor.

# Actor input Schema

## `username` (type: `string`):

WeChat Channels creator finder username in `v2_<hex>@finder` format (10-256 chars). Required.

## `last_buffer` (type: `string`):

Pagination cursor from a previous run's `nextBuffer` field. Leave empty for the first page.

## `max_pages` (type: `integer`):

Maximum number of pages to fetch in this run. Each page returns ~15 videos. Use 1 for a quick test.

## `raw` (type: `string`):

Attach the unprocessed upstream payload per video as `raw`. `false` returns only the flattened schema.

## Actor input object example

```json
{
  "username": "v2_060000231003b20faec8c7ea8d11c3d4c907e83db0775f87c9449acd6a89298e462485cc23a8@finder",
  "last_buffer": "",
  "max_pages": 1,
  "raw": "false"
}
```

# Actor output Schema

## `dataset` (type: `string`):

One item per video by the WeChat Channels creator — id, objectNonceId, username, nickname, title, description, shortTitle, createTime, objectType, coverImgUrl, location, readCount, likeCount, favCount, forwardCount, commentCount, media, sourceEndpoint, and the original upstream payload in raw.

## `summary` (type: `string`):

object\_id / username, source kind (object\_id vs share\_url vs username), upstream request count, request cost, and any error details.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("opspilot.cc/wechat-channels-user-videos-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("opspilot.cc/wechat-channels-user-videos-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 '{}' |
apify call opspilot.cc/wechat-channels-user-videos-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,opspilot.cc/wechat-channels-user-videos-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/rzHbAt3tTT5pbrG5q/builds/V6YlAdyOZTUBu69oA/openapi.json
