Google Maps
GET /v1/google/business-search

Google Maps Business Search API

Local businesses from a Maps search — name, address, phone, website, rating, hours, place id. Flat 2 credits. No emails.

2 credits per request
TL;DR
Local businesses from a Maps search — name, address, phone, website, rating, hours, place id. Flat 2 credits. No emails. The Google Maps Business Search API (Google Maps) is a single authenticated GET request to /v1/google/business-search that responds with clean JSON and costs 2 credits. Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.

What is the Google Maps Business Search API?

Search Google Maps for a keyword and get up to 100 businesses. q is required (min 2 characters). Pass location as City,Region,Country — for example Austin,Texas,United States — or omit it and use locationCode (default 2840, the United States). When location is set, locationCode is ignored. language defaults to en. limit is 1–100 and is not a page you can walk: there is no nextCursor. A successful call costs 2 credits even when businesses is empty, because the lookup still ran. Failures cost 0. phone, website, rating, and reviewCount are null when Maps does not publish them — null is not zero. hoursStatus is Maps' own open/closed label (for example open or close), not a boolean we invented. image URLs are hosted by Google and can expire; there is no expiresAt. Ads and other non-business rows are left out and counted in omittedCount. This endpoint does not return owner emails. cache defaults to false. cache=true reuses a 24 hour response, and cache hits are free. The sample is one live listing captured on 10 October 2026, with every field Maps published on that row filled in. Other listings still leave unpublished fields null.

What you get

  • Business name, category, address, phone, and website
  • Rating and review count — null when Maps does not publish them, not zero
  • place id, Maps URL, coordinates, and hours
  • Up to 100 businesses. No page cursor. No owner emails.

Try it

Open in Playground

Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).

Parameters

Sign in to run live
curl "https://api.captapi.com/v1/google/business-search?q=The%20Backspace" \
  -H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."

Edit the parameters and the code updates instantly. Switch languages and hit copy.

Example response

