Why Importing a Spreadsheet to Google My Maps Fails (And How to Fix It)
Google My Maps CSV import keeps failing? Decode silent truncation, encoding errors, geocoding misses, and 'couldn't read this file' messages.
Google My Maps spreadsheet imports fail for five specific reasons: the file exceeds 2,000 rows, the file is over 40 MB (or 5 MB for KML/KMZ), the encoding is UTF-8 with BOM, the lat/long columns are stored as text instead of numbers, or the geocoder cannot resolve the addresses you supplied. Every "couldn't read this file" or silent truncation traces back to one of these. Fix the data, not the map.
If you have ever uploaded a CSV to My Maps and watched it either crash with a dismissable error or quietly drop half your pins, you are not alone. Google ships zero diagnostics. The import dialog returns a generic failure, the markers that do appear land in the wrong country, and your 3,400-row list of stores becomes a 2,000-row mystery. This guide documents every failure mode that has been confirmed against Google's own My Maps Help documentation and maps each symptom back to a concrete fix.
The 5 Limits That Trigger Every Import Failure
Google's import pipeline enforces a strict ruleset, and crossing any one of them aborts the whole job. The numbers come directly from support.google.com/mymaps:
| Limit | Value | What breaks when you exceed it |
|---|---|---|
| Rows per file | 2,000 | Silent truncation, no warning |
| Features per layer | 2,000 | Import stops at row 2,000 |
| Layers per map | 10 | Cannot add an 11th |
| Features per map (total) | 10,000 | Hard cap across all layers |
| CSV / XLSX / Sheets size | 40 MB | "Couldn't read this file" |
| Unzipped KML / KMZ size | 5 MB | KML rejected; CSV at same row count works |
| Photos per import | 100 | Skipped after the 100th |
The 2,000-row cap is the single most common cause of failed imports. We covered the mechanics of this ceiling in detail in our breakdown of the 2,000 location limit, and the short version is that Google's documentation says it explicitly: "Do not import files with more than 2,000 rows."
The 5 MB KML vs 40 MB CSV trap
A 12 MB KML file will be rejected outright. The exact same data exported as CSV will sail through, because CSV gets the 40 MB ceiling while KML and KMZ are capped at 5 MB unzipped. Users routinely export from GIS tools to KML, hit the wall, and assume My Maps is broken. It is not — the file format chose the wrong limit. If your data is line-based and under 2,000 rows, ship CSV and let My Maps geocode. If you need geometry, our Notion to KML exporter writes clean, minified KML that stays under 5 MB for almost every realistic dataset.
Map your Notion places in 30 seconds
Export to KML, GPX, GeoJSON, CSV. Free forever.
Failure Mode 1: Silent Truncation Past 2,000 Rows
You upload 3,400 rows. The import succeeds. You count pins: 2,000. There is no error.
This is by design. Google truncates rather than rejecting, which means you only notice when you go looking for a place that should be there. The audit is brutal: open the layer's data table, sort by your unique ID column, and confirm your last row matches the CSV. If it stops at row 2,000, you have been truncated.
Fix: Split the CSV into chunks of ≤2,000 rows and import each as a separate layer (up to 10 layers, 10,000 total features). For datasets above 10,000, you have run out of My Maps and need a different visualization layer — a Notion database has no row cap, and Notion to Maps renders the full set with clustering instead of forcing you to chop it up.
Failure Mode 2: "Couldn't Read This File"
The most common cause of this exact error message is encoding, not size. Microsoft Excel's "Save As CSV UTF-8" prepends a 3-byte Byte Order Mark (EF BB BF, Unicode codepoint U+FEFF) to the file. Google's parser does not strip it. The first header in your file therefore reads Name instead of Name, the address column is no longer recognized as an address column, and the import aborts.
You will not see this in Excel because Excel hides the BOM. You can confirm it three ways:
- Open the CSV in a plain text editor (BBEdit, Notepad++, VS Code). The first line should start with the column header, no invisible prefix.
- Run
file -i your_file.csvin Terminal. Look forcharset=utf-8without abom=flag. - Strip it with
sed '1s/^\xEF\xBB\xBF//' input.csv > output.csv.
Fix: Save as UTF-8 without BOM. In Google Sheets, File → Download → Comma-separated values (.csv) produces a clean BOM-free file every time. In Excel, use Save As → "CSV (Comma delimited) (*.csv)" — not "CSV UTF-8" — and the BOM is omitted. Or skip the round trip entirely: export Notion to CSV and you get a UTF-8 file with the headers My Maps expects.
Failure Mode 3: Lat/Long Columns Are Stored as Text
You have a latitude column and a longitude column. The values look right: 40.7128, -74.0060. But every row imports without coordinates, or the dialog says "Choose columns to position the placemarks" and your lat/long columns are not in the dropdown.
The cause: the cells are formatted as text, not numbers. In a text editor, the values appear wrapped in double quotes: "40.7128". Google's importer reads quoted fields as strings and refuses to treat them as coordinates.
Fix: Remove the quote-wrapping. In Google Sheets, select the columns, then Format → Number → Number. Re-export. In a CSV editor, open the file as plain text and strip the quotes around numeric values, or use sed 's/"\([0-9.-]*\)"/\1/g' to clean them in bulk. Naming the columns exactly latitude and longitude (lowercase, no abbreviations) also helps My Maps auto-detect them without manual mapping.
The DMS trap
If your coordinates look like 47°39'31.5"N 117°24'54.8"W, My Maps cannot parse them. Degrees-minutes-seconds is a legacy notation that no modern mapping importer reads. Convert to decimal degrees (47.658750, -117.415222) before import.
The longitude sign trap
A latitude over 90 is your tell-tale that columns are swapped. North American longitudes are negative — -117.4 not 117.4. Strip the negative sign and your Tokyo storefront becomes a pin in Spokane. We have seen entire CSVs that geolocated to Asia because of this single dropped character.
Failure Mode 4: Geocoding Resolves the Wrong Address
This one stings because the import succeeds. The dialog reports "2,000 of 2,000 rows imported." But when you zoom in, roughly one in ten pins lands on the wrong street, the wrong block, or the wrong city. Sometimes the wrong country.
Google's geocoder is opinionated. Given an ambiguous string like 100 Main St, it picks the most popular Main Street on the planet and pins your record there. The geocoder also chokes on:
- Apartment numbers in the address line:
123 Oak Ave Apt 4Bis parsed as the literal phrase, not the building. - Non-USPS formats in the US:
1 Main, NYCresolves less reliably than1 Main St, New York, NY 10001. - Comma-only delimiters across countries:
Calle Mayor 12, Madridworks;Calle Mayor 12 Madridmay not. - Plus codes like
7FG8+VCwork, but only when the entire cell contains the plus code and nothing else.
Fix: Pre-geocode your data. If you have lat/long, supply both columns and skip Google's geocoder entirely — it never overrides explicit coordinates with a guessed address. For address-only datasets, normalize to USPS or postal-service format before export, and include the postal code. Notion's Place property already stores the resolved lat/lon alongside the address, and the Notion Place property guide walks through how to enforce a clean schema upstream.
Failure Mode 5: Hidden Structural Issues
A handful of less-common but lethal problems:
- Merged cells anywhere in the source spreadsheet. The XLSX parser bails on the first merged region.
- Empty header cells. If your CSV's first row has a gap (
,Name,,Lat,Lng), My Maps reads two columns as the same header and discards one. - Stray commas inside fields without quoting.
Smith, Johnin an unquoted field becomes two columns. - Mixed line endings (
\r\non some rows,\non others). The parser can miscount rows. - Hidden sheets and formulas in XLSX. Always download as CSV before importing; XLSX is more brittle than the docs suggest.
The fastest diagnostic: open the file in a text editor and check that every row has the same number of commas. If row 47 has one extra, that is your culprit.
Troubleshooting Table: Symptom → Cause → Fix
| Symptom | Root Cause | Fix |
|---|---|---|
| Import succeeds but pin count is exactly 2,000 | Silent row truncation | Split into ≤2,000-row chunks across layers |
| "Couldn't read this file" on a small CSV | UTF-8 BOM from Excel | Re-export from Google Sheets, or strip BOM with sed |
| Lat/long columns missing from picker | Numeric cells stored as text (quoted) | Reformat as Number, re-export |
| Pins scatter across continents | Longitude sign dropped, or DMS notation | Use decimal, include negative signs |
| ~10% of pins on wrong street | Ambiguous address strings | Add full postal codes; supply lat/long if available |
| KML rejected as "too large" at 6 MB | KML capped at 5 MB unzipped | Convert to CSV (40 MB cap) or minify the KML |
| Some rows missing without warning | Merged cells, mixed line endings, stray commas | Open in text editor, check row width parity |
Headers garbled (Name) | UTF-8 BOM | Save as UTF-8 without BOM |
When the Spreadsheet Workflow Stops Being Worth It
Every fix above is a one-shot patch. Tomorrow your colleague adds 50 rows in Excel, saves with BOM, ships it to you, and you debug encoding for the third time this month. The CSV-to-My-Maps loop is fragile because it is a manual file copy across two incompatible data models — a relational store with typed columns on one side, a render-only feature collection on the other.
The cleaner architecture is to keep your location data in a database that My Maps can read deterministically. Notion's Place property normalizes addresses into structured lat, lon, and formatted address fields at write time, so the data leaving Notion is always My Maps-compatible. Notion to Maps exports directly to CSV with UTF-8 (no BOM), numeric coordinates, and a header row matching My Maps' auto-detection — the entire failure surface in this article disappears. For datasets that outgrow the 2,000-row cap, the same data exports to KML, GPX, or GeoJSON without re-keying.
If you are deciding between formats before you even open My Maps, our KML vs GPX vs GeoJSON vs CSV comparison covers which file type wins for which destination, and our guide to organizing 100+ locations in Notion covers the schema decisions that prevent encoding and geocoding errors before they happen.
Frequently Asked Questions
Why does Google My Maps say "couldn't read this file" on a valid CSV?
The most common cause is a UTF-8 Byte Order Mark (BOM) prepended by Excel's "CSV UTF-8" export. The 3 invisible bytes (EF BB BF) corrupt the first column header. Re-export from Google Sheets, or save as plain "CSV (Comma delimited)" in Excel, and the file will import cleanly.
What is the actual row limit for Google My Maps imports?
2,000 rows per file, per Google's official documentation. Files larger than this are truncated silently — the import appears to succeed but only the first 2,000 rows land in the layer. Split larger datasets across multiple layers (up to 10 per map, 10,000 features total).
Why are my latitude and longitude columns ignored?
Three usual suspects: the cells are formatted as text (wrapped in quotes in the raw CSV), the values use degrees-minutes-seconds instead of decimal degrees, or the longitude sign was stripped. Reformat as numbers, convert to decimal, and confirm North American longitudes are negative.
How do I import more than 2,000 locations into Google My Maps?
You cannot, per layer. Split the data across up to 10 layers in one map (10,000 features max), use the Google Maps JavaScript API, or move to a tool without the cap. Notion paired with Notion to Maps has no row limit and exports back to CSV, KML, GPX, or GeoJSON for downstream tools.
Does Google My Maps support XLSX imports?
Yes, but XLSX is more failure-prone than CSV. Hidden sheets, merged cells, formulas, and number formatting all break imports that work fine when the same data is re-exported as CSV. Always go through CSV when an XLSX import misbehaves.
Take your Notion places anywhere
Connect your Notion database and export to KML, GPX, GeoJSON, or CSV in 30 seconds. Free, no credit card.
Asincrono
Join Asincrono, the Notion newsletter with the best tips, updates, and tools in one email, each week.