Google Maps Contacts Scraper
Pricing
from $1.20 / 1,000 place scrapeds
Google Maps Contacts Scraper
Google Maps businesses with phone, full address, rating and website, plus the email their site publishes. Contacts charged only when found. Export CSV, Excel, JSON, XML.
Pricing
from $1.20 / 1,000 place scrapeds
Rating
0.0
(0)
Developer
ParseForge
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share

๐ Google Maps Contacts Scraper
๐ Export any Google Maps search into a mailable contact list in seconds. Type the search you would type yourself ("dentists in Austin, TX") and every business comes back as a flat row: name, category, rating, review count, full address, phone, opening hours, Google place ID and its website, then the Actor opens that website and takes the email, phone, contact form and social profiles it publishes today.
Every leads Actor in this category collects the same complaint, in the same words: "Phone numbers but few emails", "It doesn't pull email or social media accounts like it says it does", "extracts 90% of records without emails! I set 'Include Email' = ON". They charge an enrichment fee and hand back an empty column.
This one reads the business's own website, which is the one place a contact is current by definition, and charges the contact only when it actually finds one. On a measured comparison of 46 live company sites, that method filled the email column on 72% of them against 12% for the Actors it was benchmarked against.
| ๐ฏ Target Audience | ๐ก Primary Use Cases |
|---|---|
| Sales and outbound teams | Build a local prospect list with real inboxes, not just switchboard numbers |
| Agencies and consultancies | Map every competitor or prospect in a service area |
| Local SEO and marketing | Audit categories, ratings and websites across a city |
| Data teams | Enrich a CRM with places and contacts that are live today |
๐ What the Google Maps Contacts Scraper does
๐ก Why it matters: the website is the field the whole category charges extra for. Google publishes it in the same response as the place itself, so here it comes with the base row and costs you nothing on top.
- ๐ Searches the way you do. "plumbers in Denver, CO", "hotels Lisbon", "dentistas en Madrid". One line per search, as many searches as you like.
- ๐ Full place record. Name, category, star rating, review count, full street address with city and postcode, phone, opening hours, Google
place_idand feature id. - ๐ Website included in the base row. No add-on event, no second lookup to pay for. Measured 2026-09-17 across 100 places: the website was present on 100 of 100.
- ๐ง Reads that website for contacts. Emails (including
name [at] domain [dot] comobfuscation and Cloudflare-protected addresses), phones, contact form, postal address and six social profiles. - ๐ธ The contact is charged only when it is found. A business whose site publishes nothing costs you nothing extra. A place with no website costs you nothing extra.
- ๐ Filters are free. Every leader in this category bills a per-place fee for each filter you switch on. Here, "only places with a website" and "only places with a contact" cost nothing, and skipped places are never billed.
- ๐ Works outside the US. Spanish, German and other European searches are routed past Google's consent wall automatically, and come back with local numbers and local domains.
- ๐ Clean data: one row per business, deduplicated by Google place ID, the same 39 columns every time,
N/Ainstead of blank cells, anderrorreserved for failures.
๐ฌ Full Demo (๐ง Coming soon)
A short walkthrough video is in production.
๐ Output
| Field | Type | Description |
|---|---|---|
๐ผ imageUrl | string | The business's own share image or logo, from its website |
๐ข name | string | Business name as Google lists it |
๐ท category | string | Google's own category, in your chosen language |
โญ rating | number | Star rating |
๐ณ reviewsCount | integer | Number of Google reviews |
๐ address | string | Full address: street, town, region and postcode |
๐ mapsPhone | string | The phone Google publishes for the business |
๐ openingHours | string | Current status and next opening, as Google shows it |
๐ placeId | string | Google place ID (ChIJ...), stable across runs |
๐ ftid | string | Google feature ID (0x...:0x...) |
๐ website | string | The business website |
๐ domain | string | Normalised domain, without www. |
๐ท companyName | string | The name the site calls itself, from schema.org or the title |
๐ description | string | The business's own description of itself |
๐ง primaryEmail | string | The best address to write to |
๐ข emailCount | integer | How many distinct addresses were found |
โ๏ธ primaryPhone | string | The first number published on the site |
๐ข phoneCount | integer | How many distinct numbers were found |
๐จ contactFormUrl | string | Page carrying a contact form, when there is one |
๐ city | string | Town or city, from the site's own data |
๐บ region | string | State, province or region |
๐ฎ postalCode | string | Postal or ZIP code |
๐ country | string | Country |
๐ผ linkedinUrl | string | Company LinkedIn page |
๐ facebookUrl | string | Facebook page |
๐ธ instagramUrl | string | Instagram profile |
๐ฆ twitterUrl | string | X / Twitter profile |
โถ๏ธ youtubeUrl | string | YouTube channel |
๐ต tiktokUrl | string | TikTok profile |
๐ข socialProfileCount | integer | How many social profiles were found |
โ
hasContactChannel | string | Yes when the row carries an email or a phone |
๐ searchQuery | string | The search this business came from |
#๏ธโฃ resultPosition | integer | Its position in that search |
๐งญ websiteSource | string | maps when Google published the website, otherwise the engine that found it |
๐ pagesCrawled | integer | How many pages of the site were read |
๐ง emails | array | Every address found |
โ๏ธ phones | array | Every number found |
๐ scrapedAt | string | ISO timestamp |
โ ๏ธ error | string | null on a normal row |
Example rows
{"imageUrl": "https://cdn.prod.website-files.com/646b55d542ec693e8b4fd7de/6489885fd4ce35834ab7caee_OG%20(2)%20(1).png","name": "Hentschel x Lanza PLLC","category": "Law firm","rating": 5,"reviewsCount": 156,"address": "2665 S Bayshore Dr STE 220, Miami, FL 33133","mapsPhone": "(305) 440-4015","openingHours": "Open 24 hours","placeId": "ChIJMx6aWRu32YgRxg5YYCPvftQ","ftid": "0x88d9b71b599a1e33:0xd47eef2360580ec6","website": "https://www.hxl-law.com/","domain": "hxl-law.com","companyName": "Hentschel x Lanza PLLC","description": "Discover Hentschel x Lanza PLLC โ a Miami boutique law firm specializing in personal injury and insurance recovery. Explore our professional services today.","primaryEmail": "info@gmail.com","emailCount": 1,"primaryPhone": "+13054404015","phoneCount": 3,"contactFormUrl": "https://www.hxl-law.com/","city": "N/A","region": "N/A","postalCode": "N/A","country": "N/A","linkedinUrl": "https://www.linkedin.com/company/hentschel-x-lanza-pllc","facebookUrl": "N/A","instagramUrl": "https://www.instagram.com/hentschel_x_lanza","twitterUrl": "N/A","youtubeUrl": "N/A","tiktokUrl": "N/A","socialProfileCount": 2,"hasContactChannel": "Yes","searchQuery": "law firms in Miami, FL","resultPosition": 12,"websiteSource": "maps","pagesCrawled": 1,"emails": ["info@gmail.com"],"phones": ["+13054404015","13054404015","+17139033031"],"scrapedAt": "2026-09-18T00:52:20.686Z","error": null}
{"imageUrl": "https://speed-plumbing.com/wp-content/uploads/2025/02/Logo.png","name": "Speed plumbing","category": "Plumber","rating": 5,"reviewsCount": 260,"address": "19 S Harrison St, Denver, CO 80209","mapsPhone": "(720) 670-6361","openingHours": "Open 24 hours","placeId": "ChIJbzthr81_bIcRudLONrHPcJ8","ftid": "0x876c7fcdaf613b6f:0x9f70cfb136ced2b9","website": "https://speed-plumbing.com/","domain": "speed-plumbing.com","companyName": "Speed Plumbing","description": "Speed Plumbing is a trusted plumbing company in Denver, CO offering plumbing repair, drain cleaning, water heater repair, sewer services, leak detection, and 24/7 emergency plumbing.","primaryEmail": "contact@speed-plumbing.com","emailCount": 2,"primaryPhone": "+17206706361","phoneCount": 1,"contactFormUrl": "https://speed-plumbing.com/","city": "Denver","region": "Colorado","postalCode": "80209","country": "US","linkedinUrl": "N/A","facebookUrl": "https://www.facebook.com/profile.php","instagramUrl": "https://www.instagram.com/speed_plumbing","twitterUrl": "N/A","youtubeUrl": "N/A","tiktokUrl": "N/A","socialProfileCount": 2,"hasContactChannel": "Yes","searchQuery": "plumbers in Denver, CO","resultPosition": 6,"websiteSource": "maps","pagesCrawled": 1,"emails": ["speedplumbingservices@gmail.com","contact@speed-plumbing.com"],"phones": ["+17206706361"],"scrapedAt": "2026-09-18T00:52:28.143Z","error": null}
{"imageUrl": "N/A","name": "JMLAW, P.A.","category": "Law firm","rating": 4.9,"reviewsCount": 73,"address": "1221 Brickell Ave Suite 900, Miami Beach, FL 33139","mapsPhone": "(305) 507-9092","openingHours": "Open 24 hours","placeId": "ChIJU4POEoG22YgRgGBdv5x0GDU","ftid": "0x88d9b68112ce8353:0x3518749cbf5d6080","website": "http://knowyourdefense.com/","domain": "knowyourdefense.com","companyName": "N/A","description": "N/A","primaryEmail": "N/A","emailCount": 0,"primaryPhone": "(305) 507-9092","phoneCount": 0,"contactFormUrl": "N/A","city": "N/A","region": "N/A","postalCode": "N/A","country": "N/A","linkedinUrl": "N/A","facebookUrl": "N/A","instagramUrl": "N/A","twitterUrl": "N/A","youtubeUrl": "N/A","tiktokUrl": "N/A","socialProfileCount": 0,"hasContactChannel": "No","searchQuery": "law firms in Miami, FL","resultPosition": 7,"websiteSource": "maps","pagesCrawled": 0,"emails": [],"phones": [],"scrapedAt": "2026-09-18T00:52:20.090Z","error": null}
โจ Why choose this Actor
- ๐ง The email column is actually filled. 72% of 46 live company sites published one, against 12% for the Actors this method was benchmarked against.
- ๐ธ You are billed for what you get. The contact event fires only when the site published an email or a phone that Google did not already give you.
- ๐ No filter fees and no start fee. A run that finds nothing costs nothing.
- ๐ The website is part of the base row, not a paid add-on.
- ๐ Google place ID on every row, so a second run updates your records instead of duplicating them.
๐ How it compares to alternatives
| This Actor | Typical leader in this category | |
|---|---|---|
| Website | Included in the base row | Charged as an add-on |
| Contact enrichment | Charged only when a contact is found | Charged per place, found or not |
| Filters | Free | $0.001 to $0.0015 per place, per filter |
| Email hit rate | 72% measured on live sites | "extracts 90% of records without emails" (their reviews) |
| Start fee | None | Common |
๐ How to use
- Create a free Apify account with $5 in credit, then open the Google Maps Contacts Scraper and type your searches, one per line, exactly as you would type them into Google Maps.
- Set how many places you want per search, and the maximum for the run.
- Leave the contact steps on to get emails and phones, or switch them off for a places-only list.
- Run it, then download CSV, Excel, JSON or XML, or pull the dataset over the API.
Free-plan runs return up to 10 places as a preview. Upgrade your Apify plan to collect up to 1,000,000 places per run.
A single search returns up to roughly 250 places, which is Google's own ceiling. To go deeper into a city, split it: "dentists in North Austin", "dentists in South Austin", or one search per postcode.
๐ผ Business use cases
- Build a cold-outreach list for a service area, with an inbox on each row.
- Map every competitor in a category and see who has a website and who does not.
- Feed a CRM with places keyed by Google place ID, then re-run monthly to refresh.
- Find businesses with high ratings but no website: a ready-made prospect list for web agencies.
๐ Automating Google Maps Contacts Scraper
Schedule it, chain it, or call it from the API. Every run writes a dataset you can pull with the Apify client in any language, and the place ID makes incremental updates safe.
๐ Beyond business use cases
- Find every clinic, school or charity in a town and the address to write to.
- Check which businesses in your category still have no website at all.
- Keep a personal list of local suppliers with a working phone on every row.
๐ค Ask an AI assistant about this scraper
Paste this into ChatGPT, Claude or any assistant with web access:
I want a contact list of local businesses from Google Maps. Look at https://apify.com/parseforge/google-maps-contacts-scraper and tell me how to configure a run over 10 cities, what each of the 39 output fields means, and exactly when each event is charged.
โ Frequently Asked Questions
๐ What do I put in the search box?
Whatever you would type into Google Maps: a category plus an area. "plumbers in Denver, CO", "hotels Lisbon", "zahnarzt berlin". The area lives in the query, so you do not need coordinates.
๐ How many places can I get per search?
Google's local results run out at around 250 per query. Ask for more by splitting the area into neighborhoods or postcodes.
๐ Do all places have a website?
Almost all do. When Google publishes no website for a business, the Actor looks one up on a free search engine, and only then falls back to a paid lookup, which you can switch off.
๐ธ When am I charged?
For each place row you receive; for a contact only when the business site published an email or a phone that was not already on the Maps row; and for a website lookup only when Google had no website and one had to be found elsewhere. Filters and skipped places are free, and there is no start fee.
๐ง How often is an email actually found?
On a measured run of 46 live company sites, 72% published an email and 78% published an email or a phone. Small businesses in some countries prefer a contact form; those rows carry contactFormUrl instead.
๐ Does it work outside the United States?
Yes. European searches hit Google's consent page, and the Actor routes around it automatically; a Madrid search returns Madrid practices with +34 numbers and .es domains.
๐ก๏ธ Do I need a proxy?
No. Everything needed is included.
โ ๏ธ What do N/A values mean?
The field genuinely was not published. Blank cells are never used, so a spreadsheet column stays readable.
๐ What output formats are supported?
CSV, Excel, JSON, XML, JSONL and RSS, from the dataset or the API.
๐ What is the place ID for?
It is Google's own key for the business. Re-run the same search next month and match on placeId to update rows instead of duplicating them.
๐ How many pages of each website are read?
The home page first. If it already carries an email, nothing more is requested. Otherwise the Actor follows the site's own contact, about or imprint links, up to the limit you set.
โ What happens when a website does not answer?
It is retried once through a proxy exit. If it still fails, the place is delivered with its Maps fields and no contact, and the contact event is not charged.
๐ Integrate with any app
The dataset is available through the Apify API the moment the run finishes. Use the run-sync-get-dataset-items endpoint for one-shot calls, webhooks to trigger downstream jobs, or the Make, Zapier, Airbyte and LangChain integrations listed on the Actor page.
๐ Recommended Actors
- Website Contact & Leads Scraper
- Google Search Results Scraper
- LinkedIn Company Profiles Scraper
- Crunchbase Scraper
- Contact Info Scraper
๐ก Pro Tip: browse the complete ParseForge collection.
๐ Need Help? Open our contact form with your run ID, your input and what you expected.
โ ๏ธ Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Google or by any of the businesses whose websites it reads. It collects only publicly available data. You are responsible for using the collected contact data in compliance with applicable law, including GDPR and other privacy and anti-spam rules in your jurisdiction.