Dataspryva

Google Maps Radius Search Around a Coordinate

Find Google Maps places within a set radius of an exact latitude/longitude, with rating, reviews, address, phone, website, coordinates, and distance from the center point.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
centerTypestringoptionalHow the center of the radius is supplied: exact latitude/longitude, a free-text address, or a Google Maps place URL / Place ID.
latitudenumberoptionalLatitude of the center when the center type is Coordinates.
longitudenumberoptionalLongitude of the center when the center type is Coordinates.
Show all input fields
FieldTypeRequiredDescription
centerTypestringoptionalHow the center of the radius is supplied: exact latitude/longitude, a free-text address, or a Google Maps place URL / Place ID.
latitudenumberoptionalLatitude of the center when the center type is Coordinates.
longitudenumberoptionalLongitude of the center when the center type is Coordinates.
addressstringoptionalAddress, landmark or place name to use as the center when the center type is Address. Google resolves it to its own coordinates.
placestringoptionalGoogle Maps place URL or canonical ChIJ Place ID to use as the center when the center type is Place.
searchTermsarrayrequiredOne or more categories or free-text keywords, for example ['coffee shop'], ['dentist', 'pharmacy'] or ['restaurant'].
radiusKmnumberoptionalHard search radius in kilometres around the center. Places outside it are dropped; every returned row carries its exact distance from the center.
maxResultsintegeroptionalMaximum 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.
includeDetailsbooleanoptionalAdd 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.
minRatingnumberoptionalOnly keep places rated at or above this value. Places with no published rating are skipped.
maxRatingnumberoptionalOnly keep places rated at or below this value. Places with no published rating are skipped.
minReviewsintegeroptionalOnly keep places with at least this many reviews. Places with no review count are skipped.
maxReviewsintegeroptionalOnly keep places with at most this many reviews. Places with no review count are skipped.
openNowbooleanoptionalOnly 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.
hasWebsitebooleanoptionalOnly keep places that publish a website on their Google Maps listing.
hasPhonebooleanoptionalOnly keep places that publish a phone number on their Google Maps listing.
includeClosedbooleanoptionalWhen off, places Google marks as permanently closed are skipped. This requires reading each place's preview panel.
nameFilterstringoptionalOnly keep places whose name contains this text, for example 'pizza'.
excludeCategoriesarrayoptionalSkip places whose category contains any of these words, for example ['hotel', 'casino'].
languagestringoptionalLanguage for place names, categories, addresses and hours.

Download the published input schema

