# Weibo Scraper - Posts, Search, Profiles & AI Translation (`ntriqpro/weibo-scraper-translate`) Actor

Weibo scraper (微博) without login: keyword search, account posts, profiles, post links, comments and the hot search board. One row per post, $0.004 each (first page as a visitor; more pages with your own cookies). Paid: AI translation to English or Korean and AI topic summaries.

- **URL**: https://apify.com/ntriqpro/weibo-scraper-translate.md
- **Developed by:** [daehwan kim](https://apify.com/ntriqpro) (community)
- **Categories:** Social media, Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.08 / 1,000 posts

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?

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

## Weibo Scraper - Posts, Search, Profiles & AI Translation

Scrape Weibo (微博) without login: give keywords, accounts or post links and get **one row per post** — full text of long posts, time, likes, comments and reposts, pictures, video, region, author — plus a profile row per account, a row per search and, if you want them, a row per comment. Without cookies Weibo shows visitors the first page only (about 20 posts per search, about 10 per account); more pages with your own cookies. Every post also gets free rule-based fields (language, hashtags, mentions, engagement). On paid plans you can add **AI translation into English or Korean** and an **AI topic summary** per search or account.

**Main price: $0.004 per post** ($0.0032 on BRONZE, $0.00208 on GOLD and up). With it, on every run: a **run-start fee** once ($0.005; BRONZE $0.004) and each **search made** ($0.01; BRONZE $0.008) or **profile** ($0.005; BRONZE $0.004). Only if you turn them on: each **comment** ($0.001; BRONZE $0.0008) and each **comment thread checked** ($0.002; BRONZE $0.0016), each checked **AI translation** ($0.003) and **AI summary** ($0.03). Details under [Pricing](#pricing). A paid run of 5 keywords × 20 posts with AI translation is about $0.66 on BRONZE ($0.004 + 5 × $0.008 + 100 × $0.0032 + 100 × $0.003 = $0.664).

| | Free plan (preview) | Paid Apify plan (Starter and up) |
|---|---|---|
| Inputs read per run | the first entry of the input (one search, account, post link or trending topic) | every entry: up to 100 searches, 200 accounts, 1,000 post links, the top 50 trending topics |
| Post rows | **1** per run, in full | up to `maxPostsPerSearch` / `maxPostsPerUser` (default 20, up to 1,000 each) |
| Profile rows | the first entry's account, in full (when it is an account) | every account |
| Search row | how many posts the pages held; its hashtag and engagement totals are of the one post shown | totals of every post delivered |
| Pages past the first (with your own cookies) | locked — your cookies are not used | yes |
| Comment rows | locked | up to `commentsPerPost` per post (up to 1,000) |
| AI translation (English / Korean) | locked — a free run asks no model | per post, checked before it is charged |
| AI topic summary per search / account | locked | one row each (it reads up to 30 posts, the first 300 characters of each), citing the posts it rests on |
| What a paid run would take | in a `free-plan-preview` row: posts found and withheld (counted, never shown), an estimate of the paid run of your input with **your** settings (BRONZE prices), and a fixed example of paid rows | — |
| Price | the event prices below (FREE tier) | the event prices with plan discounts |

| Apify plan | Discount on every collection event |
|---|---|
| FREE | — |
| BRONZE | 20% |
| SILVER | 35% |
| GOLD, PLATINUM, DIAMOND | 48% |

A free run ends as SUCCEEDED with a status message and a `free-plan-preview` row. Withheld posts are counted there and nowhere else: their text, IDs and links are in no row and in no total. An AI layer you did not turn on is shown as a setting to turn on (`aiTranslate`, `aiSummary`, `commentsPerPost`), not as a locked count. To get the full output, switch to a paid Apify plan, set what you want, and run the input again.

What paid rows look like — **an example on made-up sample data** (not a Weibo post, not a result of any run and not a measured model answer; the free-plan-preview row carries the same example):

```json
{
  "recordType": "post",
  "postUrl": "https://m.weibo.cn/detail/0000000000000001",
  "text": "示例：新款示例车今天到店试驾，续航比上一代多了一百公里。",
  "likesCount": 120, "commentsCount": 2, "repostsCount": 8,
  "translation": { "status": "translated", "language": "en", "text": "Example: the new example car arrived at the showroom for test drives today; its range is a hundred kilometres longer than the last model's." }
}
{
  "recordType": "summary",
  "scope": { "kind": "search", "value": "示例品牌" },
  "postsRead": 20,
  "summary": "Example: posts compare the new model's range with the old one; most are test-drive reports.",
  "sentiment": "mixed",
  "themes": [{ "what": "Range compared with the previous model", "evidencePostIds": ["0000000000000001"] }]
}
```

### What it is for

- **China market research and social listening**: what people post about a brand, a product or a policy, with likes, comments and reposts to rank by.
- **Reading Weibo without reading Chinese**: turn on AI translation and every post row carries an English or Korean translation next to the original.
- **Briefings**: one AI summary row per keyword or account — what the posts are about, the overall sentiment and up to five themes, each pointing to the posts it comes from.
- **Trend tracking**: `trendingTopics` reads Weibo's hot search board (微博热搜) and searches its top topics, with each topic's rank and heat on its search row.
- **Account monitoring**: a profile row (followers, post count, verification, region, creation date) and the latest posts of each account.

### How it reads Weibo (no login needed)

1. **As a visitor.** Weibo gives every visitor a cookie of its own. With it the Actor reads the first page of a search (its real-time and top feeds together, about 20 posts), the first page of an account's posts (about 10), profiles, single posts with their full text, and comments.
2. **Through a proxy if Weibo refuses.** If Weibo turns a direct request away, the run moves once to a residential proxy (Hong Kong) and goes on. You can also turn on your own proxy in `proxyConfiguration`. Proxy use is included in the event prices.
3. **With your own session (optional, paid plans).** Weibo shows page 2 onwards of a search or an account only to logged-in users. To read more, paste the cookies of **your own** logged-in weibo.com session in `cookies` (`SUB=…; SUBP=…`, or a cookie export in JSON). We never ask for a password. The cookies are used only for those pages; they are not logged, stored or put in any row. Weibo may limit or lock an account that is used for automated reading — use an account for which you accept that risk.

A page is asked for only while the run still wants posts or comments of it and your run's maximum charge pays for at least one more; each page is delivered and charged before the next is asked for. A search, an account or a post that failed on our side (a lost connection, a server error after our retries, an answer we could not read, a visitor cookie Weibo would not issue — the lookup itself was then never asked) becomes a notice row (no charge) and the run goes on; one Weibo answered with a refusal of its own (a block, a rate limit, its login wall) is a lookup made: a `lookup-refused` row; the run-start fee stays charged once the run has looked something up.

### Input

| Field | Type | Description |
|---|---|---|
| `searchQueries` | array | Keywords, 1–100 characters each. Each search made is charged once as `search-query`, also one that returns no posts |
| `users` | array | `1195230310`, `weibo.com/u/1195230310`, `m.weibo.cn/u/…`, `weibo.com/n/name`, `weibo.com/<alias>` or `@name` → a profile row and the latest posts |
| `postUrls` | array | `weibo.com/<uid>/<mblogid>`, `m.weibo.cn/detail/<mid>`, `m.weibo.cn/status/<id>`, a mid or an mblogid |
| `trendingTopics` | integer | Search the top N topics of the hot search board (0–50, default 0) |
| `maxPostsPerSearch` | integer | 1–1,000 (default 20). About 20 without cookies |
| `maxPostsPerUser` | integer | 1–1,000 (default 20). About 10 without cookies |
| `commentsPerPost` | integer | 0–1,000 (default 0), paid plans. Each comment is a `comment` row; each post whose comments Weibo answered also gets one `comment-thread` row (`comment-thread-checked`), also when it holds no comment or Weibo refused it |
| `aiTranslate` | boolean | AI translation of each post with Chinese text (paid plans) |
| `aiSummary` | boolean | One AI summary row per search and per account with 3+ posts; it reads up to 30 posts, the first 300 characters of each (paid plans) |
| `aiLanguage` | string | `en` (default) or `ko` |
| `aiMaxItems` | integer | The most posts and summaries sent to the model in a run (default 300, up to 5,000) |
| `cookies` | string (secret) | Optional: your own weibo.com session cookies, paid plans |
| `proxyConfiguration` | object | Off by default (see above) |

Field names of other Weibo scrapers work too: `keywords` / `keyword` / `searchQuery`, `userIds` / `userId` / `userUrls`, `postIds` / `weiboId`, `cookieString`, `maxItems` / `maxResults`.

```json
{
  "searchQueries": ["新能源汽车", "华为"],
  "users": ["https://weibo.com/u/2803301701"],
  "maxPostsPerSearch": 20,
  "commentsPerPost": 20,
  "aiTranslate": true,
  "aiSummary": true,
  "aiLanguage": "en"
}
```

### Output

Every row has `recordType`. One dataset, several kinds of rows (the dataset has a view for each):

**post** — `postId`, `mblogid`, `postUrl`, `text` (full text of long posts; `isLongText`, `fullTextFetched`), `createdAt` (ISO), `source` (app), `region`, `authorId`, `authorName`, `authorUrl`, `authorFollowers`, `authorVerified`, `authorVerifiedReason`, `likesCount`, `commentsCount`, `repostsCount`, `engagement`, `images`, `videoUrl`, `mediaType`, `isRepost`, `repostOf`, `hashtags`, `mentions`, `links`, `language`, `foundBy`, `translation` (`status`, `language`, `text`), `exists`, `billedEvents`.

**profile** — `uid`, `screenName`, `profileUrl`, `alias`, `description`, `gender`, `location`, `ipLocation`, `followersCount`, `followingCount`, `postsCount`, `verified`, `verifiedReason`, `avatarUrl`, `createdAt`, `birthday`, `company`, `sunshineCredit`, `labels`, `exists`.

**search** — `searchQuery`, `source` (`input` or `trending`), `trending` (`rank`, `heat`, `label`), `postsFound` (on the pages read), `pagesRead`, `postsDelivered`, and totals of the delivered posts (`aggregateOf`: `delivered-posts`): `topHashtags`, `engagementTotal`, `dateRange`, `languages`, `withMedia`. It comes after the search's posts.

**comment-thread** — `postId`, `status` (`checked` or `refused-by-weibo`), `weiboAnswer`, `weiboCommentCount`, `commentsAsked`, `commentsRead`, `commentsDelivered`, `pagesRead`, `stoppedBy`, `requests` (every page asked for and Weibo's answer). It comes after the thread's comments.

**lookup-refused** — `lookupKind` (`search`, `account` or `post`), `input`, `weiboAnswer` (`httpStatus`, `ok`, `said`): a lookup Weibo answered with a refusal of its own instead of a result.

**comment** — `commentId`, `postId`, `postUrl`, `text`, `createdAt`, `likesCount`, `repliesCount`, `floor`, `authorId`, `authorName`, `authorLocation`, `language`.

**summary** (AI) — `scope`, `language`, `summary`, `sentiment`, `themes` (each with `evidencePostIds`), `evidencePostIds`, `postsRead`.

**Notice rows** (`noticeCode`, never charged) say what was skipped and why; the **limits** row at the end counts everything the run did, including which access layer answered.

```json
{
  "recordType": "post",
  "postUrl": "https://weibo.com/5642471321/RmDvFDk6o",
  "createdAt": "2026-10-14T08:00:43.000Z",
  "authorName": "谁是阿壳",
  "text": "#谷歌发布Gemini4Argon# 平时喜欢蹲大模型更新 …",
  "likesCount": 37, "commentsCount": 34, "repostsCount": 2, "engagement": 73,
  "hashtags": ["谷歌发布Gemini4Argon"], "language": "zh", "mediaType": "image",
  "translation": { "status": "translated", "language": "en", "text": "#GoogleReleasesGemini4Argon# I like to keep up with model updates …" },
  "billedEvents": ["post", "post-translated"]
}
```

### AI layers (paid plans)

- Model: Anthropic Claude Haiku. **When AI is on, the text of posts is sent to Anthropic's API (USA).** Nothing else is sent: no cookies, no account data of yours.
- Weibo text is treated as data, never as instructions to the model.
- A **translation** is charged only after it passes our checks: it must not hand the post back untranslated and must not contain a number the post does not hold. Posts without Chinese text are not sent. The first 2,000 characters of a post are translated.
- A **summary** reads at most the first 30 posts of a search or an account, the first 300 characters of each. It is charged only if it cites posts of this run and writes no number those posts do not hold. Searches or accounts with fewer than 3 posts get no summary.
- Translations and summaries are asked only when your run's maximum charge still pays for them. When it no longer does, that AI layer goes off and the run goes on: the rest of the posts, comments and searches are still delivered up to your maximum charge, without it and without its charge. An `ai-stopped-charge-limit` notice row and the status message say which layer stopped and how many posts or summaries went without it.

### Pricing

Pay per event. Prices are the FREE tier; BRONZE 20% off, SILVER 35% off, GOLD and up 48% off the collection events. AI events cost the same on every plan (each pays for a model call). Platform usage, including proxies, is included in the event prices.

| Event | When | FREE | BRONZE | SILVER | GOLD+ |
|---|---|---:|---:|---:|---:|
| `run-started` | once per run that has something to look up | $0.005 | $0.004 | $0.00325 | $0.0026 |
| `search-query` | each search Weibo returned pages for (also with 0 posts) | $0.01 | $0.008 | $0.0065 | $0.0052 |
| `post` | each post row (also a post link Weibo says does not exist) | $0.004 | $0.0032 | $0.0026 | $0.00208 |
| `profile` | each profile row (also an account Weibo says does not exist) | $0.005 | $0.004 | $0.00325 | $0.0026 |
| `comment` | each comment row | $0.001 | $0.0008 | $0.00065 | $0.00052 |
| `comment-thread-checked` | each post whose comments Weibo answered (also with 0 comments, or a refusal of Weibo's) | $0.002 | $0.0016 | $0.0013 | $0.00104 |
| `lookup-refused` | each search, account or post address Weibo answered with a refusal of its own (HTTP 4xx, its login wall or its own "no") | $0.002 | $0.0016 | $0.0013 | $0.00104 |
| `post-translated` | each checked AI translation | $0.003 | $0.003 | $0.003 | $0.003 |
| `topic-summary` | each checked AI summary row | $0.03 | $0.03 | $0.03 | $0.03 |

`post` is this Actor's main event. Not charged: notice rows, the limits row, the same post or comment reached twice in one run, anything that failed on our side (a lost connection, a server error after our retries, an answer we could not read, a refusal or a "does not exist" after an attempt of ours failed, also before a restart), anything past your run's maximum charge (the run stops there and ends SUCCEEDED). Two runs with the same input at the same time each deliver and charge their own rows.

### Limits and good to know

- Without cookies Weibo shows visitors the first page only (about 20 posts per search, about 10 per account). The run tells you so in a `first-page-only` notice.
- Counts like `authorFollowers` come from Weibo; on the mobile site they are rounded (`105.8万` → 1,058,000; `authorFollowersText` keeps Weibo's text).
- Weibo's own error for a deleted post or a closed account becomes a row with `exists: false` (a completed lookup). Comments Weibo refuses to show (an HTTP 4xx, its login wall or its own refusal) are a completed lookup too: a `comment-thread` row, charged once. A search, an account or a post Weibo refuses (an HTTP 4xx such as a block or a rate limit, its login wall or its own refusal) is a completed lookup too: a `lookup-refused` row, charged once. An error on our side, and Weibo's refusal or "does not exist" after an error of ours, become a notice and are not charged.
- If a run is restarted by the platform, rows already delivered are not delivered or charged again; the comments and summaries of posts delivered before the restart are still made. `maxPostsPerSearch`, `maxPostsPerUser` and `commentsPerPost` hold for the whole run: the posts and comments delivered before the restart count against them (also a post one search counted that another entry had delivered first), even when Weibo now lists newer ones first. When the platform's charge counts do not yet show the start fee or every row charged before the restart (they can come in a minute or two late), the run does not charge them again: it stops there with a `billing-unavailable` notice and ends FAILED. The rows already in the dataset stay valid. To go on from there, resurrect that run a few minutes later (the Resurrect button of the run in Apify Console, or the API): it continues from its own dataset and does not deliver or charge those rows again; if the counts still do not show those charges, it stops there again.
- A new run, even with the same input, starts over: it does not see an earlier run's dataset, so it looks up, delivers and charges again what that run already delivered. This holds also after a run stopped at your maximum charge.

### Legal

This is an unofficial, independent tool. It is not affiliated with, endorsed by, or sponsored by Weibo, Sina or any of their companies. It reads what Weibo shows to visitors who are not logged in and, only if you add your own cookies, what your own session shows. Results contain posts, profiles and comments people published, which can include personal data. **You are responsible** for how you run this Actor and how you use its output: having the rights and a lawful basis for collecting and processing the data (for example under China's PIPL, the GDPR or the CCPA), complying with Weibo's terms and with the law where you use it. You are the data controller for the output.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search (1-100 characters each, Chinese or any language). Each search made is charged once as search-query, also one that returns no posts; every post it returns is its own row (post). Without cookies Weibo shows visitors the first page of its real-time and top feeds (about 20 posts). The search row comes after its posts; its totals are of the posts delivered. Free plan: the first entry of the whole input only (one post of it in full; the others are counted, not shown).

## `users` (type: `array`):

Accounts to read: uid (1195230310), profile address (weibo.com/u/1195230310, m.weibo.cn/u/…, weibo.com/n/name), alias address (weibo.com/renminribao) or @name. Each gives a profile row (profile) and its latest posts (post). Without cookies Weibo shows visitors the first page (about 10 posts). An account Weibo says does not exist is a charged profile row with exists: false. Free plan: the first entry of the whole input only (its profile and one post in full).

## `postUrls` (type: `array`):

Posts to read: weibo.com/<uid>/<mblogid>, m.weibo.cn/detail/<mid>, m.weibo.cn/status/<id>, a mid or an mblogid. Each is one post row with its full text. A post Weibo says does not exist is a charged row with exists: false. Free plan: the first entry of the whole input only.

## `trendingTopics` (type: `integer`):

Read Weibo's hot search board (微博热搜) and search its top N topics (0-50), each like a search you entered (search-query + posts), with its rank and heat on the search row. Free plan: counts as one entry (one topic).

## `maxPostsPerSearch` (type: `integer`):

The most posts taken from one search (1-1,000). Without cookies a search gives about 20; more needs `cookies`. Pages are read only while more posts are wanted and the run's maximum charge pays for them. Free plan: 1 post in the whole run.

## `maxPostsPerUser` (type: `integer`):

The most posts taken from one account (1-1,000). Without cookies an account gives about 10; more needs `cookies`. Pages are read only while more posts are wanted and the run's maximum charge pays for them. Free plan: 1 post in the whole run.

## `commentsPerPost` (type: `integer`):

Read up to this many comments of every delivered post (0-1,000, about 20 a page, hot order), page by page while the run's maximum charge pays for them. Each comment is its own row (comment). Each post whose comments Weibo answered also gets one comment-thread row listing the pages asked for, charged once as comment-thread-checked — also when it holds no comment or Weibo refused it (a failure on our side is not charged). Posts that show no comments are not asked about. (paid plans only)

## `aiTranslate` (type: `boolean`):

Translate each post with Chinese text into English or Korean (`aiLanguage`) with a language model; the translation goes on the post row and is charged as post-translated only when it passes our checks. The first 2,000 characters of a post are translated. When on, post text is sent to Anthropic's API (USA). (paid plans only)

## `aiSummary` (type: `boolean`):

One AI summary row per search and per account (3+ posts); it reads at most 30 posts, the first 300 characters of each: what the posts are about, sentiment and up to 5 themes, each citing posts of this run; charged as topic-summary only when it passes our checks. When on, post text is sent to Anthropic's API (USA). (paid plans only)

## `aiLanguage` (type: `string`):

The language of AI translations and summaries.

## `aiMaxItems` (type: `integer`):

The most posts and summaries sent to the model in one run (1-5,000). Past it posts are delivered without translation and without that charge.

## `cookies` (type: `string`):

Optional: the cookies of YOUR OWN logged-in weibo.com session ("SUB=…; SUBP=…" or a cookie export in JSON), to read past the first page of searches and accounts. Never a password. They are used only for those pages and never logged, saved or put in a row. Weibo may limit or lock an account used for automated reading: use one you accept that risk for. (paid plans only)

## `proxyConfiguration` (type: `object`):

Off by default: the run connects directly and, if Weibo refuses, moves once to a residential proxy (Hong Kong) on its own. Turn a proxy on here to send every request through it. Proxy usage is included in the event prices.

## Actor input object example

```json
{
  "searchQueries": [
    "新能源汽车"
  ],
  "trendingTopics": 0,
  "maxPostsPerSearch": 20,
  "maxPostsPerUser": 20,
  "commentsPerPost": 0,
  "aiTranslate": false,
  "aiSummary": false,
  "aiLanguage": "en",
  "aiMaxItems": 300,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "searchQueries": [
        "新能源汽车"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ntriqpro/weibo-scraper-translate").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 = { "searchQueries": ["新能源汽车"] }

# Run the Actor and wait for it to finish
run = client.actor("ntriqpro/weibo-scraper-translate").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 '{
  "searchQueries": [
    "新能源汽车"
  ]
}' |
apify call ntriqpro/weibo-scraper-translate --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ntriqpro/weibo-scraper-translate"
        }
    }
}
```

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/48pgRd08NooqvlK7J/builds/NfIDf4Zupb5gMjdpB/openapi.json
