{
  "openapi": "3.0.1",
  "info": {
    "title": "Mafengwo 马蜂窝 Reviews Scraper | Photos & Videos",
    "description": "Collect Mafengwo attraction and hotel reviews, photo posts and videos with ratings, dates, authors and place details. Paste links or IDs, expand destination links, and export structured JSON, CSV or Excel.",
    "version": "0.0",
    "x-build-id": "hLZwvoP7djuHkBShB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zen-studio~mafengwo-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zen-studio-mafengwo-reviews-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~mafengwo-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-zen-studio-mafengwo-reviews-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~mafengwo-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-zen-studio-mafengwo-reviews-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": {
          "places": {
            "title": "Paste place, hotel or destination links / IDs",
            "type": "string",
            "description": "Paste one or many Mafengwo links or place IDs. Mix links and IDs, separated by newlines, spaces, commas or semicolons. Destination links collect that destination's places, most prominent first, up to your maximum places."
          },
          "startUrls": {
            "title": "Additional links (optional)",
            "type": "array",
            "description": "Optional structured list of Mafengwo place, hotel or destination links. Combined with the paste box above and deduplicated. For bare place IDs, use the paste box. Lists loaded from a file are not supported.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "reviewTypes": {
            "title": "Review types",
            "type": "array",
            "description": "Choose one or more groups of rated reviews. Multiple choices combine their results without duplicates. All includes positive, neutral and negative reviews. This choice does not restrict photo/video posts.",
            "items": {
              "type": "string",
              "enum": [
                "all",
                "positive",
                "neutral",
                "negative",
                "withPhotos",
                "featured"
              ],
              "enumTitles": [
                "All reviews",
                "Positive",
                "Neutral",
                "Negative",
                "With photos",
                "Featured"
              ]
            }
          },
          "maxReviewsPerPlace": {
            "title": "Maximum results per place",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum combined number of reviews and posts saved for each place after filtering. Use 0 for all available results. Capped results favour recent content but are not guaranteed to be the newest overall."
          },
          "maxPlaces": {
            "title": "Maximum places",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of places to process across direct links and destinations. Direct place and hotel links are processed first."
          },
          "includePosts": {
            "title": "Include photo and video posts",
            "type": "boolean",
            "description": "Include fresher traveler posts alongside rated reviews, identified separately as post or video. Most posts have no star rating, but any available rating is preserved. Posts count toward the result limit and are charged at the same rate as reviews."
          },
          "includeTravelNotes": {
            "title": "Also collect travel notes",
            "type": "boolean",
            "description": "Collect the long-form trip reports travelers write about a destination: the full text, its photos, the places it links to, and how long the trip took, who it was with and what it cost. Notes are written about a destination rather than a place, so this needs at least one destination link in the box above. Each note is charged as one result."
          },
          "maxTravelNotes": {
            "title": "Maximum travel notes",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many travel notes per destination. Set 0 to keep going until the destination runs out."
          },
          "maxImagesPerNote": {
            "title": "Maximum photos per travel note",
            "minimum": 0,
            "type": "integer",
            "description": "A single note can carry thousands of photos, which makes one row very large and slows every export and spreadsheet that opens it. This keeps the first photos of each note and still reports the note's own total in the photo count, so nothing is hidden. Set 0 to keep every photo."
          },
          "minRating": {
            "title": "Minimum star rating",
            "minimum": 1,
            "maximum": 5,
            "type": "number",
            "description": "Only save content with a rating at or above this value. Unrated posts are excluded when this filter is set. Leave empty to include every rating and unrated content."
          },
          "postedAfter": {
            "title": "Posted on or after",
            "type": "string",
            "description": "Only save content from this date onward, using UTC. Leave empty for the complete available history. Older content may still need to be checked, so a recent date does not necessarily shorten the run."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}