{
  "openapi": "3.0.1",
  "info": {
    "title": "RedNote Xiaohongshu Scraper All-in-One",
    "description": "The only RedNote scraper you need. Search posts, extract user content, download videos, scrape comments, and get profile data — all in one reliable Actor. Clean JSON output, fast, and actually works.",
    "version": "2.9",
    "x-build-id": "5AzjC3cz1ypvsEjZ2"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zhorex~rednote-xiaohongshu-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zhorex-rednote-xiaohongshu-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/zhorex~rednote-xiaohongshu-scraper/runs": {
      "post": {
        "operationId": "runs-sync-zhorex-rednote-xiaohongshu-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/zhorex~rednote-xiaohongshu-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-zhorex-rednote-xiaohongshu-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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Scraping Mode",
            "enum": [
              "search",
              "user_posts",
              "post_details",
              "comments",
              "video",
              "profile"
            ],
            "type": "string",
            "description": "Choose what you want to scrape from RedNote.",
            "default": "search"
          },
          "searchQuery": {
            "title": "Search Query",
            "type": "string",
            "description": "The search term to look for on RedNote. Required for 'search' mode."
          },
          "userUrl": {
            "title": "User Profile URL",
            "type": "string",
            "description": "RedNote user profile URL or user ID. Required for 'user_posts' and 'profile' modes. Example: https://www.xiaohongshu.com/user/profile/USER_ID"
          },
          "postUrls": {
            "title": "Post URLs",
            "type": "array",
            "description": "One or more RedNote post URLs. Required for 'post_details', 'comments', and 'video' modes.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max results (set higher for bulk runs)",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of results to return per run. Applies to search, user_posts, and comments modes. Typical patterns: 20-50 for one-off lookups, 200-500 for daily monitoring crons, 1,000-5,000 for KOL monitoring / brand sweeps / AI training corpus pulls. 0 = unlimited. Cost preview: ~$5 per 1,000 results at the current flat rate (post / comment / profile / video tier pricing differentiates after May 30 2026 — see README for full cost table).",
            "default": 100
          },
          "sortBy": {
            "title": "Sort By",
            "enum": [
              "general",
              "time_descending",
              "popularity_descending"
            ],
            "type": "string",
            "description": "Sort order for search results.",
            "default": "general"
          },
          "filterByType": {
            "title": "Filter by Content Type",
            "enum": [
              "all",
              "note",
              "video"
            ],
            "type": "string",
            "description": "Filter results by content type.",
            "default": "all"
          },
          "filterByMinLikes": {
            "title": "Minimum Likes",
            "minimum": 0,
            "type": "integer",
            "description": "Only return posts with at least this many likes. 0 = no filter.",
            "default": 0
          },
          "includeComments": {
            "title": "Include Comments",
            "type": "boolean",
            "description": "When scraping posts (search, user_posts, post_details), also scrape comments for each post. This will slow down the scraper and increase costs.",
            "default": false
          },
          "maxComments": {
            "title": "Max Comments per Post",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of comments to scrape per post. Only used when includeComments is true or mode is 'comments'.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy settings. RedNote blocks datacenter IPs — residential proxies are strongly recommended.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Number of pages processed in parallel for the post_details / comments / video modes (single-page modes ignore this). Higher = faster but uses more memory. Capped at 10 — above that, RESIDENTIAL proxy and Xiaohongshu rate limits become the bottleneck.",
            "default": 4
          },
          "blockResources": {
            "title": "Block non-essential resources",
            "type": "boolean",
            "description": "When enabled, images / fonts / tracking pixels are blocked at the network layer. Cuts bandwidth ~50% with no impact on extracted data (media URLs are still emitted in the output — only the bytes are skipped). Disable only for debugging.",
            "default": true
          },
          "liteMode": {
            "title": "Lite mode — 3-10x faster, recommended for bulk runs",
            "type": "boolean",
            "description": "Recommended for bulk monitoring (>500 results / run) and AI training corpus pulls where you only need post metadata, not full body content. When enabled, returns only essential fields per item (postId, postUrl, xsecToken, title, likes, type, scrapedAt for posts; minimal subset for profiles). Skips body content, image lists, comment expansion. The xsec_token in postUrl is preserved so search → post_details two-stage pipelines still work on lite output. 3-10x faster than full mode.",
            "default": false
          },
          "sentimentAnalysis": {
            "title": "Sentiment analysis (Chinese)",
            "type": "boolean",
            "description": "Tag each post / comment with Chinese sentiment — polarity (positive / neutral / negative) + a -1.0…+1.0 score (SnowNLP model for Chinese text, keyword fallback for English). Ideal for brand-sentiment tracking on first-person consumer reviews. Optional add-on, off by default.",
            "default": false
          },
          "networkCapture": {
            "title": "Network response capture (v2.1 fast path)",
            "type": "boolean",
            "description": "Capture data-bearing API responses directly during page load for faster extraction. Falls back to Vue state / DOM parsing automatically when capture finds nothing — disable only for debugging. No effect on output schema.",
            "default": true
          },
          "cookieString": {
            "title": "Cookie string (advanced, optional)",
            "type": "string",
            "description": "Optional. Provide your own xsec/web_session cookies for premium-mode extraction of comments/profile pages when anonymous access is rate-limited. Open xiaohongshu.com → log in → DevTools (F12) → Application → Cookies → copy the full Cookie header (or just web_session=...; xsec_token=...). Using your own Xiaohongshu account may violate platform Terms of Service — use at your own risk."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}