Google Maps List Scraper for Shared Lists avatar

Google Maps List Scraper for Shared Lists

Pricing

from $0.50 / 1,000 saved places

Go to Apify Store
Google Maps List Scraper for Shared Lists

Google Maps List Scraper for Shared Lists

Export places from public Google Maps shared lists as structured rows. Keep source-list context, addresses, ratings, phones, websites, hours, photos, and optional public website emails when available.

Pricing

from $0.50 / 1,000 saved places

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

1

Bookmarked

98

Total users

22

Monthly active users

13 days ago

Last modified

Share

🗺️ Export places from a Google Maps shared list

Google Maps Shared List Scraper helps travelers, researchers, and sales teams turn public Google Maps shared lists into structured place data. Add one or more public list links and get rows with source-list details, addresses, ratings, phone numbers, websites, hours, photos, reviews, and more when Google Maps shows them.

Use cases

📦 Google Maps place and list data

Each saved dataset row represents the first eligible match for one place from a public shared list. The row keeps list position and source-list context with public place details. Google Maps may not expose every field for every place, so unavailable fields can be absent.

🚀 Run the shared-list export

  1. Open the Actor in Apify Console.
  2. Add one or more public links under Shared list URLs.
  3. Set Places per list and, if needed, Total places.
  4. Start the run and open the dataset.

Public list rules

Short maps.app.goo.gl links and full google.com/maps shared-list links are accepted when they lead to a public list. Private or login-protected lists are not supported.

⚙️ Input

Input fields

FieldTypeWhat it does
listUrlsarray of stringRequired public shared-list links, individual place links, or place IDs, one per line. Short maps.app.goo.gl links and full google.com/maps links work for shared lists.
maxPlacesPerListintegerOptional positive cap for each list. Leave it empty to return all available places from each list until that source is exhausted.
maxResultsintegerOptional positive cap across all submitted sources. Leave it empty to return all available places until all submitted sources are exhausted.
categoriesarray of stringKeep places with any Google Maps category in this list. Leave empty to skip this filter.
countrystringKeep places in this country. Leave empty to skip this filter.
excludePermanentlyClosedbooleanTurn this on to leave out places Google Maps marks as permanently closed.
minRatingnumberKeep places with a Google Maps rating at or above this value. Leave empty to skip this filter.
minReviewCountintegerKeep places with at least this many Google Maps reviews. Leave empty to skip this filter.
requirePhonebooleanKeep only places with a publicly listed phone number.
requireWebsitebooleanKeep only places with a publicly listed website.

Successful input example

This example shows the public fields from the hosted Actor's default input.

{
"listUrls": [
"https://maps.app.goo.gl/MMjvFNWpUTjiupHc9"
],
"maxPlacesPerList": 2,
"maxResults": 2
}

🧾 Output

Dataset link

The run output contains a link to the default dataset.

FieldTypeWhat it does
resultsstringLink to the default dataset. Each saved row follows the field table below.

Output fields

FieldTypeWhat it does
namestringPlace name shown by Google Maps.
notestringPublic note for the place in the shared list.
addressstringFull place address shown by Google Maps.
citystringCity from the public address.
statestringState, province, or region from the public address.
postalCodestringPostal code from the public address.
countryCodestringCountry code from the public address.
latitudenumberPlace latitude from Google Maps.
longitudenumberPlace longitude from Google Maps.
categoriesarray of stringGoogle Maps categories for the place.
ratingnumberGoogle Maps star rating.
reviewCountintegerNumber of Google Maps reviews.
phonestringPublic phone number shown by Google Maps.
websitestringBusiness website URL shown by Google Maps.
emailsarray of stringPublic emails found on the business website when available.
currentStatusstringCurrent Google Maps status, such as open or closed.
isClaimedbooleanWhether Google Maps marks the listing as claimed.
isPermanentlyClosedbooleanWhether Google Maps marks the place as permanently closed.
businessHoursarray of objectOpening hours exposed by Google Maps for the place.
businessHours[].daystringDay of the week.
businessHours[].hoursarray of stringOpening times exposed for that day.
businessHours[].hours[]stringOne opening time or a closed-day value.
timezonestringPlace timezone.
plusCodestringGoogle Maps plus code.
descriptionstringPublic Google Maps place description when available.
priceLevelstringPublic price indication shown by Google Maps.
photosarray of stringPublic Google-hosted photo URLs for the place.
reviewsarray of objectRecent public Google Maps reviews.
reviews[].reviewerNamestringPublic name shown for the reviewer.
reviews[].reviewerProfileUrlstringPublic profile URL for the reviewer.
reviews[].reviewerPhotoUrlstringPublic photo URL for the reviewer.
reviews[].reviewerIdstringPublic identifier for the reviewer.
reviews[].ratingnumberStar rating for the review.
reviews[].textstringText of the review.
reviews[].publishedAtTextstringDate text shown for the review.
reviews[].publishedAtstringReview date when available.
reviews[].languagestringLanguage of the review.
reviews[].reviewUrlstringURL for opening the review.
reviews[].reviewIdstringPublic identifier for the review.
googleMapsUrlstringURL for opening the place in Google Maps.
placeIdstringCompact Google place ID.
placeIdChIJstringGoogle ChIJ place ID.
cidstringGoogle Maps CID.
listIdstringGoogle Maps shared-list ID.
sourceListNamestringPublic name of the shared list that contains the place.
sourceListUrlstringSubmitted or resolved shared-list URL that first found this place.
sourceIndexintegerOne-based place position in the source shared list.
savedByNamestringPublic name of the user who saved the place.
savedAtstringSaved date from Google Maps.

