Belschak.dev ← All projects
Case file 09·Everyday automation

google-maps-skills.

Two Claude Code / agent skills that research the best places in a city and file them into your Google Maps, through your own logged-in Chrome.


#What it is

Two skills that split the job into brain and hands. map-scout is the brain: give it a city, region or radius, and it researches candidates from three source families (Google Maps, TripAdvisor, independent blogs), scores them with a Bayesian rating adjustment plus a percentile fairness step, and produces ranked shortlists with finished note texts, 🥇🥈🥉 included. google-maps is the hands: a Playwright-over-CDP workflow plus a build engine (maps_lists.py) that creates the Saved Lists, sets emoji icons, saves places in ranked order, writes per-place notes, and verifies the result with a hard reload. map-scout without google-maps has nowhere to put its results, and google-maps without map-scout has nothing to file. That is why they ship as one repo. MIT licensed.

#The itch

Google Maps has no official API for Saved Lists, the lists behind the "Saved" tab in the app. If you want an agent to maintain them, the only route is the UI, in a browser signed in to your account. I wanted to say "scout Kyoto, we're there for a week in October" and have the lists just appear on my phone: toggleable, shareable, with notes. Making that UI route reliable enough for real use is what this repo is.

You: "scout Kyoto, we're there for a week in October"
map-scout
5 categories x 3 source families -> ranked shortlists + note texts
maps_lists
build: 5 Saved Lists + ⭐ Top Picks, ranked pins, notes, verified
Your phone
the lists are just there: toggleable, shareable, with notes

#How it works

UI automation against Maps fails in non-obvious ways, and the engine exists so a build is one command instead of an afternoon of debugging:

Failure modeWhat the engine does
Phantom save: the click lands in the wrong panel, looks fine, persists nothingscopes to the panel containing the Save button, restarts every search from the base URL
First save after list creation silently lost (backend sync lag)creates all lists first, waits, retries, verifies each save via the menu row's aria-checked
Rerunning a build un-saves places (the save menu toggles)idempotency anchor on aria-checked; checked rows are left alone
Ranked order comes out wrong (Maps shows newest first)saves in reverse rank order, checks the final order, auto-repairs by re-toggling
Notes vanish on reorderwrites notes only after the order check and repair pass
Wrong branch of a same-named placeanchor validation: phone or street+number must appear on the place page

The contract between the two skills is a single data.json: map-scout ends by producing it, google-maps starts by consuming it. Everything a build needs is in the file, so a crashed build can simply rerun.

#In real use

This is UI automation without an API underneath. Google changes the Maps DOM regularly; two selector breaks are documented between 2026-05 and 2026-07 alone, and fixes are usually one selector. The selector strings assume the English Maps interface. The share-link dialog renders inconsistently between sessions, and the My Maps flows are the most brittle part. Developed and used on Windows; the Python engine is cross-platform in principle but macOS/Linux is untested. A 5-list build also waits generously for the Maps backend and takes minutes, not seconds; that is the price of the verify guarantees.

The repo is explicit about the account question too: the skills drive your own browser, signed in to your own account, doing things you could do by hand at hand-like speed. Automating a Google account is still your call and your responsibility.

Version 1.0.0 shipped on 2026-07-17 with both skills, the build engine and the documented failure-mode table.

#Install

$ git clone --depth=1 https://github.com/belschak/google-maps-skills.git
$ mkdir -p ~/.claude/skills
$ cp -r google-maps-skills/google-maps google-maps-skills/map-scout ~/.claude/skills/
$ pip3 install playwright

Then launch Chrome with remote debugging on a dedicated profile (Chrome 136+ refuses CDP on the default profile) and sign in once; a launcher script is included for Windows, on macOS/Linux it is one command. No Playwright browser download needed: the scripts attach to your existing Chrome over CDP.

Related: web-research-cascade; map-scout's research stage hits exactly the blocks it escalates through, TripAdvisor most of all