Free WMS & WMTS Basemap URLs: The Verified 2026 List
Stop searching for "that NASA link" every time you start a new project.
Most lists like this one are copied from other lists, and nobody ever re-checks the URLs. So before publishing this update we sent a GetCapabilities request to every single endpoint below and recorded the status code, the content type and the response time. Everything on this page was re-tested on 14 July 2026. Anything that did not answer is either fixed or called out in the "Broken links" section at the bottom — including three URLs that appear in almost every "free WMS" list on the internet, one of which was in the previous version of this very post.
Whether you're building a dashboard on Geodocs, styling in QGIS, or developing with MapLibre, these are the endpoints you want.
First: WMS, WMTS or XYZ?
Picking the wrong protocol is the single most common reason a "free basemap" feels unusably slow. The difference is not academic.
WMS renders a custom image for every request. It is slow, because the server draws your map on demand — but it will give you any projection it advertises, any bounding box, any size, and it can answer GetFeatureInfo when a user clicks.
WMTS serves pre-rendered tiles from a fixed grid. It is fast, because every request is a cache hit — but you get only the projections and zoom levels baked into the tile matrix. No arbitrary bounding boxes, no reprojection.
XYZ / TMS is the same idea as WMTS with no discovery document at all. You just need the URL template, and in practice it is Web Mercator only.
The rule of thumb: if a layer sits underneath everything and the user is going to pan and zoom across it, you want WMTS or XYZ. Reach for WMS when you need a specific projection, a specific style, click-to-identify, or a print-resolution image. Pointing a slippy map at a WMS and then wondering why panning stutters is a self-inflicted wound.
Test any endpoint in ten seconds
Before you wire an endpoint into an app, confirm it is alive and see what it actually serves. Check that it responds at all with curl -sS -o /dev/null -w '%{http_code} %{content_type}' "<url>?SERVICE=WMS&REQUEST=GetCapabilities", then list its layers by piping the same request through grep -oP '(?<=<Name>)[^<]+'.
Two traps to know about. A 200 response with a content type of text/html means you have hit an error page, not a service — that is what makes a dead URL look alive. And a 200 is not the only lie: some servers hand back an OGC exception report with a perfectly cheerful status code, so read the body, not just the header.
How to read the endpoints below
A bare service endpoint and a capabilities URL are not the same thing, and mixing them up is why half the "dead" endpoints on the internet are not dead. So every entry below is explicit about which is which.
- QGIS — the bare service URL, ending in
?. This is what the "New WMS/WMTS Connection" dialog in QGIS expects, and what you hand to a MapLibre or Leaflet WMS source. It is not something you can open in a browser. - Browser — the same URL with
SERVICE=WMS&REQUEST=GetCapabilitiesappended. Open it in a tab and you get the service's XML back: proof that it is alive, plus every layer name it publishes. - QGIS + browser — WMTS entries get one line instead of two, because for WMTS both QGIS and your browser want the same thing: the capabilities document itself.
This distinction is not cosmetic. Paste the bare https://nowcoast.noaa.gov/geoserver/ows? into a browser and you get an OGC exception report — and, when the reverse proxy in front of it is having a bad day, a 502 Bad Gateway instead. The service is perfectly healthy. The request was not one. Append the query string and the same endpoint answers in about a second.
Global basemaps
OpenStreetMap as WMS — terrestris
- WMS (QGIS):
https://ows.terrestris.de/osm/service? - WMS (Browser):
https://ows.terrestris.de/osm/service?SERVICE=WMS&REQUEST=GetCapabilities - Format: WMS 1.1.1 / 1.3.0, responds in about two seconds
- Layers:
OSM-WMS,OSM-WMS-no-labels,OSM-Overlay-WMS - Why: The classic.
OSM-WMS-no-labelsis the one you actually want if you are drawing your own labels on top — a detail most lists skip.
OpenStreetMap plus topography — mundialis
- WMS (QGIS):
https://ows.mundialis.de/services/service? - WMS (Browser):
https://ows.mundialis.de/services/service?SERVICE=WMS&REQUEST=GetCapabilities - Format: WMS, responds in about 1.4 seconds
- Layers:
OSM-WMS,OSM-WMS-no-labels,OSM-Overlay-WMS,TOPO-WMS,SRTM30-Colored-Hillshade - Why: A superset of the terrestris service.
TOPO-WMSplusSRTM30-Colored-Hillshadegives you a free global relief basemap with no API key, which is genuinely hard to find elsewhere.
EOX Maps — Sentinel-2 cloudless, terrain, overlays
- WMTS (QGIS + browser):
https://tiles.maps.eox.at/wmts/1.0.0/WMTSCapabilities.xml - WMS (QGIS):
https://tiles.maps.eox.at/wms? - WMS (Browser):
https://tiles.maps.eox.at/wms?SERVICE=WMS&REQUEST=GetCapabilities - Layers:
s2cloudless-2024_3857,s2cloudless-2022_3857,s2cloudless-2020_3857,s2cloudless-2018_3857,terrain-light,bluemarble,streets_3857,overlay_bright,coastline - Why: The best-looking free global imagery mosaic, full stop. Multiple vintages mean you can do a crude before-and-after comparison for free.
terrain-lightis an excellent muted analytical basemap, andoverlay_brightgives you labels on top of imagery. - Watch out: the free tier is fair-use. Do not point a production app with real traffic at it — mirror it, or pay EOX.
USGS National Map
Four separate cached WMTS services, all responding in well under a second. These are the fastest endpoints in this entire list, and they are public domain.
- Topographic (QGIS + browser):
https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/WMTS/1.0.0/WMTSCapabilities.xml - Imagery only (QGIS + browser):
https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/WMTS/1.0.0/WMTSCapabilities.xml - Hydrography (QGIS + browser):
https://basemap.nationalmap.gov/arcgis/rest/services/USGSHydroCached/MapServer/WMTS/1.0.0/WMTSCapabilities.xml - Shaded relief (QGIS + browser):
https://basemap.nationalmap.gov/arcgis/rest/services/USGSShadedReliefOnly/MapServer/WMTS/1.0.0/WMTSCapabilities.xml
The shaded relief and hydrography layers work as transparent overlays on top of anything else.
Satellite and aerial imagery
NASA GIBS — near-real-time global imagery
The URL in every old blog post is dead. https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/wmts.xml still returns HTTP 400. Use these instead:
- WMTS, Web Mercator (QGIS + browser):
https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/1.0.0/WMTSCapabilities.xml - WMTS, Geographic (QGIS + browser):
https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/1.0.0/WMTSCapabilities.xml - WMS (QGIS):
https://gibs.earthdata.nasa.gov/wms/epsg3857/best/wms.cgi? - WMS (Browser):
https://gibs.earthdata.nasa.gov/wms/epsg3857/best/wms.cgi?SERVICE=WMS&REQUEST=GetCapabilities - Why: Over a thousand layers of daily-updated MODIS and VIIRS imagery — fire hotspots, aerosols, sea surface temperature, snow cover. It is time-enabled, so passing
TIME=2026-07-01gets you any date back to 2000. - Watch out: the WMTS capabilities document is 5.6 MB and the WMS one is 2.5 MB. Do not fetch either on every page load. Cache it, or hardcode the handful of layer identifiers you need. This is the single biggest performance mistake people make with GIBS.
USGS NAIP — US high-resolution aerial
- WMS (QGIS):
https://imagery.nationalmap.gov/arcgis/services/USGSNAIPPlus/ImageServer/WMSServer? - WMS (Browser):
https://imagery.nationalmap.gov/arcgis/services/USGSNAIPPlus/ImageServer/WMSServer?SERVICE=WMS&REQUEST=GetCapabilities - Layers:
USGSNAIPPlus,USGSNAIPPlus:NaturalColor - Why: Roughly 0.6 m aerial imagery of the continental US, free and public domain. There is also an NDVI rendering if you want a quick vegetation index without building a raster pipeline.
Digital Earth Africa
- WMS (QGIS):
https://ows.digitalearth.africa/wms? - WMS (Browser):
https://ows.digitalearth.africa/wms?SERVICE=WMS&REQUEST=GetCapabilities - Layers:
gm_s2_annual(Sentinel-2 annual geomedian),crop_mask, plus water observations and coastline change - Why: Analysis-ready Sentinel-2 for the entire African continent, free and with no API key. The annual geomedian is a cloud-free composite and is genuinely the best free imagery available for Africa. It is missing from every other list of this kind.
- Watch out — this one is new. As of 14 July 2026 the service returns HTTP 403 with a
text/htmlbody to any request whose User-Agent containsChrome/. Firefox, Safari, QGIS andcurlall get a clean 200 and a 1.3 MB capabilities document. So the endpoint is healthy, but a browser app opened in Chrome or Edge will be blocked outright. Proxy it from your backend.
Digital Earth Australia
- WMS (QGIS):
https://ows.dea.ga.gov.au/? - WMS (Browser):
https://ows.dea.ga.gov.au/?SERVICE=WMS&REQUEST=GetCapabilities - Why: The same Open Data Cube stack for Australia — Landsat and Sentinel-2 geomedians, water observations from space, intertidal elevation.
- Watch out: the capabilities document is 1.6 MB and takes about six seconds. Cache it.
Terrain and elevation
USGS 3DEP Elevation
- WMS (QGIS):
https://elevation.nationalmap.gov/arcgis/services/3DEPElevation/ImageServer/WMSServer? - WMS (Browser):
https://elevation.nationalmap.gov/arcgis/services/3DEPElevation/ImageServer/WMSServer?SERVICE=WMS&REQUEST=GetCapabilities - Why: Hillshade, slope, aspect and raw elevation for the US, rendered server-side. Because it is an ImageServer, you can request actual elevation values rather than just a picture of them.
- Watch out: it answered in three seconds this time, but it has timed out on us outright on previous runs. Retry logic is not optional here.
GEBCO — global bathymetry and topography
The old URL is dead. The gebco.net/data_and_products/gebco_web_services/... endpoint returns HTTP 404.
- WMS (QGIS):
https://wms.gebco.net/mapserv? - WMS (Browser):
https://wms.gebco.net/mapserv?SERVICE=WMS&REQUEST=GetCapabilities - Layers:
GEBCO_LATEST,GEBCO_LATEST_SUB_ICE_TOPO,GEBCO_Grid - Why: The definitive global seafloor and land elevation grid.
SUB_ICE_TOPOgives you the bedrock beneath Greenland and Antarctica, which is the kind of thing you do not know you need until you do.
EMODnet Bathymetry — European seas
- WMTS (QGIS + browser):
https://tiles.emodnet-bathymetry.eu/wmts/1.0.0/WMTSCapabilities.xml - WMS (QGIS):
https://ows.emodnet-bathymetry.eu/wms? - WMS (Browser):
https://ows.emodnet-bathymetry.eu/wms?SERVICE=WMS&REQUEST=GetCapabilities - Layers:
mean_atlas_land,mean_multicolour,mean_rainbowcolour,coastlines - Why: Far higher resolution than GEBCO in European waters, and the WMTS is fast enough to use as a real interactive basemap — rare for bathymetry.
Weather, hazards and fire
NASA FIRMS — active fires
- Docs (Browser):
https://firms.modaps.eosdis.nasa.gov/mapserver/wms-info/ - Why: Active fire detections from MODIS and VIIRS, updated within about three hours of satellite overpass.
- Watch out: there is no public service URL to paste here, because FIRMS requires a free MAP_KEY embedded in the WMS path itself. Get the key, build the URL from the docs page above, and never put that key in frontend code. Proxy it from your backend, or you are publishing your quota to the world.
NOAA nowCOAST
- WMS (QGIS):
https://nowcoast.noaa.gov/geoserver/ows? - WMS (Browser):
https://nowcoast.noaa.gov/geoserver/ows?SERVICE=WMS&REQUEST=GetCapabilities - Layers:
air_temperature,apparent_temperature,alerts:watches_warnings_advisories,bluetopo:bathymetry, plus radar, surface analysis and coastal forecasts - Why: Live US weather warnings, forecasts and radar as standard WMS. The watches-and-warnings layer is a drop-in severe weather overlay.
- Watch out: this is the endpoint people declare dead most often. The bare URL is a GeoServer service root, not a request — open it in a browser and you get an exception report or a proxy error. With the query string appended it returns a 430 KB capabilities document in about a second.
NEXRAD radar — Iowa State Mesonet
- WMS (QGIS):
https://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0q.cgi? - WMS (Browser):
https://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0q.cgi?SERVICE=WMS&REQUEST=GetCapabilities - Layers:
nexrad-n0q-900913(Web Mercator base reflectivity) - Why: The most reliable free NEXRAD mosaic on the internet. Responds in about a second, needs no key, and is time-enabled so you can animate the last few hours.
DWD — German Weather Service
- WMS (QGIS):
https://maps.dwd.de/geoserver/ows? - WMS (Browser):
https://maps.dwd.de/geoserver/ows?SERVICE=WMS&REQUEST=GetCapabilities - Why: Radar, warnings and full ICON model output for Germany and Europe as open WMS. One of the best national weather services publishing openly.
- Watch out: the capabilities document is around 750 KB and took twenty seconds to arrive. Cache it.
NOAA ENC — electronic navigational charts
- WMS (QGIS):
https://gis.charttools.noaa.gov/arcgis/rest/services/MCS/ENCOnline/MapServer/exts/MaritimeChartService/WMSServer? - WMS (Browser):
https://gis.charttools.noaa.gov/arcgis/rest/services/MCS/ENCOnline/MapServer/exts/MaritimeChartService/WMSServer?SERVICE=WMS&REQUEST=GetCapabilities - Why: Official US nautical charts as WMS, rendered to the S-52 standard. If you are doing anything marine, this beats scanning a paper chart.
Land cover, environment and geology
Corine Land Cover — Europe
- WMS (QGIS):
https://image.discomap.eea.europa.eu/arcgis/services/Corine/CLC2018_WM/MapServer/WMSServer? - WMS (Browser):
https://image.discomap.eea.europa.eu/arcgis/services/Corine/CLC2018_WM/MapServer/WMSServer?SERVICE=WMS&REQUEST=GetCapabilities - Why: The reference land cover classification for Europe, straight from the European Environment Agency.
ESA WorldCover — global, 10 m
- WMS (QGIS):
https://services.terrascope.be/wms/v2? - WMS (Browser):
https://services.terrascope.be/wms/v2?SERVICE=WMS&REQUEST=GetCapabilities - Why: Global 10 m land cover derived from Sentinel-1 and Sentinel-2. The highest-resolution free global land cover that exists.
- Watch out: Terrascope fingerprints its clients. The TLS handshake completes and then the server resets the stream — from
curlover both HTTP/1.1 and HTTP/2, fromwget, and from Node's fetch, with any User-Agent we tried, including a real Chrome one. It is not a User-Agent check and it is not an outage: the same URLs load in QGIS and in a browser. It does mean you cannot health-check this one from a shell script, and a server-side proxy may get reset too. Test it from the client you actually intend to ship.
Marine Regions — VLIZ
- WMS (QGIS):
https://geo.vliz.be/geoserver/wms? - WMS (Browser):
https://geo.vliz.be/geoserver/wms?SERVICE=WMS&REQUEST=GetCapabilities - Why: Authoritative maritime boundaries — exclusive economic zones, territorial seas, IHO sea areas. The canonical answer to "who owns this water".
- Watch out: the capabilities document is 2.7 MB and takes sixteen seconds. Cache it.
OneGeology — global geology
- WMS (QGIS):
http://portal.onegeology.org/OneGeologyGlobal/service/wms? - WMS (Browser):
http://portal.onegeology.org/OneGeologyGlobal/service/wms?SERVICE=WMS&REQUEST=GetCapabilities - Status: broken. The TLS certificate on
portal.onegeology.orgstill does not match the hostname, so every modern client refuses the connection. It is on every list of free WMS services and it will not work in QGIS, in a browser, or in any sane HTTP client today. Do not build on it until they fix their certificate.
National and regional services
All verified live. Same convention as above: the QGIS line is the base URL, the browser line is the full capabilities request. Where a country publishes both protocols, prefer the WMTS.
Europe
France — IGN Géoplateforme. Key layers: ORTHOIMAGERY.ORTHOPHOTOS, GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2, PLANIGN.LIDAR.TERRAIN, PLANIGN.LIDAR.SURSOL. The old `wxs.ign.fr` API-key URLs are retired — this is the replacement, and it needs no key. Nationwide LiDAR terrain and surface models, free. The capabilities document is 2.8 MB, so cache it.
- WMTS (QGIS + browser):
https://data.geopf.fr/wmts?SERVICE=WMTS&REQUEST=GetCapabilities
Germany — BKG TopPlusOpen. Layers: web, web_grau, web_scale. It covers the whole world, not just Germany, and web_grau is a superb grey analytical basemap.
- WMTS (QGIS + browser):
https://sgx.geodatenzentrum.de/wmts_topplus_open/1.0.0/WMTSCapabilities.xml
Netherlands — PDOK. Styles on the background map: standaard, grijs, pastel, water, labels. Aerial imagery is a separate WMS.
- WMTS, background map (QGIS + browser):
https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0?SERVICE=WMTS&REQUEST=GetCapabilities - WMS, aerial (QGIS):
https://service.pdok.nl/hwh/luchtfotorgb/wms/v1_0? - WMS, aerial (Browser):
https://service.pdok.nl/hwh/luchtfotorgb/wms/v1_0?SERVICE=WMS&REQUEST=GetCapabilities
Switzerland — swisstopo. Hundreds of ch.swisstopo.* layers and the gold standard for national cartography. The capabilities document is 2.7 MB, so cache it.
- WMS (QGIS):
https://wms.geo.admin.ch/? - WMS (Browser):
https://wms.geo.admin.ch/?SERVICE=WMS&REQUEST=GetCapabilities
Norway — Kartverket. Layers: topo, topograatone, toporaster, and sjokartraster for nautical charts.
- WMTS (QGIS + browser):
https://cache.kartverket.no/v1/wmts/1.0.0/WMTSCapabilities.xml
Spain — IGN. PNOA aerial imagery and the topographic raster, as two separate services. Both respond in under a second — the fastest national pair in this list.
- WMS, PNOA aerial (QGIS):
https://www.ign.es/wms-inspire/pnoa-ma? - WMS, PNOA aerial (Browser):
https://www.ign.es/wms-inspire/pnoa-ma?SERVICE=WMS&REQUEST=GetCapabilities - WMS, topographic raster (QGIS):
https://www.ign.es/wms-inspire/mapa-raster? - WMS, topographic raster (Browser):
https://www.ign.es/wms-inspire/mapa-raster?SERVICE=WMS&REQUEST=GetCapabilities
Austria — basemap.at. A free national basemap with no key.
- WMTS (QGIS + browser):
https://mapsneu.wien.gv.at/basemapneu/1.0.0/WMTSCapabilities.xml
Belgium — NGI CartoWeb. The official topographic basemap.
- WMS (QGIS):
https://cartoweb.wms.ngi.be/service? - WMS (Browser):
https://cartoweb.wms.ngi.be/service?SERVICE=WMS&REQUEST=GetCapabilities
Italy — Ministero dell'Ambiente. Note the mandatory map= parameter — omit it and you get an error. It is also the one endpoint here whose base URL already carries a query string, so the browser line appends & rather than ?.
- WMS (QGIS):
https://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_12.map - WMS (Browser):
https://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_12.map&SERVICE=WMS&REQUEST=GetCapabilities
United Kingdom — Environment Agency. One-metre LiDAR terrain model for England, free. Ordnance Survey basemaps still require an API key.
- WMS (QGIS):
https://environment.data.gov.uk/spatialdata/lidar-composite-digital-terrain-model-dtm-1m/wms? - WMS (Browser):
https://environment.data.gov.uk/spatialdata/lidar-composite-digital-terrain-model-dtm-1m/wms?SERVICE=WMS&REQUEST=GetCapabilities
Portugal — DGT. National orthophotos.
- WMS (QGIS):
https://cartografia.dgterritorio.gov.pt/ortos2018/service? - WMS (Browser):
https://cartografia.dgterritorio.gov.pt/ortos2018/service?SERVICE=WMS&REQUEST=GetCapabilities
The Americas
United States — USGS and NOAA. See the sections above. It remains the deepest free stack in the world.
Canada — CBMT on GeoGratis. The bilingual Canada Base Map. The WMTS endpoint that circulates in older lists returns HTTP 404 — use the WMS.
- WMS (QGIS):
https://maps.geogratis.gc.ca/wms/CBMT? - WMS (Browser):
https://maps.geogratis.gc.ca/wms/CBMT?SERVICE=WMS&REQUEST=GetCapabilities
Brazil — IBGE. Official boundaries, census data and statistical grids. The capabilities document is over 21 MB and took forty-seven seconds to download in testing. Query specific layers directly and never fetch full capabilities at runtime — this is the one browser line on this page you should think twice before clicking.
- WMS (QGIS):
https://geoservicos.ibge.gov.br/geoserver/wms? - WMS (Browser):
https://geoservicos.ibge.gov.br/geoserver/wms?SERVICE=WMS&REQUEST=GetCapabilities
Brazil — INPE TerraBrasilis. The official Amazon deforestation data, PRODES and DETER. If you are working with the Amazon, this is the source of truth.
- WMS (QGIS):
https://terrabrasilis.dpi.inpe.br/geoserver/ows? - WMS (Browser):
https://terrabrasilis.dpi.inpe.br/geoserver/ows?SERVICE=WMS&REQUEST=GetCapabilities
Argentina — IGN. Layers are prefixed with ign:, such as ign:area_protegida and ign:area_de_montana.
- WMS (QGIS):
https://wms.ign.gob.ar/geoserver/wms? - WMS (Browser):
https://wms.ign.gob.ar/geoserver/wms?SERVICE=WMS&REQUEST=GetCapabilities
Asia-Pacific
Australia — Geoscience Australia. The national topographic map. Capabilities is 1.4 MB and takes about four seconds.
- WMS (QGIS):
https://services.ga.gov.au/gis/services/Topographic_Base_Map/MapServer/WMSServer? - WMS (Browser):
https://services.ga.gov.au/gis/services/Topographic_Base_Map/MapServer/WMSServer?SERVICE=WMS&REQUEST=GetCapabilities
Japan — GSI. This is XYZ rather than WMS, so there is no capabilities document to open — just the template. Alternative styles include pale, blank, relief and seamlessphoto for aerial imagery. Fast and free. Coverage is Japan only: request a tile outside the country and you get an HTTP 404, which is easy to mistake for a dead service.
- XYZ (template):
https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png
Bonus: XYZ tile templates
Not WMS or WMTS, so there is nothing to open in a browser — you paste the template straight into MapLibre or Leaflet. These are plain raster sources and they are fast, and every one of them served a tile in our tests.
- OSM Standard —
https://tile.openstreetmap.org/{z}/{x}/{y}.png— fair-use only. The OSM Foundation explicitly forbids heavy or commercial use. Do not ship a product on this. - OSM Humanitarian —
https://tile-a.openstreetmap.fr/hot/{z}/{x}/{y}.png— high contrast, excellent for field work. Same fair-use caveat. - OpenTopoMap —
https://a.tile.opentopomap.org/{z}/{x}/{y}.png— contours and hillshade. Fair-use. - CARTO Positron —
https://a.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png— a clean grey basemap, free tier with attribution. - Esri World Imagery —
https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}— note the reversed{z}/{y}/{x}order. This trips up everyone exactly once. - OpenSeaMap —
https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png— a transparent nautical marks overlay. Most tiles are nearly empty by design, so a suspiciously small response is not a broken one.
The five things that will actually break your map
Everything above is the easy part. Here is what nobody tells you.
CORS will kill you in the browser, silently. A WMS that works perfectly in QGIS can be completely unusable in a web app, because the desktop client does not care about Access-Control-Allow-Origin and the browser absolutely does. There is no way to fix this from the frontend. Your only option is a server-side proxy. So if you are evaluating an endpoint for a web app, test it from the browser, not from curl — curl will happily tell you everything is fine right up until it isn't. Digital Earth Africa is the inverse of that trap and just as nasty: curl gets a 200, Chrome gets a 403.
Not every service supports your projection. Most web maps are EPSG:3857. Plenty of national services publish only in a local CRS — EPSG:2154 for France, EPSG:25832 for Germany, EPSG:21781 for Switzerland. A WMS can reproject on the fly if it advertises your CRS. A WMTS cannot, ever. Check the advertised CRS and tile matrix sets before you commit.
Capabilities documents are enormous. NASA GIBS is 5.6 MB. IBGE is over 21 MB and took forty-seven seconds. swisstopo and France's Géoplateforme are both around 2.8 MB. If your app fetches capabilities on page load, you have just added ten seconds to your time-to-first-map. Fetch it once, cache the layer list, hardcode what you need.
Free means fair-use, not unlimited. Nearly every endpoint here is a public good funded by a government or a nonprofit. Pointing production traffic at OSM's tile server or EOX's free tier is not clever, it is rude, and you will get blocked. If your app has real users, cache tiles at your own edge.
Attribution is not optional. OSM requires it under ODbL. Copernicus, EOX and the national agencies all require it too. It is a licence condition, not a courtesy. Put it on the map.
And if you let users paste their own WMS URLs
You have just built a server-side request forgery vulnerability. A user-supplied URL that your server fetches on their behalf can be pointed at cloud metadata endpoints, at localhost, or at anything else inside your private network. If you accept arbitrary WMS and WMTS endpoints — as any real GIS platform must — you need to validate the scheme, resolve the hostname, and reject private and link-local address ranges before you make the request, and again after any redirect. We learned this one properly, on our own product.
Broken links you will still find on other lists
- `gibs.earthdata.nasa.gov/wmts/epsg3857/best/wmts.xml` — HTTP 400. Use the
/best/1.0.0/WMTSCapabilities.xmlpath. - `gebco.net/data_and_products/gebco_web_services/...` — HTTP 404. Use
wms.gebco.net/mapserv?. - `portal.onegeology.org/...` — TLS certificate mismatch, rejected by every modern client.
- Canada's `maps.geogratis.gc.ca/wmts/en/1.0.0/WMTSCapabilities.xml` — HTTP 404. Use the CBMT WMS.
- France's `wxs.ign.fr/{key}/...` — retired, replaced by the key-free
data.geopf.fr. - Stadia Maps tiles without a key — HTTP 401. The free tier now requires registration.
And one that is not a broken link at all, though it reads like one: a bare service endpoint with no query string. 502 Bad Gateway, an exception report, a blank page — whatever the server chooses to say, it is saying "that was not a request", not "I am dead". Append SERVICE=WMS&REQUEST=GetCapabilities before you write anything off.
Why we maintain this list
At Geodocs we think GIS should be accessible. Half the reason this post exists is that we needed the list ourselves. Our platform lets teams drop a WMS or WMTS endpoint straight into a project alongside their own uploaded KML, Shapefile and GeoJSON layers, and we got tired of finding out at runtime which URLs had rotted.
If you would rather not hand-manage a pile of capabilities URLs, a proxy for the ones that break CORS, and a tile cache so you do not get rate-limited, that is what Geodocs does. Every endpoint on this page works in it out of the box.
Found a dead link, or an endpoint we should add? Tell us. This list gets re-tested and re-published, not copy-pasted.
Last verified: 14 July 2026.