{
  "openapi": "3.0.1",
  "info": {
    "title": "Yelp Scraper: Business Data, Reviews, Hidden Reviews & Menus",
    "description": "Scrape Yelp business profiles, ratings, hours, phone, website and photos, plus every review, including the not recommended and removed reviews Yelp hides from the public page. Search any city by keyword, pull full menus with prices. No Yelp account or proxy setup.",
    "version": "0.0",
    "x-build-id": "8AmVgqwc8SYPPMxmb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sourabhbgp~yelp-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sourabhbgp-yelp-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/sourabhbgp~yelp-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sourabhbgp-yelp-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/sourabhbgp~yelp-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sourabhbgp-yelp-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": "What to scrape",
            "enum": [
              "reviews",
              "business",
              "notRecommendedReviews",
              "search",
              "photos",
              "menu"
            ],
            "type": "string",
            "description": "Pick one. Every mode except Search takes Yelp business URLs. Search takes keywords and a location instead.",
            "default": "reviews"
          },
          "businesses": {
            "title": "Business URLs",
            "type": "array",
            "description": "Yelp business page URLs, the short alias from the URL such as gary-danko-san-francisco, or a 22 character business ID. Menu and photo page URLs work too.",
            "items": {
              "type": "string"
            }
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Search mode only. One or more keywords, for example dentist or coffee shop. Yelp caps a search at 240 result slots and repeats some listings inside them, so one term returns roughly 200 distinct businesses. Several narrow terms reach far more than one broad one.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Search mode only. A city, neighbourhood or postal code, for example San Francisco, CA."
          },
          "enrich": {
            "title": "Add full business details to search results",
            "type": "boolean",
            "description": "Search mode only. Adds phone, website, opening hours and the full rating breakdown to each search result. Merged into the same row, so you are still charged once per business. Name, rating, review count, price and address are always included without this.",
            "default": false
          },
          "sortBy": {
            "title": "Review order",
            "enum": [
              "RELEVANCE_DESC",
              "DATE_DESC",
              "DATE_ASC",
              "RATING_DESC",
              "ELITES_DESC"
            ],
            "type": "string",
            "description": "Reviews mode only. Ignored when Only new reviews is on, which always reads newest first. Elite reviewers first is a Yelp feature that times out on businesses with several thousand reviews, on Yelp's own site too; any other order works at any size.",
            "default": "RELEVANCE_DESC"
          },
          "ratings": {
            "title": "Star ratings",
            "type": "array",
            "description": "Reviews mode only. Keep only these star ratings. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            },
            "default": []
          },
          "languages": {
            "title": "Review languages",
            "uniqueItems": true,
            "type": "array",
            "description": "Reviews mode only. Leave empty for English, Yelp's default. Pick one or more languages, or All languages for every language the business has. With a limit on newest, oldest or highest rated order and several languages, you get the true top results across them, so a busy language can fill it. With a limit on any other order, it is shared by language size. Without a limit, reviews come language by language, largest first.",
            "items": {
              "type": "string",
              "enum": [
                "all",
                "en",
                "de",
                "es",
                "fr",
                "sv",
                "zh",
                "nb",
                "it",
                "pt",
                "fi",
                "ja",
                "pl",
                "tr",
                "da",
                "nl",
                "cs",
                "fil"
              ],
              "enumTitles": [
                "All languages",
                "English",
                "German",
                "Spanish",
                "French",
                "Swedish",
                "Chinese",
                "Norwegian",
                "Italian",
                "Portuguese",
                "Finnish",
                "Japanese",
                "Polish",
                "Turkish",
                "Danish",
                "Dutch",
                "Czech",
                "Filipino"
              ]
            },
            "default": []
          },
          "query": {
            "title": "Only reviews containing this text",
            "type": "string",
            "description": "Reviews mode only. Keep only reviews that mention this text. Yelp returns text matches in its own relevance order, so this overrides Review order and Star ratings."
          },
          "delta": {
            "title": "Only new reviews",
            "type": "boolean",
            "description": "Reviews mode only. Returns just the reviews that appeared since the last run, so a daily schedule costs a handful of rows instead of the whole history. Runs must share the same storage name below.",
            "default": false
          },
          "deltaStoreName": {
            "title": "Storage name for Only new reviews",
            "type": "string",
            "description": "Named storage that remembers which reviews were already delivered. Keep it the same across scheduled runs. Change it to start over.",
            "default": "yelp-delta"
          },
          "maxReviewsPerBusiness": {
            "title": "Maximum results per business",
            "minimum": 0,
            "type": "integer",
            "description": "Caps reviews, hidden reviews, photos or menu items per business. Leave at 0 for everything available. Ignored by Search and Business details.",
            "default": 0
          },
          "maxItems": {
            "title": "Maximum results in total",
            "minimum": 0,
            "type": "integer",
            "description": "Hard ceiling on results for the whole run, across every business. 0 means no limit. In Search mode it is split evenly across your search terms, and it is the only limit Search uses. Rows that report a problem are never counted or charged.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Leave as is unless you have a reason to change it. Yelp works over datacenter proxy, which is the cheapest option; residential is used automatically only if datacenter gets blocked.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}