CSV to Map
Two shapes, chosen by what your file holds. A country or state column shades a world outline by value. A latitude and longitude pair plots bubbles whose area, not radius, carries the number. Names that fail to match are listed rather than quietly dropped, and nothing about your file leaves the browser.
Nothing geographic to hand? Try the sample cities file · countries, coordinates, population and revenue in one small table.
Need to tidy the place names first? Open the app
A column of directions is not geography
Start with the thing this page refuses to do, because it is the failure mode I see most often in tools that compete with it. Take a sales file with a region column holding North, South, East and West. Feed it to a mapping tool. Some of them will happily hand you a shaded map. It looks authoritative, it fills a slide, and it is fiction. There is no polygon on Earth called West that corresponds to a sales territory, so whatever got shaded was picked by a name collision or a guess.
This page will not do that. If your Place column resolves to nothing on the map, you are told which values failed, and no shading is invented to fill the gap. A directional region column is a perfectly good category, and it deserves a chart that treats it as one: a bar chart ranks the four cleanly, a treemap shows their shares as area, a pivot crosses them with a second column. All three of those tell the truth. A map of them does not.
The same caution applies more subtly to internal codes. A file with region values like EMEA, APAC and NA describes real geography but not any single polygon, so it will not resolve either. If you need those on a map, expand them into constituent countries first in the app and come back. That is more work than clicking a button, and it produces a map you can defend in a meeting.
Three controls, two modes
There is no chart-type selector here. Which of the two maps you get follows from the columns, so the panel stays short.
- Place. The country or state column, and the switch between the modes. Choose a column and you get a choropleth. Leave it on Use lat/lon columns and the page looks for coordinate columns instead, accepting
latorlatitudepaired withlon,lng,longorlongitude, in any capitalization. - Value. The number behind the shading or the bubble size. Set it to Count rows and the map measures how many records fall in each place, which is what you want for a file of incidents, signups or store locations where every row counts the same.
- Aggregate. Sum, average, count, count distinct, minimum, maximum, median. This decides how several rows for the same country combine. It matters more on a map than most people expect: a sum of revenue per country and an average order value per country produce maps that disagree completely, and both are legitimate answers to different questions.
With neither a Place column nor a coordinate pair, the page stops and explains both routes at once: A map needs either a country or state column under "Place", or a pair of latitude and longitude columns. In coordinate mode, a file where no row carries both numbers stops with No rows carry both a latitude and a longitude.
Worked example: a handful of cities
The sample file carries both routes in one small table, which makes it useful for seeing the two modes side by side:
city,country,lat,lon,population,revenue
Bengaluru,India,12.972,77.594,13193000,482000
Berlin,Germany,52.52,13.405,3645000,331000
Austin,United States of America,30.267,-97.743,964000,288000
Lisbon,Portugal,38.722,-9.139,545000,143000
Toronto,Canada,43.653,-79.383,2794000,402000
Set Place to country and Value to revenue. The panel titles itself revenue by country, kicks with MAP, and captions the picture 8 places · sum of revenue · unmatched names are listed below the map. The world outline appears with the matched countries shaded from a sequential ramp and everything else left in the neutral base color.
Note that the caption promises the unmatched list before you know whether there is one. That is on purpose. A reader glancing at the map should learn, from the caption alone, that this map reports its failures, so an absence of a list means an absence of failures rather than an absence of checking. The sample file uses United States of America in full, but writing USA or US works identically, because the alias table maps the shorthands people actually type onto the names the GeoJSON uses. UK reaches United Kingdom. UAE reaches United Arab Emirates. Czech Republic reaches Czechia. Case is ignored on the final pass, so india resolves as well as India.
Now set Place back to Use lat/lon columns. The same eight cities become bubbles at their coordinates, the title changes to revenue by location, and the caption becomes 8 points · bubble size is revenue. Bengaluru's bubble is larger than Lisbon's by a ratio you can trust, because the radius is set from the square root of the value. If radius tracked the value directly, Bengaluru would be drawn with roughly eleven times the ink for about three times the revenue, and everyone reading the slide would come away with the wrong impression.
Switch Value to population and the picture reorders entirely, because the largest city is not the most valuable one. That gap between a demand map and a revenue map is usually the finding, and having both a foot apart in the same panel is the fastest way I know to spot it.
The outline, and why it is deliberately coarse
The geography comes from a single bundled file, /geo/world-low.json, weighing about 170 KB. It is fetched the first time you need a map and then cached for the session, and it is requested on this page alone. Every other tool on the site loads without paying that cost, which is the reason the map lives on its own page rather than as one option inside a general chart builder.
One in 110 million is a low resolution by cartographic standards, and that is the right call for a chart panel. Country shapes are unmistakable, borders are clean, and small island groups are simplified into single marks. A higher-resolution outline would multiply the download, slow the first render, and spend all of it on coastal detail smaller than one screen pixel. If your work genuinely needs precise boundaries, a browser panel was never the right medium and a GIS tool is.
The important consequence is that this is a world map, defined at country level. Sub-national regions resolve only where the bundled file names them, so plan on countries for reliable results. And because the file lives on this domain, the request that fetches it carries none of your data. There is no tile server watching where you pan and no geocoding endpoint receiving your place names, which is the whole architectural reason address-level mapping is absent rather than merely unimplemented.
Exports
- Download the places. In choropleth mode, two columns of place and aggregated value, sorted largest first, so the ranking behind the shading is legible without squinting at a color ramp. In coordinate mode, three columns of longitude, latitude and value, one row per plotted point.
- Download PNG. Two-times density on the panel's own background, so the neutral landmass does not vanish against a dark slide.
- Download SVG. Real vector coastlines. Prefer this for anything printed or projected, since borders are the first detail to go soft when a raster map is enlarged.
- Copy image. The PNG onto the clipboard, straight into a document or a message with no file on disk.
For a map that lives on a web page, the embed builder packs the values and the configuration into an iframe URL, and the embedded page fetches the same static outline. Nothing about your rows is stored on a server at any point.
What this page will not do
Maps attract more wishful thinking than any other chart, so here are the real boundaries:
- No geocoding. Addresses, postcodes and city names without coordinates cannot be placed, because turning text into a point requires a service and a service requires sending your rows to it.
- No basemap tiles. There are no roads, no terrain and no satellite imagery. A bundled outline and your data, nothing else fetched from anywhere.
- No pan or zoom into a region. The world outline is drawn to fit the panel. For a single-country view at close range, a GIS tool is the honest recommendation.
- No fabricated geography. Directional regions, internal territory codes and made-up zone names resolve to nothing, and you get the list rather than a plausible-looking map.
- No filtering. Every row is grouped or plotted. Filter first in the app, or trim the file with the CSV splitter.
- A header row is required, and coordinate mode needs recognizable column names. A latitude column called
y_coordwill not be found; rename it tolatand it will.
Comma, semicolon, tab and pipe delimited files parse without configuration, so a block of spreadsheet cells works in the paste tab. Workbooks and JSON arrive through excel-to-chart and json-to-chart.
Frequently Asked Questions
What kinds of map can this page draw?
Two, and it picks between them from what your file contains. If you point Place at a country or state column, you get a choropleth: each matched region is shaded according to its aggregated value against a bundled world outline. If your file instead has a pair of latitude and longitude columns, you get bubbles at those coordinates, one per row. There is no third mode. Postcodes, addresses and street-level data all need a geocoder, and this page has none because a geocoder means sending your rows to somebody's server.
Why are the bubbles sized by the square root of the value?
So that area encodes magnitude rather than radius. If radius scaled with the value, a city worth four times another would be drawn with sixteen times the ink, and every reader would overstate the difference, because eyes judge the blob and not the line from its center. Taking the square root before setting the radius makes the visible area proportional to the number. It is a small piece of arithmetic that decides whether a map is informative or merely dramatic.
How are place names matched to the map?
Against the names in the bundled GeoJSON, in three passes. An exact match wins first. Then a small alias table handles the everyday shorthands people actually type: USA, US and United States all reach United States of America, UK and Great Britain reach United Kingdom, UAE reaches United Arab Emirates, and there are entries for Czechia, Ivory Coast, the DRC and a handful of others the file abbreviates. Last comes a case-insensitive comparison, so india matches India. Anything still unmatched is reported.
What happens to place names that do not match?
They are listed underneath the map, and the caption says so in advance with the phrase unmatched names are listed below the map. This is the behavior I care most about on this page. A map that quietly omits the fifteen rows it could not resolve looks complete and is wrong, and you have no way of knowing from the picture. Seeing the actual unmatched strings usually tells you the cause in a second, since it is almost always a trailing space, an internal country code, or a regional spelling.
Can it map a column of North, South, East and West?
No, and it will say so rather than invent something. A sales region called West is not a place on the globe. It has no boundary, no coordinates and no entry in any GeoJSON, and shading a chunk of the western hemisphere because a column said West would be a fabrication dressed as analysis. Competing tools do exactly this, which is worth knowing when you see a suspiciously tidy map of somebody's internal territories. Those columns belong in a bar chart, a treemap or a pivot, where a category is allowed to just be a category.
How big is the map outline, and when is it downloaded?
It is a low-resolution world outline at /geo/world-low.json, roughly 170 KB, and it is fetched only on this page and only once per session. No other tool on the site pays for it. Low resolution is a deliberate choice: at the size a browser panel gives you, a high-detail coastline costs megabytes to render pixels nobody can see. Country shapes are recognizable, small islands are simplified, and the file is cached after the first load.
Does my data leave the browser to be mapped?
No. The only network request this page makes is for the map outline itself, which is a static file on this domain and carries nothing of yours in the request. Your rows are parsed, grouped and matched entirely in the tab. There is no geocoding service, no tile server and no analytics call carrying coordinates, which is exactly why address-level mapping is not offered here.
Can I export what the map shows?
Yes. Download the places writes a CSV of the place name and its aggregated value in choropleth mode, sorted largest first, and longitude, latitude and value in coordinate mode. PNG and SVG exports of the picture sit alongside it, and the SVG is worth preferring for anything printed, because coastlines are the first thing to go soft when a raster is scaled up.
Related
Put your places on the map
Drop the CSV, name a country column or a coordinate pair, read what did not match. No sign-up, no upload, no geocoder.
Back to the map maker