{
  "openapi": "3.0.1",
  "info": {
    "title": "Weibo Scraper",
    "description": "Weibo scraper — extract Weibo posts, user profiles, fans, followers, and keyword search results from Sina Weibo. KOL discovery, social graph mapping, sentiment data, and China market research. Five operations, one clean dataset per run. No API key needed.",
    "version": "1.0",
    "x-build-id": "xxFkuRLVF29n6bHFP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~weibo-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-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/sian.agency~weibo-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-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/sian.agency~weibo-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-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",
        "required": [
          "operation"
        ],
        "properties": {
          "operation": {
            "title": "🎯 Operation — what do you want to scrape?",
            "enum": [
              "weiboDetail",
              "userDetail",
              "userFans",
              "userFollowers",
              "searchWeibo"
            ],
            "type": "string",
            "description": "🎯 **PICK ONE OPERATION PER RUN.** Each run produces one clean dataset matching the chosen mode.\n\n- **📝 Weibo Detail** — deep scrape of a single post by ID (text, location, topics, @-mentions, repost/comment/attitude counts, pics, creator info)\n- **👤 User Profile** — full profile by user ID (followers, following, statuses count, verified reason, location, avatar, gender, bio)\n- **👥 User Fans** — list of users who follow this account (~20 per page; respects privacy settings)\n- **➡️ User Followers** — list of accounts this user follows (~20 per page; respects privacy settings)\n- **🔍 Search Weibo** — keyword search across Weibo posts with optional date range, paginated (~14 results/page)\n\n💡 **TIP:** To combine operations, run the actor multiple times with different configurations.",
            "default": "searchWeibo"
          },
          "weiboId": {
            "title": "📝 Weibo ID (for Weibo Detail)",
            "type": "string",
            "description": "📝 **Required for the `Weibo Detail` operation.**\n\nThe numeric Weibo post ID (also called `mid`). You can find it:\n- In any mobile Weibo URL: `https://m.weibo.cn/detail/{ID}` → the trailing segment\n- In the `weiboId` / `id` field of any search result row\n\n💡 **TIP:** To analyze a batch of posts, run a `Search Weibo` operation first, copy `weiboId` values from the result rows, then run `Weibo Detail` per ID.\n\n⚠️ **Ignored** for User Profile, User Fans, User Followers, and Search operations."
          },
          "userId": {
            "title": "👤 User ID (for User Profile / Fans / Followers)",
            "type": "string",
            "description": "👤 **Required for `User Profile`, `User Fans`, and `User Followers` operations.**\n\nThe numeric Weibo user ID (UID). You can find it:\n- In any profile URL: `https://weibo.com/u/{ID}`\n- In the `userId` / `user_id` field of any post, search, or fan/follower result row\n\n💡 **TIP:** To build a creator catalog, run `Search Weibo` with a keyword first, then use the top `userId` values to drill into profiles, fans, and followers.\n\n⚠️ **Note:** Some accounts restrict public access to their fan/follower lists — those operations will return an explanatory empty row.\n\n⚠️ **Ignored** for Weibo Detail and Search operations."
          },
          "keyword": {
            "title": "🔍 Search Keyword (for Search Weibo)",
            "type": "string",
            "description": "🔍 **Required for the `Search Weibo` operation.**\n\nAny Weibo search query. Supports Chinese, English, and mixed queries:\n- `北京` (Beijing)\n- `Tesla`\n- `美食` (food)\n- `iPhone`\n\n💡 **TIP:** Chinese queries surface native creators and conversations; English/brand queries surface international and brand-mention traffic."
          },
          "startDay": {
            "title": "📅 Start Date (optional, for Search Weibo)",
            "type": "string",
            "description": "📅 **Optional for `Search Weibo`.** Earliest date to include in search results.\n\nFormat: `YYYY-MM-DD` (e.g. `2025-04-01`). Defaults to **30 days ago** if left blank.\n\n💡 **TIP:** Tight date windows return more targeted results. Use the start/end pair to track a topic over a specific campaign or news event.\n\n⚠️ **Ignored** for non-search operations."
          },
          "endDay": {
            "title": "📅 End Date (optional, for Search Weibo)",
            "type": "string",
            "description": "📅 **Optional for `Search Weibo`.** Latest date to include in search results.\n\nFormat: `YYYY-MM-DD` (e.g. `2025-05-12`). Defaults to **today** if left blank.\n\n⚠️ **Ignored** for non-search operations."
          },
          "maxPages": {
            "title": "📄 Max pages to fetch",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "📄 **Applies to paginated operations** (User Fans, User Followers, Search Weibo). Ignored for single-record operations (Weibo Detail, User Profile).\n\n- **User Fans:** ~20 users per page\n- **User Followers:** ~20 users per page\n- **Search Weibo:** ~14 posts per page\n\n💡 **TIP:** Start small (1–3 pages) to preview results before scaling up.\n\n⚠️ Hard cap: 50 pages to prevent runaway runs.",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}