{
  "openapi": "3.0.1",
  "info": {
    "title": "Yelp Scraper API - Businesses, Emails, Reviews & Leads",
    "description": "Scrape Yelp business data without the Yelp API: 60+ fields per listing with e-mails and social profiles pulled from the business website, plus reviews, menus, Q&A, photos, hours, amenities, licences and health scores. One row per business. Export to CSV, JSON or Excel.",
    "version": "1.0",
    "x-build-id": "Xv0c3oRpLvGcMMpB9"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/pro100chok~yelp-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-pro100chok-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/pro100chok~yelp-scraper/runs": {
      "post": {
        "operationId": "runs-sync-pro100chok-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/pro100chok~yelp-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-pro100chok-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",
        "properties": {
          "scrapeType": {
            "title": "What to scrape",
            "enum": [
              "search",
              "reviews"
            ],
            "type": "string",
            "description": "Businesses gives one dataset row per company - contacts, hours, amenities, photos, ratings - with its reviews, menu and Q&A nested inside that row, so the row count always matches the number of businesses you asked for. Reviews gives the flat shape instead: one row per review, handy for text analysis. Both modes accept the same search terms and URLs.",
            "default": "search"
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Keywords to search on Yelp, for example \"plumber\", \"italian restaurant\", \"dentist\". Every term is searched in every location below. Leave empty if you only use direct URLs. Yelp returns up to 240 businesses per combination.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities, regions or postcodes to search in, for example \"San Francisco, CA\", \"London, United Kingdom\", \"Warsaw, Poland\". Required whenever you use search terms or categories - Yelp has no worldwide search.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Category aliases (optional)",
            "type": "array",
            "description": "Yelp category aliases such as \"restaurants\", \"plumbers\", \"dentists\" or \"homeservices\". Use these instead of free-text search terms to match Yelp's own category pages exactly. The alias is the value after find_desc or cflt in a Yelp URL.",
            "items": {
              "type": "string"
            }
          },
          "directUrls": {
            "title": "Direct Yelp URLs",
            "type": "array",
            "description": "Yelp business URLs (https://www.yelp.com/biz/...), business aliases, or Yelp search result URLs from any Yelp domain. Search URLs are expanded into all of their results, and filters already applied in a search URL are kept. Works alongside or instead of the keyword search above.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max businesses per search",
            "minimum": 1,
            "maximum": 240,
            "type": "integer",
            "description": "How many businesses to return for each search term and location pair. Yelp itself serves at most 240 results per search, so use several locations or categories to collect more.",
            "default": 20
          },
          "yelpDomain": {
            "title": "Results language",
            "enum": [
              "www.yelp.com",
              "www.yelp.co.uk",
              "www.yelp.ca",
              "www.yelp.ie",
              "www.yelp.com.au",
              "www.yelp.co.nz",
              "www.yelp.com.sg",
              "www.yelp.com.ph",
              "www.yelp.de",
              "www.yelp.at",
              "www.yelp.ch",
              "www.yelp.fr",
              "www.yelp.be",
              "www.yelp.nl",
              "www.yelp.it",
              "www.yelp.es",
              "www.yelp.com.mx",
              "www.yelp.pt",
              "www.yelp.com.br",
              "www.yelp.pl",
              "www.yelp.cz",
              "www.yelp.dk",
              "www.yelp.fi",
              "www.yelp.no",
              "www.yelp.se",
              "www.yelp.com.tr",
              "www.yelp.co.jp"
            ],
            "type": "string",
            "description": "Language of the results and which Yelp site the listings are read from. This does NOT limit coverage: businesses in every country, the United States included, are scraped whichever option you pick - only the wording of categories, amenities and opening hours changes, and every URL in the output is a www.yelp.com link. Pick United States or United Kingdom for English.",
            "default": "www.yelp.com"
          },
          "includeEmails": {
            "title": "Find e-mail addresses and social profiles",
            "type": "boolean",
            "description": "Visits each business's own website and extracts e-mail addresses plus Facebook, Instagram, X, LinkedIn, YouTube, TikTok and Telegram links. Yelp never publishes e-mails, so this is what turns a listing into a usable sales lead. Businesses with no website cost nothing extra.",
            "default": true
          },
          "maxPhotos": {
            "title": "Max photos per business",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "How many photo URLs to return for each business. Around 40 come free with the profile; higher values fetch extra photo pages. Set to 0 to skip photos entirely.",
            "default": 20
          },
          "maxQuestions": {
            "title": "Max questions & answers per business",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many community questions with their answers to return for each business, up to 10 - that is everything Yelp publishes without a logged-in session. Set to 0 to skip.",
            "default": 0
          },
          "includeMenu": {
            "title": "Include menu items",
            "type": "boolean",
            "description": "Adds the full Yelp menu for restaurants and food businesses - section, item name, price, description, photo and per-item review count. Businesses without a Yelp menu cost nothing extra.",
            "default": false
          },
          "includeAds": {
            "title": "Include sponsored results",
            "type": "boolean",
            "description": "Also return businesses Yelp shows as sponsored placements in search results. Off by default so you get the organic ranking only, which also keeps searches cheaper.",
            "default": false
          },
          "maxReviews": {
            "title": "Max reviews per business",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "How many reviews to collect for each business. Set to 0 for no reviews. In Businesses mode they are nested inside the business row, so this does not change the number of rows; in Reviews mode each review is its own row.",
            "default": 0
          },
          "reviewsSort": {
            "title": "Sort reviews by",
            "enum": [
              "RELEVANCE_DESC",
              "DATE_DESC",
              "DATE_ASC",
              "RATING_DESC",
              "RATING_ASC",
              "ELITES_DESC"
            ],
            "type": "string",
            "description": "Order in which reviews are collected. Newest first is the usual choice for monitoring; Yelp sort is what a visitor sees on the page.",
            "default": "RELEVANCE_DESC"
          },
          "reviewRatings": {
            "title": "Only these star ratings",
            "uniqueItems": true,
            "type": "array",
            "description": "Limit reviews to the selected star ratings, for example only 1 and 2 stars to study complaints. Leave empty for all ratings.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            }
          },
          "includeNotRecommendedReviews": {
            "title": "Include not-recommended reviews",
            "type": "boolean",
            "description": "Also collect the reviews Yelp hides behind its \"not recommended\" link. These never count towards the visible rating and are useful when auditing a business's real feedback. They arrive in a separate notRecommendedReviews array and are capped by Max reviews as well.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy used to reach Yelp. Residential proxy is strongly recommended and is the default - Yelp blocks datacenter addresses. You can also supply your own proxies on the Custom proxies tab.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}