A web designer wants every dentist in Leeds that has no website. A sales rep needs the plumbers across three Manchester neighborhoods before a trade show. A café owner wants to see how the coffee shops within walking distance rate. All three jobs start in the same place, a map search, and all three stall at the same point: the results are cards you scroll through one at a time, not a table you can sort, filter and share.
This guide covers how to turn a "what, where" search into a usable list: what data a map listing holds, how many results you can realistically get, how deduplication should work for chains, how to read the summary numbers, how the CSV is built so it opens cleanly, and where the legal and practical limits are. The worked examples use the Toolz maps scraper.
TL;DR: A maps scraper turns a search like "dentists in Leeds" into a table of businesses with seven fields: name, address, category, star rating, review count, phone and website. The Toolz Maps Scraper reads a places search API rather than automating a browser, merges five pages of ten into up to 50 listings, removes duplicates by name plus address so chain branches stay separate, shows how many listings publish a website or phone, and exports an RFC 4180 CSV that follows your filter. It does not return emails, opening hours or review text. Searches run on a server, are free, no signup, and capped at three per visitor per day.
What is a maps scraper?
A maps scraper is a tool that collects business listings from a map search and returns them as structured data instead of map pins and cards. You describe a business type and a place, and it gives back a row per business that you can sort, filter and export to a spreadsheet.
The data is the same kind a map search shows a person. The difference is shape: a table lets you count, compare and hand the list to someone else, which a scrolling panel of cards does not.
There are two broad ways to build one. Browser automation drives a real browser through a maps website, scrolls, and copies text off the page. It breaks whenever the page layout changes, and it runs against the terms of most map services. The other way reads a places search API, a service that returns listings as data. The Toolz tool uses the second approach, through a third-party places search API, which is why its results are stable and its limits are predictable.
What data do you get for each business?
Each listing has seven fields. Any of them can be empty if the listing does not publish that information.
| Field | Example | Notes |
|---|---|---|
| Name | Joe's "Best" Coffee, Inc. | As listed |
| Address | 123 SE Main St, Portland, OR 97214 | One text field, not split into parts |
| Category | Coffee shop | The listing's primary category |
| Rating | 4.6 | Average star rating; empty if unrated |
| Reviews | 212 | Number of reviews; empty if unrated |
| Phone | (503) 555-0142 | As published |
| Website | https://example.com | Only when the business lists one |
What is not included matters as much, because it decides whether this is the right tool for your job:
- No email addresses. The places data does not carry them. The website field is usually where a contact address can be found.
- No review text, reviewer names or review dates. Only the average and the count.
- No opening hours, coordinates or photos.
- No bulk mode. Each "what, where" query is one search.
How many results will a map search return?
Up to 50 distinct listings per search. The tool requests five pages of ten results in parallel and merges them. Beyond five pages, the places index tends to repeat listings it already returned, so more pages would add duplicates rather than businesses.
Fifty is a sample of a dense category, not a census. "Restaurants in London" has thousands of listings, and a single search returns the 50 most relevant. When you need coverage rather than a sample, split the area into smaller places and run one search for each.
| Goal | Weak query | Better queries |
|---|---|---|
| Plumbers across a city | plumbers |
plumbers in Salford, plumbers in Stockport, plumbers in Didsbury |
| Dentists in a mid-size city | dentist |
dentists in Leeds |
| Restaurants in a big city | restaurants London |
restaurants in Shoreditch, restaurants in Camden, restaurants in Brixton |
| A niche | shops in Portland |
bike repair shops in Portland |
A query must be between 3 and 120 characters. Putting both the business type and the place in the query is what makes results useful; a business type alone has no location to anchor it.
With a limit of three searches per day, plan the neighborhoods before you start and spread a larger sweep over a few days.
How does deduplication work for chains and branches?
Duplicates are removed by comparing name and address together, ignoring capitalization. Two rows are the same business only when both match.
That rule is deliberate. Deduplicating on name alone would collapse every branch of a chain into one row, deleting exactly the listings a local search is for. Here is how three raw results resolve:
| Raw result | Name + address key | Kept? |
|---|---|---|
| Starbucks, 100 Main St | starbucks|100 main st |
Yes |
| STARBUCKS, 100 Main St | starbucks|100 main st |
No, duplicate of the first |
| Starbucks, 200 Oak Ave | starbucks|200 oak ave |
Yes, a separate branch |
The first occurrence wins, so the kept row uses the capitalization from whichever page returned it first. Listings with no name are skipped entirely.
How to read the summary before the rows
Above the table, four numbers summarize the search: total listings, how many have a website, how many have a phone, and the average rating.
The average rating is computed only over listings that have a rating, then rounded to one decimal. Unrated listings are left out rather than counted as zero, which would drag the average down unfairly. A small illustrative example:
| Listing | Rating | Website | Phone |
|---|---|---|---|
| A | 4.6 | Yes | Yes |
| B | 4.2 | No | Yes |
| C | none | No | Yes |
| D | 3.9 | Yes | No |
Listings 4
With a website 2 (A, D)
With a phone 3 (A, B, C)
Average rating (4.6 + 4.2 + 3.9) / 3 = 12.7 / 3 = 4.233 -> 4.2
The website count is often the most commercially useful figure. Say a search for dentists returns 50 listings and 18 of them have no website. That is 18 / 50 = 36% of the category without a site, visible before you read a single row. For a web designer, those 18 are the outreach list. Click Has website or Has phone to filter the table to listings that publish one; there is no "missing website" filter, so export all rows and filter the empty Website cells in a spreadsheet.
How is the CSV built, and why does it open cleanly?
The export follows RFC 4180, the common format for CSV files: every field is wrapped in double quotes, and any double quote inside a field is doubled. That matters because business names contain commas and quotes all the time, and unquoted CSV would split them across columns and corrupt every row after.
A listing named Joe's "Best" Coffee, Inc. rated 4.6 from 212 reviews, and an unrated listing, come out like this:
"Name","Address","Category","Rating","Reviews","Phone","Website"
"Joe's ""Best"" Coffee, Inc.","123 SE Main St, Portland, OR 97214","Coffee shop","4.6","212","(503) 555-0142","https://example.com"
"Corner Cart","45 NW 5th Ave, Portland, OR 97209","Coffee stand","","","",""
Three details about the export:
- It follows the active filter. The button reads "CSV (n)" with the number of rows it will contain. With Has website selected, only those rows are exported.
- Empty values are empty strings, not zeros, so an unrated business does not look like a zero-star one.
- The file name comes from your query, lowercased with spaces turned into hyphens:
coffee shops in Portlanddownloads ascoffee-shops-in-portland.csv.
Downloading again, or with a different filter, does not use another search.
If a spreadsheet mangles accented characters when you open the file, import it through the spreadsheet's text or CSV import option and choose UTF-8 encoding. Setting the Phone column to Text during import keeps leading plus signs and zeros intact. To inspect or convert the file before importing it anywhere, the CSV viewer opens it in the browser, and the CSV to JSON guide covers converting it for a CRM or script.
How current is map listing data?
As current as the index, which always lags reality. A business that closed last month can still be listed, a new one may not appear yet, and phone numbers go stale faster than addresses. Verify anything you plan to act on, especially before calling.
A practical way to track change is to run the same search on a schedule, keep each export, and compare them. The CSV diff guide explains how to spot added, removed and changed rows between two exports.
Is scraping business data from maps allowed?
This question has two parts, and it is worth keeping them separate.
Collecting the data. The Toolz tool reads a licensed places search API rather than automating a browser against a maps website, which is the distinction most map services' terms turn on. If you build your own collector, read the terms of the data source first. The official route for Google's data, for example, is the Places API, which has its own terms and pricing. Open data is another route: OpenStreetMap data can be reused under the Open Database License with attribution.
Using the data. What you do with the list is governed by marketing and privacy law where the businesses are, and that responsibility sits with you. In the United States, commercial email falls under the CAN-SPAM Act, summarized in the FTC's compliance guide. In the UK, electronic marketing is covered by PECR alongside data protection law, and the ICO's direct marketing guidance explains the rules. Sole traders' details can count as personal data in some jurisdictions. None of this is legal advice; if outreach is central to your business, check the rules that apply to you.
What happens to my search, and what are the limits?
Unlike most Toolz tools, this one cannot run client-side: it has to call a paid search API from a server. The search text you enter is sent to the Toolz server, which queries the search provider and returns the listings, and nothing is stored. The page says so under the search box ("Runs on our server, not in your browser") and in a notice below the results.
Each search fetches five pages from that paid API, so there is a daily cap per visitor, currently three searches, resetting at midnight UTC. After a search, a counter such as "2 of 3 searches left today" shows what remains. The CSV export happens in your browser and does not count.
| Message | Cause | What to do |
|---|---|---|
| "Enter what to search for and where..." | Empty query | Type a business type and a place |
| "That search is too short." | Under 3 characters | Add the place |
| "Keep the search under 120 characters." | Query too long | Shorten it |
| "Daily limit reached (3 searches). Try again tomorrow." | Cap used | Wait for the reset at midnight UTC |
| "No listings matched..." | Place too vague or misspelled, or the filter excludes everything | Name a city or neighborhood, or switch the filter to All |
| "Search failed. Try again in a moment." | The upstream API errored | Retry shortly |
| "Could not reach the server..." | Your connection dropped | Check the connection and retry |
Maps scraper vs other ways to build a lead list
| Method | Data you get | Effort | Limits |
|---|---|---|---|
| Copying from a maps site by hand | Whatever you copy | High | Slow, error-prone past 20 rows |
| Browser automation scripts | Whatever the page shows | High to build and maintain | Breaks on layout changes, terms risk |
| Places API directly | Rich fields, including coordinates and hours | Medium, needs an API key and code | Paid per request |
| Hosted scraping platforms | Varies, sometimes emails | Low to medium | Paid, varying terms |
| OpenStreetMap queries | Open data with attribution | Medium | Coverage varies by region |
| Toolz Maps Scraper | Seven fields, up to 50 per search, CSV | Low | 3 searches a day, no emails or hours |
A worked lead-list workflow
Suppose a web designer wants dentists in Leeds without a website.
- Open the local business data tool and search
dentists in Leeds. - Read the summary: for example, 50 listings, 32 with a website, 47 with a phone, average rating 4.4.
- That means 18 listings, 36%, publish no website. That is the list.
- Leave the filter on All and click CSV (50).
- Open the file with UTF-8 encoding, Phone column as Text, and filter the Website column to blanks.
- Verify each business is still open before calling.
- Next day, repeat with
dentists in Headingleyanddentists in Roundhayto extend coverage, and combine the files.
If you plan to write content aimed at the businesses on your list, the Ask Questions tool finds the questions people are asking about a topic on Reddit, and the marketing tools hub lists the rest of the set.



