{
  "openapi": "3.0.1",
  "info": {
    "title": "Douban Group Scraper 豆瓣小组 | Discussions, Members & Replies",
    "description": "Scrape Douban (豆瓣) groups: discussions with full text and reply threads, group profiles with rules and tags, and full member lists with join dates, cities and roles. Search discussions by keyword across every group, or paste group links. Export JSON, CSV or Excel.",
    "version": "0.0",
    "x-build-id": "r7DebfJcD8evy6Goe"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zen-studio~douban-group-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zen-studio-douban-group-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/zen-studio~douban-group-scraper/runs": {
      "post": {
        "operationId": "runs-sync-zen-studio-douban-group-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/zen-studio~douban-group-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-zen-studio-douban-group-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": {
          "startUrls": {
            "title": "Douban group links",
            "type": "array",
            "description": "Add any mix of Douban links:<br>• <b>Group</b>: <code>https://www.douban.com/group/740472/</code><br>• <b>Single discussion</b>: <code>https://www.douban.com/group/topic/499747962/</code><br><br>Groups with a name instead of a number work too, e.g. <code>https://www.douban.com/group/beijing/</code>.<br><br>Up to 1,000 links per run.",
            "items": {
              "type": "string"
            }
          },
          "discussionKeywords": {
            "title": "Find discussions by keyword",
            "type": "array",
            "description": "Enter keywords to collect Douban group discussions that mention them, from every group at once. No link needed.<br><br>Matches the full text of a discussion, not just its title, so <code>小米SU7</code> also returns posts that mention it in passing. Around 1,000 discussions per keyword, best matches first by default, each with its group, author, full text and reply threads.<br><br>Tip: Chinese keywords find far more, e.g. <code>租房</code> instead of <code>rent</code>.<br><br>Up to 100 keywords per run.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Find groups by keyword",
            "type": "array",
            "description": "Enter keywords to find whole groups, then collect from the best matches. Use <b>Find discussions by keyword</b> instead to collect only the discussions that mention a keyword.<br><br>Tip: Chinese keywords find far more, e.g. <code>租房</code> instead of <code>rent</code>.",
            "items": {
              "type": "string"
            }
          },
          "discussionOrder": {
            "title": "Which keyword results come first",
            "enum": [
              "best",
              "new"
            ],
            "type": "string",
            "description": "Applies to <b>Find discussions by keyword</b>. Douban matches every word of a keyword, so <code>小米SU7</code> also returns posts about <code>小米</code> alone: <b>Best match first</b> keeps a short run tight, <b>Newest first</b> suits monitoring. Longer runs collect both orders either way.",
            "default": "best"
          },
          "maxGroups": {
            "title": "Groups per group search term",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Set how many of the best matching groups to collect from, per term in <b>Find groups by keyword</b>.",
            "default": 3
          },
          "groupContent": {
            "title": "From each group",
            "type": "array",
            "description": "Pick one or more:<br>• <b>Discussions</b>: full text, author, tags, likes and reply threads<br>• <b>Group details</b>: description, rules, category, member and discussion counts, tag tabs, owner<br>• <b>Member list</b>: every member with profile link, join date, location and role. Large groups have tens of thousands, so set <b>Max members</b> to match your budget.",
            "items": {
              "type": "string",
              "enum": [
                "discussions",
                "profile",
                "members"
              ],
              "enumTitles": [
                "Discussions (with replies)",
                "Group details (rules, tags, counts)",
                "Member list"
              ]
            },
            "default": [
              "discussions",
              "profile"
            ]
          },
          "discussionSort": {
            "title": "Which discussions",
            "enum": [
              "all",
              "new",
              "hot",
              "elite"
            ],
            "type": "string",
            "description": "<b>All discussions</b> combines every order and the group's tags, newest first, for the deepest coverage: 9,706 of a 10,675-discussion group in testing.<br><b>Newest</b> alone stops after about 300.",
            "default": "all"
          },
          "tags": {
            "title": "Only these tags",
            "type": "array",
            "description": "Optional. Collect only discussions filed under these group tags, written as Douban shows them, e.g. <code>经验分享</code>. Leave empty for every tag.<br><br>The group's tags are listed in its <b>Group details</b> row.",
            "items": {
              "type": "string"
            }
          },
          "maxDiscussions": {
            "title": "Max discussions per group or keyword",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Set how many discussions to collect from each group, and from each keyword in <b>Find discussions by keyword</b>. Keep it low for a quick first run.",
            "default": 100
          },
          "maxMembers": {
            "title": "Max members per group",
            "minimum": 1,
            "maximum": 200000,
            "type": "integer",
            "description": "Set how many members to collect from each group, when <b>Member list</b> is selected. Douban lists managers first, then the rest.",
            "default": 1000
          },
          "includeReplies": {
            "title": "Include replies",
            "type": "boolean",
            "description": "Turn on to attach the reply thread to every discussion. Replies are included at no extra charge.",
            "default": false
          },
          "maxReplies": {
            "title": "Max replies per discussion",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Set how many replies to attach to each discussion. Only used when <b>Include replies</b> is on.",
            "default": 100
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}