A Google Maps export arrives with somewhere between a dozen and seventy columns, depending on the tool and the options you chose. Most people use six of them — name, address, phone, website, rating, review count — and leave the rest unread. That is a waste, because several of the ignored columns are the ones that answer the interesting questions: is this listing claimed, has the business closed, which building is it inside, how are its ratings actually distributed, what is the site built on.
It is also a risk, because a few columns behave in ways that are not obvious from the name. Identifiers that change, a category that comes back in the local language, fields that are only populated for certain kinds of lookup. Building a pipeline without knowing those quirks is how a deduplication job quietly stops working six months later.
This is a field-by-field reference to what a full Google Maps export contains, using the columns exactly as Livescraper names them in the header row, with notes on what each is good for and where each will surprise you.
Identity: telling one place from another
These are the columns that say which place a row is. Get them right and everything downstream — deduplication, refreshes, joins against reviews — works. Get them wrong and nothing does.
| Column | What it is | Watch out for |
|---|---|---|
business_name | The name as shown on Maps | Not unique, and owners edit it. Never a join key |
google_id | The feature ID, in the form 0x…:0x… | Google may update it a couple of times a year |
place_id | The ChIJ… identifier used by Google's own APIs | Also changes occasionally; use it to talk to other Google tools |
place_cid | The numeric customer ID used across Google products | Useful secondary key; appears in ?cid= Maps links |
google_place_url | A link that opens the listing | For humans, not for matching |
query | The search or input line that produced this row | Lets you trace every row back to the request |
The practical rule: key on google_id, keep place_cid and place_id alongside it, and never key on name and address. Because Google does occasionally reissue identifiers, a refresh pipeline should fall back to matching on the other IDs, then on coordinates plus a normalised name, before declaring a place new. Our place ID and CID guide goes deeper on how the three relate.
Location: where it is
| Column | Notes |
|---|---|
full_address | The whole address as one string — best for display |
street_address, borough, city, postal_code, state | The same address broken into parts — best for filtering and grouping. Some parts are legitimately empty in countries that do not use them |
country, country_code | country_code is the one to filter on; it is also what you need to normalise phone numbers |
latitude, longitude | Coordinates for mapping, distance and radius work |
timezone | The local timezone of the place — essential for reading opening hours correctly and for calling at the right time |
plus_code | Google's open location code; individual lookups only |
area_service | Whether the business serves customers at their location rather than its own |
Two things are easy to miss. First, area_service matters a lot for trades: a plumber or a cleaner with no shopfront often shows a service area rather than a street address, so an address-based filter can silently drop exactly the businesses you were looking for. Second, timezone exists for a reason. A national list spans several, and working hours are expressed in local time, so any "is it open now" logic has to apply the right zone per row.
Classification: what kind of business it is
| Column | Notes |
|---|---|
category | The primary category — the one the owner chose to lead with |
sub_types | Every category the listing carries |
type | The category under which this row was found by your search |
The trap here is language: category can come back in the local language for non-English countries, so a German pull may say Zahnarzt where you expected Dentist. If you are combining countries, filter on the category you searched for rather than on the string, or build a small mapping table. The difference between category and type is also worth understanding: a business whose primary category is "Bakery" but which also lists "Café" will appear in a café search with type "Café" — useful for seeing why a row was returned.
Contact: how to reach it
| Column | Notes |
|---|---|
business_phone | The phone number on the listing, usually in local format |
business_domain | The website domain the listing links to |
org_link | The full website URL |
booking_appointment_link, reserving_table_links | Booking and reservation links where the business offers them |
menu_link, order_links | Menus and online ordering — individual lookups only |
A missing business_domain is a signal rather than a gap: a business with no website is a different kind of prospect. We wrote up how to use that in finding businesses without a website.
Reputation: how it is doing
| Column | Notes |
|---|---|
average_rating | The star rating shown on the listing |
total_reviews | How many reviews the rating is built on |
reviews_per_score | A JSON object with the count of reviews at each star level |
reviews_tags | Google's short topic labels for what reviewers mention — individual lookups only |
review_url, reviews_id | Where the reviews live, and their identifier |
reviews_per_score is the most under-used column in the whole export. Two businesses rated 4.2 can be completely different: one with nearly every review at four stars, another polarised between fives and ones. The second has a specific, fixable problem that its customers keep naming, and the distribution is what shows it. Always read average_rating alongside total_reviews too — a 5.0 from three reviews tells you almost nothing.
Status and ownership: is it real, is it run
| Column | Notes |
|---|---|
business_status | Operational, temporarily closed or permanently closed |
is_verified | Whether the owner has claimed the listing |
owner_title, owner_link, owner_id | The owner profile on Maps, where one is exposed |
working_hours | Structured opening hours as JSON, per day |
working_hours_old_format | The same hours as a simple string, easier for a spreadsheet |
popular_times | How busy the place is by hour — individual lookups only |
Filter on business_status for almost every use except property research, where the closed listings are the point. And is_verified is one of the strongest prospecting signals in the file: an unclaimed listing usually means nobody at the business is managing its online presence, which is precisely what a local marketing agency sells.
Presentation: what the listing looks like
description and about hold the business's own description and its attribute list (accessibility, payment options, amenities). logo_url, photo_url and street_view link to its imagery, and photos_count counts it. price_range carries the price level where Google shows one. A listing with a description, dozens of photos and a full attribute list is being actively managed; one with none of those is not, and the difference is easy to score.
Context: where it sits
located_in and located_google_id name the larger place a business is inside — a shopping centre, an airport terminal, a hospital, an office building. They are invaluable for building tenant schedules and for excluding concessions inside larger venues, and like several fields above they only come back on individual lookups.
Website enrichment: what the website says
The columns above all come from the Maps listing. Adding the email and contact enrichment visits each business's website and adds a second set:
| Column | Notes |
|---|---|
email_1–email_3, all_emails | Addresses published on the website |
phone_1–phone_3, all_phones | Phone numbers published on the website, often different from the Maps one |
contact_page | The site's contact page URL |
facebook, instagram, linkedin, twitter, youtube | Social profiles linked from the site |
domain_status | Whether the website is live, returning "page not found", or inactive |
host | The public IP the site is served from |
website_built_with | The platforms and technologies the site uses |
website_title, website_description | The site's own title and meta description |
Two of these are quietly powerful. domain_status finds businesses whose listed website is dead — a web-design lead that writes its own opening line. website_built_with tells a software seller which platform each prospect already runs, which is the difference between a relevant pitch and a generic one. On the emails: they are what the site publishes, so verify them before sending; the email verifier exists for exactly that step.
The "individual lookups only" columns
Several fields above — popular_times, plus_code, menu_link, order_links, reviews_tags, located_in and located_google_id — are only returned when the input is a specific place rather than a category search. Searching "restaurants in Lyon" will leave them empty; looking up a particular restaurant by name or ID fills them. That is not a bug, it is how the underlying pages differ. If you need them across a list, the pattern is two passes: a category search to find the places, then an individual lookup on the IDs you care about.
Review export columns
The Reviews Scraper returns a separate schema, one row per review, carrying the place identity columns above plus the review itself: review_id, review_text, review_rating, review_timestamp and review_datetime_utc, review_likes, review_link, review images, the author (author_title, author_id, author_link, author_image), and the owner's reply with its own timestamp in owner_answer and owner_answer_timestamp_datetime_utc.
Two notes. owner_answer being empty is itself data: the share of reviews a business replies to, and how fast, is a clean measure of how engaged it is. And the author columns identify real people, which puts review exports in personal-data territory under GDPR — something we covered in our guide to scraping legality.
Which columns to keep for common jobs
- Cold outreach list: identity,
business_name,category,city,business_phone,business_domain, enrichment emails,timezone,business_status. - Local SEO prospecting: add
is_verified,average_rating,total_reviews,reviews_per_score,photos_count,description. - Market sizing and mapping: identity,
category,sub_types, coordinates, address parts,average_rating,total_reviews. - Refreshable database: all three IDs, every field you display, and a timestamp of when you collected the row.
Taking fewer columns is not just tidier; for anything that touches people, it is data minimisation, which is a legal principle as well as good practice.
Conclusion
A full Google Maps export is far richer than the half-dozen columns most people use. The identity fields decide whether your pipeline holds together over time, and the rule is to key on google_id with the other IDs as fallbacks, never on names. The location and timezone fields make geography and opening hours usable. The reputation fields, especially reviews_per_score, separate businesses that look alike on a star rating. And the status, ownership and enrichment fields — business_status, is_verified, domain_status, website_built_with — carry most of the prospecting signal. Know which columns are populated only on individual lookups, expect categories in local languages, and treat review authors as personal data. The Google Maps Data Scraper returns every one of these columns, so the useful question is not what you can get but which of it you need.
Related reading: Google Maps Place ID and CID Guide, Google My Business Categories, How to Export Google Maps Business Listings to CSV.
Frequently asked questions
Which column should I use as a unique key for Google Maps places?
google_id, with place_cid and place_id kept alongside it. Never key on business name and address. Google occasionally reissues identifiers, so a refresh should fall back to the other IDs and then to coordinates plus a normalised name before treating a place as new.
Why is the category in a different language?
The category column can come back in the local language for non-English countries, so a German pull may say Zahnarzt rather than Dentist. Filter on the category you searched for, recorded in the type column, or keep a small mapping table.
Why are some columns always empty in my export?
Fields such as popular_times, plus_code, menu_link, order_links, reviews_tags, located_in and located_google_id are only returned for individual place lookups, not category searches. Run a category search to find places, then an individual lookup on the IDs you need.
What does reviews_per_score show?
A JSON object with the count of reviews at each star level. It separates businesses that share a headline rating, for example one consistently rated four stars from one polarised between fives and ones.
What does is_verified mean?
Whether the owner has claimed the listing. An unclaimed listing usually means nobody at the business manages its online presence, which makes it a strong signal for local marketing agencies.
What do the website enrichment columns add?
Emails and phone numbers published on the business's website, its contact page and social profiles, whether the site is live, the IP it is hosted on, the technologies it is built with, and its title and description.