{
  "success": true,
  "data": {
    "query": "The Backspace",
    "location": "Austin,Texas,United States",
    "locationCode": null,
    "language": "en",
    "limit": 1,
    "totalReturned": 1,
    "omittedCount": 0,
    "businesses": [
      {
        "rank": 1,
        "title": "The Backspace",
        "category": "Pizza",
        "additionalCategories": [
          "Italian restaurant",
          "Restaurant"
        ],
        "snippet": "507 San Jacinto Blvd, Austin, TX 78701",
        "address": "507 San Jacinto Blvd, Austin, TX 78701",
        "city": "Austin",
        "region": "Texas",
        "zip": "78701",
        "countryCode": "US",
        "phone": "+1512-474-9899",
        "website": "https://www.backspacepizza.com/?utm_source=GMBlisting&utm_medium=organic",
        "contactUrl": "https://party-request.tripleseat.com/venues/O476HqLy/?rwg_token=AE37R_i_o_MnaL1e65JJJvaOltQTL9_QXm5sl_BttOhPUA7uJzO396kceRBPO9SmXs8ST8w4slgTPqEDJNYOTalzcn2EkPCQ-w%3D%3D",
        "bookOnlineUrl": "https://www.google.com/maps/reserve/v/dine/c/ooA7fdRRGqw?source=pa&opi=79508299&hl=en-US&gei=HD7KarawF_38wbkP5Mq6wQE&ahbb=1&sourceurl=https://www.google.com/search?tbm%3Dmap%26authuser%3D0%26hl%3Den%26gl%3Dus%26pb%3D!4m9!1m3!1d546887.6385058826!2d-97.7430608!3d30.267153!2m0!3m2!1i1920!2i945!4f13.1!7i1!8i0!10b1!12m28!1m1!18b1!2m3!5m1!6e2!20e3!6m12!4b1!49b1!63m0!73m0!74i150000!75b1!85b1!89b1!91b1!110m0!114b1!149b1!10b1!14b1!16b1!17m1!3e1!20m3!5e2!6b1!14b1!19m4!2m3!1i360!2i120!4i8!20m57!2m2!1i203!2i100!3m2!2i4!5b1!6m6!1m2!1i86!2i86!1m2!1i408!2i240!7m42!1m3!1e1!2b0!3e3!1m3!1e2!2b1!3e2!1m3!1e2!2b0!3e3!1m3!1e8!2b0!3e3!1m3!1e10!2b0!3e3!1m3!1e10!2b1!3e2!1m3!1e9!2b1!3e2!1m3!1e10!2b0!3e3!1m3!1e10!2b1!3e2!1m3!1e10!2b0!3e4!2b1!4b1!9b0!22m6!1s!2s!4m1!2i20588!7e81!12e3!24m78!1m25!13m9!2b1!3b1!4b1!6i1!8b1!9b1!14b1!20b1!25b1!18m14!3b1!4b1!5b1!6b1!13b1!14b1!15b1!17b1!21b1!22b0!25b0!27m1!1b0!28b0!2b1!5m6!2b1!3b1!5b1!6b1!7b1!10b1!10m1!8e3!11m1!3e1!14m1!3b1!17b1!20m2!1e3!1e6!24b1!25b1!26b1!29b1!30m1!2b1!36b1!39m3!2m2!2i1!3i1!43b1!52b1!54m1!1b1!55b1!56m2!1b1!3b1!65m5!3m4!1m3!1m2!1i224!2i298!71b1!72m4!1m2!3b1!5b1!4b1!89b1!103b1!113b1!26m4!2m3!1i80!2i92!4i8!30m28!1m6!1m2!1i0!2i0!2m2!1i530!2i945!1m6!1m2!1i1870!2i0!2m2!1i1920!2i945!1m6!1m2!1i0!2i0!2m2!1i1920!2i20!1m6!1m2!1i0!2i925!2m2!1i1920!2i945!31b1!34m19!2b1!3b1!4b1!6b1!7b1!8m6!1b1!3b1!4b1!5b1!6b1!7b1!9b1!12b1!14b1!20b1!23b1!25b1!26b1!37m1!1e81!42b1!46m1!1e2!47m0!49m6!3b1!6m2!1b1!2b1!7m1!1e3!50m32!1m28!2m7!1u3!4s!5e1!9s!10m2!3m1!1e1!2m7!1u2!4s!5e1!9s!10m2!2m1!1e1!3m6!1u17!2m4!1m2!17m1!1e2!2s!3m1!1u2!3m1!1u3!4BIAE!2e2!3m1!3b1!61b1!67m5!7b1!10b1!14b1!15m1!1b0!69i780!77b1%26q%3DThe%2BBackspace%26ech%3D1",
        "rating": 4.5,
        "reviewCount": 842,
        "ratingDistribution": {
          "1": 22,
          "2": 21,
          "3": 41,
          "4": 149,
          "5": 609
        },
        "priceLevel": "moderate",
        "latitude": 30.2670094,
        "longitude": -97.7404066,
        "placeId": "ChIJVaujmae1RIYRpGyZcs9VBao",
        "cid": "12251292710800551076",
        "mapsUrl": "https://www.google.com/maps/search/?api=1&query=The%20Backspace&query_place_id=ChIJVaujmae1RIYRpGyZcs9VBao",
        "image": "https://lh3.googleusercontent.com/grass-cs/AABkmLcIWRZviuv3jSiEDY36-7lOH1ag7TpPvLt3kIn-Dig0aM8HLNWGc9Lekz7Ia46FSyBDdDPZuc30kK8DEb4ebQejzCJke055K3jXy0SQcTLTe_KgHToXulcT4YIpyLhWGBnqzPLS=w408-h306-k-no",
        "photoCount": 629,
        "isClaimed": true,
        "hoursStatus": "close",
        "hours": {
          "sunday": [
            {
              "open": {
                "hour": 17,
                "minute": 0
              },
              "close": {
                "hour": 21,
                "minute": 0
              }
            }
          ],
          "monday": [
            {
              "open": {
                "hour": 17,
                "minute": 0
              },
              "close": {
                "hour": 21,
                "minute": 0
              }
            }
          ],
          "tuesday": [
            {
              "open": {
                "hour": 11,
                "minute": 30
              },
              "close": {
                "hour": 21,
                "minute": 0
              }
            }
          ],
          "wednesday": [
            {
              "open": {
                "hour": 11,
                "minute": 30
              },
              "close": {
                "hour": 21,
                "minute": 0
              }
            }
          ],
          "thursday": [
            {
              "open": {
                "hour": 11,
                "minute": 30
              },
              "close": {
                "hour": 21,
                "minute": 0
              }
            }
          ],
          "friday": [
            {
              "open": {
                "hour": 11,
                "minute": 30
              },
              "close": {
                "hour": 22,
                "minute": 0
              }
            }
          ],
          "saturday": [
            {
              "open": {
                "hour": 11,
                "minute": 30
              },
              "close": {
                "hour": 22,
                "minute": 0
              }
            }
          ]
        },
        "isDirectoryItem": false
      }
    ]
  }
}

Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Source. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.

Response structure

A successful call returns success and a data object with the following fields:

Top-level fields

  • queryThe keyword you sent.
  • locationPlace name you sent (City,Region,Country). Null when you used locationCode instead.
  • locationCodeNumeric place code that was used. Null when you passed location. 2840 is the United States.
  • languageLanguage code that was used. Default en.
  • limitMax businesses requested (1–100). Not a page cursor.
  • totalReturnedHow many businesses are in businesses[].
  • omittedCountRows that were not businesses (ads and other listing types) and were left out of businesses[].

