# WeChat Channels 微信视频号 Scraper - Videos, Channels & Comments (`vulnv/wechat-channels-scraper`) Actor

Scrape WeChat Channels (微信视频号 / Shipinhao): keyword video search, full video details, channel profiles, a channel's posted videos, and video comments. Export likes, favorites, shares, comments and channel data to JSON/CSV/Excel. No WeChat login, cookies or proxy needed.

- **URL**: https://apify.com/vulnv/wechat-channels-scraper.md
- **Developed by:** [VulnV](https://apify.com/vulnv) (community)
- **Categories:** Social media, Videos
- **Stats:** 2 total users, 0 monthly users, 89.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 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/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 Scraper - Search 微信视频号 Videos, Channels & Comments

**Scrape WeChat Channels (微信视频号 / Shipinhao) and export videos, channel profiles and comments to JSON, CSV or Excel.** Search videos by keyword, pull a single video's full details, get a channel's profile, list the videos a channel has posted, or collect a video's comments - all from one Actor. Each result is one clean, flat row with likes, favorites, shares, comments and channel data.

No WeChat account, no login, no cookies, no proxies and no China IP to configure - data is fetched through a fast, managed pipeline. Just pick an operation, add your input and press **Start**.

> **Unofficial notice:** This is an independent tool and is **not** affiliated with, endorsed by, or connected to WeChat, Weixin, 微信视频号 or Tencent. "WeChat", "WeChat Channels", "微信" and "视频号" are trademarks of their respective owners, used here only to describe what the Actor scrapes.

### What is WeChat Channels?

WeChat Channels (微信视频号, "Shipinhao") is the short-video and live-streaming feed built into WeChat, China's largest messaging app with over a billion monthly users. News outlets, brands, government accounts and independent creators all publish there, and because it lives inside WeChat, its videos spread through chats and Moments rather than a public website. This scraper gives you programmatic access to Channels search, videos, channels and comments so you can track topics, monitor channels and analyze engagement at scale without a WeChat account.

### Operations

Pick one **Operation** and fill in the matching field:

| Operation | Input field | What you get |
|-----------|-------------|--------------|
| **Search videos by keyword** | `keywords` | Videos matching each keyword, with likes, length, publish time and channel name. |
| **Video details** | `videoIds` | The full detail of each video (title, description, likes, favorites, shares, comments, media link, channel username). |
| **Video comments** | `videoIds` | Top-level comments for each video, with likes, time and commenter region. |
| **Channel profile** | `channelUsernames` | A channel's profile: name, bio, IP region, video count, collections, live hours, linked accounts. |
| **Channel's posted videos** | `channelUsernames` | The videos a channel has posted, paginated. |

`videoIds` accept numeric **object IDs** (e.g. `15011167357568031716`), **export IDs** from search results (`export/...`) or **share links** (`https://weixin.qq.com/sph/...`). `channelUsernames` take the channel's **username** in the `v2_...@finder` form - one per line.

#### Search results feed the other operations

Search rows carry only a short-lived `export_id`, the channel name and the like count - WeChat's search does not show favorites, shares, comment counts or the channel username. To get the full picture, copy the `export_id` values from a search run into `videoIds` and run **Video details** (or **Video comments**). Do this soon after searching: export IDs expire. Video detail rows return the stable `object_id` and the `channel_username`, which you can then use for **Channel profile** and **Channel's posted videos**.

### How to use it (step by step)

1. Choose an **Operation**.
2. Fill in the matching input:
   - Search videos -> add one or more **Search keywords** (Chinese, English and brand names all work).
   - Video details / Video comments -> paste **Video IDs / links** (object ID, export ID or share link).
   - Channel profile / Channel's videos -> paste **Channel usernames** (`v2_...@finder`).
3. Set **Maximum results per input** (default 100, or 0 for all available) for the paginated operations.
4. For search, optionally set **Sort order** (relevance, newest, most liked), **Video length** and **Published within**.
5. Press **Start**. Export the dataset as JSON, CSV, Excel, XML or via the API.

### Input

| Field | Type | Description |
|-------|------|-------------|
| `operation` | string | **Required.** `search_videos`, `video_detail`, `video_comments`, `channel_profile`, or `channel_videos`. |
| `keywords` | array | Search keywords (for `search_videos`). |
| `videoIds` | array | Object IDs, export IDs or share links (for `video_detail`, `video_comments`). |
| `channelUsernames` | array | Channel usernames, `v2_...@finder` (for `channel_profile`, `channel_videos`). |
| `maxItems` | integer | Max results per keyword / channel / video. `0` = all available. Default `100`. |
| `searchSort` | string | `default` (relevance), `latest`, or `hot` (most liked) - search only. |
| `searchDuration` | string | `all`, `short` (under 5 min), `medium` (5-10 min), or `long` (20 min+) - search only. |
| `searchPublishTime` | string | `all`, `day`, `week`, or `half_year` - search only. |

### Output

Every row carries a `record_type` of `video`, `channel` or `comment`. Common video fields:

| Field | Description |
|-------|-------------|
| `object_id`, `export_id` | Video identity: stable object ID (detail / channel videos) or short-lived export ID (search). |
| `title`, `description` | Video title and caption. |
| `like_count`, `favorite_count`, `share_count`, `comment_count` | Engagement metrics (search rows carry likes only). |
| `channel_username`, `channel_name`, `channel_avatar_url` | Channel data. |
| `cover_url`, `media_url`, `decode_key`, `duration_seconds`, `width`, `height` | Thumbnail, video file link and its decryption key, length and dimensions. |
| `create_time`, `location` | Publish time (ISO-8601 UTC) and tagged location, when set. |

Channel (`channel`) rows add `username`, `nickname`, `signature` (bio), `avatar_url`, `region`, `video_count`, `collection_count`, `live_duration_hours` and `linked_accounts`. Comment (`comment`) rows add `video_id`, `comment_id`, `content`, `like_count`, `create_time`, `ip_region` and the commenter's `author_name`, `author_username` and `author_avatar_url`.

Example video row:

```json
{
  "record_type": "video",
  "operation": "video_detail",
  "input": "15011167357568031716",
  "object_id": "15011167357568031716",
  "title": "…",
  "duration_seconds": 32,
  "create_time": "2026-09-15T11:09:56+00:00",
  "like_count": 2550,
  "favorite_count": 4326,
  "share_count": 25616,
  "comment_count": 1071,
  "channel_username": "v2_…@finder",
  "channel_name": "封面新闻"
}
```

### Common use cases

- **Topic and trend tracking** - watch what is being posted on WeChat Channels for any keyword, by relevance, newest or most liked.
- **Channel monitoring** - track a news outlet's, brand's or competitor's uploads and engagement over time.
- **Comment and sentiment research** - collect audience reactions, with commenter regions, for any video.
- **Market and AI research** - build datasets of Chinese short-video content and engagement.

### Notes on reliability

- WeChat hides follower and total-like counts on channel profiles, so they are not included.
- Only top-level comments are returned; WeChat does not report a per-comment reply count here.
- Export IDs from search, cover links and media links are short-lived; use them promptly.
- The video file at `media_url` may be encrypted by WeChat; `decode_key` is the key WeChat supplies for it.
- WeChat occasionally rejects a request for no reason; the Actor retries automatically.
- If a video or channel is private, deleted or unavailable, that input is skipped and the run continues.

### FAQ

**Do I need a WeChat account, cookies or a proxy?** No. Just add your input and press Start.

**Where do I find a channel's username?** Run **Video details** on any of the channel's videos - the row's `channel_username` is what the channel operations need. The public "Channels ID" (`sph...`) shown in the app is not accepted.

**Can I run several keywords, videos or channels at once?** Yes - add multiple lines. Duplicate videos across inputs are removed automatically.

**Can I try it for free?** Yes. Users on the free Apify plan can fetch up to 10 results in total to try the Actor. Upgrade to a paid Apify plan to run it without that limit.

**What export formats are supported?** JSON, CSV, Excel, XML and HTML, plus the Apify API and integrations such as Google Sheets, Zapier, Make and webhooks.

### Pricing

This Actor is **pay per result**: you are charged for each record it returns (videos, comments and channel profiles), plus standard Apify platform usage. Different record types have different prices; see the **Pricing** tab for current rates. You are never charged for inputs that return nothing.

### Related scrapers

- **[Douyin Scraper](https://apify.com/vulnv/douyin-search-scraper)** - 抖音 videos by keyword, with creators and downloads.
- **[Xiaohongshu Scraper](https://apify.com/vulnv/xiaohongshu-scraper)** - 小红书 / RedNote notes, users and comments.
- **[Bilibili Scraper](https://apify.com/vulnv/bilibili-scraper)** - 哔哩哔哩 videos, creators and comments.

# Actor input Schema

## `operation` (type: `string`):

What to scrape. Each operation uses a different input field below:

• Search videos → Keywords
• Video details → Video IDs / links
• Video comments → Video IDs / links
• Channel profile → Channel usernames
• Channel's videos → Channel usernames

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

For the "Search videos" operation. Add one or more keywords - Chinese, English and brand names all work. Each keyword is searched independently and cross-keyword duplicates are removed.

## `videoIds` (type: `array`):

For the "Video details" and "Video comments" operations. Paste numeric video object IDs (e.g. 15011167357568031716), export IDs from search results (export/...), or weixin.qq.com/sph/... share links - one per line.

## `channelUsernames` (type: `array`):

For the "Channel profile" and "Channel's videos" operations. Paste channel usernames in the v2\_...@finder form - one per line. Every video row carries its channel's username.

## `maxItems` (type: `integer`):

Upper bound on results per keyword / channel / video (for the paginated operations: search, channel's videos, comments). Cost scales linearly. Set 0 to fetch all available.

## `searchSort` (type: `string`):

For "Search videos" only. How WeChat orders results.

## `searchDuration` (type: `string`):

For "Search videos" only. Limit results by video length.

## `searchPublishTime` (type: `string`):

For "Search videos" only. Limit results by publish date.

## Actor input object example

```json
{
  "operation": "search_videos",
  "keywords": [
    "咖啡"
  ],
  "maxItems": 100,
  "searchSort": "default",
  "searchDuration": "all",
  "searchPublishTime": "all"
}
```

# Actor output Schema

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

All scraped WeChat Channels results in the default dataset.

## `overview` (type: `string`):

Overview table of the scraped results.

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

// Run the Actor and wait for it to finish
const run = await client.actor("vulnv/wechat-channels-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": ["咖啡"] }

# Run the Actor and wait for it to finish
run = client.actor("vulnv/wechat-channels-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 '{
  "keywords": [
    "咖啡"
  ]
}' |
apify call vulnv/wechat-channels-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vulnv/wechat-channels-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/ecK90FGIripfdGHsz/builds/DdEpgirpf6Vjfoa0I/openapi.json
