Google Maps Leads Scraper

Find businesses on Google Maps by type and location (optionally within a radius): name, address, phone, website, rating, reviews, categories and opening hours, plus emails (with the page they were found on), phone numbers and social profiles from each business website. One row per company. No login, no browser.

  • LIVE
  • 1 credit per business lead
  • Failed results are free

Try it live

Free, no sign-up. Up to 3 results per run.

Press “Run it live” and the real result shows up here, exactly what your agent gets back.

Example output

What your agent gets back.

3 example resultsSAMPLE
  • torhaus - Your Dentists in Berlin

    Phone
    030 959999400
    Email
    info@zahnarzt-torhaus.de
    Rating
    4.9
    Category
    Dentist
    Categories
    Dentist, Cosmetic dentist, Dental implants periodontist +5
  • Goode Plumbing

    Phone
    +1 773-280-8496
    Email
    info@goodeplumbing.com
    Rating
    4.8
    Category
    Plumber
    Categories
    Plumber, Drainage service
  • Julius Brantner Brothandwerk - Altstadt

    Phone
    089 215280990
    Email
    servus@julius-brantner.de
    Rating
    4.8
    Category
    Bakery
    Categories
    Bakery
View raw JSON
{
  "placeId": "ChIJ--eWx5RRqEcRdw6wJaph-Ig",
  "name": "torhaus - Your Dentists in Berlin",
  "category": "Dentist",
  "categories": [
    "Dentist",
    "Cosmetic dentist",
    "Dental implants periodontist",
    "Dental laboratory",
    "Denture care center",
    "Emergency dental service",
    "Endodontist",
    "Oral surgeon"
  ],
  "address": "Robert-Koch-Platz 11, 10115 Berlin",
  "street": "Robert-Koch-Platz 11",
  "neighborhood": "Mitte",
  "city": "Berlin",
  "postalCode": "10115",
  "countryCode": "DE",
  "phone": "030 959999400",
  "phoneInternational": "+49 30 959999400",
  "website": "https://www.zahnarzt-torhaus.de/",
  "email": "info@zahnarzt-torhaus.de",
  "emails": [
    "info@zahnarzt-torhaus.de"
  ],
  "contactsStatus": "found",
  "rating": 4.9,
  "reviewsCount": 236,
  "latitude": 52.5284086,
  "longitude": 13.378451199999999,
  "openingHours": [
    {
      "day": "Wednesday",
      "hours": "8 am–8 pm"
    },
    {
      "day": "Thursday",
      "hours": "8 am–8 pm"
    },
    {
      "day": "Friday",
      "hours": "8 am–8 pm"
    },
    {
      "day": "Saturday",
      "hours": "Closed"
    },
    {
      "day": "Sunday",
      "hours": "Closed"
    },
    {
      "day": "Monday",
      "hours": "8 am–8 pm"
    },
    {
      "day": "Tuesday",
      "hours": "8 am–8 pm"
    }
  ],
  "timezone": "Europe/Berlin",
  "featureId": "0x47a85194c796e7fb:0x88f861aa25b00e77",
  "mapsUrl": "https://www.google.com/maps/search/?api=1&query=torhaus%20-%20Your%20Dentists%20in%20Berlin&query_place_id=ChIJ--eWx5RRqEcRdw6wJaph-Ig",
  "rank": 3,
  "searchQuery": "dentist",
  "searchLocation": "Berlin, Germany",
  "scrapedAt": "2026-10-21T03:14:15.862Z"
}

Use it from your agent

One key, any agent.

  1. 01Get your keySign up with your email. You start with 2,000 free credits.
  2. 02Call the toolSend the input as JSON. The answer comes back with the results and the credits used.
  3. 03Or plug in MCPAdd one block to Claude, Cursor or any MCP client and your agent finds “maps-leads” by itself.
curl -X POST https://pullwire.dev/api/v1/tools/maps-leads/runs \
  -H "x-api-key: $PULLWIRE_API_KEY" \
  -H "content-type: application/json" \
  -d '{"searches":[{"query":"dentist","location":"Berlin, Germany"}],"maxResults":3}'

Waits up to 25 s for the results. Add ?async=1 to get a run id back right away.

Options

Everything you can set.

FieldWhat it doesTypeDefault
SearchesrequiredsearchesOne entry per business type + location combination.list of entries–
Business type or keywordrequiredsearches[].queryWhat to look for, as you would type it into Google Maps, e.g. "dentist", "plumber", "vegan restaurant".text–
Locationsearches[].locationCity, district, region or country, e.g. "Berlin, Germany" or "Austin, TX". Empty: the query is used as-is.text–
Radius (km)searches[].radiusKmOnly businesses within this distance of the location's center, e.g. 3 for "within 3 km of Berlin-Kreuzberg", sorted nearest first among the ~120-200 places Google Maps returns for that area. Needs a location. Empty: the area Google Maps picks for the location.number–
Max results for this searchsearches[].maxResultsPerSearchStop this search after this many businesses. Google Maps itself returns roughly 120-200 places per search; for more, split the area into districts or nearby towns.number100
Find emails and social profilesenrichContactsVisit each business website (homepage plus contact, imprint or privacy pages when needed) to collect email addresses, phone numbers and Facebook, Instagram, LinkedIn, X, YouTube, TikTok and Pinterest profiles.yes / noyes
Website pages per businessmaxContactPagesHomepage plus up to this many minus one contact, imprint or privacy pages, only while no address of the business itself has been found (an agency or platform address alone does not count).number3
LanguagelanguageLanguage of categories, opening hours and descriptions, e.g. "en", "de", "fr".texten
Country biascountryCodeTwo-letter country code that biases ambiguous place names, e.g. "us" or "de". Empty: none.text–
Skip duplicates across searchesdedupeReturn each business only once even when several searches find it.yes / noyes
One row per companyonePerCompanySkip a business whose website domain or phone number was already returned (branches of one company, double listings). Shared hosts like Facebook pages or booking platforms never count as the same company.yes / noyes
Max resultsmaxResultsStop after this many businesses in total across all searches. Empty: no extra cap.number–

Pricing

Pay for results, not requests.

1credit per business lead

One business returned from a Google Maps search, including contact enrichment from its website when enabled. Searches with zero matches are not charged.

  • Failed results are free
  • One balance for every tool
  • 2,000 free credits when you sign up