{
  "openapi": "3.0.1",
  "info": {
    "title": "Weibo Scraper & API: Posts, Comments, Profiles, Hot Search",
    "description": "Weibo scraper for posts from keywords or #topics# (hundreds per search, full text), user profiles and posts, post links, comments with replies, and the hot search list. No login needed.",
    "version": "0.1",
    "x-build-id": "VjFAo5wsKCSME098O"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/quarra~weibo-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-quarra-weibo-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/quarra~weibo-scraper/runs": {
      "post": {
        "operationId": "runs-sync-quarra-weibo-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/quarra~weibo-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-quarra-weibo-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": {
          "searchTerms": {
            "title": "Search terms or #topics#",
            "maxItems": 2000,
            "type": "array",
            "description": "One per line: a keyword (露营, 人工智能, Tesla) or a #topic# (#露营#), in any language Weibo users write in. Weibo search links work too. Each search returns posts up to 'Max posts per search'.",
            "items": {
              "type": "string",
              "maxLength": 300
            }
          },
          "searchMode": {
            "title": "Search tab",
            "enum": [
              "latest",
              "top",
              "all",
              "combined"
            ],
            "type": "string",
            "description": "Which Weibo search tab to read. Latest lists the newest posts first; Top goes back the furthest in time (years for a popular term); Combined reads the three tabs and shares 'Max posts per search' between them, for the widest coverage.",
            "default": "latest"
          },
          "maxPostsPerSearch": {
            "title": "Max posts per search",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Posts per search term. Weibo shows hundreds to a few thousand posts per search for a popular term (measured for 咖啡: 1,593 on Latest alone, 4,665 with Combined). With Combined the limit is shared between the three tabs.",
            "default": 100
          },
          "users": {
            "title": "Users",
            "maxItems": 2000,
            "type": "array",
            "description": "One per line: a profile link (weibo.com/u/1669879400, m.weibo.cn/u/…, weibo.com/yangshiwangnet), a numeric user ID, or a screen name (人民日报, @央视网). Each gets its full profile, then its posts up to 'Max posts per user'.",
            "items": {
              "type": "string",
              "maxLength": 2000
            }
          },
          "maxPostsPerUser": {
            "title": "Max posts per user",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Posts per user: the latest posts (about 10, all kinds), then the user's photo and video posts going back in time. 0 = profile only.",
            "default": 20
          },
          "postUrls": {
            "title": "Post links or IDs",
            "maxItems": 2000,
            "type": "array",
            "description": "One per line: Weibo post links (weibo.com/1669879400/RlZog45UR, m.weibo.cn/detail/…, m.weibo.cn/status/…) or post IDs. Each gets the full post.",
            "items": {
              "type": "string",
              "maxLength": 2000
            }
          },
          "includeTrends": {
            "title": "Hot search list",
            "type": "boolean",
            "description": "Also deliver Weibo's real-time hot search list (about 50 entries): rank, keyword, heat, label, category, time on the list. Ads are flagged.",
            "default": false
          },
          "postedAfter": {
            "title": "Posted after",
            "type": "string",
            "description": "Only posts published after this moment: a date (2026-10-01), a date and time in UTC (2026-10-01T08:00:00Z), or a duration back from now (7 days, 24 hours). Applies to searches and users."
          },
          "postedBefore": {
            "title": "Posted before",
            "type": "string",
            "description": "Only posts published before this moment (a date alone includes that whole day). Applies to searches and users."
          },
          "includeComments": {
            "title": "Include comments",
            "type": "boolean",
            "description": "Also deliver the comments of every post scraped, one record per comment (text, likes, date, author, region, reply count).",
            "default": false
          },
          "commentsSort": {
            "title": "Comments order",
            "enum": [
              "top",
              "latest"
            ],
            "type": "string",
            "description": "Which comments come first.",
            "default": "top"
          },
          "maxCommentsPerPost": {
            "title": "Max comments per post",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Top-level comments per post. Weibo shows a few hundred comments per post at most.",
            "default": 20
          },
          "includeReplies": {
            "title": "Include replies to comments",
            "type": "boolean",
            "description": "Also deliver the replies under each comment, linked to it by 'parentCommentId'.",
            "default": false
          },
          "maxRepliesPerComment": {
            "title": "Max replies per comment",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Replies per comment.",
            "default": 10
          },
          "translateToEnglish": {
            "title": "Translate to English",
            "type": "boolean",
            "description": "Add an English translation of the text of each post, and of each comment and reply when you include them, in a translation field next to the original (which is always kept). Paid option: $2 per 1,000 texts translated, on top of the record. Charged only when the translation is complete; texts already in English, and empty texts, are not translated and not charged. The text of a reposted post is not translated. Available on paid Apify plans only.",
            "default": false
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Total number of records delivered by the run: posts, comments, profiles and hot search entries together, counted exactly.",
            "default": 1000
          },
          "fullText": {
            "title": "Full text of long posts",
            "type": "boolean",
            "description": "Weibo cuts long posts in lists; on: the full text is fetched for each (at no extra charge). Off: the first part only, faster.",
            "default": true
          },
          "deliveryConnector": {
            "title": "Send results to your app (MCP connector: Notion, Slack…)",
            "type": "string",
            "description": "Pick one of your Apify MCP connectors: at the end of each run, a summary of the results (count, the first 25 with their links, a link to the full dataset) is posted there. With a schedule and 'Only new', you get each day's new results where your team works. Nothing is sent when a run finds nothing. Notion connects in one click; Slack and Google need your own OAuth app in Apify, or use the webhook field below."
          },
          "deliveryTarget": {
            "title": "Where in the app (channel, page or sheet ID)",
            "type": "string",
            "description": "Slack channel ID (C0123…), Notion page ID, Google Sheet ID… Leave empty if the app needs no target (a new Notion page is then created at the top of your workspace)."
          },
          "deliveryWebhookUrl": {
            "title": "Or a webhook URL (Slack, Discord, Make, Zapier, n8n)",
            "type": "string",
            "description": "No connector needed. A Slack Incoming Webhook (hooks.slack.com/…) gets a message, a Discord channel webhook gets a message, any other URL receives the summary as JSON (title, text, count, datasetUrl, items)."
          },
          "deliveryTool": {
            "title": "Connector tool (advanced)",
            "type": "string",
            "description": "Name of the connector's tool to call. Leave empty: the best tool that posts a message, creates a page or appends rows is picked, and the run log lists every tool the connector offers."
          },
          "deliveryArguments": {
            "title": "Connector tool arguments (advanced)",
            "type": "object",
            "description": "Extra arguments for the tool, merged last, for example {\"channel\": \"#reddit-leads\"} or {\"parent\": {\"database_id\": \"…\"}}."
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}