{
  "data": {
    "id": "u5WBu7wbluwWdJnfh",
    "actId": "7GbUL6yEkG5aFcZSk",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-10-26T16:20:45.463Z",
    "finishedAt": "2026-10-26T16:20:54.674Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 9114,
      "runTimeSecs": 9.114,
      "computeUnits": 0.010126666666666667,
      "imageSizeBytes": 318687232
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Yelp Scraper Input\",\n  \"description\": \"Choose keyword search or direct business lookup, then set review depth and filters.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"Search Yelp by keyword and location, or look up specific business URLs, aliases, or 22-character business IDs.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"direct\"\n      ],\n      \"enumTitles\": [\n        \"Search Yelp by keyword and location\",\n        \"Scrape specific business URLs or IDs\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"direct\"\n    },\n    \"searchQuery\": {\n      \"title\": \"Search query\",\n      \"type\": \"string\",\n      \"description\": \"Keyword to search for in mode=search, for example 'pizza', 'plumber', or 'coffee shop'.\",\n      \"editor\": \"textfield\",\n      \"default\": \"pizza\",\n      \"prefill\": \"\"\n    },\n    \"location\": {\n      \"title\": \"Location\",\n      \"type\": \"string\",\n      \"description\": \"City, neighborhood, or ZIP code to search in mode=search, for example 'New York, NY' or '10012'.\",\n      \"editor\": \"textfield\",\n      \"default\": \"New York, NY\",\n      \"prefill\": \"\"\n    },\n    \"startUrls\": {\n      \"title\": \"Start URLs\",\n      \"type\": \"array\",\n      \"description\": \"In mode=search, paste Yelp search URLs. In mode=direct, paste business URLs, aliases, or 22-character business IDs.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": [\n        \"https://www.yelp.com/biz/prince-street-pizza-new-york-2\"\n      ]\n    },\n    \"categories\": {\n      \"title\": \"Categories\",\n      \"type\": \"array\",\n      \"description\": \"Optional Yelp category aliases or names used to narrow search results, for example 'pizza', 'coffee', or 'home_services'. They are combined with the search query.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"sortBy\": {\n      \"title\": \"Search result order\",\n      \"type\": \"string\",\n      \"description\": \"Ordering for mode=search result pages.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"recommended\",\n        \"rating\",\n        \"reviewCount\"\n      ],\n      \"enumTitles\": [\n        \"Recommended\",\n        \"Highest rated\",\n        \"Most reviewed\"\n      ],\n      \"default\": \"recommended\",\n      \"prefill\": \"recommended\"\n    },\n    \"price\": {\n      \"title\": \"Price levels\",\n      \"type\": \"array\",\n      \"description\": \"Optional price levels for mode=search. Leave empty for every price level.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"$\",\n          \"$$\",\n          \"$$$\",\n          \"$$$$\"\n        ]\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"minRating\": {\n      \"title\": \"Minimum rating\",\n      \"type\": \"number\",\n      \"description\": \"Drop businesses rated below this value. Set to 0 to keep every rating.\",\n      \"minimum\": 0,\n      \"maximum\": 5,\n      \"default\": 0,\n      \"prefill\": 0\n    },\n    \"maxItems\": {\n      \"title\": \"Maximum businesses\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on business records in the dataset. Search is limited to Yelp's 240-result ceiling per query.\",\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"default\": 50,\n      \"prefill\": 1\n    },\n    \"maxReviewsPerBusiness\": {\n      \"title\": \"Reviews per business\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum reviews collected for each business. Reviews are paged 49 at a time from Yelp's public review feed.\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 20,\n      \"prefill\": 5\n    },\n    \"includeReviews\": {\n      \"title\": \"Include reviews\",\n      \"type\": \"boolean\",\n      \"description\": \"Turn off to collect only business profiles and skip the review feed.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"reviewSort\": {\n      \"title\": \"Review order\",\n      \"type\": \"string\",\n      \"description\": \"Ordering applied to each business's review feed.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"DATE_DESC\",\n        \"DATE_ASC\",\n        \"RATING_DESC\",\n        \"RATING_ASC\",\n        \"RELEVANCE_DESC\",\n        \"ELITES_DESC\"\n      ],\n      \"enumTitles\": [\n        \"Newest first\",\n        \"Oldest first\",\n        \"Highest rated first\",\n        \"Lowest rated first\",\n        \"Most relevant first\",\n        \"Elite reviewers first\"\n      ],\n      \"default\": \"DATE_DESC\",\n      \"prefill\": \"DATE_DESC\"\n    },\n    \"reviewRatings\": {\n      \"title\": \"Review star ratings\",\n      \"type\": \"array\",\n      \"description\": \"Only collect reviews with these star ratings. Choose one or more values.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"1\",\n          \"2\",\n          \"3\",\n          \"4\",\n          \"5\"\n        ]\n      },\n      \"default\": [\n        \"5\",\n        \"4\",\n        \"3\",\n        \"2\",\n        \"1\"\n      ],\n      \"prefill\": [\n        \"5\",\n        \"4\",\n        \"3\",\n        \"2\",\n        \"1\"\n      ]\n    },\n    \"reviewLanguage\": {\n      \"title\": \"Review language\",\n      \"type\": \"string\",\n      \"description\": \"Language for the review feed. Choose 'all' to page through every language Yelp reports for the business.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"all\",\n        \"en\",\n        \"es\",\n        \"fr\",\n        \"de\",\n        \"it\",\n        \"pt\",\n        \"nl\",\n        \"sv\",\n        \"da\",\n        \"no\",\n        \"fi\",\n        \"pl\",\n        \"cs\",\n        \"el\",\n        \"tr\",\n        \"ru\",\n        \"uk\",\n        \"he\",\n        \"ar\",\n        \"hi\",\n        \"bn\",\n        \"ta\",\n        \"th\",\n        \"vi\",\n        \"id\",\n        \"ms\",\n        \"tl\",\n        \"zh\",\n        \"ja\",\n        \"ko\"\n      ],\n      \"enumTitles\": [\n        \"All available languages\",\n        \"English\",\n        \"Spanish\",\n        \"French\",\n        \"German\",\n        \"Italian\",\n        \"Portuguese\",\n        \"Dutch\",\n        \"Swedish\",\n        \"Danish\",\n        \"Norwegian\",\n        \"Finnish\",\n        \"Polish\",\n        \"Czech\",\n        \"Greek\",\n        \"Turkish\",\n        \"Russian\",\n        \"Ukrainian\",\n        \"Hebrew\",\n        \"Arabic\",\n        \"Hindi\",\n        \"Bengali\",\n        \"Tamil\",\n        \"Thai\",\n        \"Vietnamese\",\n        \"Indonesian\",\n        \"Malay\",\n        \"Tagalog\",\n        \"Chinese\",\n        \"Japanese\",\n        \"Korean\"\n      ],\n      \"default\": \"en\",\n      \"prefill\": \"en\"\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy configuration\",\n      \"type\": \"object\",\n      \"description\": \"Optional. The actor automatically uses Apify Proxy when Yelp blocks a request; add a country or custom proxy here only when you need a specific route.\",\n      \"editor\": \"proxy\"\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Yelp Business Profiles & Review History Extractor\r\n\r\nYelp packs a lot into each business page: star ratings, price signals, weekly hours, photo galleries, contact details, and years of customer reviews. This actor turns that material into structured business records, with the review feed paged well beyond the handful of reviews Yelp shows by default.\r\n\r\n## What this actor does\r\n\r\n- Finds businesses by keyword and location, or by a Yelp search URL that already contains filters.\r\n- Looks up exact businesses from a Yelp business URL, a bare alias such as `prince-street-pizza-new-york-2`, or a 22-character Yelp business ID.\r\n- Pages each business's review feed up to your chosen limit, including reviewer names, Elite years, photos, reactions, and owner replies.\r\n- Adds search metadata so you can tell organic ranking from sponsored placement and remove duplicate cards.\r\n- Omits empty fields at every level. A business that does not publish a website, price level, or owner reply simply has no such key in its record.\r\n- Writes an explicit status record when a business is missing, a page is blocked, or Yelp changes the data contract, so an empty dataset is never mistaken for a successful scrape.\r\n\r\n## Output per business\r\n\r\nEach business is one dataset row. Reviews are nested under `reviews`.\r\n\r\n| Field | Description |\r\n|---|---|\r\n| `recordType` | `business` for a business row, `status` for a run status row |\r\n| `businessId` | Yelp's 22-character business ID |\r\n| `encId` | The same stable Yelp business ID, kept as a separate field for joins |\r\n| `alias` | Yelp URL slug, e.g. `prince-street-pizza-new-york-2` |\r\n| `name` | Business name |\r\n| `categories` | Array of Yelp category titles |\r\n| `address` | Object with `streetAddress`, `addressLocality`, `addressRegion`, `postalCode`, `addressCountry`, and `formatted` when supplied |\r\n| `city` | City name |\r\n| `state` | State or region code |\r\n| `zip` | Postal code |\r\n| `country` | Two-letter country code |\r\n| `lat` | Latitude |\r\n| `lng` | Longitude |\r\n| `rating` | Average star rating (number) |\r\n| `reviewCount` | Review total shown on the business profile |\r\n| `reviewsTotal` | Reviews available in the public review feed, when it differs from `reviewCount` |\r\n| `price` | Price level such as `$` or `$$` |\r\n| `phone` | Business phone number |\r\n| `website` | Business website URL |\r\n| `hours` | Weekly hours keyed by short day name, each value an array of time ranges |\r\n| `photos` | Business photo URLs, including the primary photo and gallery |\r\n| `url` | Yelp business page URL |\r\n| `isClosed` | Whether Yelp marks the business as closed |\r\n| `isClaimed` | Whether the business profile has been claimed |\r\n| `description` | Short business summary from Yelp |\r\n| `reviews` | Array of review objects, omitted when reviews are off or none are available |\r\n| `searchRank` | Organic position in the search results, when found through search |\r\n| `sponsored` | `true` when the business first appeared as a sponsored card |\r\n| `searchQuery` | Keyword that found the business |\r\n| `searchLocation` | Location used for that search |\r\n| `searchCategory` | Category filter used for that search |\r\n| `sourceUrl` | Search page or business URL the record came from |\r\n| `scrapedAt` | ISO timestamp for the record |\r\n\r\nReview objects contain:\r\n\r\n| Field | Description |\r\n|---|---|\r\n| `id` | Review ID |\r\n| `rating` | Star rating (1–5) |\r\n| `text` | Full review text |\r\n| `author` | Reviewer display name |\r\n| `authorId` | Reviewer ID |\r\n| `authorUrl` | Reviewer profile URL |\r\n| `authorLocation` | Reviewer location as shown by Yelp |\r\n| `authorReviewCount` | Number of reviews on the reviewer's profile |\r\n| `date` | Review date in UTC |\r\n| `dateLocal` | Review date in the business's local time |\r\n| `photos` | Review photo URLs |\r\n| `ownerReply` | Object with `text`, `author`, and `date` when the business replied |\r\n| `elite` | Whether the reviewer has an Elite year |\r\n| `eliteYear` | The Elite year Yelp displays |\r\n| `language` | Review language code |\r\n| `isFirstReview` | Whether Yelp marks this as the reviewer's first review |\r\n| `checkInCount` | Check-in count attached to the review |\r\n| `reactions` | Object with `useful`, `funny`, and `cool` counts |\r\n\r\n### Status records\r\n\r\nWhen something prevents a business or search page from being collected, the dataset receives a row with `recordType: \"status\"`:\r\n\r\n- `status` is `not_found`, `blocked`, `api_drift`, `no_results`, or `invalid_input`.\r\n- `message` explains what happened.\r\n- `sourceUrl` and `businessId` are included when known.\r\n- `scrapedAt` records when the status was written.\r\n\r\nLegacy compatibility keys are also present when they have values: `directUrl` (same as `url`), `bizId` (same as `alias`), `aggregatedRating` (rating as text), `priceRange` (same as `price`), and `images` (same as `photos`). Review rows also keep `isUsefulCount`, `isFunnyCount`, and `isCoolCount` beside the `reactions` object.\r\n\r\nStatus rows are separate from business rows, so filter on `recordType` before loading the business records.\r\n\r\n## Input\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `mode` | string | `search` | `search` discovers businesses by keyword, category, or Yelp search URL; `direct` scrapes business URLs, aliases, or business IDs |\r\n| `searchQuery` | string | `pizza` | Keyword for `mode=search` |\r\n| `location` | string | `New York, NY` | City, neighborhood, or ZIP for `mode=search` |\r\n| `startUrls` | array | `[]` | Yelp search URLs in `mode=search`, or business URLs, aliases, and IDs in `mode=direct` |\r\n| `categories` | array | `[]` | Yelp category aliases or names used to narrow a search |\r\n| `sortBy` | string | `recommended` | Search ordering: `recommended`, `rating`, or `reviewCount` |\r\n| `price` | array | `[]` | Price levels `$`, `$$`, `$$$`, `$$$$`; empty keeps all |\r\n| `minRating` | number | `0` | Drop businesses rated below this value (0–5) |\r\n| `maxItems` | integer | `50` | Maximum business records (1–500) |\r\n| `maxReviewsPerBusiness` | integer | `20` | Maximum reviews per business (1–1000) |\r\n| `includeReviews` | boolean | `true` | Turn off to skip review collection |\r\n| `reviewSort` | string | `DATE_DESC` | `DATE_DESC`, `DATE_ASC`, `RATING_DESC`, `RATING_ASC`, `RELEVANCE_DESC`, or `ELITES_DESC` |\r\n| `reviewRatings` | array | `[\"5\",\"4\",\"3\",\"2\",\"1\"]` | Star ratings to include |\r\n| `reviewLanguage` | string | `en` | Review language code, or `all` to page every language Yelp reports |\r\n| `proxyConfiguration` | object | Apify Proxy `AUTO` | Optional routing choice; the actor automatically uses a working route when Yelp blocks a request |\r\n\r\n`mode` is the only required field. `mode=search` needs a query, category, or search URL. `mode=direct` needs at least one business URL, alias, or ID.\r\n\r\n### Example: keyword search\r\n\r\n```json\r\n{\r\n  \"mode\": \"search\",\r\n  \"searchQuery\": \"ramen\",\r\n  \"location\": \"Seattle, WA\",\r\n  \"price\": [\"$$\", \"$$$\"],\r\n  \"minRating\": 4,\r\n  \"maxItems\": 20,\r\n  \"maxReviewsPerBusiness\": 30,\r\n  \"reviewSort\": \"DATE_DESC\",\r\n  \"reviewLanguage\": \"en\"\r\n}\r\n```\r\n\r\n### Example: specific businesses by URL\r\n\r\n```json\r\n{\r\n  \"mode\": \"direct\",\r\n  \"startUrls\": [\r\n    \"https://www.yelp.com/biz/prince-street-pizza-new-york-2\",\r\n    \"https://www.yelp.com/biz/bar-lento-new-york\"\r\n  ],\r\n  \"maxItems\": 2,\r\n  \"maxReviewsPerBusiness\": 100,\r\n  \"reviewSort\": \"RATING_DESC\",\r\n  \"reviewRatings\": [\"5\", \"4\"]\r\n}\r\n```\r\n\r\n### Example: businesses and reviews in another language\r\n\r\n```json\r\n{\r\n  \"mode\": \"direct\",\r\n  \"startUrls\": [\"https://www.yelp.com/biz/bar-lento-new-york\"],\r\n  \"maxReviewsPerBusiness\": 50,\r\n  \"reviewLanguage\": \"all\"\r\n}\r\n```\r\n\r\n### Example: profiles only\r\n\r\n```json\r\n{\r\n  \"mode\": \"search\",\r\n  \"searchQuery\": \"coffee\",\r\n  \"location\": \"Portland, OR\",\r\n  \"categories\": [\"coffee\"],\r\n  \"includeReviews\": false,\r\n  \"maxItems\": 10\r\n}\r\n```\r\n\r\n## Use cases\r\n\r\n- **Competitive benchmarking** — compare ratings, review volume, price levels, and review themes across a set of local businesses.\r\n- **Review monitoring** — schedule runs against your own locations and watch new reviews, owner replies, and rating changes over time.\r\n- **Lead research** — collect phone numbers, websites, cities, and categories for businesses in a target market.\r\n- **Voice-of-customer analysis** — export hundreds of reviews per business with ratings, dates, languages, and reviewer context.\r\n- **Location planning** — map business density and quality across ZIP codes, neighborhoods, or categories.\r\n- **Data enrichment** — join Yelp business IDs, aliases, websites, and coordinates to an existing CRM or dataset.\r\n\r\n## FAQ\r\n\r\n**Do I need to supply a proxy?**\r\nNo. The actor starts with a direct request and automatically routes through Apify Proxy when Yelp blocks it. Leave `proxyConfiguration` at its default, or supply a country or custom proxy only when you need a specific route.\r\n\r\n**How many businesses can one search return?**\r\nYelp caps a single search at 240 businesses, displayed 10 at a time. `maxItems` can be as high as 500 across multiple queries or direct URLs, but each individual search stops at Yelp's 240-result ceiling.\r\n\r\n**How many reviews can I collect per business?**\r\nUp to 1,000. The review feed is paged at 49 reviews per request, so a deep run uses several requests per business. Set `maxReviewsPerBusiness` lower for faster, cheaper runs.\r\n\r\n**Why is `reviewsTotal` sometimes lower than `reviewCount`?**\r\nYelp's profile count and its public review feed are not identical. The feed leaves out reviews Yelp does not recommend, so `reviewsTotal` can be slightly lower than the number shown on the page.\r\n\r\n**What does `reviewLanguage: \"all\"` do?**\r\nThe actor reads the language counts Yelp reports for the business and pages each language until the review limit is reached, de-duplicating by review ID. It can use several requests per business.\r\n\r\n**Why is a business or review field missing?**\r\nYelp does not publish every field for every business. Missing values are omitted rather than written as `null`, empty strings, or empty arrays.\r\n\r\n**What happens when Yelp changes its data format?**\r\nThe actor writes an `api_drift` status row with a message and the source URL, and the run status message reports the problem. It does not silently return an empty dataset.\r\n\r\n**Can I use a Yelp search URL with filters already in it?**\r\nYes. Put it in `startUrls` with `mode=search`; the actor keeps the URL's query parameters and pages from its existing `start` position.\r\n\r\n**Does this actor collect the reviews Yelp does not recommend?**\r\nNo. It collects the public review feed. Reviews outside that feed are not exposed, which is why the feed total can differ from the profile count.\r\n\r\n**Is this affiliated with Yelp?**\r\nNo. This is an independent third-party actor and is not endorsed by or affiliated with Yelp.\r\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "yelp-business-search-and-review-scraper",
      "title": "Yelp Business Profiles & Review History Extractor",
      "description": "Collect Yelp business profiles and deep review histories by keyword search, category, or direct business URL. Get ratings, hours, contact details, photos, owner replies, and reviewer metadata.",
      "version": "2.0",
      "buildTag": "latest",
      "dockerfile": "../Dockerfile",
      "readme": "# Yelp Business Profiles & Review History Extractor\r\n\r\nYelp packs a lot into each business page: star ratings, price signals, weekly hours, photo galleries, contact details, and years of customer reviews. This actor turns that material into structured business records, with the review feed paged well beyond the handful of reviews Yelp shows by default.\r\n\r\n## What this actor does\r\n\r\n- Finds businesses by keyword and location, or by a Yelp search URL that already contains filters.\r\n- Looks up exact businesses from a Yelp business URL, a bare alias such as `prince-street-pizza-new-york-2`, or a 22-character Yelp business ID.\r\n- Pages each business's review feed up to your chosen limit, including reviewer names, Elite years, photos, reactions, and owner replies.\r\n- Adds search metadata so you can tell organic ranking from sponsored placement and remove duplicate cards.\r\n- Omits empty fields at every level. A business that does not publish a website, price level, or owner reply simply has no such key in its record.\r\n- Writes an explicit status record when a business is missing, a page is blocked, or Yelp changes the data contract, so an empty dataset is never mistaken for a successful scrape.\r\n\r\n## Output per business\r\n\r\nEach business is one dataset row. Reviews are nested under `reviews`.\r\n\r\n| Field | Description |\r\n|---|---|\r\n| `recordType` | `business` for a business row, `status` for a run status row |\r\n| `businessId` | Yelp's 22-character business ID |\r\n| `encId` | The same stable Yelp business ID, kept as a separate field for joins |\r\n| `alias` | Yelp URL slug, e.g. `prince-street-pizza-new-york-2` |\r\n| `name` | Business name |\r\n| `categories` | Array of Yelp category titles |\r\n| `address` | Object with `streetAddress`, `addressLocality`, `addressRegion`, `postalCode`, `addressCountry`, and `formatted` when supplied |\r\n| `city` | City name |\r\n| `state` | State or region code |\r\n| `zip` | Postal code |\r\n| `country` | Two-letter country code |\r\n| `lat` | Latitude |\r\n| `lng` | Longitude |\r\n| `rating` | Average star rating (number) |\r\n| `reviewCount` | Review total shown on the business profile |\r\n| `reviewsTotal` | Reviews available in the public review feed, when it differs from `reviewCount` |\r\n| `price` | Price level such as `$` or `$$` |\r\n| `phone` | Business phone number |\r\n| `website` | Business website URL |\r\n| `hours` | Weekly hours keyed by short day name, each value an array of time ranges |\r\n| `photos` | Business photo URLs, including the primary photo and gallery |\r\n| `url` | Yelp business page URL |\r\n| `isClosed` | Whether Yelp marks the business as closed |\r\n| `isClaimed` | Whether the business profile has been claimed |\r\n| `description` | Short business summary from Yelp |\r\n| `reviews` | Array of review objects, omitted when reviews are off or none are available |\r\n| `searchRank` | Organic position in the search results, when found through search |\r\n| `sponsored` | `true` when the business first appeared as a sponsored card |\r\n| `searchQuery` | Keyword that found the business |\r\n| `searchLocation` | Location used for that search |\r\n| `searchCategory` | Category filter used for that search |\r\n| `sourceUrl` | Search page or business URL the record came from |\r\n| `scrapedAt` | ISO timestamp for the record |\r\n\r\nReview objects contain:\r\n\r\n| Field | Description |\r\n|---|---|\r\n| `id` | Review ID |\r\n| `rating` | Star rating (1–5) |\r\n| `text` | Full review text |\r\n| `author` | Reviewer display name |\r\n| `authorId` | Reviewer ID |\r\n| `authorUrl` | Reviewer profile URL |\r\n| `authorLocation` | Reviewer location as shown by Yelp |\r\n| `authorReviewCount` | Number of reviews on the reviewer's profile |\r\n| `date` | Review date in UTC |\r\n| `dateLocal` | Review date in the business's local time |\r\n| `photos` | Review photo URLs |\r\n| `ownerReply` | Object with `text`, `author`, and `date` when the business replied |\r\n| `elite` | Whether the reviewer has an Elite year |\r\n| `eliteYear` | The Elite year Yelp displays |\r\n| `language` | Review language code |\r\n| `isFirstReview` | Whether Yelp marks this as the reviewer's first review |\r\n| `checkInCount` | Check-in count attached to the review |\r\n| `reactions` | Object with `useful`, `funny`, and `cool` counts |\r\n\r\n### Status records\r\n\r\nWhen something prevents a business or search page from being collected, the dataset receives a row with `recordType: \"status\"`:\r\n\r\n- `status` is `not_found`, `blocked`, `api_drift`, `no_results`, or `invalid_input`.\r\n- `message` explains what happened.\r\n- `sourceUrl` and `businessId` are included when known.\r\n- `scrapedAt` records when the status was written.\r\n\r\nLegacy compatibility keys are also present when they have values: `directUrl` (same as `url`), `bizId` (same as `alias`), `aggregatedRating` (rating as text), `priceRange` (same as `price`), and `images` (same as `photos`). Review rows also keep `isUsefulCount`, `isFunnyCount`, and `isCoolCount` beside the `reactions` object.\r\n\r\nStatus rows are separate from business rows, so filter on `recordType` before loading the business records.\r\n\r\n## Input\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `mode` | string | `search` | `search` discovers businesses by keyword, category, or Yelp search URL; `direct` scrapes business URLs, aliases, or business IDs |\r\n| `searchQuery` | string | `pizza` | Keyword for `mode=search` |\r\n| `location` | string | `New York, NY` | City, neighborhood, or ZIP for `mode=search` |\r\n| `startUrls` | array | `[]` | Yelp search URLs in `mode=search`, or business URLs, aliases, and IDs in `mode=direct` |\r\n| `categories` | array | `[]` | Yelp category aliases or names used to narrow a search |\r\n| `sortBy` | string | `recommended` | Search ordering: `recommended`, `rating`, or `reviewCount` |\r\n| `price` | array | `[]` | Price levels `$`, `$$`, `$$$`, `$$$$`; empty keeps all |\r\n| `minRating` | number | `0` | Drop businesses rated below this value (0–5) |\r\n| `maxItems` | integer | `50` | Maximum business records (1–500) |\r\n| `maxReviewsPerBusiness` | integer | `20` | Maximum reviews per business (1–1000) |\r\n| `includeReviews` | boolean | `true` | Turn off to skip review collection |\r\n| `reviewSort` | string | `DATE_DESC` | `DATE_DESC`, `DATE_ASC`, `RATING_DESC`, `RATING_ASC`, `RELEVANCE_DESC`, or `ELITES_DESC` |\r\n| `reviewRatings` | array | `[\"5\",\"4\",\"3\",\"2\",\"1\"]` | Star ratings to include |\r\n| `reviewLanguage` | string | `en` | Review language code, or `all` to page every language Yelp reports |\r\n| `proxyConfiguration` | object | Apify Proxy `AUTO` | Optional routing choice; the actor automatically uses a working route when Yelp blocks a request |\r\n\r\n`mode` is the only required field. `mode=search` needs a query, category, or search URL. `mode=direct` needs at least one business URL, alias, or ID.\r\n\r\n### Example: keyword search\r\n\r\n```json\r\n{\r\n  \"mode\": \"search\",\r\n  \"searchQuery\": \"ramen\",\r\n  \"location\": \"Seattle, WA\",\r\n  \"price\": [\"$$\", \"$$$\"],\r\n  \"minRating\": 4,\r\n  \"maxItems\": 20,\r\n  \"maxReviewsPerBusiness\": 30,\r\n  \"reviewSort\": \"DATE_DESC\",\r\n  \"reviewLanguage\": \"en\"\r\n}\r\n```\r\n\r\n### Example: specific businesses by URL\r\n\r\n```json\r\n{\r\n  \"mode\": \"direct\",\r\n  \"startUrls\": [\r\n    \"https://www.yelp.com/biz/prince-street-pizza-new-york-2\",\r\n    \"https://www.yelp.com/biz/bar-lento-new-york\"\r\n  ],\r\n  \"maxItems\": 2,\r\n  \"maxReviewsPerBusiness\": 100,\r\n  \"reviewSort\": \"RATING_DESC\",\r\n  \"reviewRatings\": [\"5\", \"4\"]\r\n}\r\n```\r\n\r\n### Example: businesses and reviews in another language\r\n\r\n```json\r\n{\r\n  \"mode\": \"direct\",\r\n  \"startUrls\": [\"https://www.yelp.com/biz/bar-lento-new-york\"],\r\n  \"maxReviewsPerBusiness\": 50,\r\n  \"reviewLanguage\": \"all\"\r\n}\r\n```\r\n\r\n### Example: profiles only\r\n\r\n```json\r\n{\r\n  \"mode\": \"search\",\r\n  \"searchQuery\": \"coffee\",\r\n  \"location\": \"Portland, OR\",\r\n  \"categories\": [\"coffee\"],\r\n  \"includeReviews\": false,\r\n  \"maxItems\": 10\r\n}\r\n```\r\n\r\n## Use cases\r\n\r\n- **Competitive benchmarking** — compare ratings, review volume, price levels, and review themes across a set of local businesses.\r\n- **Review monitoring** — schedule runs against your own locations and watch new reviews, owner replies, and rating changes over time.\r\n- **Lead research** — collect phone numbers, websites, cities, and categories for businesses in a target market.\r\n- **Voice-of-customer analysis** — export hundreds of reviews per business with ratings, dates, languages, and reviewer context.\r\n- **Location planning** — map business density and quality across ZIP codes, neighborhoods, or categories.\r\n- **Data enrichment** — join Yelp business IDs, aliases, websites, and coordinates to an existing CRM or dataset.\r\n\r\n## FAQ\r\n\r\n**Do I need to supply a proxy?**\r\nNo. The actor starts with a direct request and automatically routes through Apify Proxy when Yelp blocks it. Leave `proxyConfiguration` at its default, or supply a country or custom proxy only when you need a specific route.\r\n\r\n**How many businesses can one search return?**\r\nYelp caps a single search at 240 businesses, displayed 10 at a time. `maxItems` can be as high as 500 across multiple queries or direct URLs, but each individual search stops at Yelp's 240-result ceiling.\r\n\r\n**How many reviews can I collect per business?**\r\nUp to 1,000. The review feed is paged at 49 reviews per request, so a deep run uses several requests per business. Set `maxReviewsPerBusiness` lower for faster, cheaper runs.\r\n\r\n**Why is `reviewsTotal` sometimes lower than `reviewCount`?**\r\nYelp's profile count and its public review feed are not identical. The feed leaves out reviews Yelp does not recommend, so `reviewsTotal` can be slightly lower than the number shown on the page.\r\n\r\n**What does `reviewLanguage: \"all\"` do?**\r\nThe actor reads the language counts Yelp reports for the business and pages each language until the review limit is reached, de-duplicating by review ID. It can use several requests per business.\r\n\r\n**Why is a business or review field missing?**\r\nYelp does not publish every field for every business. Missing values are omitted rather than written as `null`, empty strings, or empty arrays.\r\n\r\n**What happens when Yelp changes its data format?**\r\nThe actor writes an `api_drift` status row with a message and the source URL, and the run status message reports the problem. It does not silently return an empty dataset.\r\n\r\n**Can I use a Yelp search URL with filters already in it?**\r\nYes. Put it in `startUrls` with `mode=search`; the actor keeps the URL's query parameters and pages from its existing `start` position.\r\n\r\n**Does this actor collect the reviews Yelp does not recommend?**\r\nNo. It collects the public review feed. Reviews outside that feed are not exposed, which is why the feed total can differ from the profile count.\r\n\r\n**Is this affiliated with Yelp?**\r\nNo. This is an independent third-party actor and is not endorsed by or affiliated with Yelp.\r\n",
      "input": {
        "title": "Yelp Scraper Input",
        "description": "Choose keyword search or direct business lookup, then set review depth and filters.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "Search Yelp by keyword and location, or look up specific business URLs, aliases, or 22-character business IDs.",
            "editor": "select",
            "enum": [
              "search",
              "direct"
            ],
            "enumTitles": [
              "Search Yelp by keyword and location",
              "Scrape specific business URLs or IDs"
            ],
            "default": "search",
            "prefill": "direct"
          },
          "searchQuery": {
            "title": "Search query",
            "type": "string",
            "description": "Keyword to search for in mode=search, for example 'pizza', 'plumber', or 'coffee shop'.",
            "editor": "textfield",
            "default": "pizza",
            "prefill": ""
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, neighborhood, or ZIP code to search in mode=search, for example 'New York, NY' or '10012'.",
            "editor": "textfield",
            "default": "New York, NY",
            "prefill": ""
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "In mode=search, paste Yelp search URLs. In mode=direct, paste business URLs, aliases, or 22-character business IDs.",
            "editor": "stringList",
            "default": [],
            "prefill": [
              "https://www.yelp.com/biz/prince-street-pizza-new-york-2"
            ]
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Optional Yelp category aliases or names used to narrow search results, for example 'pizza', 'coffee', or 'home_services'. They are combined with the search query.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "sortBy": {
            "title": "Search result order",
            "type": "string",
            "description": "Ordering for mode=search result pages.",
            "editor": "select",
            "enum": [
              "recommended",
              "rating",
              "reviewCount"
            ],
            "enumTitles": [
              "Recommended",
              "Highest rated",
              "Most reviewed"
            ],
            "default": "recommended",
            "prefill": "recommended"
          },
          "price": {
            "title": "Price levels",
            "type": "array",
            "description": "Optional price levels for mode=search. Leave empty for every price level.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "$",
                "$$",
                "$$$",
                "$$$$"
              ]
            },
            "default": [],
            "prefill": []
          },
          "minRating": {
            "title": "Minimum rating",
            "type": "number",
            "description": "Drop businesses rated below this value. Set to 0 to keep every rating.",
            "minimum": 0,
            "maximum": 5,
            "default": 0,
            "prefill": 0
          },
          "maxItems": {
            "title": "Maximum businesses",
            "type": "integer",
            "description": "Hard cap on business records in the dataset. Search is limited to Yelp's 240-result ceiling per query.",
            "minimum": 1,
            "maximum": 500,
            "default": 50,
            "prefill": 1
          },
          "maxReviewsPerBusiness": {
            "title": "Reviews per business",
            "type": "integer",
            "description": "Maximum reviews collected for each business. Reviews are paged 49 at a time from Yelp's public review feed.",
            "minimum": 1,
            "maximum": 1000,
            "default": 20,
            "prefill": 5
          },
          "includeReviews": {
            "title": "Include reviews",
            "type": "boolean",
            "description": "Turn off to collect only business profiles and skip the review feed.",
            "default": true,
            "prefill": true
          },
          "reviewSort": {
            "title": "Review order",
            "type": "string",
            "description": "Ordering applied to each business's review feed.",
            "editor": "select",
            "enum": [
              "DATE_DESC",
              "DATE_ASC",
              "RATING_DESC",
              "RATING_ASC",
              "RELEVANCE_DESC",
              "ELITES_DESC"
            ],
            "enumTitles": [
              "Newest first",
              "Oldest first",
              "Highest rated first",
              "Lowest rated first",
              "Most relevant first",
              "Elite reviewers first"
            ],
            "default": "DATE_DESC",
            "prefill": "DATE_DESC"
          },
          "reviewRatings": {
            "title": "Review star ratings",
            "type": "array",
            "description": "Only collect reviews with these star ratings. Choose one or more values.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ]
            },
            "default": [
              "5",
              "4",
              "3",
              "2",
              "1"
            ],
            "prefill": [
              "5",
              "4",
              "3",
              "2",
              "1"
            ]
          },
          "reviewLanguage": {
            "title": "Review language",
            "type": "string",
            "description": "Language for the review feed. Choose 'all' to page through every language Yelp reports for the business.",
            "editor": "select",
            "enum": [
              "all",
              "en",
              "es",
              "fr",
              "de",
              "it",
              "pt",
              "nl",
              "sv",
              "da",
              "no",
              "fi",
              "pl",
              "cs",
              "el",
              "tr",
              "ru",
              "uk",
              "he",
              "ar",
              "hi",
              "bn",
              "ta",
              "th",
              "vi",
              "id",
              "ms",
              "tl",
              "zh",
              "ja",
              "ko"
            ],
            "enumTitles": [
              "All available languages",
              "English",
              "Spanish",
              "French",
              "German",
              "Italian",
              "Portuguese",
              "Dutch",
              "Swedish",
              "Danish",
              "Norwegian",
              "Finnish",
              "Polish",
              "Czech",
              "Greek",
              "Turkish",
              "Russian",
              "Ukrainian",
              "Hebrew",
              "Arabic",
              "Hindi",
              "Bengali",
              "Tamil",
              "Thai",
              "Vietnamese",
              "Indonesian",
              "Malay",
              "Tagalog",
              "Chinese",
              "Japanese",
              "Korean"
            ],
            "default": "en",
            "prefill": "en"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. The actor automatically uses Apify Proxy when Yelp blocks a request; add a country or custom proxy here only when you need a specific route.",
            "editor": "proxy"
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Yelp Business Profiles & Review History Output",
        "description": "Yelp business profiles with nested review rows, ratings, hours, contact details, and explicit status records for blocked or missing businesses.",
        "properties": {
          "businesses": {
            "type": "string",
            "title": "Yelp Businesses & Reviews",
            "description": "Dataset containing Yelp business records, their reviews, and any status records produced during the run.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Yelp Businesses & Reviews",
          "views": {
            "overview": {
              "title": "Overview",
              "transformation": {
                "fields": [
                  "name",
                  "rating",
                  "reviewCount",
                  "price",
                  "phone",
                  "city",
                  "state",
                  "categories",
                  "url",
                  "searchRank",
                  "sponsored"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "name": {
                    "label": "Name",
                    "format": "text"
                  },
                  "rating": {
                    "label": "Rating",
                    "format": "number"
                  },
                  "reviewCount": {
                    "label": "Reviews",
                    "format": "number"
                  },
                  "price": {
                    "label": "Price",
                    "format": "text"
                  },
                  "phone": {
                    "label": "Phone",
                    "format": "text"
                  },
                  "city": {
                    "label": "City",
                    "format": "text"
                  },
                  "state": {
                    "label": "State",
                    "format": "text"
                  },
                  "categories": {
                    "label": "Categories",
                    "format": "array"
                  },
                  "url": {
                    "label": "Yelp URL",
                    "format": "link"
                  },
                  "searchRank": {
                    "label": "Search rank",
                    "format": "number"
                  },
                  "sponsored": {
                    "label": "Sponsored",
                    "format": "boolean"
                  }
                }
              }
            },
            "detailed": {
              "title": "Detailed",
              "transformation": {
                "fields": [
                  "recordType",
                  "businessId",
                  "encId",
                  "alias",
                  "name",
                  "categories",
                  "address",
                  "city",
                  "state",
                  "zip",
                  "country",
                  "lat",
                  "lng",
                  "rating",
                  "reviewCount",
                  "reviewsTotal",
                  "price",
                  "phone",
                  "website",
                  "hours",
                  "photos",
                  "url",
                  "isClosed",
                  "isClaimed",
                  "description",
                  "reviews",
                  "searchRank",
                  "sponsored",
                  "searchQuery",
                  "searchLocation",
                  "sourceUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "recordType": {
                    "label": "Record type",
                    "format": "text"
                  },
                  "businessId": {
                    "label": "Business ID",
                    "format": "text"
                  },
                  "encId": {
                    "label": "Yelp business ID",
                    "format": "text"
                  },
                  "alias": {
                    "label": "Alias",
                    "format": "text"
                  },
                  "name": {
                    "label": "Name",
                    "format": "text"
                  },
                  "categories": {
                    "label": "Categories",
                    "format": "array"
                  },
                  "address": {
                    "label": "Address",
                    "format": "object"
                  },
                  "city": {
                    "label": "City",
                    "format": "text"
                  },
                  "state": {
                    "label": "State",
                    "format": "text"
                  },
                  "zip": {
                    "label": "ZIP",
                    "format": "text"
                  },
                  "country": {
                    "label": "Country",
                    "format": "text"
                  },
                  "lat": {
                    "label": "Latitude",
                    "format": "number"
                  },
                  "lng": {
                    "label": "Longitude",
                    "format": "number"
                  },
                  "rating": {
                    "label": "Rating",
                    "format": "number"
                  },
                  "reviewCount": {
                    "label": "Reviews",
                    "format": "number"
                  },
                  "reviewsTotal": {
                    "label": "Reviews in feed",
                    "format": "number"
                  },
                  "price": {
                    "label": "Price",
                    "format": "text"
                  },
                  "phone": {
                    "label": "Phone",
                    "format": "text"
                  },
                  "website": {
                    "label": "Website",
                    "format": "link"
                  },
                  "hours": {
                    "label": "Hours",
                    "format": "object"
                  },
                  "photos": {
                    "label": "Photos",
                    "format": "array"
                  },
                  "url": {
                    "label": "Yelp URL",
                    "format": "link"
                  },
                  "isClosed": {
                    "label": "Closed",
                    "format": "boolean"
                  },
                  "isClaimed": {
                    "label": "Claimed",
                    "format": "boolean"
                  },
                  "description": {
                    "label": "Description",
                    "format": "text"
                  },
                  "reviews": {
                    "label": "Reviews",
                    "format": "array"
                  },
                  "searchRank": {
                    "label": "Search rank",
                    "format": "number"
                  },
                  "sponsored": {
                    "label": "Sponsored",
                    "format": "boolean"
                  },
                  "searchQuery": {
                    "label": "Search query",
                    "format": "text"
                  },
                  "searchLocation": {
                    "label": "Search location",
                    "format": "text"
                  },
                  "sourceUrl": {
                    "label": "Source URL",
                    "format": "link"
                  },
                  "scrapedAt": {
                    "label": "Scraped at",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "2.0.1",
    "imageDigest": "330ed8514b61024fe1db3e3a46bf6b70fc8c2536267caa619112e5fddcd125e5",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "2.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.010126666666666667
    }
  }
}