Skip to content

Google Places API: Nearby Search vs Text Search (New) Compared (2026)

Tool Comparisons· 9 min read
Google Places API: Nearby Search vs Text Search (New) Compared (2026)

Key takeaways

  • Text Search takes a free-text query such as plumber in Leeds and can page up to 60 results. Nearby Search takes a point, a radius and place types, and returns at most 20 results with no pagination.
  • Both require a field mask, and both are billed by the most expensive field in it. Phone, website and rating are Enterprise fields on either endpoint.
  • For "one trade in one city" lead lists, Text Search is the simpler choice. Nearby Search suits a grid of small circles over a dense area.
  • Neither endpoint returns email addresses, and both are capped per request, so plan for many queries and deduplicate by place ID.

Places API (New) gives you two ways to find businesses: Text Search, which answers a query written the way a person would type it, and Nearby Search, which sweeps a circle on the map for places of given types. They return the same kind of Place object and share the same pricing tiers, but they take different inputs and have different result limits, and that changes how you use them to build a lead list.

This guide sets the two endpoints side by side using what Google's documentation says about each, shows a minimal request for both, and explains which one to reach for depending on the list you want. Prices and limits are quoted from Google's pages, linked at the end.

What each endpoint takes

Text Search (New)Nearby Search (New)
EndpointPOST https://places.googleapis.com/v1/places:searchTextPOST https://places.googleapis.com/v1/places:searchNearby
Required inputtextQuery, a string such as restaurant or plumber in LeedslocationRestriction with a circle: centre latitude/longitude and a radius in metres
RadiusOptional locationBias circle (radius 0 to 50,000 m) or rectangle; locationRestriction is a rectangle onlyRequired; must be between 0.0 and 50,000.0 metres inclusive
Type filteringincludedType: one type from Google's type tableincludedTypes, excludedTypes, includedPrimaryTypes, excludedPrimaryTypes: up to 50 types per category
RankingrankPreference: RELEVANCE or DISTANCErankPreference: POPULARITY (default) or DISTANCE
Other filtersminRating, openNow, priceLevels, strictTypeFilteringincludeFutureOpeningBusinesses
Field maskRequired; omitting it returns an errorRequired; omitting it returns an error

The practical difference: Text Search understands "emergency plumber near Leeds station" and lets Google interpret it. Nearby Search does not take a text query at all; you tell it exactly where to look and which place types to include, and it returns what is inside the circle.

Result limits and pagination

This is the difference that shapes lead-list work.

  • Text Search returns 20 results per page by default (pageSize accepts 1 to 20). You fetch further pages by passing the nextPageToken from one response as pageToken in the next. Google's page states that Text Search (New) returns a maximum of 60 results across all pages, and that this limit is subject to change.
  • Nearby Search returns at most 20 results per request. maxResultCount must be between 1 and 20, and 20 is the default. The Nearby Search page describes no pagination and no page token, so 20 is the ceiling for one circle.

Either way, one request never gives you a whole city. Text Search covers a trade in a town in up to three pages; Nearby Search covers one small circle in one request. Getting past those ceilings means running more queries and removing duplicates, which is the same problem the Google Maps interface has; see the Google Maps search results limit for why the numbers are what they are.

Fields and pricing tiers

Both endpoints use the same field-mask tiers, and both documentation pages list the fields under SKU headings. Google's usage-and-billing page states that a request is billed at the highest SKU any of its fields falls into. For a lead list the fields you care about split like this:

TierFields (same names on both endpoints)Free per month and entry price (Google's price list)
Essentials (IDs only), Text Searchplaces.id, places.name, places.attributions, nextPageTokenUnlimited, no charge
Proplaces.displayName, places.formattedAddress, places.location, places.businessStatus, places.types, places.primaryType5,000 free, then $32 per 1,000
Enterpriseplaces.nationalPhoneNumber, places.internationalPhoneNumber, places.websiteUri, places.rating, places.userRatingCount, places.regularOpeningHours1,000 free, then $35 per 1,000
Enterprise + Atmosphereplaces.reviews, places.editorialSummary, places.parkingOptions, places.outdoorSeating1,000 free, then $40 per 1,000

Google's price list showed the same free amounts and entry prices for the Nearby Search Pro, Enterprise and Enterprise + Atmosphere SKUs as for Text Search when checked. Prices change; confirm on Google's page.

One difference worth knowing: the Text Search page lists an IDs-only Essentials SKU, while the Nearby Search page lists three SKUs (Pro, Enterprise and Enterprise + Atmosphere) and puts places.id in the Pro list. If you want a free ID-only pass to deduplicate an area before requesting paid fields, Text Search is the endpoint that documents it. The full cost arithmetic is in Google Places API pricing for lead lists.

A minimal request for each

Text Search with curl

curl -X POST -d '{"textQuery": "plumber in Leeds", "pageSize": 20}' \
  -H 'Content-Type: application/json' \
  -H 'X-Goog-Api-Key: API_KEY' \
  -H 'X-Goog-FieldMask: places.id,places.displayName,places.formattedAddress,places.nationalPhoneNumber,places.websiteUri,nextPageToken' \
  'https://places.googleapis.com/v1/places:searchText'

To get the second page, send the same body plus "pageToken": "<nextPageToken from the response>". Because places.nationalPhoneNumber and places.websiteUri are Enterprise fields, every page of this query is an Enterprise request.

Nearby Search with curl

curl -X POST -d '{
  "includedTypes": ["plumber"],
  "maxResultCount": 20,
  "rankPreference": "DISTANCE",
  "locationRestriction": {
    "circle": {
      "center": {"latitude": 53.7997, "longitude": -1.5492},
      "radius": 1500.0
    }
  }
}' \
  -H 'Content-Type: application/json' \
  -H 'X-Goog-Api-Key: API_KEY' \
  -H 'X-Goog-FieldMask: places.id,places.displayName,places.formattedAddress,places.nationalPhoneNumber,places.websiteUri' \
  'https://places.googleapis.com/v1/places:searchNearby'

