Steps checked against Google’s own docs · August 2026
HOW TO EXPORT GOOGLE MAPS TO CSV
by Usama Zafar, who builds and maintains PlotLeads
There is no export button in Google Maps. Not on a search result, not on a business listing, not on a list you saved yourself. Everything below is a workaround for that one missing feature, and every one of them stops somewhere — usually sooner than you expect.
This page walks all five routes in the order people normally try them, and is specific about the ceiling each one hits and the columns you actually end up with. Where a step comes from Google, it is transcribed from Google’s own help pages rather than from memory.
Start here
TWO DIFFERENT JOBS, TWO DIFFERENT ANSWERS
Almost all the confusion around this question comes from one thing: “export Google Maps” means two completely unrelated tasks, and the instructions for one are useless for the other.
Job A — your own saved places
You starred forty restaurants, or built a list of sites for a trip, and you want them in a spreadsheet. Google has an official answer for this. It is Google Takeout, it is free, and it takes about ten minutes. Jump to method 1 and ignore the rest of the page.
Job B — businesses from a search
You want every HVAC contractor in Houston, with phone numbers, in a spreadsheet you can dial from. Google offers nothing for this at all. No button, no menu item, no supported export. Methods 2 to 5 are all workarounds, and each has a ceiling worth understanding before you sink an afternoon into it.
Most people searching this are doing job B and land on instructions for job A. If you have ever followed a Takeout tutorial and ended up with an empty CSV, that is why: Takeout exports what you saved, and you never saved anything.
The short version
EVERY ROUTE AND WHERE IT RUNS OUT
If you read nothing else, read the ceiling column. That is the number that decides whether a method survives contact with a real task.
| Route | What it actually exports | Ceiling | Fields per row | Cost | Code |
|---|---|---|---|---|---|
| Google Takeout | Only places you saved to a list yourself | Your own lists — never search results | Place name, your note, Maps link | Free | No |
| Copy and paste | Whatever you highlight by hand | ~120 listings per search, then the list ends | Whatever you copy, field by field | Free | No |
| Google My Maps | A map you built from your own file | 2,000 rows per import; KML/KMZ under 5 MB | Only what you already had | Free | No |
| Places API (New) | Search results as JSON you convert yourself | 60 results per query, 20 per page | Name, address, phone, website, rating | 1,000 free calls/mo, then billed per 1,000 | Yes |
| Extension or scraper | Search results, straight to CSV | Whatever the vendor's plan allows | Vendor-dependent | Free tier to per-record billing | No |
The only official export
GOOGLE TAKEOUT
Takeout is Google’s own data-export product, and it is the route Google’s Maps help pages point you to. It is the only method here that Google supports. It exports the places you personally saved — nothing else.
- Save the places first. In Google Maps on desktop, click Saved, then New list, and name it. Then click a place on the map, click Save, and pick that list. Takeout cannot export a search result you never saved, so this step is not optional.
- Go to takeout.google.com. Every Google product is ticked by default, which produces an enormous archive. Click Deselect all first, then tick Saved — that is the product holding your custom lists. Tick Maps (your places) as well if you want your starred and labelled places too.
- Pick delivery and format. Click Next step. Choose an email link, or send it to Drive, Dropbox, OneDrive or Box. Choose a one-time export rather than a scheduled one, and leave the file type as
.zipunless you specifically need.tgz. - Create the export and wait. Google emails a link when the archive is built. Google says this takes anywhere from a few minutes to a few days, and that most people get it the same day. The link expires after roughly seven days and allows five downloads.
- Open the files. Unzip it. The Saved folder contains one CSV per list. Starred and labelled places come out under Maps (your places) as JSON and GeoJSON instead, not CSV.
Where it stops
- The CSV columns are the place name, any note you typed, and a Google Maps link. There is no phone, address, website or rating column. Takeout returns your bookmark, not the business record behind it.
- It exports your saved places only. It cannot export a search result, a category of businesses, or somebody else’s list.
- To use this for prospecting you would have to click Save on every business first — which is the same manual grind as method 2, for a thinner output.
Free, works today, does not scale
COPY AND PASTE INTO A SPREADSHEET
Unglamorous and completely legitimate. Search on maps.google.com, click a result, and the side panel gives you the name, the full address, the phone number and the website. Copy each one into a column in Google Sheets or Excel, click the next result, repeat.
Google Maps has no multi-select, so there is no way to grab a page of results at once. Each business is its own round trip: open the listing, copy the name, copy the address, copy the phone, copy the website, go back. Five or six interactions per row, every row.
One practical tip that saves real time — paste into the formula bar rather than straight into the cell. Pasting a copied address directly into a cell can bring formatting and line breaks with it and split one address across several rows.
Where it stops
- The results list stops at roughly 120 listings per search. Scroll far enough and Google tells you that you have reached the end of the list, whether or not more businesses exist. Google does not document this, but it is the ceiling every scraping vendor reports hitting, and you can confirm it yourself in about two minutes of scrolling. A mid-size metro has far more than 120 contractors in most trades, so one search is never the whole market.
- Getting past that ceiling means splitting the search — by suburb, by ZIP, by narrower category — and running it again. Now you have overlapping result sets and a deduplication problem.
- It is genuinely the right answer below about thirty businesses. Above that, the arithmetic turns against you fast.
The confident wrong answer
GOOGLE MY MAPS
My Maps comes up constantly in answers to this question and it is almost always a dead end, because it runs in the opposite direction to what you want. My Maps takes a spreadsheet you already have and plots it on a map. It does not take a map and give you a spreadsheet.
It is a good tool for the job it does. If you already hold a list of addresses and want them visualised, plotted by territory, or shared with a rep, import the file and you are done. Google’s import limits are 2,000 rows per file, KML and KMZ files up to 5 MB, other file types up to 40 MB, and 100 photos at a time.
But it will only export maps you built yourself. It cannot export a Google Maps search, a business category, or anyone else’s places. If your data is not already in a file, My Maps has nothing to give you.
Official data, but you are writing code
THE GOOGLE PLACES API
This is Google’s sanctioned way to get business data programmatically, and the only route here that hands you clean, structured records with phone numbers and websites attached. The setup is real work: create a Google Cloud project, enable the Places API, attach a billing account with a live card even if you expect to stay inside the free allowance, generate an API key, and then write something to call it and flatten the JSON into CSV columns.
A working Text Search call looks like this. The field mask is the part that matters — it determines both what you get back and what you are billed.
curl -X POST 'https://places.googleapis.com/v1/places:searchText' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: places.displayName,places.formattedAddress,\
places.nationalPhoneNumber,places.websiteUri,places.rating,\
places.userRatingCount,nextPageToken' \
-d '{"textQuery": "hvac contractor in Houston, TX", "pageSize": 20}'Cost is the thing most articles get backwards. The Places API is not expensive for this job. Google’s free allowance is 10,000 calls per product per month on Essentials, 5,000 per SKU on Pro, and 1,000 per SKU on Enterprise. The old $200 monthly credit is gone — Google applied it only until 28 February 2025 — but the per-SKU free calls replaced it, and one call returns up to twenty places. Assembling a few thousand records will usually land inside the free tier, and Google’s published Enterprise rate starts at $35.00 per 1,000 requests beyond it. Check Google’s current pricing list before you plan around any figure here; these rates were last restructured in 2025.
The blockers are structural, not financial, and there are three of them.
Where it stops
- Text Search returns a maximum of 60 results per query — 20 per page, three pages via
nextPageToken, and then it is finished. Nearby Search is worse: 20 results with no pagination at all. The 120 ceiling from method 2 is not a browser limitation you can code around; the API caps lower still. - Phone numbers, websites and ratings are Enterprise-tier fields. Ask for
formattedAddressand you are on the cheap Essentials SKU. AddnationalPhoneNumber,websiteUri,ratingoruserRatingCount— the fields that make a list worth dialling — and every call bills at Enterprise, against the smallest free allowance of the three. - You are not permitted to keep the data. Google’s Places API policies say you must not pre-fetch, cache or store Places content outside a narrow set of exceptions. Place IDs may be stored indefinitely; the names, phones and websites may not. A CSV of businesses sitting in your CRM for the next six months is exactly the thing those terms are written to prevent. Where scraping sits legally is a separate question, and we cover it on its own page.
That last point is the one that catches people out. The API is the cheapest and cleanest route right up until you notice the terms do not cover the use you had in mind.
What most people end up using
EXTENSIONS AND SCRAPING SERVICES
Two shapes here, and they fail differently. Browser extensions run inside your own logged-in Chrome session, read the results panel as you scroll, and offer a download button. Hosted services run the search on their own infrastructure and hand you a finished file.
Extensions are the more fragile of the two. They break whenever Google reshuffles the Maps front-end, they inherit whatever the results list will show them — so the 120 ceiling from method 2 applies to them as well — and they can be pulled from the Chrome Web Store without warning, at which point the tool you built a workflow around simply stops. Before installing one, look at what permissions it asks for. An extension that requests access to data on all sites is asking for more than reading a Maps panel requires.
Hosted services are steadier because they solve the ceiling properly: they fragment one search into many narrower ones and deduplicate the overlap for you. That is the actual engineering problem, and it is why they charge for it.
Being straight about this: if you are technical and want volume at the lowest possible cost per row, a per-record service such as Outscraper will beat PlotLeads on price, and you should use it. That is a real trade and we are not going to pretend otherwise.
After the export
THREE THINGS THAT BREAK THE FILE
However you got the data out, the same three problems show up when you try to load it somewhere.
- Commas inside business names. “Smith, Jones & Sons Plumbing” will shift every column to its right unless the field is wrapped in quotes. If you are assembling the CSV by hand, quote the name and address columns by default rather than fixing it later.
- Phone numbers becoming numbers. Excel and Sheets will happily read a phone as a numeric value and strip the leading digit or reformat it. Set the column to plain text before you paste, not after.
- Duplicates from fragmented searches. The moment you split a metro into several searches to get past the result ceiling, you get the same business back more than once. Business name is a bad deduplication key, because the same operator appears as “ABC Heating” in one result and “ABC Heating & Air LLC” in another. Deduplicate on the phone number with the punctuation stripped, or on the Google place ID if your method gives you one.
Decide the column set before you start, too. For outreach the load-bearing fields are business name, phone, website, and city; the rating and review count are worth carrying because they let you sort a list by how established an operator is before you spend time on it.
If you would rather skip all of that
WE RUN THESE STEPS SO YOU DO NOT HAVE TO
Everything above is doable. The question is whether working through the result ceiling, the query fragmentation and the deduplication is a good use of an afternoon when the output is a list of contractors you intend to call.
PlotLeads does that part. You pick a trade and a US metro, and you get a CSV back — business name, phone, website, address, city, state, ZIP, Google Maps URL, rating, review count, and category. No API key, no Cloud project, no extension, no scraper to configure. There is an email column too, but it fills for only a small minority of listings, so this is a phone-and-website list and we would rather say that up front than have you find out after paying.
How the data is pulled and what we deliberately do not do to it is written up in full on our methodology page. If you want the tool itself rather than the tutorial, that is the Google Maps scraper page; if you want to see which trades and metros are covered, start with home-services business lists.