iNaturalist Open Range Map Dataset

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.

Citing the Dataset

iNaturalist. (). iNaturalist Open Range Map Dataset . Available at: https://www.inaturalist.org. Accessed .

📧 Questions? Contact us at: [email protected]

Example range map for American Pika.

Bulk Downloading Ranges

Collections of ranges are available in Geopackage (.gpkg) format, grouped taxonomically. Each collection contains up to 5,000 individual ranges ordered by taxon_id.

Birds

Birds

Mammals

Mammals

Reptiles

Reptiles

Amphibians

Amphibians

Fishes

Fishes

Other Animals.

Other Animals

Mollusks

Mollusks

Arachnids

Arachnids

Insects

Insects

Plants

Plants

Fungi

Fungi

Protozoans

Protozoans

Chromista

Chromista


Downloading individual Ranges

Individual range maps in GeoJSON format can be downloaded from Taxon Pages.

  • If a range map is available, it will appear on the Map labeled Expected Nearby Map. Click the link.
  • ⚠️ Do not confuse it with the Range layer (hand-drawn maps uploaded by the community).
  • From the Geomodel Predictions page and select Download Expected Nearby Map as GeoJSON.

Methods

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:

  • Training Data: The model is trained on iNaturalist observations and elevation data, with a minimum of ~100 data points per taxon.
  • Prediction Grid: Ranges are rendered using the H3-4 grid system.
  • Available Formats: Maps are published in GeoJSON and Geopackage (.gpkg) formats.

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.


Tutorials

Mapping a GeoJSON in R

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)

Mapping from a Geopackage in R

In this tutorial, we'll plot two amphibian ranges from a single Geopackage. First load in the same libraries and boundaries as above:
 

# 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)),
)


Mapping a GeoJSON in QGIS

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.



Mapping from a Geopackage in QGIS

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.



Downloading older versions

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

Revised on September 17, 2026 01:51 AM by loarie