Products

Google Maps Scraper API for any category in any city

Send a keyword and a location and get back a page of business listings as clean JSON: name, categories, split address, phone in E.164, website, rating, review count and coordinates. One request returns one page; raise the page parameter until next_page is null.

GET/v1/places/search

200GET /v1/places/search?q=dentist&location=Lisbon, Portugal&limit=5
{
  "data": [
    {
      "place_id": "ChIJPy04-ZkzGQ0RvdLuGmOMygg",
      "name": "CDL - Dental Clinic Lisbon",
      "primary_category": "Dental implants provider",
      "address": {
        "full": "R. Ferreira da Silva 9B, 1900-228 Lisboa, Portugal",
        "city": "Lisbon",
        "country_code": "PT"
      },
      "phone_e164": "+351213540059",
      "website": "https://dentistalisboa.com/",
      "rating": 4.8,
      "review_count": 918,
      "status": "open"
    },
    "… 4 more places"
  ],
  "pagination": {
    "page": 1,
    "limit": 5,
    "returned": 5,
    "next_page": 2
  },
  "meta": {
    "request_id": "req_6695a104436c",
    "credits_used": 5,
    "latency_ms": 1128,
    "source": "maps_public",
    "geocoded_location": {
      "lat": 38.7266,
      "lng": -9.1531,
      "label": "Lisbon, Portugal"
    }
  }
}

What you get

Every field in the response.

FieldMeaning
place_id, cidStable identifiers, shared with the official place ids, so you can diff runs and join other tools
name, primary_category, categories[]As listed, localised with the language parameter
addressfull, street, city, region, country_code (ISO 3166-1)
locationlat, lng
phone, phone_e164, websitePhone as displayed and normalised; website as listed
rating, review_count, status, open_nowRating out of 5, count, open / temporarily_closed / permanently_closed
service_area_businessTrue when the business has no storefront address

How it works

What happens between your request and the response.

One request, one page

The query runs as a logged-out visitor would see it, with a conservative rate limit and a residential exit. Raise the page parameter for the next page and merge on place_id, because consecutive pages overlap slightly.

Coordinates for the long tail

One keyword query runs out after a few hundred results, however big the city. To reach the rest, send lat, lng and radius instead of a location and repeat across the districts you care about, or run the Apify listing, which sweeps the area on a grid for you.

Check for drift yourself

Deep result pages drift to other cities with the same name: page four of a Lagos, Nigeria search returned Lagos, Portugal in our tests. The API returns what the source gave and charges for it, so compare address.country_code and the coordinates against meta.geocoded_location and stop paging when they part company. The Apify listing does this filtering for you.

Stop on any block

A challenge page or a 429 ends the request. Nothing is retried through another address, which is why the service is still answering next year.

Pricing

One credit system for every endpoint.

One credit per place returned. Credits are reserved for the limit you ask for and settled to the number actually returned. The free plan gives 75 credits a month with no card; past that, the same search runs on Apify and is billed per place.

See pricing

Run it on Apify.

For bigger runs, or without writing any code, the same engine runs on Apify as the two listings below. Apify bills per result, so there is no subscription and nothing to pay us, and Apify's own free plan includes $5 of usage a month with no card.

Questions

Things people ask about the Google Maps Scraper API.

How many businesses can I get for one city?

One keyword query pages out after a few hundred places, however big the city. To go further, repeat the search anchored on lat, lng and radius across the city and merge on place_id, or run the Apify listing, which sweeps a grid and deduplicates for you. Every place returned costs one credit, so use the free count endpoint first to size the job.

Which countries are supported?

Any. The same request works for Lisbon, Lagos, Karachi or Toronto; 25 countries are covered by the parser tests and 30 cities are checked live every morning on the status page. Always write the location as City, Country.

Is the data scraped legally?

The API reads public, logged-out listing pages at a slow pace and stops on any block. No accounts, no CAPTCHA solving, no session cookies. Business listings are business data, not personal data in most jurisdictions; the removal endpoint honours requests within 7 days.

How fresh are the results?

Searches run live at request time; nothing is served from a stale database. Typical latency is one to three seconds per page.