ParseForge Scrapers

Google Maps Shared List Scraper

parseforge/google-maps-shared-list-scraper

AutomationDeveloper toolsTravel

Extracts every place from a shared Google Maps list URL and returns each one as a flat row with name, address, phone, website, rating, and category. Export to CSV or JSON.

Run this scraper See the API call
Total users
304
Monthly active
10
Total runs
1.1K
Bookmarked
3
Rating
5.0 (3)
Last modified
9 days ago

Overview

ParseForge

Google Maps Shared List Scraper

Extract every place from any shared Google Maps list into a clean spreadsheet. Paste a list URL, set a limit, and get the name, address, phone, website, rating, and category for each place. Export to CSV or JSON.

Google Maps lets anyone curate and share lists of saved places, but there is no built-in way to export that data for a trip plan, a market analysis, or a lead list. This actor reads a shared Google Maps list URL and pulls out every place it contains. You get a structured row per place without copying, pasting, or clicking through each pin.

Who uses it What they scrape Google Maps for
Travel planners Turn a friend's shared restaurant list into a spreadsheet for a group trip.
Sales teams Build a cold-outreach list from a competitor's curated map of local businesses.
Market researchers Audit which businesses appear in a city's best-of list and spot missing categories.
Real estate investors Extract every property or amenity pinned on a neighborhood tour map.

What it does

This Actor collects every place from one or more shared Google Maps list URLs and returns each place as a flat row with its name, address, phone, website, rating, and category.

  • πŸ”— Bulk list processing: paste multiple shared list URLs and the actor runs them all in one job.
  • πŸ€– AI enrichment: turn on OpenRouter to add a visit score, a short recommendation, and fill in missing websites or phone numbers.
  • πŸ“Š CSV or JSON output: pick CSV for Excel and Google Sheets, or JSON for your own scripts and databases.
  • βš™οΈ Concurrency control: dial parallel requests up to 10 for speed, or down to 1 for a lighter run.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

What you can do with Google Maps data

πŸ—ΊοΈ Turn a shared map into a trip itinerary.

A travel planner pastes a friend's Google Maps list of cafes and museums, exports a CSV, and builds a day-by-day schedule in a spreadsheet.

πŸ“‹ Build a local business lead list.

A sales rep scrapes a competitor's public map of recommended vendors, filters by rating, and loads the names and phone numbers into their CRM.

🏘️ Audit a neighborhood for investment.

A real estate analyst extracts every restaurant, gym, and transit stop from a curated neighborhood map to score walkability before a purchase.

πŸ” Enrich a list with missing contact data.

A researcher runs a shared list through AI enrichment to fill in websites and phone numbers that Google Maps did not show, then exports a complete CSV.

Why choose this scraper

What you get
No manual copying Every place lands in one row with its name, address, phone, website, rating, and category.
Handles large lists Pull up to 500 places per list so a long curated map does not get cut off.
AI-powered insights Optionally enrich each place with a visit recommendation and auto-discovered contact details.
Flexible export Download as CSV for a spreadsheet or JSON for a pipeline, no extra conversion step.

How it compares

The Google Search Results Scraper reads search engine pages, not curated Maps lists. This actor is purpose-built for shared Google Maps lists and returns place-level detail that a SERP scraper cannot.

Feature ParseForge Google Search Results Scraper
Reads shared Google Maps list URLs Yes Not listed
Returns place name, address, phone, and website Yes Not listed
AI enrichment for missing contact data Yes Not listed
CSV export for spreadsheets Yes Yes
No Google API key required Yes Not listed

Configure the run

Drive the Actor with one or more shared Google Maps list URLs and cap the places extracted per list from 1 to 500. The Input tab lists every parameter.

A first run with the defaults:

{
  "listUrls": [
    "https://maps.app.goo.gl/MMjvFNWpUTjiupHc9"
  ]
}

Pricing

Pay-per-result: $0.039 per result collected. You pay only for the results written to your dataset.

Results collected Approximate cost
100 results $3.90
1,000 results $39.00
10,000 results $390.00

