The iNaturalist Open Range Map Dataset consists of range maps modeled from iNaturalist data and published under the CC-BY license. The dataset was first released on February 25, 2025 and is updated approximately monthly as new observations are added and the model improves.
iNaturalist. (). iNaturalist Open Range Map Dataset . Available at: https://www.inaturalist.org. Accessed .
📧 Questions? Contact us at: [email protected]
Collections of ranges are available in Geopackage (.gpkg) format, grouped taxonomically. Each collection contains up to 5,000 individual ranges ordered by taxon_id.
Individual range maps in GeoJSON format can be downloaded from Taxon Pages.


These maps are generated from the iNaturalist Geomodel, an implementation of the model described in:
Cole E, Van Horn G, Lange C, Shepard A, Leary P, Perona P, Loarie S, Mac Aodha O. (2023). Spatial implicit neural representations for global-scale species mapping. International Conference on Machine Learning. PMLR. 📎View Paper
Implementation details include:
The Geomodel works by jointly estimating the distributions of species from the iNaturalist observation dataset. We thus expect distributions to be more certain in places with a higher observation density. The map below shows observation density with white areas having no observations, yellow areas having less than 100, and red areas 100+. We expect the accuracy of these ranges to vary accordingly.
This tutorial will explore mapping a single taxon in R. To start, launch R and make sure you have the following packages:
# Install necessary packages if not already installed
install.packages("sf")
install.packages("rnaturalearth")
install.packages("rnaturalearthdata")
install.packages("ggplot2")
Next, load in these libraries and country boundaries
# Load libraries
library(sf)
library(ggplot2)
library(rnaturalearth)
library(rnaturalearthdata)
# Load world country boundaries
world <- ne_countries(scale = "medium", returnclass = "sf")
Now, lets load in the GeoJSON range for American Pika. As explained above, you can download GeoJSONs from the taxon page. But since they are labeled by the iNaturalist taxon_id you can also fetch them dynamically if you know the taxon_id (this is easiest to find from the URL for a taxon page - e.g. https://www.inaturalist.org/taxa/43188-Ochotona-princeps) and use it to construct a URL for the GeoJSON follows:
# Read GeoJSON data
geojson_data <- st_read("https://inaturalist-open-data.s3.us-east-1.amazonaws.com/geomodel/geojsons/latest/43188.geojson")
# Inspect the file
print(geojson_data)
Printing outputs the following metadata:
Simple feature collection with 1 feature and 7 fields
Geometry Type
MULTIPOLYGON
Dimension
XY
Bounding Box
xmin: -127.998, ymin: 33.75794, xmax: -104.7408, ymax: 58.35814
Geodetic CRS
WGS 84
Taxon ID
43188
Parent Taxon ID
1431517
Name
Ochotona princeps
Rank
Species
Iconic Taxon ID
40151
Iconic Taxon Name
Mammalia
Geomodel Version
2.20
Geometry
MULTIPOLYGON (((-127.7682 5...
Next make a map figure.
# Plot
ggplot() +
geom_sf(data = world, fill = "white", color = "black", size = 0.3) + # Country borders in black
geom_sf(data = geojson_data, fill = "orange", color = "orange", alpha = 0.7) + # GeoJSON data in orange
theme_minimal() +
theme(axis.text = element_blank(), axis.ticks = element_blank()) +
labs(title = geojson_data$name,
subtitle = "Orange: iNaturalist Open Range Map | Black: Country Borders")
You can also render the range in a simple Leaflet map in your browser (like the one at the top of this page) by installing this package:
install.packages("leaflet")
And then doing the following:
# Load libraries
library(leaflet)
# Plot
leaflet() %>%
addTiles() %>%
addPolygons(data = geojson_data, color = "orange", weight = 1, fillOpacity = 0.75)
# Load libraries
library(sf)
library(ggplot2)
library(rnaturalearth)
library(rnaturalearthdata)
# Load world country boundaries
world <- ne_countries(scale = "medium", returnclass = "sf")
Now load in the Amphibia Geopackage and code in the names of the species you want to map.
# Read the Amphibia Geopackage
gpkg_path <- "https://inaturalist-open-data.s3.us-east-1.amazonaws.com/geomodel/geopackages/latest/iNaturalist_geomodel_Amphibia.gpkg"
amphibia_data <- st_read(gpkg_path) # Directly read the only available layer
# Define the species name to select
species_one <- "Notophthalmus viridescens"
species_two <- "Rana temporaria"
feature_one <- amphibia_data[amphibia_data$name == species_one, ]
feature_two <- amphibia_data[amphibia_data$name == species_two, ]
Now plot the two ranges on the same map:
# Plot the selected species range
ggplot() +
geom_sf(data = world, fill = "white", color = "black", size = 0.3) + # Country borders
geom_sf(data = feature_one, fill = "orange", color = "orange", alpha = 0.7) + # Notophthalmus viridescens range
geom_sf(data = feature_two, fill = "purple", color = "purple", alpha = 0.7) + # Rana temporaria range
theme_minimal() +
theme(axis.text = element_blank(), axis.ticks = element_blank()) +
labs(
title = "Plotting multiple ranges",
subtitle = paste(paste("Orange:", species_one),paste("Purple:", species_two)),
)
Start by launching QGIS and country boundaries from Natural Earth.
Next, download a specific GeoJSON as described above. We're going with Spotted Paca.
Now drag the unzipped country shapefile and the Spotted Paca GeoJSON into QGIS. In the Browser Tab you can drag to reorder the layers or launch the Layer Properties - Sybology tab by clicking the colored rectangles. From there, you can style the layers.
As in the previous tutorial, launch QGIS and load in the countries shapefile. This time, instead of a single GeoJSON drag in the a Geopackage - we're using the Amphibian geopackage - and adjust the styles as needed.
Right click on the Geopackage in the Browser Tab and click Open Attribute Table. Here, you can explore the individual features.
Any features you select will be reflected on the map.
This is the first version of the dataset but we expect to continue to update it roughly monthly. The links above will download latest version of the model, but to explicitly download older versions, replace latest with the model version (e.g., 2.20) in the URLs such as:
https://inaturalist-open-data.s3.us-east-1.amazonaws.com/geomodel/geopackages/2.20/iNaturalist_geomodel_Aves_1.gpkg
instead of
https://inaturalist-open-data.s3.us-east-1.amazonaws.com/geomodel/geopackages/latest/iNaturalist_geomodel_Aves_1.gpkg
or
https://inaturalist-open-data.s3.us-east-1.amazonaws.com/geomodel/geojsons/2.20/43188.geojson
instead of
https://inaturalist-open-data.s3.us-east-1.amazonaws.com/geomodel/geojsons/latest/43188.geojson