There is no page token to follow. If the circle holds more than 20 plumbers, you shrink the radius or move the centre and run it again.

The same two calls in Python

import requests

KEY = "API_KEY"
FIELDS = "places.id,places.displayName,places.formattedAddress,places.nationalPhoneNumber,places.websiteUri"

def text_search(query, page_token=None):
    body = {"textQuery": query, "pageSize": 20}
    if page_token:
        body["pageToken"] = page_token
    r = requests.post(
        "https://places.googleapis.com/v1/places:searchText",
        json=body,
        headers={"X-Goog-Api-Key": KEY, "X-Goog-FieldMask": FIELDS + ",nextPageToken"},
        timeout=30,
    )
    r.raise_for_status()
    return r.json()

def nearby_search(lat, lng, radius_m, types):
    body = {
        "includedTypes": types,
        "maxResultCount": 20,
        "locationRestriction": {"circle": {"center": {"latitude": lat, "longitude": lng}, "radius": radius_m}},
    }
    r = requests.post(
        "https://places.googleapis.com/v1/places:searchNearby",
        json=body,
        headers={"X-Goog-Api-Key": KEY, "X-Goog-FieldMask": FIELDS},
        timeout=30,
    )
    r.raise_for_status()
    return r.json()

A fuller script with paging, deduplication by places.id and CSV output is in Google Places API with Python for business leads.

Try it on your own search
Run one trade in one city in a hosted tool and compare the row count, emails and filters with what these two calls return.
Start 7-Day Free Trial (1,000 Leads) →

Which one to use for lead lists

You wantUseWhy
A trade across a town or small cityText SearchOne query, up to 60 results, Google handles the geography
Every business of a type in a dense areaNearby Search on a gridSmall circles with rankPreference: DISTANCE sweep an area systematically; 20 per circle
Businesses matching a phrase, not a typeText SearchtextQuery accepts words the type table does not have
Strict control of the search areaNearby SearchThe circle is a hard boundary; Text Search's locationBias only biases
A free ID-only pass before paid fieldsText SearchThe IDs-only Essentials SKU is documented for Text Search
Opening hours, rating, phone, websiteEitherSame Enterprise fields on both endpoints

A common pattern is to start with Text Search for each trade-and-town pair, note where a query hits the 60-result ceiling, and switch to a Nearby Search grid only in those dense spots. That keeps the request count down while still covering the centre of a big city.

What both endpoints leave you to do

  • Emails. Neither endpoint returns an email address. You read each business website yourself, or use a tool that does.
  • Deduplication. Overlapping queries and circles return the same places; key everything on places.id.
  • Filters. "Has no website" is a check you write (websiteUri missing), and ad-pixel or social-presence checks need the website, not the API.
  • Storage rules. Google's policies restrict how long most Places content may be cached; read them before building a permanent database.
  • Cost control. Set a daily quota on each search method and restrict the API key. Budget alerts warn; quotas stop.

If the goal is a contactable list rather than a data pipeline, a hosted tool does this joining work for you. LeadOutreach searches Google Maps by keyword and location, returns the listing fields, reads each website for emails and social links, runs basic email checks, and filters for No website, phone present, rating, social presence and ad-pixel presence, with CSV export on every plan; see the pricing page for current limits.

A quick decision routine

  1. Write the list you want as a sentence: "electricians in Sheffield" or "every cafe within 1 km of the station". Trade-plus-place means Text Search; type-plus-radius means Nearby Search.
  2. Choose the smallest field mask that gives you the columns you need, and check which tier it lands in.
  3. Run one request and count the results. If Text Search returns a nextPageToken on the third page, or Nearby Search returns exactly 20, the area is denser than one query covers.
  4. Split: more towns or suburbs for Text Search, smaller circles for Nearby Search.
  5. Deduplicate by place ID, then enrich the survivors with whatever the API cannot give you.

Sources and further reading

Start Finding Verified Leads Today

Extract verified emails, phone numbers, and social links from Google Maps. Start with a 7-day Starter trial (1,000 leads included) and keep 100 free leads every month forever after. No credit card required.

Instant setup · No credit card required · 100 free leads/mo forever after

Related articles

FAQ

Frequently asked questions

Text Search takes a free-text query such as plumber in Leeds, optionally biased or restricted to an area, and can return up to 60 results over three pages. Nearby Search takes a circle defined by a centre point and a radius of up to 50,000 metres plus place types, and returns at most 20 results with no pagination.

Google's Nearby Search (New) documentation describes no page token and sets maxResultCount to a maximum of 20, so one request returns at most 20 places. To cover more businesses you run additional requests with smaller or shifted circles and remove duplicates by place ID.

They use the same pricing tiers. Google's price list showed the same free monthly amounts and entry prices for the Pro, Enterprise and Enterprise + Atmosphere SKUs on both endpoints. What you pay depends on the fields in your field mask and the number of requests, not on which endpoint you call.

Text Search for the common case of one trade in one town, because it accepts natural queries and pages up to 60 results. Nearby Search when you need to sweep a dense area systematically with a grid of small circles, or when you need a hard boundary rather than a bias.

No. Neither endpoint returns email addresses at any pricing tier. The website field is available at the Enterprise tier, and finding an email means reading that website separately, by hand, with your own code, or with a tool built for it.