View complete JSON
{
  "properties": {
    "address": {
      "description": "Address, landmark or place name to use as the center when the center type is Address. Google resolves it to its own coordinates.",
      "editor": "textfield",
      "example": "350 5th Ave, New York, NY 10118",
      "title": "Address",
      "type": "string"
    },
    "centerType": {
      "default": "coordinates",
      "description": "How the center of the radius is supplied: exact latitude/longitude, a free-text address, or a Google Maps place URL / Place ID.",
      "editor": "select",
      "enum": [
        "coordinates",
        "address",
        "place"
      ],
      "enumTitles": [
        "Coordinates",
        "Address",
        "Place URL or Place ID"
      ],
      "prefill": "coordinates",
      "sectionCaption": "Search center",
      "title": "Search Center Type",
      "type": "string"
    },
    "excludeCategories": {
      "default": [],
      "description": "Skip places whose category contains any of these words, for example ['hotel', 'casino'].",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [],
      "title": "Exclude Categories",
      "type": "array"
    },
    "hasPhone": {
      "default": false,
      "description": "Only keep places that publish a phone number on their Google Maps listing.",
      "prefill": false,
      "title": "Must Have Phone",
      "type": "boolean"
    },
    "hasWebsite": {
      "default": false,
      "description": "Only keep places that publish a website on their Google Maps listing.",
      "prefill": false,
      "title": "Must Have Website",
      "type": "boolean"
    },
    "includeClosed": {
      "default": true,
      "description": "When off, places Google marks as permanently closed are skipped. This requires reading each place's preview panel.",
      "prefill": true,
      "title": "Include Permanently Closed",
      "type": "boolean"
    },
    "includeDetails": {
      "default": true,
      "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.",
      "prefill": false,
      "sectionCaption": "Output",
      "title": "Include Place Details",
      "type": "boolean"
    },
    "language": {
      "default": "en",
      "description": "Language for place names, categories, addresses and hours.",
      "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",
        "Ελληνικά",
        "български",
        "кыргызча",
        "қазақ тілі",
        "македонски",
        "монгол",
        "Русский",
        "српски",
        "Українська",
        "ქართული",
        "հայերեն",
        "עברית",
        "اردو",
        "العربية",
        "فارسی",
        "አማርኛ",
        "नेपाली",
        "हिन्दी",
        "मराठी",
        "বাংলা",
        "ਪੰਜਾਬੀ",
        "ગુજરાતી",
        "தமிழ்",
        "తెలుగు",
        "ಕನ್ನಡ",
        "മലയാളം",
        "සිංහල",
        "ไทย",
        "ລາວ",
        "ဗမာ",
        "ខ្មែរ",
        "한국어",
        "日本語",
        "简体中文",
        "繁體中文"
      ],
      "prefill": "en",
      "sectionCaption": "Locale",
      "title": "Language",
      "type": "string"
    },
    "latitude": {
      "default": 40.7484,
      "description": "Latitude of the center when the center type is Coordinates.",
      "maximum": 90,
      "minimum": -90,
      "prefill": 40.7484,
      "title": "Latitude",
      "type": "number"
    },
    "longitude": {
      "default": -73.9857,
      "description": "Longitude of the center when the center type is Coordinates.",
      "maximum": 180,
      "minimum": -180,
      "prefill": -73.9857,
      "title": "Longitude",
      "type": "number"
    },
    "maxRating": {
      "description": "Only keep places rated at or below this value. Places with no published rating are skipped.",
      "maximum": 5,
      "minimum": 1,
      "title": "Maximum Rating",
      "type": "number"
    },
    "maxResults": {
      "default": 50,
      "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.",
      "maximum": 1000,
      "minimum": 1,
      "prefill": 6,
      "title": "Max Results per Term",
      "type": "integer"
    },
    "maxReviews": {
      "description": "Only keep places with at most this many reviews. Places with no review count are skipped.",
      "maximum": 1000000000,
      "minimum": 0,
      "title": "Maximum Review Count",
      "type": "integer"
    },
    "minRating": {
      "description": "Only keep places rated at or above this value. Places with no published rating are skipped.",
      "maximum": 5,
      "minimum": 1,
      "sectionCaption": "Filters",
      "title": "Minimum Rating",
      "type": "number"
    },
    "minReviews": {
      "description": "Only keep places with at least this many reviews. Places with no review count are skipped.",
      "maximum": 1000000000,
      "minimum": 0,
      "title": "Minimum Review Count",
      "type": "integer"
    },
    "nameFilter": {
      "description": "Only keep places whose name contains this text, for example 'pizza'.",
      "editor": "textfield",
      "title": "Name Contains",
      "type": "string"
    },
    "openNow": {
      "default": 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.",
      "prefill": false,
      "title": "Open Now Only",
      "type": "boolean"
    },
    "place": {
      "description": "Google Maps place URL or canonical ChIJ Place ID to use as the center when the center type is Place.",
      "editor": "textfield",
      "title": "Place URL or Place ID",
      "type": "string"
    },
    "radiusKm": {
      "default": 1,
      "description": "Hard search radius in kilometres around the center. Places outside it are dropped; every returned row carries its exact distance from the center.",
      "maximum": 50,
      "minimum": 0.05,
      "prefill": 0.5,
      "sectionCaption": "Radius and result limit",
      "title": "Radius (km)",
      "type": "number"
    },
    "searchTerms": {
      "default": [
        "coffee shop"
      ],
      "description": "One or more categories or free-text keywords, for example ['coffee shop'], ['dentist', 'pharmacy'] or ['restaurant'].",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "prefill": [
        "coffee shop"
      ],
      "sectionCaption": "What to search for",
      "title": "Categories / Keywords",
      "type": "array"
    }
  },
  "required": [
    "searchTerms"
  ],
  "schemaVersion": 1,
  "title": "Google Maps Nearby Radius Search Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
