{
  "data": {
    "id": "tsEGdQm2g6T1hH81o",
    "actId": "QBeLUDlQ2pvHSqG08",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-11-06T08:05:39.963Z",
    "finishedAt": "2026-11-06T08:05:48.620Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 8568,
      "runTimeSecs": 8.568,
      "computeUnits": 0.00952,
      "imageSizeBytes": 319086080
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Google Maps Nearby Radius Search Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"centerType\": {\n      \"title\": \"Search Center Type\",\n      \"type\": \"string\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"coordinates\",\n        \"address\",\n        \"place\"\n      ],\n      \"enumTitles\": [\n        \"Coordinates\",\n        \"Address\",\n        \"Place URL or Place ID\"\n      ],\n      \"default\": \"coordinates\",\n      \"prefill\": \"coordinates\",\n      \"sectionCaption\": \"Search center\",\n      \"description\": \"How the center of the radius is supplied: exact latitude/longitude, a free-text address, or a Google Maps place URL / Place ID.\"\n    },\n    \"latitude\": {\n      \"title\": \"Latitude\",\n      \"type\": \"number\",\n      \"minimum\": -90,\n      \"maximum\": 90,\n      \"default\": 40.7484,\n      \"prefill\": 40.7484,\n      \"description\": \"Latitude of the center when the center type is Coordinates.\"\n    },\n    \"longitude\": {\n      \"title\": \"Longitude\",\n      \"type\": \"number\",\n      \"minimum\": -180,\n      \"maximum\": 180,\n      \"default\": -73.9857,\n      \"prefill\": -73.9857,\n      \"description\": \"Longitude of the center when the center type is Coordinates.\"\n    },\n    \"address\": {\n      \"title\": \"Address\",\n      \"type\": \"string\",\n      \"editor\": \"textfield\",\n      \"example\": \"350 5th Ave, New York, NY 10118\",\n      \"description\": \"Address, landmark or place name to use as the center when the center type is Address. Google resolves it to its own coordinates.\"\n    },\n    \"place\": {\n      \"title\": \"Place URL or Place ID\",\n      \"type\": \"string\",\n      \"editor\": \"textfield\",\n      \"description\": \"Google Maps place URL or canonical ChIJ Place ID to use as the center when the center type is Place.\"\n    },\n    \"searchTerms\": {\n      \"title\": \"Categories / Keywords\",\n      \"type\": \"array\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"minItems\": 1,\n      \"default\": [\n        \"coffee shop\"\n      ],\n      \"prefill\": [\n        \"coffee shop\"\n      ],\n      \"sectionCaption\": \"What to search for\",\n      \"description\": \"One or more categories or free-text keywords, for example ['coffee shop'], ['dentist', 'pharmacy'] or ['restaurant'].\"\n    },\n    \"radiusKm\": {\n      \"title\": \"Radius (km)\",\n      \"type\": \"number\",\n      \"minimum\": 0.05,\n      \"maximum\": 50,\n      \"default\": 1,\n      \"prefill\": 0.5,\n      \"sectionCaption\": \"Radius and result limit\",\n      \"description\": \"Hard search radius in kilometres around the center. Places outside it are dropped; every returned row carries its exact distance from the center.\"\n    },\n    \"maxResults\": {\n      \"title\": \"Max Results per Term\",\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 50,\n      \"prefill\": 6,\n      \"description\": \"Maximum places to return for each search term. Google's ranked window usually contains roughly 130-180 places inside a dense radius; when the source runs out the run stops honestly instead of padding.\"\n    },\n    \"includeDetails\": {\n      \"title\": \"Include Place Details\",\n      \"type\": \"boolean\",\n      \"default\": true,\n      \"prefill\": false,\n      \"sectionCaption\": \"Output\",\n      \"description\": \"Add preview-panel fields such as plus code, price level, rating histogram, photos, description, attributes, service options, closing status and hotel/fuel/booking extras. Adds one request per place; listing fields and weekly hours are always collected.\"\n    },\n    \"minRating\": {\n      \"title\": \"Minimum Rating\",\n      \"type\": \"number\",\n      \"minimum\": 1,\n      \"maximum\": 5,\n      \"sectionCaption\": \"Filters\",\n      \"description\": \"Only keep places rated at or above this value. Places with no published rating are skipped.\"\n    },\n    \"maxRating\": {\n      \"title\": \"Maximum Rating\",\n      \"type\": \"number\",\n      \"minimum\": 1,\n      \"maximum\": 5,\n      \"description\": \"Only keep places rated at or below this value. Places with no published rating are skipped.\"\n    },\n    \"minReviews\": {\n      \"title\": \"Minimum Review Count\",\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000,\n      \"description\": \"Only keep places with at least this many reviews. Places with no review count are skipped.\"\n    },\n    \"maxReviews\": {\n      \"title\": \"Maximum Review Count\",\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000,\n      \"description\": \"Only keep places with at most this many reviews. Places with no review count are skipped.\"\n    },\n    \"openNow\": {\n      \"title\": \"Open Now Only\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"prefill\": false,\n      \"description\": \"Only keep places Google currently shows as open. A place whose open/closed state cannot be read is skipped, so this filter can return fewer rows.\"\n    },\n    \"hasWebsite\": {\n      \"title\": \"Must Have Website\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"prefill\": false,\n      \"description\": \"Only keep places that publish a website on their Google Maps listing.\"\n    },\n    \"hasPhone\": {\n      \"title\": \"Must Have Phone\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"prefill\": false,\n      \"description\": \"Only keep places that publish a phone number on their Google Maps listing.\"\n    },\n    \"includeClosed\": {\n      \"title\": \"Include Permanently Closed\",\n      \"type\": \"boolean\",\n      \"default\": true,\n      \"prefill\": true,\n      \"description\": \"When off, places Google marks as permanently closed are skipped. This requires reading each place's preview panel.\"\n    },\n    \"nameFilter\": {\n      \"title\": \"Name Contains\",\n      \"type\": \"string\",\n      \"editor\": \"textfield\",\n      \"description\": \"Only keep places whose name contains this text, for example 'pizza'.\"\n    },\n    \"excludeCategories\": {\n      \"title\": \"Exclude Categories\",\n      \"type\": \"array\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": [],\n      \"prefill\": [],\n      \"description\": \"Skip places whose category contains any of these words, for example ['hotel', 'casino'].\"\n    },\n    \"language\": {\n      \"title\": \"Language\",\n      \"type\": \"string\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"en\",\n        \"af\",\n        \"az\",\n        \"id\",\n        \"ms\",\n        \"bs\",\n        \"ca\",\n        \"cs\",\n        \"da\",\n        \"de\",\n        \"et\",\n        \"es\",\n        \"es-419\",\n        \"eu\",\n        \"fil\",\n        \"fr\",\n        \"gl\",\n        \"hr\",\n        \"zu\",\n        \"is\",\n        \"it\",\n        \"sw\",\n        \"lv\",\n        \"lt\",\n        \"hu\",\n        \"nl\",\n        \"no\",\n        \"uz\",\n        \"pl\",\n        \"pt-BR\",\n        \"pt-PT\",\n        \"ro\",\n        \"sq\",\n        \"sk\",\n        \"sl\",\n        \"fi\",\n        \"sv\",\n        \"vi\",\n        \"tr\",\n        \"el\",\n        \"bg\",\n        \"ky\",\n        \"kk\",\n        \"mk\",\n        \"mn\",\n        \"ru\",\n        \"sr\",\n        \"uk\",\n        \"ka\",\n        \"hy\",\n        \"iw\",\n        \"ur\",\n        \"ar\",\n        \"fa\",\n        \"am\",\n        \"ne\",\n        \"hi\",\n        \"mr\",\n        \"bn\",\n        \"pa\",\n        \"gu\",\n        \"ta\",\n        \"te\",\n        \"kn\",\n        \"ml\",\n        \"si\",\n        \"th\",\n        \"lo\",\n        \"my\",\n        \"km\",\n        \"ko\",\n        \"ja\",\n        \"zh-CN\",\n        \"zh-TW\"\n      ],\n      \"enumTitles\": [\n        \"English\",\n        \"Afrikaans\",\n        \"azərbaycan\",\n        \"Bahasa Indonesia\",\n        \"Bahasa Melayu\",\n        \"bosanski\",\n        \"català\",\n        \"Čeština\",\n        \"Dansk\",\n        \"Deutsch\",\n        \"eesti\",\n        \"Español\",\n        \"Español (Latinoamérica)\",\n        \"euskara\",\n        \"Filipino\",\n        \"Français\",\n        \"galego\",\n        \"Hrvatski\",\n        \"isiZulu\",\n        \"íslenska\",\n        \"Italiano\",\n        \"Kiswahili\",\n        \"latviešu\",\n        \"lietuvių\",\n        \"magyar\",\n        \"Nederlands\",\n        \"norsk\",\n        \"oʻzbekcha\",\n        \"polski\",\n        \"Português (Brasil)\",\n        \"Português (Portugal)\",\n        \"română\",\n        \"shqip\",\n        \"Slovenčina\",\n        \"slovenščina\",\n        \"Suomi\",\n        \"Svenska\",\n        \"Tiếng Việt\",\n        \"Türkçe\",\n        \"Ελληνικά\",\n        \"български\",\n        \"кыргызча\",\n        \"қазақ тілі\",\n        \"македонски\",\n        \"монгол\",\n        \"Русский\",\n        \"српски\",\n        \"Українська\",\n        \"ქართული\",\n        \"հայերեն\",\n        \"עברית\",\n        \"اردو\",\n        \"العربية\",\n        \"فارسی\",\n        \"አማርኛ\",\n        \"नेपाली\",\n        \"हिन्दी\",\n        \"मराठी\",\n        \"বাংলা\",\n        \"ਪੰਜਾਬੀ\",\n        \"ગુજરાતી\",\n        \"தமிழ்\",\n        \"తెలుగు\",\n        \"ಕನ್ನಡ\",\n        \"മലയാളം\",\n        \"සිංහල\",\n        \"ไทย\",\n        \"ລາວ\",\n        \"ဗမာ\",\n        \"ខ្មែរ\",\n        \"한국어\",\n        \"日本語\",\n        \"简体中文\",\n        \"繁體中文\"\n      ],\n      \"default\": \"en\",\n      \"prefill\": \"en\",\n      \"sectionCaption\": \"Locale\",\n      \"description\": \"Language for place names, categories, addresses and hours.\"\n    }\n  },\n  \"required\": [\n    \"searchTerms\"\n  ]\n}",
    "readme": "# Google Maps Nearby Radius Search — Address, Place & Coordinates\n\nPoint this actor at a coordinate, an address, or a Google Maps place, give it a\nradius and one or more categories or keywords, and it returns the places Google\nshows inside that radius. Every row carries its straight-line distance from the\ncenter, so \"within 800 m of this address\" is an auditable number instead of a\nrelevance guess.\n\nIt reads Google Maps' public result feed without a browser, cookies or an API\nkey. Runs are small (1 GB), fast, and do not need proxy configuration.\n\n## Search center\n\nChoose one center type:\n\n| Center type | What to provide | Example |\n|---|---|---|\n| Coordinates | `latitude` + `longitude` | `40.7484`, `-73.9857` |\n| Address | `address` | `350 5th Ave, New York, NY 10118` |\n| Place | `place` (Maps URL or ChIJ Place ID) | `https://www.google.com/maps/place/?q=place_id:ChIJ...` |\n\nAn address or place is resolved to Google's own coordinates first, then the\nradius search is anchored there. A place can be a full Maps URL, a short\n`maps.app.goo.gl`-style link, or a canonical `ChIJ...` Place ID.\n\n## What it collects\n\nFor every place inside the radius:\n\n- `name`, `categoryName`, `categories`\n- `totalScore`, `reviewsCount`, `ratingHistogram`\n- `address`, `phone`, `website`\n- `priceLevel`, `plusCode`, `description`\n- `hours`, `hoursStatus`, `isOpenNow`\n- `timezone`, `countryCode`\n- `placeId`, `featureId`, `kgmid`, `cid`\n- `location` (`{lat,lng}`), `latitude`, `longitude`\n- `distanceFromCenter` (e.g. `450 m`), `distanceFromCenterMeters`\n- `photosSample`, `photoCount`\n- `placeAttributes`, `attributes`, `amenities`, `serviceOptions`\n- `fuelPrices`, `hotelStars`, `hotelStarRating`, `priceOfferAmount`,\n  `priceOfferCurrency`, `priceOfferDateRange`, `hotelAmenities`\n- `bookingLinks`, `checkInTime`, `checkOutTime`\n- `hasStreetView`, `streetViewCount`\n- `permanentlyClosed`, `temporarilyClosed`, `claimed`\n- `searchTerm`, `rankInSearch`\n- `googleMapsUrl`, `sourceUrl`, `scrapedAt`, `recordType`\n\nFields Google does not publish for a place are omitted, never sent as `null` or\nan empty string. `includeDetails` adds the preview-panel fields (plus code,\nprice, histogram, photos, description, attributes, service options, closure\nstatus and hotel/fuel/booking extras when Google publishes them) and costs one\nextra request per place; listing fields and weekly hours are collected either\nway.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `centerType` | select | `coordinates` | `coordinates`, `address` or `place` |\n| `latitude` | number | `40.7484` | Center latitude for coordinate mode |\n| `longitude` | number | `-73.9857` | Center longitude for coordinate mode |\n| `address` | string | — | Center for address mode |\n| `place` | string | — | Maps URL or ChIJ Place ID for place mode |\n| `searchTerms` | string list | `[\"coffee shop\"]` | One or more categories/keywords (required) |\n| `radiusKm` | number | `1` | Hard radius, 0.05–50 km |\n| `maxResults` | integer | `50` | Maximum places per term |\n| `includeDetails` | boolean | `true` | Read each place's preview panel |\n| `minRating` / `maxRating` | number | — | Inclusive rating bounds |\n| `minReviews` / `maxReviews` | integer | — | Inclusive review-count bounds |\n| `openNow` | boolean | `false` | Keep only places observed open |\n| `hasWebsite` / `hasPhone` | boolean | `false` | Require the field |\n| `includeClosed` | boolean | `true` | Keep permanently closed places |\n| `nameFilter` | string | — | Name must contain this text |\n| `excludeCategories` | string list | `[]` | Drop matching categories |\n| `language` | select | `en` | 74 Google Maps UI languages |\n\n### Examples\n\nCoffee within 500 m of Times Square:\n\n```json\n{\n  \"centerType\": \"coordinates\",\n  \"latitude\": 40.7484,\n  \"longitude\": -73.9857,\n  \"searchTerms\": [\"coffee shop\"],\n  \"radiusKm\": 0.5,\n  \"maxResults\": 30\n}\n```\n\nHighly rated, open-now restaurants around an address:\n\n```json\n{\n  \"centerType\": \"address\",\n  \"address\": \"10 Downing St, London SW1A 2AA\",\n  \"searchTerms\": [\"restaurant\"],\n  \"radiusKm\": 2,\n  \"minRating\": 4.5,\n  \"openNow\": true,\n  \"maxResults\": 50\n}\n```\n\nPharmacies and clinics around a place URL, in French:\n\n```json\n{\n  \"centerType\": \"place\",\n  \"place\": \"https://www.google.com/maps/place/Eiffel+Tower/@48.8583701,2.2944813,17z\",\n  \"searchTerms\": [\"pharmacy\", \"clinic\"],\n  \"radiusKm\": 3,\n  \"includeDetails\": false,\n  \"language\": \"fr\",\n  \"maxResults\": 40\n}\n```\n\n## How pagination works\n\nGoogle serves the nearby feed in pages of 20 ranked places. The actor follows\nthose pages until the per-term `maxResults` is reached, the feed returns an\nempty section, or two consecutive pages contain nothing inside the radius\n(Google appends unrelated places from other cities at the end of a window).\nDeduplication is by Place ID, then feature ID, then Maps URL, then name +\naddress.\n\nA single term's ranked window usually holds roughly 130–180 places inside a\ndense radius. When that window ends, the actor stops and says so in the status\nmessage rather than padding the dataset. For more coverage, split the area into\nsmaller radii or run several narrower category terms.\n\n## FAQ\n\n**Do I need a Google Maps API key or cookies?** No. The actor reads the same\npublic result and preview endpoints the Maps website uses, with no account,\ncookie or key.\n\n**Do I need a proxy?** No. It starts direct, and only if Google repeatedly\nblocks the connection does it move to Apify's datacenter pool and then US\nresidential as a last resort. There is no proxy field to configure.\n\n**Why are there fewer rows than `maxResults`?** The ranked window ends, or the\nradius/filters removed places. The status message reports how many rows were\noutside the radius and how many were filtered. A tight radius or strict\n`openNow` filter can legitimately return zero rows.\n\n**Why is `distanceFromCenter` missing?** It is never missing on a returned row:\na place without observed coordinates is dropped because it cannot be proven\ninside the radius.\n\n**Can I search more than one category in one run?** Yes. Put several entries in\n`searchTerms`; each term is searched and paginated separately, and every row\nrecords which term found it. `maxResults` applies per term.\n\n**Why do some detail fields appear only sometimes?** Plus code, price level,\nrating histogram, description and attributes are conditional on Google\npublishing them for that place. Omitted means Google did not show it.\n\n**Does a smaller radius return more accurate results?** Yes. The radius also\nselects the map zoom used for the search, so a 500 m request is anchored on a\nmuch tighter viewport than a 20 km request.\n\n**Is this affiliated with Google?** No. It reads publicly visible Google Maps\ndata and is not affiliated with, endorsed by or sponsored by Google.\n\n## Limitations\n\n- One term's ranked window is finite; the actor reports the honest source end\n  instead of inventing rows.\n- Popular times, menus, reviews, emails and social profiles belong to separate\n  actors in this suite.\n- Bounding-box, polygon and multi-cell grid scans belong to the area-scanner\n  actor.\n- Google localises names, addresses and hours with `language`; the values are\n  returned exactly as Google serves them.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "google-maps-radius-search-around-a-coordinate",
      "title": "Google Maps Nearby Radius Search — Address, Place & Coordinates",
      "description": "Find Google Maps places inside a radius around coordinates, an address or a place. Filter by rating, reviews, open now, website or phone; get hours, price, plus code, IDs, coordinates and distance from the center.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Google Maps Nearby Radius Search — Address, Place & Coordinates\n\nPoint this actor at a coordinate, an address, or a Google Maps place, give it a\nradius and one or more categories or keywords, and it returns the places Google\nshows inside that radius. Every row carries its straight-line distance from the\ncenter, so \"within 800 m of this address\" is an auditable number instead of a\nrelevance guess.\n\nIt reads Google Maps' public result feed without a browser, cookies or an API\nkey. Runs are small (1 GB), fast, and do not need proxy configuration.\n\n## Search center\n\nChoose one center type:\n\n| Center type | What to provide | Example |\n|---|---|---|\n| Coordinates | `latitude` + `longitude` | `40.7484`, `-73.9857` |\n| Address | `address` | `350 5th Ave, New York, NY 10118` |\n| Place | `place` (Maps URL or ChIJ Place ID) | `https://www.google.com/maps/place/?q=place_id:ChIJ...` |\n\nAn address or place is resolved to Google's own coordinates first, then the\nradius search is anchored there. A place can be a full Maps URL, a short\n`maps.app.goo.gl`-style link, or a canonical `ChIJ...` Place ID.\n\n## What it collects\n\nFor every place inside the radius:\n\n- `name`, `categoryName`, `categories`\n- `totalScore`, `reviewsCount`, `ratingHistogram`\n- `address`, `phone`, `website`\n- `priceLevel`, `plusCode`, `description`\n- `hours`, `hoursStatus`, `isOpenNow`\n- `timezone`, `countryCode`\n- `placeId`, `featureId`, `kgmid`, `cid`\n- `location` (`{lat,lng}`), `latitude`, `longitude`\n- `distanceFromCenter` (e.g. `450 m`), `distanceFromCenterMeters`\n- `photosSample`, `photoCount`\n- `placeAttributes`, `attributes`, `amenities`, `serviceOptions`\n- `fuelPrices`, `hotelStars`, `hotelStarRating`, `priceOfferAmount`,\n  `priceOfferCurrency`, `priceOfferDateRange`, `hotelAmenities`\n- `bookingLinks`, `checkInTime`, `checkOutTime`\n- `hasStreetView`, `streetViewCount`\n- `permanentlyClosed`, `temporarilyClosed`, `claimed`\n- `searchTerm`, `rankInSearch`\n- `googleMapsUrl`, `sourceUrl`, `scrapedAt`, `recordType`\n\nFields Google does not publish for a place are omitted, never sent as `null` or\nan empty string. `includeDetails` adds the preview-panel fields (plus code,\nprice, histogram, photos, description, attributes, service options, closure\nstatus and hotel/fuel/booking extras when Google publishes them) and costs one\nextra request per place; listing fields and weekly hours are collected either\nway.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `centerType` | select | `coordinates` | `coordinates`, `address` or `place` |\n| `latitude` | number | `40.7484` | Center latitude for coordinate mode |\n| `longitude` | number | `-73.9857` | Center longitude for coordinate mode |\n| `address` | string | — | Center for address mode |\n| `place` | string | — | Maps URL or ChIJ Place ID for place mode |\n| `searchTerms` | string list | `[\"coffee shop\"]` | One or more categories/keywords (required) |\n| `radiusKm` | number | `1` | Hard radius, 0.05–50 km |\n| `maxResults` | integer | `50` | Maximum places per term |\n| `includeDetails` | boolean | `true` | Read each place's preview panel |\n| `minRating` / `maxRating` | number | — | Inclusive rating bounds |\n| `minReviews` / `maxReviews` | integer | — | Inclusive review-count bounds |\n| `openNow` | boolean | `false` | Keep only places observed open |\n| `hasWebsite` / `hasPhone` | boolean | `false` | Require the field |\n| `includeClosed` | boolean | `true` | Keep permanently closed places |\n| `nameFilter` | string | — | Name must contain this text |\n| `excludeCategories` | string list | `[]` | Drop matching categories |\n| `language` | select | `en` | 74 Google Maps UI languages |\n\n### Examples\n\nCoffee within 500 m of Times Square:\n\n```json\n{\n  \"centerType\": \"coordinates\",\n  \"latitude\": 40.7484,\n  \"longitude\": -73.9857,\n  \"searchTerms\": [\"coffee shop\"],\n  \"radiusKm\": 0.5,\n  \"maxResults\": 30\n}\n```\n\nHighly rated, open-now restaurants around an address:\n\n```json\n{\n  \"centerType\": \"address\",\n  \"address\": \"10 Downing St, London SW1A 2AA\",\n  \"searchTerms\": [\"restaurant\"],\n  \"radiusKm\": 2,\n  \"minRating\": 4.5,\n  \"openNow\": true,\n  \"maxResults\": 50\n}\n```\n\nPharmacies and clinics around a place URL, in French:\n\n```json\n{\n  \"centerType\": \"place\",\n  \"place\": \"https://www.google.com/maps/place/Eiffel+Tower/@48.8583701,2.2944813,17z\",\n  \"searchTerms\": [\"pharmacy\", \"clinic\"],\n  \"radiusKm\": 3,\n  \"includeDetails\": false,\n  \"language\": \"fr\",\n  \"maxResults\": 40\n}\n```\n\n## How pagination works\n\nGoogle serves the nearby feed in pages of 20 ranked places. The actor follows\nthose pages until the per-term `maxResults` is reached, the feed returns an\nempty section, or two consecutive pages contain nothing inside the radius\n(Google appends unrelated places from other cities at the end of a window).\nDeduplication is by Place ID, then feature ID, then Maps URL, then name +\naddress.\n\nA single term's ranked window usually holds roughly 130–180 places inside a\ndense radius. When that window ends, the actor stops and says so in the status\nmessage rather than padding the dataset. For more coverage, split the area into\nsmaller radii or run several narrower category terms.\n\n## FAQ\n\n**Do I need a Google Maps API key or cookies?** No. The actor reads the same\npublic result and preview endpoints the Maps website uses, with no account,\ncookie or key.\n\n**Do I need a proxy?** No. It starts direct, and only if Google repeatedly\nblocks the connection does it move to Apify's datacenter pool and then US\nresidential as a last resort. There is no proxy field to configure.\n\n**Why are there fewer rows than `maxResults`?** The ranked window ends, or the\nradius/filters removed places. The status message reports how many rows were\noutside the radius and how many were filtered. A tight radius or strict\n`openNow` filter can legitimately return zero rows.\n\n**Why is `distanceFromCenter` missing?** It is never missing on a returned row:\na place without observed coordinates is dropped because it cannot be proven\ninside the radius.\n\n**Can I search more than one category in one run?** Yes. Put several entries in\n`searchTerms`; each term is searched and paginated separately, and every row\nrecords which term found it. `maxResults` applies per term.\n\n**Why do some detail fields appear only sometimes?** Plus code, price level,\nrating histogram, description and attributes are conditional on Google\npublishing them for that place. Omitted means Google did not show it.\n\n**Does a smaller radius return more accurate results?** Yes. The radius also\nselects the map zoom used for the search, so a 500 m request is anchored on a\nmuch tighter viewport than a 20 km request.\n\n**Is this affiliated with Google?** No. It reads publicly visible Google Maps\ndata and is not affiliated with, endorsed by or sponsored by Google.\n\n## Limitations\n\n- One term's ranked window is finite; the actor reports the honest source end\n  instead of inventing rows.\n- Popular times, menus, reviews, emails and social profiles belong to separate\n  actors in this suite.\n- Bounding-box, polygon and multi-cell grid scans belong to the area-scanner\n  actor.\n- Google localises names, addresses and hours with `language`; the values are\n  returned exactly as Google serves them.\n",
      "input": {
        "title": "Google Maps Nearby Radius Search Input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "centerType": {
            "title": "Search Center Type",
            "type": "string",
            "editor": "select",
            "enum": [
              "coordinates",
              "address",
              "place"
            ],
            "enumTitles": [
              "Coordinates",
              "Address",
              "Place URL or Place ID"
            ],
            "default": "coordinates",
            "prefill": "coordinates",
            "sectionCaption": "Search center",
            "description": "How the center of the radius is supplied: exact latitude/longitude, a free-text address, or a Google Maps place URL / Place ID."
          },
          "latitude": {
            "title": "Latitude",
            "type": "number",
            "minimum": -90,
            "maximum": 90,
            "default": 40.7484,
            "prefill": 40.7484,
            "description": "Latitude of the center when the center type is Coordinates."
          },
          "longitude": {
            "title": "Longitude",
            "type": "number",
            "minimum": -180,
            "maximum": 180,
            "default": -73.9857,
            "prefill": -73.9857,
            "description": "Longitude of the center when the center type is Coordinates."
          },
          "address": {
            "title": "Address",
            "type": "string",
            "editor": "textfield",
            "example": "350 5th Ave, New York, NY 10118",
            "description": "Address, landmark or place name to use as the center when the center type is Address. Google resolves it to its own coordinates."
          },
          "place": {
            "title": "Place URL or Place ID",
            "type": "string",
            "editor": "textfield",
            "description": "Google Maps place URL or canonical ChIJ Place ID to use as the center when the center type is Place."
          },
          "searchTerms": {
            "title": "Categories / Keywords",
            "type": "array",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "default": [
              "coffee shop"
            ],
            "prefill": [
              "coffee shop"
            ],
            "sectionCaption": "What to search for",
            "description": "One or more categories or free-text keywords, for example ['coffee shop'], ['dentist', 'pharmacy'] or ['restaurant']."
          },
          "radiusKm": {
            "title": "Radius (km)",
            "type": "number",
            "minimum": 0.05,
            "maximum": 50,
            "default": 1,
            "prefill": 0.5,
            "sectionCaption": "Radius and result limit",
            "description": "Hard search radius in kilometres around the center. Places outside it are dropped; every returned row carries its exact distance from the center."
          },
          "maxResults": {
            "title": "Max Results per Term",
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 50,
            "prefill": 6,
            "description": "Maximum places to return for each search term. Google's ranked window usually contains roughly 130-180 places inside a dense radius; when the source runs out the run stops honestly instead of padding."
          },
          "includeDetails": {
            "title": "Include Place Details",
            "type": "boolean",
            "default": true,
            "prefill": false,
            "sectionCaption": "Output",
            "description": "Add preview-panel fields such as plus code, price level, rating histogram, photos, description, attributes, service options, closing status and hotel/fuel/booking extras. Adds one request per place; listing fields and weekly hours are always collected."
          },
          "minRating": {
            "title": "Minimum Rating",
            "type": "number",
            "minimum": 1,
            "maximum": 5,
            "sectionCaption": "Filters",
            "description": "Only keep places rated at or above this value. Places with no published rating are skipped."
          },
          "maxRating": {
            "title": "Maximum Rating",
            "type": "number",
            "minimum": 1,
            "maximum": 5,
            "description": "Only keep places rated at or below this value. Places with no published rating are skipped."
          },
          "minReviews": {
            "title": "Minimum Review Count",
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000000,
            "description": "Only keep places with at least this many reviews. Places with no review count are skipped."
          },
          "maxReviews": {
            "title": "Maximum Review Count",
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000000,
            "description": "Only keep places with at most this many reviews. Places with no review count are skipped."
          },
          "openNow": {
            "title": "Open Now Only",
            "type": "boolean",
            "default": false,
            "prefill": false,
            "description": "Only keep places Google currently shows as open. A place whose open/closed state cannot be read is skipped, so this filter can return fewer rows."
          },
          "hasWebsite": {
            "title": "Must Have Website",
            "type": "boolean",
            "default": false,
            "prefill": false,
            "description": "Only keep places that publish a website on their Google Maps listing."
          },
          "hasPhone": {
            "title": "Must Have Phone",
            "type": "boolean",
            "default": false,
            "prefill": false,
            "description": "Only keep places that publish a phone number on their Google Maps listing."
          },
          "includeClosed": {
            "title": "Include Permanently Closed",
            "type": "boolean",
            "default": true,
            "prefill": true,
            "description": "When off, places Google marks as permanently closed are skipped. This requires reading each place's preview panel."
          },
          "nameFilter": {
            "title": "Name Contains",
            "type": "string",
            "editor": "textfield",
            "description": "Only keep places whose name contains this text, for example 'pizza'."
          },
          "excludeCategories": {
            "title": "Exclude Categories",
            "type": "array",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": [],
            "prefill": [],
            "description": "Skip places whose category contains any of these words, for example ['hotel', 'casino']."
          },
          "language": {
            "title": "Language",
            "type": "string",
            "editor": "select",
            "enum": [
              "en",
              "af",
              "az",
              "id",
              "ms",
              "bs",
              "ca",
              "cs",
              "da",
              "de",
              "et",
              "es",
              "es-419",
              "eu",
              "fil",
              "fr",
              "gl",
              "hr",
              "zu",
              "is",
              "it",
              "sw",
              "lv",
              "lt",
              "hu",
              "nl",
              "no",
              "uz",
              "pl",
              "pt-BR",
              "pt-PT",
              "ro",
              "sq",
              "sk",
              "sl",
              "fi",
              "sv",
              "vi",
              "tr",
              "el",
              "bg",
              "ky",
              "kk",
              "mk",
              "mn",
              "ru",
              "sr",
              "uk",
              "ka",
              "hy",
              "iw",
              "ur",
              "ar",
              "fa",
              "am",
              "ne",
              "hi",
              "mr",
              "bn",
              "pa",
              "gu",
              "ta",
              "te",
              "kn",
              "ml",
              "si",
              "th",
              "lo",
              "my",
              "km",
              "ko",
              "ja",
              "zh-CN",
              "zh-TW"
            ],
            "enumTitles": [
              "English",
              "Afrikaans",
              "azərbaycan",
              "Bahasa Indonesia",
              "Bahasa Melayu",
              "bosanski",
              "català",
              "Čeština",
              "Dansk",
              "Deutsch",
              "eesti",
              "Español",
              "Español (Latinoamérica)",
              "euskara",
              "Filipino",
              "Français",
              "galego",
              "Hrvatski",
              "isiZulu",
              "íslenska",
              "Italiano",
              "Kiswahili",
              "latviešu",
              "lietuvių",
              "magyar",
              "Nederlands",
              "norsk",
              "oʻzbekcha",
              "polski",
              "Português (Brasil)",
              "Português (Portugal)",
              "română",
              "shqip",
              "Slovenčina",
              "slovenščina",
              "Suomi",
              "Svenska",
              "Tiếng Việt",
              "Türkçe",
              "Ελληνικά",
              "български",
              "кыргызча",
              "қазақ тілі",
              "македонски",
              "монгол",
              "Русский",
              "српски",
              "Українська",
              "ქართული",
              "հայերեն",
              "עברית",
              "اردو",
              "العربية",
              "فارسی",
              "አማርኛ",
              "नेपाली",
              "हिन्दी",
              "मराठी",
              "বাংলা",
              "ਪੰਜਾਬੀ",
              "ગુજરાતી",
              "தமிழ்",
              "తెలుగు",
              "ಕನ್ನಡ",
              "മലയാളം",
              "සිංහල",
              "ไทย",
              "ລາວ",
              "ဗမာ",
              "ខ្មែរ",
              "한국어",
              "日本語",
              "简体中文",
              "繁體中文"
            ],
            "default": "en",
            "prefill": "en",
            "sectionCaption": "Locale",
            "description": "Language for place names, categories, addresses and hours."
          }
        },
        "required": [
          "searchTerms"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Google Maps Nearby Radius Search Output",
        "description": "Dataset of Google Maps places inside the requested radius, each with identity, contact, rating, hours, coordinates and distance from the center.",
        "properties": {
          "places": {
            "type": "string",
            "title": "Nearby Places",
            "description": "One row per place inside the radius. Fields are omitted when Google does not publish them.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Nearby Places",
              "transformation": {
                "fields": [
                  "recordType",
                  "name",
                  "categoryName",
                  "totalScore",
                  "reviewsCount",
                  "address",
                  "phone",
                  "website",
                  "distanceFromCenter",
                  "searchTerm",
                  "googleMapsUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "name": {
                    "label": "Name",
                    "format": "text"
                  },
                  "categoryName": {
                    "label": "Category",
                    "format": "text"
                  },
                  "totalScore": {
                    "label": "Rating",
                    "format": "number"
                  },
                  "reviewsCount": {
                    "label": "Reviews",
                    "format": "number"
                  },
                  "address": {
                    "label": "Address",
                    "format": "text"
                  },
                  "phone": {
                    "label": "Phone",
                    "format": "text"
                  },
                  "website": {
                    "label": "Website",
                    "format": "link"
                  },
                  "distanceFromCenter": {
                    "label": "Distance",
                    "format": "text"
                  },
                  "searchTerm": {
                    "label": "Search term",
                    "format": "text"
                  },
                  "googleMapsUrl": {
                    "label": "Maps URL",
                    "format": "link"
                  }
                }
              }
            },
            "full": {
              "title": "Complete Place Data",
              "transformation": {
                "fields": [
                  "recordType",
                  "name",
                  "categoryName",
                  "categories",
                  "totalScore",
                  "reviewsCount",
                  "ratingHistogram",
                  "address",
                  "phone",
                  "website",
                  "priceLevel",
                  "placeId",
                  "featureId",
                  "kgmid",
                  "cid",
                  "plusCode",
                  "location",
                  "latitude",
                  "longitude",
                  "distanceFromCenter",
                  "distanceFromCenterMeters",
                  "hours",
                  "hoursStatus",
                  "isOpenNow",
                  "timezone",
                  "countryCode",
                  "description",
                  "placeAttributes",
                  "attributes",
                  "amenities",
                  "serviceOptions",
                  "fuelPrices",
                  "hotelStars",
                  "hotelStarRating",
                  "priceOfferAmount",
                  "priceOfferCurrency",
                  "priceOfferDateRange",
                  "hotelAmenities",
                  "bookingLinks",
                  "checkInTime",
                  "checkOutTime",
                  "hasStreetView",
                  "streetViewCount",
                  "photosSample",
                  "photoCount",
                  "permanentlyClosed",
                  "temporarilyClosed",
                  "claimed",
                  "searchTerm",
                  "rankInSearch",
                  "googleMapsUrl",
                  "sourceUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table"
              }
            }
          }
        }
      },
      "minMemoryMbytes": 1024,
      "maxMemoryMbytes": 1024,
      "environmentVariables": {}
    },
    "buildNumber": "1.0.2",
    "imageDigest": "4a6ce6d0a1ef59ba6891a524750d52b29a178d8abdf58f112e4c1e6cbe7f84eb",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.00952
    }
  }
}