CSV to Map
Paste, upload, or drag-drop a spreadsheet of lat/lng data and get an interactive map in seconds. Auto-detects columns, supports up to 5,000 rows, colors points by any category column with a legend, shows every CSV field in a click-popup, and exports clean GeoJSON or KML. Free, no sign-up.
Why this exists — better than free competitors, no account like paid ones
Most free CSV-to-map tools online either gate behind a Google account (Google My Maps), cap at 250 rows on the free tier (BatchGeo, Maptive), or are too basic to be useful (mapcustomizer drops pins but cannot color-categorize and cannot export GeoJSON). Paid tools start at $25/month for individual use.
We built this for the everyday case: you have a spreadsheet with lat/lng, you want to see it on a map, and you want to share or export the result. 5,000 rows is a lot— sufficient for most customer lists, store locators, listing inventories, and field-data visualizations. Color by column is the headline differentiator vs free competitors. Every CSV field appears on click, not just the first three. And it is genuinely free — no watermark, no rate limit, no sign-up.
How to convert a CSV to a map
Five steps. The defaults handle the most common case (lat/lng/name/category) automatically.
- Paste, upload, or drag-drop your CSV. Paste the CSV text directly into the textarea, click "Upload .csv" to pick a local file, or drag a .csv / .tsv / .txt file onto the textarea area. Up to 5,000 rows. Comma, semicolon, or tab delimiters are auto-detected. The first row should be your header.
- Confirm the column mapping. The tool auto-detects which columns hold latitude and longitude — first by header name (lat, latitude, lng, lon, longitude…) and then by scanning numeric ranges. If the auto-detection is wrong, override via the dropdowns. The preview table below highlights your picks (green = lat/lng, yellow = label, purple = color).
- Pick a label column (optional). Choose any column to act as the marker title — the bold heading shown when you click a marker. Common picks: name, title, address, place, city. If you skip this, the popup falls back to the row number.
- Color by category (optional). Pick a "Color by column" — every unique value in that column gets a distinct color from a 12-color palette, with a legend below the map. Use it for categorical data: country, region, type, status, segment. For a single uniform color, leave it blank and pick from the swatches.
- Click any point — see all CSV columns. Markers are interactive. Click any one and a popup opens with every column from your CSV (up to 12 fields shown). Pan and zoom; the map auto-frames to fit all your points on first render. Export to GeoJSON or KML when you’re ready.
What people use this tool for
Seven recurring patterns we see in the analytics.
Customer / store locator visualizations
Sales teams export a list of customers from a CRM, drop the CSV here, and see every customer on a map within seconds. Color by sales region or account tier. Click any pin to see contact details, last order date, lifetime value — every CSV column appears in the popup. Works for hundreds or thousands of accounts.
Real estate listing maps
Drop a CSV of listings (lat, lng, price, beds, baths, address) and get an interactive map. Color by price tier or status (active / pending / sold). Buyers and agents click any pin to see all listing fields. Export to GeoJSON for embedding in a real estate website.
Field research and sample-site visualization
Researchers collecting GPS-stamped observations (water quality, wildlife sightings, archaeology finds, soil samples) drop their data here for instant visualization. Color by sample type or measured value tier. Each click reveals the full record with date, observer, and notes.
Event venue and tour-stop maps
Touring artists, conference organizers, and event planners drop a CSV of venues and see every stop on a map. Color by date range or venue type. Share the map by exporting to KML and embedding in Google My Maps, or use the GeoJSON export with a custom map on your website.
School, hospital, and government facility locators
Government open-data portals publish CSV lists of facilities (schools, hospitals, fire stations, polling places). Drop the CSV here for a quick interactive view. Color by type or district. Share the URL or export the GeoJSON to embed in a public-facing dashboard.
Employee / remote-team distribution maps
HR exports a CSV of employee home cities (lat, lng from a geocoding step) and sees the global team distribution. Color by department or office. Useful for planning meetups, time-zone allocation, and benefits geography. The full employee record appears on click — keep PII export discipline in mind.
Shipment, delivery, and logistics tracking
Logistics teams export a CSV of in-transit shipments (lat, lng of last GPS ping, status, cargo) and see the network at a glance. Color by status (delivered / in-transit / delayed). The export to GeoJSON drops directly into routing software for optimization.
CSV format — which columns the tool looks for
The tool auto-detects column roles by header name (case-insensitive). If your headers do not match these names, override the mapping via the dropdowns. The first row of your CSV should be the header. Quoted fields with embedded commas / newlines / escaped quotes are parsed correctly.
| Column role | Headers we look for | Notes |
|---|---|---|
| Latitude | lat, latitude, y, lat_dd, lat_dec, latitud | Decimal degrees -90 to 90. Required. |
| Longitude | lng, lon, long, longitude, x, lng_dd, lon_dec, longitud | Decimal degrees -180 to 180. Required. |
| Label | name, label, title, place, location, description, place_name, city | Optional. Shown as the popup heading. |
| Color | Any column you pick (manual selection) | Optional. Each unique value gets a distinct palette color. |
| Other columns | Any header — kept as-is | All other columns are preserved and shown in the popup. |
Sample CSV format
name,lat,lng,category,population Tokyo,35.6762,139.6503,Asia,37400000 New York,40.7128,-74.006,North America,8336000 London,51.5074,-0.1278,Europe,9540000
Two export formats — and which to use
Both exports preserve every column from your original CSV.
| Format | Size | Opens in | Best for |
|---|---|---|---|
| GeoJSON | ~150 bytes per row + all CSV fields as properties | QGIS, Mapbox, Leaflet, ArcGIS, geojson.io, our other tools | Web mapping, GIS workflows, custom map embeds. |
| KML | ~200 bytes per row + all CSV fields in description | Google Earth, Google My Maps, Gaia GPS, AllTrails, CalTopo | Desktop / mobile mapping apps that natively read KML. |
How the tool actually works
1. CSV parsing
We use a hand-rolled streaming parser that handles quoted fields with embedded commas, embedded newlines, escaped double-quotes (""), and the UTF-8 Byte Order Mark (BOM) that Excel sometimes prepends. Delimiter is auto-detected by counting ,, ;, and tab characters in the first 4KB of input.
2. Column auto-detection
Two passes. First pass: match header names against a list of common synonyms (lat, latitude, y, lat_dd / lng, lon, longitude, x, lng_dd / etc.). Second pass: for un-detected columns, scan the first 100 rows of each numeric column. Columns whose 85%+ values fall in [-90, 90] are lat candidates; in [-180, 180] are lng candidates. The winner is picked with preference for the column with the more constrained range.
3. Map rendering — WebGL circles
Points render as a MapLibre GL JS circle layer on a GeoJSON source. WebGL renders thousands of circles per frame at 60 FPS — the bottleneck is parsing, not drawing. Circle radius scales with zoom (smaller at world view, larger when zoomed in) so nearby points stay readable at any scale.
4. Click-to-popup
A click handler on the circle layer reads the clicked feature’s properties (which include every original CSV column) and builds a popup with a two-column key/value table. Up to 12 fields are shown; the rest are summarized at the bottom. The popup auto-positions with offset above the clicked point.
5. Color assignment
For categorical color: the tool finds every unique value in your chosen column, assigns each value a color from a 12-color palette in insertion order, and renders each point in its category color via a feature property (__color) read by the circle layer’s paint expression. The legend below the map enumerates the assignment.
6. Exports
GeoJSON wraps the points in a FeatureCollection, with every original CSV column preserved as a feature property. KML wraps each point in a Placemark with the label as name and the full column dump in description. All exports run client-side as Blob downloads — no upload, no server.
SimpleMapLab vs other CSV-to-map tools
Honest comparison. Each tool wins different scenarios — this is a feature checklist, not a value judgement.
| Feature | SimpleMapLab | Google My Maps | BatchGeo | mapcustomizer | Mapping APIs |
|---|---|---|---|---|---|
| Free, no sign-up | ✓ | ✗ (Google account) | Free tier 250 rows | ✓ | ✓ |
| Up to 5,000 rows free | ✓ | ✓ (2,000) | 250 free, more $$ | Limited | API only |
| Drag-and-drop upload | ✓ | Limited | ✓ | ✗ | ✗ |
| Smart column auto-detect | ✓ | Limited | ✓ | ✗ | ✗ |
| Color-by-column (categorical) | ✓ | Limited | ✓ | Limited | ✓ |
| Auto legend | ✓ | ✗ | ✓ | ✗ | ✗ |
| Click marker → all CSV columns in popup | ✓ | ✓ | ✓ | Limited | ✓ |
| Export GeoJSON | ✓ | Limited | Limited | ✗ | API only |
| Export KML | ✓ | ✓ | ✓ | ✓ | API only |
| WebGL rendering for 5,000 points | ✓ | Limited | ✓ (paid) | ✗ | ✗ |
| Mobile-first interface | ✓ | Partial | Partial | Partial | ✗ |
| No watermark, no rate limit | ✓ | ✓ | Free tier limited | Some ads | API key required |
Tips for clean CSV-to-map results
- Always include a header row. The first line should be the column names. Without it the tool will treat your first data row as headers and skip it.
- Use decimal degrees, not DMS.Lat 40.7128, not 40°42′46″N. If your data is in DMS format, use our GPS Coordinate Converter to bulk-convert.
- Decimal separator is a period (.), not a comma. Some European exports use comma decimal — switch the locale in your spreadsheet before exporting.
- Watch for swapped lat/lng. If your map looks rotated 90°, the columns may be swapped — use the dropdown to flip them.
- Quote fields with embedded commas. A label like "Smith, John" needs to be wrapped in double-quotes in the CSV.
- Strip leading/trailing whitespace. The parser does it for headers but not for data values, since data may contain meaningful spaces.
Related tools and resources
For converting addresses to lat/lng before mapping (so this tool can plot them): Address to Coordinates. For mapping a list of US ZIP codes specifically: Map with ZIP Codes. For a county-level choropleth from a CSV of FIPS codes + values: Map with Counties. For dropping individual pins by hand (no CSV needed): Pin Drop Map. For converting between coordinate formats: GPS Coordinate Converter. For drawing on top of a map: Map Drawer.
Frequently asked questions
CSV parsing: hand-rolled RFC 4180–compliant streaming parser (handles quoted fields, embedded newlines, escaped quotes, BOM). Delimiter detection: count of , / ; / tab in first 4KB. Column auto-detection: header-name match against a synonym list, then numeric-range scan (85% threshold) for un-matched columns. Map basemap: OpenFreeMap Liberty vector tiles. Marker rendering: MapLibre GL JS circle layer (WebGL) on a GeoJSON source, with zoom-interpolated radius and per-feature color. Color palette: 12-color categorical, cycled for groups beyond 12 unique values. Exports: GeoJSON RFC 7946 with original CSV fields as feature properties; KML 2.2 with label as name and field dump as description. All processing runs client-side; your data never leaves your device.
More SimpleMapLab tools
Drop pins by hand with notes, colors, and shareable URLs.
Plot a list of US ZIP codes on a map. Heat / dot / territory modes.
Choropleth across 3,132 US counties from CSV of FIPS or names + values.
Convert any address (or batch CSV) to lat/lng before mapping.