Businesses

Each item in businesses contains:

  • rankPosition in the Maps results (1-based).
  • titleBusiness name.
  • categoryPrimary Maps category. Null when omitted.
  • additionalCategoriesExtra Maps categories. Null when the listing has none.
  • snippetShort Maps blurb. Null when omitted.
  • addressSingle-line address. Null when omitted.
  • cityCity from the address. Null when omitted.
  • regionRegion or state from the address. Null when omitted.
  • zipPostal code. Null when omitted.
  • countryCodeCountry code from the address. Null when omitted.
  • phonePhone number as published. Null when Maps does not show one — not an empty string.
  • websiteBusiness website. Null when Maps does not show one.
  • contactUrlMaps contact link when published. Null otherwise.
  • bookOnlineUrlMaps booking link when published. Null otherwise.
  • ratingStar rating when published. Null when omitted — not zero.
  • reviewCountNumber of ratings when published. Null when omitted — not zero.
  • ratingDistributionCount of 1–5 star ratings when published. Null when omitted.
  • priceLevelMaps price label when published, such as inexpensive or moderate. Null when omitted.
  • latitudeLatitude. Null when omitted.
  • longitudeLongitude. Null when omitted.
  • placeIdMaps place id.
  • cidMaps customer id, when published.
  • mapsUrlMaps URL for this place, built from placeId (or cid when placeId is missing).
  • imagePhoto URL hosted by Google. It can expire. There is no expiresAt.
  • photoCountPhoto count when published. Null when omitted.
  • isClaimedWhether the listing is claimed. Null when omitted.
  • hoursStatusMaps' current open/closed label when published (for example open or close). Null when omitted. Not a boolean.
  • hoursWeekly timetable when published. Null when omitted.
  • isDirectoryItemTrue when the row is a directory listing. Null when omitted.

Parameters

NameTypeRequiredDescription
qstringYesKeyword, for example plumber or coffee. Min 2 characters.
locationstringNoPlace name as City,Region,Country, for example Austin,Texas,United States. When set, locationCode is ignored. A free-text city alone (austin) is not a place name.
locationCodeintegerNoNumeric place code, used only when location is omitted. Default 2840 (United States).
languagestringNoLanguage code, for example en. Default en.
limitintegerNoMax businesses to return (default 20, max 100). Not a page cursor — there is no next page. Flat 2 credits on every successful call, including zero businesses.
cachebooleanNoSet true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh.

Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs 2 credits. Pass cache=true for a free 24h cache hit; default is always fresh.

Using an AI agent? This endpoint is the MCP tool google_maps_business_search via @captapi/mcp. Set it up →

How it works

  1. 1. Sign up — get 100 free credits, no card required.
  2. 2. Create a key from your dashboard.
  3. 3. Send one request to /v1/google/business-search and parse the JSON response.

Use cases

Local lead lists

Pull name, phone, website, and address for a trade in one city. Phone and website stay null when Maps does not publish them.

Local SEO checks

Read rank, rating, reviewCount, and hoursStatus for the businesses Maps is showing for a keyword.

Market counts

See how many businesses a keyword returns in a place. An empty businesses[] still means the search completed.

Place identity

Join on placeId. mapsUrl opens the same listing. This response does not include owner emails.

Frequently asked questions

What does the Google Maps Business Search API do?+

The Google Maps Business Search API lets you search and return matching results from a public Google Maps query using one GET request to /v1/google/business-search. It returns clean JSON — no OAuth or infrastructure setup required.

How many credits does the Google Maps Business Search API cost?+

Each successful call costs 2 credits, including a search that returns zero businesses — the lookup still ran. Failures are 0 credits. cache=true hits are free; the default is cache=false (24h TTL when cache is on). limit does not change the price. There is no per-business charge.

Do I need a Google Maps API key or OAuth?+

No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.

Does this return the owner's email?+

No. You get the public Maps listing: name, address, phone, website, rating, hours, and place id. Phone and website are null when Maps does not show them. Emails are a separate job and are not on this endpoint.

Can I page past 100 businesses?+

No. limit is 1–100 and there is no nextCursor. 100 is one results page, not a walkable index.

Why did an empty search still cost 2 credits?+

A completed search is a successful call, including businesses: []. Failures (4xx and 5xx) cost 0. cache=true hits are free.

What do I pass for a city?+

location is City,Region,Country — Austin,Texas,United States, not austin. If you omit location, locationCode is used and defaults to 2840 (United States). A keyword can still include the city (plumber austin) when you are searching the United States.

Is the Google Maps Business Search API suitable for production use?+

Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.

Ready to use the Google Maps Business Search API?

Sign up, grab your key, and make your first call in 60 seconds.

Google Maps Business Search API | Captapi — Captapi