A clickable map built from a Google Sheet. Each row is one pin with a story. Free, no account, nothing to install.
Most mapping tools want you to learn their app. This one doesn't. Your spreadsheet is the database — one row per place, with a name, coordinates, and whatever story you want to tell about it. The map just draws what's in the sheet.
That means editing is editing a spreadsheet, which you already know how to do. Add a row, refresh the map, there's a new pin. Change one cell from want to been and a bucket-list place graduates to a visited one.
It's one renderer pointed at whatever data you give it, so the same tool covers a lot of ground:
What it costs: nothing, and there's no sign-up. You need a Google account for the sheet — that's it. Your data lives in your own Google Drive, not on anyone else's server. The map page reads your sheet straight from Google in the visitor's browser.
About ten minutes, start to finish. You'll copy a starter sheet, add your places, share it, and let the box below build your map link — no hand-typing URLs.
Handing this to someone to do at home? There's a one-page take-home card (PDF) — three steps and two QR codes, print and go. For a full walkthrough (columns, a worked example, troubleshooting) there's also the six-page guide (PDF).
Open the starter sheet → and click the Make a copy button it offers you. That drops your own private copy into your Google Drive, with the right column headings and eight example rows to learn from.
Prefer to start from a file? Download template.csv, then in Google Sheets use File → Import → Upload.
One row per place. Only three things are actually required — a name, a lat, and a lon. Everything else makes the map richer but is optional. The column reference below explains each one.
To get coordinates: open Google Maps, right-click the exact spot, and the first line of the menu is the latitude and longitude — click it to copy. Paste it into the sheet and split it across the lat and lon columns.
Delete the example rows when you're ready. Leave the heading row alone.
In your sheet, click Share (top-right). Under General access choose Anyone with the link, role Viewer. Then Copy link. This lets the map read your places — it does not let anyone edit your sheet.
"Anyone with the link" means what it says. The sheet isn't listed or searchable, but treat the contents as public — don't put home addresses, phone numbers, or anything private in a sheet you share.
Want it more locked-down? File → Share → Publish to web → CSV works too — paste that address into the box below instead.
Paste your sheet link below and it builds your map address for you — no hand-typing URLs.
Bookmark the link it gives you (or text it to yourself). That's your map — it refreshes whenever you edit the sheet.
Eight example rows, deliberately mixed — a campsite, a bucket-list hike, an ancestor's homestead, an immigration record, a national park, a road trip. They're there to show what each column is for, and to show that this maps more than one kind of thing.
Starter sheet: Open the starter sheet & make your own copy →
That link hands you your own private copy in your own Google Drive — you're never editing the original, and nobody else can see what you put in yours. You'll need to be signed in to a Google account for it to have somewhere to put the copy.
Prefer a file? Download template.csv and use File → Import instead.
Here's what the first few rows look like:
| name | tier | status | who | story |
|---|---|---|---|---|
| Bear Lake | Tenderfoot | been | Jan, Sue, Dale | The yearly trip. Raspberry shakes on the way out, every time. |
| Great-grandma Alma's homestead | Wanderer | been | Alma, Peter | The quarter-section they proved up on after arriving from Norway. |
| Havasu Falls | Expert | want | Ten miles in, permit-only, turquoise water. |
Headings must be spelled exactly as below, in the first row. Order doesn't matter, and you can delete columns you don't use — anything missing is simply skipped.
| Column | What it does | |
|---|---|---|
name | required | The title on the pin's popup. |
lat | required | Latitude, as a decimal — 41.9843. Not degrees-and-minutes. |
lon | required | Longitude, as a decimal — -111.3407. Negative in the Americas. lng also works. |
story | optional | The reason the place is on the map. A full paragraph is fine — this is the point of the whole thing. |
status | optional | been or want. Drives the Been / Want to go / All toggle. Want-to-go pins draw as hollow dashed rings. |
tier | optional | Tenderfoot, Wanderer, or Expert — how far off the beaten path it is. Sets the pin colour. Blank counts as Wanderer. |
who | optional | Comma-separated names — Jan, Sue, Dale. Becomes the people picker, so you can show everywhere one person went. |
date | optional | When you were there. Anything with a year in it works — 2019-09, 1904-05-12, 1911. The year feeds the year filter. |
category | optional | Your own grouping — Water, Wildlife, Family history. Becomes a filter. Invent whatever categories you like. |
region | optional | The U.S. state, spelled out — Utah. Powers the states-shading view. state also works. |
county | optional | Utah county name, no "County" — Tooele. Powers the counties-shading view. |
rating | optional | 1 to 5. Shows as stars in the popup and lets you filter to only your favourites. |
photo | optional | Web address of an image to show in the popup. It must be a direct link to an image file — a Google Photos share link won't work. |
link | optional | Web address of a fuller write-up. Adds a "Read the full story & photos →" link to the popup. |
Tier is about how far off the map a place is, not how much you liked it — that's what rating is for.
Everything below is driven by the columns you fill in. Fill in more, get more. All the filters stack, so you can ask for something quite specific — everywhere Dale went in Utah in 2019 that you'd rate four stars.
No sheet, no problem. Open map.html with nothing after it and you get a demo dataset of real Utah places, so you can click around before committing to anything.
Nearly always the sheet address. It has to be the one from Publish to web ending in output=csv — not the address in your browser's bar when the sheet is open. Those look similar and behave completely differently. Re-copy it from the Publish to web box.
Check that row's lat and lon. A row with no coordinates is skipped silently. A pin off the coast of Africa means one of the two is blank or zero; a pin on the wrong continent usually means lat and lon got swapped, or the minus sign is missing from lon.
Give it a few minutes and refresh — Google caches published sheets. If it still hasn't moved, make sure you edited the sheet you published, not a copy of it.
The photo column needs a direct link to an image file — one that ends in .jpg or .png and shows just the picture when you paste it into a browser. Share links from Google Photos, Dropbox, and iCloud point at a viewer page rather than the image itself, so they won't load.
They won't, in Google Sheets — type freely, commas and all. This only bites if you're hand-editing a CSV file in a text editor, in which case wrap the text in "double quotes".
The link column can point at a proper page — a photo gallery and a longer story for one trip — so the popup stays short and the detail lives elsewhere. Any web address works.
There's an "Add a place" mode for capturing a spot while you're standing in it, but it needs a small script connected to your own sheet so the map can write back to it. Without that, the map only ever reads. If you want this, get in touch and I'll point you at the setup.
Nothing is stored in the page, so one sheet is one map — make a second sheet for a different subject and you get a second map from the same link, just with a different sheet= on the end. Camping in one, family history in another.