{
  "openapi": "3.0.1",
  "info": {
    "title": "Yelp Business Scraper | Phones & Address",
    "description": "Scrape Yelp listings without the official Yelp API. Search by keyword, category, or URL and extract names, ratings, phones, street addresses, websites, hours, and guest review snippets from /biz pages. Export restaurant, dentist, hotel, and local-lead lists as CSV, Excel, or JSON. No login.",
    "version": "0.2",
    "x-build-id": "Xj0o1TxtqdfytotHg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lentic_clockss~yelp-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lentic_clockss-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/lentic_clockss~yelp-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lentic_clockss-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/lentic_clockss~yelp-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lentic_clockss-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": {
          "searchType": {
            "title": "Search type",
            "enum": [
              "search",
              "category",
              "detail",
              "phone",
              "about",
              "privacy",
              "support",
              "press",
              "ir",
              "contact",
              "photos",
              "map"
            ],
            "type": "string",
            "description": "Opened: search, category, detail (via enrich), about, privacy, support, press, ir. Left at privacy with a query or location given, a search is run. contact is a hCaptcha ticket (rejected). photos/map 未验证.",
            "default": "privacy"
          },
          "findDesc": {
            "title": "Search query",
            "type": "string",
            "description": "Yelp find_desc. Used by search mode; empty search input falls back to ramen.",
            "default": ""
          },
          "findLoc": {
            "title": "Location",
            "type": "string",
            "description": "Yelp find_loc city. Used by search/category mode; empty search input falls back to Chicago, IL.",
            "default": ""
          },
          "cflt": {
            "title": "Category alias",
            "type": "string",
            "description": "Required for searchType=category. Aliases include restaurants, dentists, homeservices, auto, beautysvc, health, shopping, hotels, pets, nightlife, professional, eventservices. `beauty` maps to beautysvc.",
            "default": ""
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "recommended",
              "rating",
              "review_count"
            ],
            "type": "string",
            "description": "recommended omits sortby=. rating was verified live. review_count is accepted.",
            "default": "recommended"
          },
          "start": {
            "title": "Start offset",
            "minimum": 0,
            "maximum": 990,
            "type": "integer",
            "description": "Yelp pagination uses start, stepping by 10. 0 is the first page.",
            "default": 0
          },
          "bizSlug": {
            "title": "Business slug",
            "type": "string",
            "description": "Live /biz/{slug} for searchType=detail. Do not invent ids. Encid URLs resolve to slug.",
            "default": ""
          },
          "market": {
            "title": "Market / host",
            "enum": [
              "us",
              "uk",
              "ca",
              "ie",
              "au",
              "de",
              "fr",
              "it",
              "es",
              "nl",
              "be",
              "ch",
              "at",
              "se",
              "no",
              "dk",
              "fi",
              "pl",
              "cz",
              "jp",
              "sg",
              "hk",
              "tw",
              "tr",
              "br",
              "cl",
              "mx"
            ],
            "type": "string",
            "description": "LDP opened for us/ca/au/de/fr/ie/it/es + uk/nl/be/ch/at/se/no/dk/fi/pl (live-validated 2026-10-12). cz and other TLD keys route with ISO proxy country but are not yet verified.",
            "default": "us"
          },
          "enrichDetails": {
            "title": "Enrich rows with detail data",
            "type": "boolean",
            "description": "On app_api this batches /business/info (distance/transactions) plus one GraphQL POST for features/hours/review_counts/summary/popular_items/vibe_check/community_questions/category/connections. On the browser path it follows the /biz LDP for phone and address. Default on.",
            "default": true
          },
          "includeReviews": {
            "title": "Emit guest review rows",
            "type": "boolean",
            "description": "Opt in to separately billed guest-review rows from /biz pages. Business and review rows share maxResults for each input.",
            "default": false
          },
          "reviewTerm": {
            "title": "Review keyword filter",
            "type": "string",
            "description": "app_api only. When non-empty and includeReviews=true, reviews are fetched via /reviews/search filtered by this keyword.",
            "default": ""
          },
          "reviewLimit": {
            "title": "Reviews per business",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "app_api only. How many review rows to request per business (cap inside the shared maxResults budget).",
            "default": 20
          },
          "reviewOffset": {
            "title": "Review pagination offset",
            "minimum": 0,
            "type": "integer",
            "description": "app_api only. Starting offset for review pagination.",
            "default": 0
          },
          "includePhotos": {
            "title": "Emit photo URLs on each business row",
            "type": "boolean",
            "description": "app_api only. Adds `photos` (array of URLs) and `mediaCount` to each business row via /business/media/v2.",
            "default": false
          },
          "photoLimit": {
            "title": "Photo URLs per business",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "app_api only. Max photo URLs kept per business row.",
            "default": 10
          },
          "registerDevice": {
            "title": "Register device before run",
            "type": "boolean",
            "description": "app_api only. Call POST /client/register once at the start of the run (exchanges device params for `bse`/`wdi` cookies installed into the session jar); recorded on diagnostics.credentialOutcome and result.installed_cookies. Does not block the run on failure.",
            "default": false
          },
          "includePresentation": {
            "title": "Include presentation layout",
            "type": "boolean",
            "description": "app_api only. Fire one POST /business/presentation across all collected biz_ids and merge the returned client detail-page layout metadata into each matching row under `row.presentation` (dict). Rows carry it only when the API returned data.",
            "default": false
          },
          "phoneNumber": {
            "title": "Phone for searchType=phone",
            "type": "string",
            "description": "Required when searchType=phone. Digits only are sent to the mobile reverse-lookup endpoint.",
            "default": ""
          },
          "phoneCountry": {
            "title": "Phone country",
            "type": "string",
            "description": "ISO country hint passed with phoneNumber.",
            "default": "US"
          },
          "communityQuestionsFirst": {
            "title": "Community Q&A page size",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "app_api only. `first` arg for the community_questions GraphQL query.",
            "default": 5
          },
          "maxResults": {
            "title": "Max rows per input",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Most Dataset rows for each start URL, or for the scalar search/detail/company input when no URL list is supplied. Default and maximum are 50. Business and opt-in review rows share the input allowance. The run stops at your maximum total charge. Free Apify plan: 200 rows per run.",
            "default": 50
          },
          "maxPages": {
            "title": "Max search pages",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Each page is start += 10. Worker hard-caps at 20 pages.",
            "default": 1
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Optional live yelp.com /search or /biz/ inputs. Each URL gets its own maxResults allowance. Do not invent biz ids.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "workerBaseUrl": {
            "title": "Worker base URL override",
            "type": "string",
            "description": "Optional HTTPS Cloud Run origin. Production uses WORKER_BASE_URL env.",
            "default": ""
          },
          "provider": {
            "title": "Collection channel",
            "enum": [
              "app_api",
              "patchright-base",
              "camoufox",
              "patchright",
              "brightdata_browser",
              "cloakbrowser_base"
            ],
            "type": "string",
            "description": "Primary acquisition channel. `app_api` hits the mobile JSON surface directly (no browser, no challenge, ~1.5 s, includes ads+organic, supports 20-biz batch). `patchright-base` / `camoufox` / `geonode-extract` are browser lanes kept as fallback for company pages or when app_api env is absent.",
            "default": "app_api"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}