{
  "openapi": "3.0.1",
  "info": {
    "title": "Yelp Scraper – Businesses, Reviews & Photos",
    "description": "Scrape Yelp businesses: full records with phone, website, hours, health scores and Yelp's own recent-demand counter, plus every photo and the filtered reviews Yelp sells through no API tier.",
    "version": "0.1",
    "x-build-id": "y552RtWUDb2djewfL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/simple.actors~yelp-businesses/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-simple.actors-yelp-businesses",
        "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/simple.actors~yelp-businesses/runs": {
      "post": {
        "operationId": "runs-sync-simple.actors-yelp-businesses",
        "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/simple.actors~yelp-businesses/run-sync": {
      "post": {
        "operationId": "run-sync-simple.actors-yelp-businesses",
        "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": "What you would type in Yelp's first box — \"pizza\", \"plumber\", \"dentist\". Leave it empty to get whatever Yelp considers the top businesses in the location. Needs \"Where\" to be set as well."
          },
          "location": {
            "title": "Where to search",
            "type": "string",
            "description": "A place name, exactly as you would type it into Yelp's second box: \"San Francisco, CA\", \"Brooklyn, NY\", \"London\". Yelp resolves it — this actor does not need coordinates."
          },
          "maxSearchResults": {
            "title": "How many search results to take",
            "minimum": 1,
            "maximum": 240,
            "type": "integer",
            "description": "Your ceiling on a search. Each result is opened as a full business record ($0.005 each) unless \"Search results only\" is on, in which case each is billed as a search row ($0.002 each). One Yelp search page carries about ten to twelve businesses.",
            "default": 10
          },
          "searchOnly": {
            "title": "Search results only — do not open each business",
            "type": "boolean",
            "description": "Return the thin row Yelp puts on the results page — name, rating, review count, price band, categories, street and neighbourhood — without opening each business. Billed at $0.002 a row instead of $0.005, and it is four times faster. The right setting when you only want to know who is there. Note the search page carries no phone, no website, no hours and no state or postcode; those need the full record.",
            "default": false
          },
          "businesses": {
            "title": "Yelp business URLs or aliases",
            "type": "array",
            "description": "Businesses to read directly, one per entry. Paste the URL from your browser — https://www.yelp.com/biz/gary-danko-san-francisco — or just the alias from the end of it. yelp.co.uk and yelp.ca addresses work too. Each entry produces exactly one row.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Yelp business URLs (URL editor)",
            "type": "array",
            "description": "The same thing as the list above, in the URL editor. Both inputs are read; giving either one is enough.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "includeNotRecommendedReviews": {
            "title": "Include the reviews Yelp filtered out",
            "type": "boolean",
            "description": "Reads the reviews Yelp's recommendation software demoted, plus the ones it deleted for breaking its terms — two groups, tagged on every row. The demoted ones come with their star rating, date and full text, and are the corpus Yelp sells through no API tier at any price. The removed ones come with their rating and date but no text, because Yelp replaces the body with a notice. Neither counts towards the business's public rating or review count, and every row carries both totals, so you can see the gap between the public review count and the real one even at a low limit. Billed at $0.001 a review — set the limit below to cap it.",
            "default": false
          },
          "maxNotRecommendedReviews": {
            "title": "How many filtered reviews per business",
            "minimum": 1,
            "maximum": 400,
            "type": "integer",
            "description": "Your cost ceiling on reviews, at $0.001 each — the default of 40 is $0.04 a business, eight times the record itself, so set it to what you will actually read. Yelp renders twenty per page (ten demoted, ten deleted). The two totals are reported however low you set this.",
            "default": 40
          },
          "includeReviewerProfiles": {
            "title": "Include who wrote each review",
            "type": "boolean",
            "description": "Adds the reviewer's display name and their friend, review and photo counts to every review row. Off by default on purpose: reviewers are private individuals rather than businesses, and the review itself — rating, date, text — is what most callers actually need. Turn it on only if you have a reason to hold personal data.",
            "default": false
          },
          "includePhotos": {
            "title": "Include the photo gallery",
            "type": "boolean",
            "description": "Reads the business's photo gallery — every photo's id, caption, dimensions and each resolution Yelp serves it at. Yelp's own API returns no photos at its base tier, three at the middle tier and twelve at the top. Billed at $0.0005 a photo, a quarter of the going rate — set the limit below to cap it.",
            "default": false
          },
          "maxPhotos": {
            "title": "How many photos per business",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Your cost ceiling on photos, at $0.0005 each. A busy restaurant can have thousands, so this matters: the default of 100 is $0.05 a business. Lower it and you are charged for fewer.",
            "default": 100
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Leave this alone unless you know why you are changing it. Yelp sits behind DataDome, and measured on 2026-08-31 the Unblocker is the only Apify egress it answers — residential addresses get a challenge page instead of the business. This defaults to the Unblocker for that reason, and pointing it at a residential or datacenter group will make every row an error.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "UNBLOCKER"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}