{
  "openapi": "3.0.1",
  "info": {
    "title": "Foursquare & Swarm Scraper: Places, Reviews, Busy Hours",
    "description": "Extract Foursquare and Swarm places with reviews, ratings, price level, phone, email and opening hours. Search by keyword and city, expand curated guides, or refresh place IDs. Includes an hour-by-hour busy chart, 30+ vibe tags and city rankings. 20 reviews free per place. Export CSV, JSON, Excel.",
    "version": "0.0",
    "x-build-id": "1J24JpojntyveqYCG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zen-studio~swarm-place-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zen-studio-swarm-place-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~swarm-place-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-zen-studio-swarm-place-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~swarm-place-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-zen-studio-swarm-place-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": {
          "searchTerm": {
            "title": "🔍 What to search for",
            "type": "string",
            "description": "A keyword or category, for example <b>coffee</b>, <b>ramen</b>, <b>rooftop bar</b> or <b>museum</b>. Leave empty to get the top recommended places in the location instead.<br><br>Each search returns up to about <b>250 places</b>. For wider coverage, run several searches or several locations."
          },
          "location": {
            "title": "📍 Location",
            "type": "string",
            "description": "City, neighbourhood or address in plain text, for example <b>Berlin, Germany</b>, <b>Brooklyn NY</b> or <b>Shibuya, Tokyo</b>.<br><br>Required unless you supply place or guide links below."
          },
          "guideSearch": {
            "title": "📚 Or search curated guides",
            "type": "string",
            "description": "Find curated guides (\"best brunch\", \"date night\", \"hidden gems\") and scrape every place on them. Each place is tagged with the guide it came from, and the guides themselves are saved to a separate <b>guides</b> dataset.<br><br>Takes priority over the keyword search above."
          },
          "venueIds": {
            "title": "🎯 Or specific places",
            "type": "array",
            "description": "Place links or IDs to scrape directly, for refreshing places you already track. Takes priority over every other option.",
            "items": {
              "type": "string"
            }
          },
          "listUrls": {
            "title": "🔗 Or specific guides",
            "type": "array",
            "description": "Links to specific curated guides. Every place on each guide is scraped.",
            "items": {
              "type": "string"
            }
          },
          "includeReviews": {
            "title": "💬 Include reviews",
            "type": "boolean",
            "description": "Add reviews to every place: full text, rating signals, helpful counts, author and date.",
            "default": true
          },
          "maxReviewsPerPlace": {
            "title": "💬 Reviews per place (first 20 free)",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "How many reviews to collect for each place.<br><br><b>You are not billed for the first 20.</b> Every place already includes 20 reviews, so setting this to 20 or below adds no extra cost. Only reviews beyond 20 are billed.<br><br>Popular places can have thousands.",
            "default": 20
          },
          "reviewsSort": {
            "title": "Sort reviews by",
            "enum": [
              "popular",
              "recent"
            ],
            "type": "string",
            "description": "<b>Most helpful</b> surfaces the reviews the community rated highest. <b>Newest</b> is better for tracking what people are saying lately.",
            "default": "popular"
          },
          "includePhotos": {
            "title": "📷 Include photos",
            "type": "boolean",
            "description": "Add photo URLs with dimensions, date and author.",
            "default": false
          },
          "maxPhotosPerPlace": {
            "title": "📷 Photos per place (first 6 free)",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "How many photos to collect for each place.<br><br><b>You are not billed for the first 6.</b> Every place already includes 6 photos, so 6 or below adds no extra cost.",
            "default": 6
          },
          "includeSimilar": {
            "title": "🔀 Include similar places",
            "type": "boolean",
            "description": "Add around 15-20 comparable places nearby for each result, with name, category, rating and address. Useful for competitor sets and recommendations.",
            "default": false
          },
          "maxPlaces": {
            "title": "Maximum places",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many places. A single search returns up to about 250; use several searches or locations for more.",
            "default": 100
          },
          "maxGuides": {
            "title": "Maximum guides",
            "minimum": 1,
            "type": "integer",
            "description": "When searching guides, how many to expand.",
            "default": 10
          },
          "maxPlacesPerGuide": {
            "title": "Maximum places per guide",
            "minimum": 1,
            "type": "integer",
            "description": "Cap how many places to take from each guide.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}