Example place row

This shortened row is copied from a successful current-beta shared-list run. It keeps useful place, list, and contact fields. The long description is omitted, and the photos array uses the string "..." for the remaining photo URLs.

{
"name": "Marcy Land Omotesando Ramen Bar",
"note": "Uni ramen",
"address": "Marcy Land Omotesando Ramen Bar, 屋台 H・T青山ビル 1F 3 Chome-5-44 Kita-Aoyama, Minato City, Tokyo 107-0061, Japan",
"city": "Minato City",
"state": "Tokyo",
"postalCode": "107-0061",
"countryCode": "JP",
"latitude": 35.666917999999995,
"longitude": 139.7120376,
"categories": [
"Ramen restaurant",
"Brewpub",
"Izakaya restaurant",
"Oden restaurant",
"Restaurant"
],
"rating": 4.9,
"phone": "+81 70-8550-5280",
"currentStatus": "Closed · Opens 12 PM",
"isClaimed": true,
"isPermanentlyClosed": false,
"businessHours": [
{
"day": "Sunday",
"hours": [
"12 PM-10 PM"
]
},
{
"day": "Monday",
"hours": [
"12:30 PM-6 PM"
]
},
{
"day": "Tuesday",
"hours": [
"12 PM-11 PM"
]
},
{
"day": "Wednesday",
"hours": [
"12 PM-11 PM"
]
},
{
"day": "Thursday",
"hours": [
"12 PM-11 PM"
]
},
{
"day": "Friday",
"hours": [
"12 PM-11 PM"
]
},
{
"day": "Saturday",
"hours": [
"12 PM-10 PM"
]
}
],
"timezone": "Asia/Tokyo",
"plusCode": "8Q7XMP86+QR",
"description": "...",
"photos": [
"https://lh3.googleusercontent.com/grass-cs/AABkmLetUSen8aPIeRLWsoZccCUeFuu5dUvXjonKH87j39cyMHzCsz9eFORShQQ_zcMCXMYeAlnOUqYBTKFAdxKQ88yo_X2xDfFMTVxCGiRFyGEpg-oXSckS-L12bnVsNMNGNNOLFLSnrYGhsIFw=w1200-h800",
"..."
],
"googleMapsUrl": "https://www.google.com/maps?cid=4503869456705953711",
"placeId": "/g/11q21hjdkh",
"placeIdChIJ": "ChIJ224dxzKNGGARr5-wiWj1gD4",
"cid": "4503869456705953711",
"listId": "PiSwyqmbpwpP_Nr5sAang4x5QxbKwA",
"sourceListName": "Tokyo",
"sourceListUrl": "https://maps.app.goo.gl/MMjvFNWpUTjiupHc9",
"sourceIndex": 1,
"savedByName": "Shahed Khan",
"savedAt": "2026-07-29T07:19:29.333Z"
}

You can export dataset rows in the formats offered by Apify or read them through the dataset API.

💳 Pricing

Saved-place charges

Pay-per-event pricing charges one event for each place saved to the dataset. Your total depends on the number of places saved and the current event price shown by Apify.

🔌 Integrations

Workflow options

Use the Apify API, schedules, webhooks, or available Apify integrations to send saved rows to your workflow. This video shows how to connect an Actor with other tools:

❓ FAQ

Yes. Add a public maps.app.goo.gl shared-list link or a full Google Maps shared-list link.

Can I submit more than one shared list?

Yes. Add one or more public list links. The saved row keeps the source-list context for its first eligible match.

Can I scrape a private Google Maps list?

No. The list must open without a Google login.

Can I run the Actor through the Apify API?

Yes. Start the Actor with the same public input and read the default dataset after the run.

Do I need a Google Maps API key?

No. Add the public shared-list URL to the Actor input.

Why are some place fields empty?

Google Maps may not show every field for every place. The Actor keeps the public fields available for that place.

Does businessHours always contain the full week?

No. It contains the opening hours Google Maps exposes for that place, which may be only part of the week.

What happens when a place appears more than once?

The first eligible match is saved. A later match for the same place is ignored, so the saved row keeps only the first list context.

📝 Changelog

v1.1 (08-10-2026)

  • Use a Google Maps place link or place ID to save a single place.
  • Filter places by category, country, rating, or review count.
  • Leave out permanently closed places or places without a phone number or website.

v1.0 (05-10-2026)

  • Continue past short list responses when place limits are left empty. Check the source count and list order before treating a list as complete.
  • Find public website emails when available on every run. The Website emails and Emails per place fields have been removed.
  • Keep place details found before a later response leaves those fields empty.
  • Use the current Google Maps review count when available.

v0.3 (16-09-2026)

  • Keep one saved-place charge for each place saved to the dataset.
  • Use a lower default request rate for large shared lists.
  • Allow the Emails per place field to be left blank.

v0.2

  • Complete large public Google Maps lists more reliably, while keeping collected places available when a temporary source issue affects a list.
  • Include the public shared-list name with each exported place.

v0.1

  • Scrape complete shared lists with no preset place ceiling, or use any positive per-list and total place limits.

v0.0

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré