inatpick provides a simple workflow for downloading
photos and metadata from iNaturalist via its API. The main
functions are:
| Function | Description |
|---|---|
inat_search_taxon() |
Find a taxon ID by name |
inat_search_place() |
Find a place ID by name |
inat_fetch() |
Fetch observations from the API |
inat_download() |
Download photos and metadata to a local folder |
inat_metadata() |
Export observation metadata to CSV |
In this example we download research-grade, CC-licensed observations of sundews (Drosera genus) recorded in the United Kingdom by iNaturalist user andresrb, filtering for observations annotated with green leaves or open flowers.
Search by name to find the iNaturalist IDs. Use the rank
argument to filter results to a specific taxonomic level:
Fetch research-grade, CC-licensed observations with multiple annotations. Each annotation is fetched separately and results are combined automatically, with duplicates removed:
inat_download() requires an out_dir — here
we use a folder in the working directory, but tempdir()
works too for a temporary location. By default it also saves a
metadata.csv to the same folder. The size
argument controls resolution:
| Size | Resolution | Best for |
|---|---|---|
"square" |
75px | thumbnails |
"small" |
240px | quick preview |
"medium" |
500px | general use |
"large" |
1024px | research (default) |
"original" |
full | publication |
Files are named
obs{observation_id}_{photo_id}_{size}.jpg.
Already-downloaded files are skipped by default
(overwrite = FALSE).
To download photos only without metadata:
Use the search functions or find IDs directly in iNaturalist URLs:
inaturalist.org/taxa/51935-Drosera →
51935inaturalist.org/observations?place_id=6857 →
6857# Research-grade only, flowering, in July
obs_july <- inat_fetch(
taxon_id = 51935,
place_id = 6857,
annotation = "flowers",
quality_grade = "research",
month = 7
)
# All observations worldwide — use with caution for common taxa
obs_world <- inat_fetch(taxon_id = 51935)Photos downloaded from iNaturalist retain their original licenses as
set by individual observers (CC0, CC-BY, CC-BY-NC, etc.). Use
licensed = TRUE in inat_fetch() to restrict to
CC-licensed photos only. Always credit the observer and respect the
license terms when using images in research or publication.
See iNaturalist Terms of Service for more information.