placesstringoptionalOne row per place inside the radius. Fields are omitted when Google does not publish them.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Dataset of Google Maps places inside the requested radius, each with identity, contact, rating, hours, coordinates and distance from the center.",
  "properties": {
    "places": {
      "description": "One row per place inside the radius. Fields are omitted when Google does not publish them.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Nearby Places",
      "type": "string"
    }
  },
  "title": "Google Maps Nearby Radius Search Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "views": {
    "full": {
      "display": {
        "component": "table"
      },
      "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"
        ]
      }
    },
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "address": {
            "format": "text",
            "label": "Address"
          },
          "categoryName": {
            "format": "text",
            "label": "Category"
          },
          "distanceFromCenter": {
            "format": "text",
            "label": "Distance"
          },
          "googleMapsUrl": {
            "format": "link",
            "label": "Maps URL"
          },
          "name": {
            "format": "text",
            "label": "Name"
          },
          "phone": {
            "format": "text",
            "label": "Phone"
          },
          "reviewsCount": {
            "format": "number",
            "label": "Reviews"
          },
          "searchTerm": {
            "format": "text",
            "label": "Search term"
          },
          "totalScore": {
            "format": "number",
            "label": "Rating"
          },
          "website": {
            "format": "link",
            "label": "Website"
          }
        }
      },
      "title": "Nearby Places",
      "transformation": {
        "fields": [
          "recordType",
          "name",
          "categoryName",
          "totalScore",
          "reviewsCount",
          "address",
          "phone",
          "website",
          "distanceFromCenter",
          "searchTerm",
          "googleMapsUrl",
          "scrapedAt"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Google Maps Nearby Radius Search — Address, Place & Coordinates

Point this actor at a coordinate, an address, or a Google Maps place, give it a radius and one or more categories or keywords, and it returns the places Google shows inside that radius. Every row carries its straight-line distance from the center, so "within 800 m of this address" is an auditable number instead of a relevance guess.

It reads Google Maps' public result feed without a browser, cookies or an API key. Runs are small (1 GB), fast, and do not need proxy configuration.

Search center

Choose one center type:

Center type What to provide Example
Coordinates latitude + longitude 40.7484, -73.9857
Address address 350 5th Ave, New York, NY 10118
Place place (Maps URL or ChIJ Place ID) https://www.google.com/maps/place/?q=place_id:ChIJ...

An address or place is resolved to Google's own coordinates first, then the radius search is anchored there. A place can be a full Maps URL, a short maps.app.goo.gl-style link, or a canonical ChIJ... Place ID.

What it collects

For every place inside the radius:

  • name, categoryName, categories
  • totalScore, reviewsCount, ratingHistogram
  • address, phone, website
  • priceLevel, plusCode, description
  • hours, hoursStatus, isOpenNow
  • timezone, countryCode
  • placeId, featureId, kgmid, cid
  • location ({lat,lng}), latitude, longitude
  • distanceFromCenter (e.g. 450 m), distanceFromCenterMeters
  • photosSample, photoCount
  • placeAttributes, attributes, amenities, serviceOptions
  • fuelPrices, hotelStars, hotelStarRating, priceOfferAmount, priceOfferCurrency, priceOfferDateRange, hotelAmenities
  • bookingLinks, checkInTime, checkOutTime
  • hasStreetView, streetViewCount
  • permanentlyClosed, temporarilyClosed, claimed
  • searchTerm, rankInSearch
  • googleMapsUrl, sourceUrl, scrapedAt, recordType

Fields Google does not publish for a place are omitted, never sent as null or an empty string. includeDetails adds the preview-panel fields (plus code, price, histogram, photos, description, attributes, service options, closure status and hotel/fuel/booking extras when Google publishes them) and costs one extra request per place; listing fields and weekly hours are collected either way.

Input

Field Type Default Description
centerType select coordinates coordinates, address or place
latitude number 40.7484 Center latitude for coordinate mode
longitude number -73.9857 Center longitude for coordinate mode
address string — Center for address mode
place string — Maps URL or ChIJ Place ID for place mode
searchTerms string list ["coffee shop"] One or more categories/keywords (required)
radiusKm number 1 Hard radius, 0.05–50 km
maxResults integer 50 Maximum places per term
includeDetails boolean true Read each place's preview panel
minRating / maxRating number — Inclusive rating bounds
minReviews / maxReviews integer — Inclusive review-count bounds
openNow boolean false Keep only places observed open
hasWebsite / hasPhone boolean false Require the field
includeClosed boolean true Keep permanently closed places
nameFilter string — Name must contain this text
excludeCategories string list [] Drop matching categories
language select en 74 Google Maps UI languages

Examples

Coffee within 500 m of Times Square:

{
  "centerType": "coordinates",
  "latitude": 40.7484,
  "longitude": -73.9857,
  "searchTerms": ["coffee shop"],
  "radiusKm": 0.5,
  "maxResults": 30
}

Highly rated, open-now restaurants around an address:

{
  "centerType": "address",
  "address": "10 Downing St, London SW1A 2AA",
  "searchTerms": ["restaurant"],
  "radiusKm": 2,
  "minRating": 4.5,
  "openNow": true,
  "maxResults": 50
}

Pharmacies and clinics around a place URL, in French:

{
  "centerType": "place",
  "place": "https://www.google.com/maps/place/Eiffel+Tower/@48.8583701,2.2944813,17z",
  "searchTerms": ["pharmacy", "clinic"],
  "radiusKm": 3,
  "includeDetails": false,
  "language": "fr",
  "maxResults": 40
}

How pagination works

Google serves the nearby feed in pages of 20 ranked places. The actor follows those pages until the per-term maxResults is reached, the feed returns an empty section, or two consecutive pages contain nothing inside the radius (Google appends unrelated places from other cities at the end of a window). Deduplication is by Place ID, then feature ID, then Maps URL, then name + address.

A single term's ranked window usually holds roughly 130–180 places inside a dense radius. When that window ends, the actor stops and says so in the status message rather than padding the dataset. For more coverage, split the area into smaller radii or run several narrower category terms.

FAQ

Do I need a Google Maps API key or cookies? No. The actor reads the same public result and preview endpoints the Maps website uses, with no account, cookie or key.

Do I need a proxy? No. It starts direct, and only if Google repeatedly blocks the connection does it move to Apify's datacenter pool and then US residential as a last resort. There is no proxy field to configure.

Why are there fewer rows than maxResults? The ranked window ends, or the radius/filters removed places. The status message reports how many rows were outside the radius and how many were filtered. A tight radius or strict openNow filter can legitimately return zero rows.

Why is distanceFromCenter missing? It is never missing on a returned row: a place without observed coordinates is dropped because it cannot be proven inside the radius.

Can I search more than one category in one run? Yes. Put several entries in searchTerms; each term is searched and paginated separately, and every row records which term found it. maxResults applies per term.

Why do some detail fields appear only sometimes? Plus code, price level, rating histogram, description and attributes are conditional on Google publishing them for that place. Omitted means Google did not show it.

Does a smaller radius return more accurate results? Yes. The radius also selects the map zoom used for the search, so a 500 m request is anchored on a much tighter viewport than a 20 km request.

Is this affiliated with Google? No. It reads publicly visible Google Maps data and is not affiliated with, endorsed by or sponsored by Google.

Limitations

  • One term's ranked window is finite; the actor reports the honest source end instead of inventing rows.
  • Popular times, menus, reviews, emails and social profiles belong to separate actors in this suite.
  • Bounding-box, polygon and multi-cell grid scans belong to the area-scanner actor.
  • Google localises names, addresses and hours with language; the values are returned exactly as Google serves them.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build tsEGdQm2g6T1hH81o. Documentation is regenerated from the default published build; private drafts are not included.