New Apify accounts start with $5 in free credit.

Free users

Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the Google Maps Shared List Scraper.
  3. Set your inputs and any filters, then click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to Google Maps through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/google-maps-shared-list-scraper"

Then prompt it in plain language to run the scraper and read back the results.

Troubleshooting

Why am I getting no results?

Check that the list URL is a shared link and that the list is still public. If the owner changed it to private, the actor cannot read it. Also confirm you did not set maxPlacesPerList to 0.

The actor returns fewer places than I see on the map.

Google Maps sometimes lazy-loads places as you scroll. The actor reads the initial list view. Try raising maxPlacesPerList to 500 and re-run. If the list is extremely long, some places may still be missing.

AI enrichment is not filling in missing websites.

Perplexity Sonar searches the web for each place, but it cannot guarantee a find for every business. The enrichment works best for well-known restaurants, hotels, and attractions.

The run is slow with AI enrichment turned on.

Each place triggers an AI call, which adds about one to two seconds per row. Lower maxPlacesPerList or disable enrichment for large lists if speed matters more than the extra fields.

I get an error about my OpenRouter API key.

Make sure you created a key at openrouter.ai and pasted the full key string. A free key works, but it has rate limits. If you hit them, wait a minute and re-run.

FAQ

Question Answer
What is a shared Google Maps list? It is a collection of saved places that a user creates in Google Maps and shares via a link. Anyone with the link can view the list, and this actor reads that public view to extract the places.
How do I get a shared list URL? Open the list in Google Maps, tap the share button, and copy the link. Paste that link into the actor's input field.
Can I scrape a list that is not mine? Yes, as long as the list is shared publicly and you have the link. The actor reads the same public view any person with the link would see.
What data does each place row include? Every row returns the place name, full address, phone number, website, Google Maps rating, total reviews, and the category Google assigns to it.
Does this actor need a Google API key? No. It reads the public shared-list page directly. You do not need a Google Cloud account or any API key.
What does the AI enrichment do? When you enable it and provide an OpenRouter API key, the actor calls Perplexity Sonar for each place. It returns a visit score from 1 to 10, a short recommendation, and attempts to find a website or phone number when Google Maps omits them.
How many places can I extract from one list? You set the limit per list, up to 500 places. If a list contains more, the actor stops at your cap.
Can I run multiple lists in one job? Yes. Paste several URLs into the input, one per line, and the actor processes them all sequentially in a single run.
Is there a risk of getting blocked? The actor uses built-in proxy rotation and respects the concurrency setting you choose. Keeping concurrency at the default of 5 works well for most lists.
What output formats are supported? CSV for spreadsheets and JSON for developers. Pick the one that fits your workflow in the output options.

Related actors

Browse the full ParseForge collection for more scrapers.

πŸ†˜ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Google LLC. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

Input

FieldTypeWhat it doesDefault
listUrls required array Paste shared list URLs, one per line ["https://maps.app.goo.gl/MMjvFNWpUTjiup
maxPlacesPerList integer How many places to extract from each list (1-500) 100
enableAIEnrichment boolean Add AI recommendations, scores, and find missing websites/phones false
openRouterApiKey string Your OpenRouter API key. Get one free at openrouter.ai not set
outputFormat string (2 options) Choose CSV for spreadsheets or JSON for developers csv
maxConcurrency integer Parallel requests (higher = faster, more memory) 5

Pricing

from $16.90 per 1,000 results

Charged forWhat it isPrice each
result Single result in the default dataset. $0.0169 to $0.01755
Actor Start Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). $0.0325 to $0.039

Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.

API

One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.

POST Β· run and get results
curl -X POST "https://api.apify.com/v2/acts/parseforge~google-maps-shared-list-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "helloWorld": 123
  }'

Examples

Input that runs as-is.

input.json
{
  "helloWorld": 123
}

Reviews

Rated 5.0 out of 5 across 3 reviews. Read them on Apify.

Issues

We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.

Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.

Related scrapers

Run Google Maps Shared List Scraper on Apify All scrapers