Collector

Google Maps scraper

Every place a Maps search returns, filed as rows with no browser window: name, category, full postal address, phone, website, rating, reviews and — when you ask for it — the email address off the business’s own site.

On this page

What it collects

placesEnriches from the site

Every place a Maps search returns, filed as rows with no browser window: name, category, full postal address, phone, website, rating, reviews and — when you ask for it — the email address off the business’s own site. It is a scraper, which means the whole contract is: fill in the form, and one table comes back. No browser window opens, it costs none of your plan's automation slots, and the requests go out over plain HTTP carrying a real browser's TLS fingerprint.

It runs fine from your own address; a proxy is available on the run and this target does not need one. Whichever way it went, every row records it — see the provenance columns below.

What you give it — 13

The form the app draws, read out of the card itself. Each hint below is the one shown beside that field in the run dialog, so nothing here is a description of the product written separately from it.

The one answer it needs

searchStringsArray
What to find · list · required

One search term at a time — type it and press Enter. Each term is searched separately and the results are pooled into one table, so "dentists" and "orthodontists" is two searches, not one longer one.

Everything else is optional

locationQuery
Place · text

A city, a neighbourhood or a postcode, said the way you would say it. Left blank, Google answers from wherever it thinks this request is — which is the proxy’s country, not yours.

city
City · text

The four fields here are joined into one sentence and handed to Maps exactly as if you had typed it. Fill in as many as you know.

state
State or province · text
postalCode
Postcode · text
countryCode
Country · text

A country name or code, added to the search text.

language
Language · text

The language Maps answers in. Results still come from wherever the proxy puts the request.

maxCrawledPlacesPerSearch
Places per search · number

Google stops a single search near 120 however far you page. Search a neighbourhood rather than a city when the count matters.

categoryFilterWords
Only these categories · list

A search for "dentists" also returns clinics, hospitals and cosmetic surgeries. Add a word here and a place is kept only when one of the categories Maps gave it contains that word. Costs no extra requests — the reply already carried the categories.

placeMinimumStars
Minimum rating · select

Places with no rating at all fail this — a new listing nobody has reviewed is not a place rated zero, and it is not a place rated four either.

website
Website · select

Places with a website are reachable by email; places without one are often the better cold call.

skipClosedPlaces
Skip closed places · boolean

Drops the listings Maps shows as permanently closed — they carry no opening status at all, which is how this can tell.

scrapeContacts
Find email addresses · boolean

Opens each place’s own website looking for an address, a named contact and social links. This is the slow half: without it a search takes about six seconds, with it about two minutes per hundred places.

What comes back — 47 columns

One dataset per run — a typed table your workspace owns, which you can then sort, filter, edit in the grid, export whole, or read back over the local API. These are the columns it is created with.

31 from Google Maps

KeyColumnType
titleNametext
categoryNameCategorytext
categoriesAll categoriestext
phonePhonephone
phoneUnformattedPhone (dialable)text
websiteWebsiteurl
domainDomaintext
addressAddresstext
streetStreettext
cityCitytext
postalCodePostcodetext
countryCodeCountrytext
neighborhoodNeighbourhoodtext
totalScoreRatingnumber
reviewsCountReviewsnumber
claimedClaimedselect
hoursTodayOpen todaytext
hoursStatusStatustext
imageUrlPhotourl
bookingUrlBooking linkurl
menuMenuurl
placeUrlListingurl
placeIdPlace IDtext
cidCIDtext
fidFeature IDtext
kgmidKnowledge Graph IDtext
latitudeLatitudenumber
longitudeLongitudenumber
timezoneTimezonetext
attributesAttributeslongText
searchTermFound viatext

12 from the enrichment pass

Opt in and the run makes one extra request per row: it visits the site in the website column looking for an address, a named contact and social links. That is the step that turns a listing into a lead, and it is what the run is mostly spending its time on when you ask for it.

KeyColumnType
emailEmailemail
contact_emailDirect emailemail
contact_nameContacttext
contact_roleRoletext
emailsAll emailslongText
contact_source_urlFound onurl
linkedinLinkedInurl
facebookFacebookurl
instagramInstagramurl
twitterX / Twitterurl
youtubeYouTubeurl
tiktokTikTokurl

4 that every scraper writes

The same four on every card, so a table can still answer months later how its rows got there: which service they came from, when, which profile's identity the requests carried, and whether that identity was signed in.

KeyColumnType
platformPlatformtext
collected_atCollected atdatetime
profileCollected byprofile
logged_inSigned inselect

Four ways to run it

The Scrapers tab. Pick the card, fill in the form, press Start. Every run started here makes a new table, named after what you searched for and when. Check first if you like — it collects one page, writes nothing, and reports which columns came back filled.

Ask the assistant. It has the whole catalogue, so this card is a sentence rather than a form. It fills in the parameters above from what you said and shows you them before it starts.

Over MCP or the local API. The same card, from a coding agent — argus_run_scraper over the MCP server, or POST http://127.0.0.1:39219/v1/scrapers/run on the local API. There is a sample call beside it that writes nothing.

argus_run_scraper — Google Maps
{
  "kind": "google_maps",
  "inputs": {
    "searchStringsArray": [
      "…"
    ]
  }
}

As a step inside a workflow. The Run scraper step puts this collector in the middle of an automation — collect, then filter, then mail — and the tree still opens no window doing it. It is also the one caller that can overrule the table-per-run rule: pointed at a table you name, it creates that table with the columns above if it is missing and files every run into it after, appending or updating the row in place on a column you match on. The step hands the next one the table's name, its id and the row count.

Where it stops

It will not drive a page. Anything that needs a real browser — a site with no list endpoint behind it, or anything operating an account of your own — is an automation instead, and that is a different tool rather than a worse version of this one.

It signs in to nothing. Reading a public page signed out is the settled position — Bright Data scraped Meta signed out and won; hiQ scraped LinkedIn signed in and lost — so this card asks for no account and holds none.