A lightweight interface to the 'iNaturalist' API (< https://www.inaturalist.org/pages/api+reference>) for downloading observation photos and exporting metadata to CSV. Supports filtering by taxon, place, user, and annotation. Note that downloaded photos retain their original licenses as set by 'iNaturalist' observers; users are responsible for respecting these licenses.
An R package for downloading photos and metadata from iNaturalist via its API. Supports filtering by taxon, place, user, and annotation.
# Install from GitHub
remotes::install_github("andresarb/inatpick")
library(inatpick)
# 0. Find taxon and place IDs by name
inat_search_taxon("Drosera", rank = "genus")
inat_search_place("United Kingdom")
# 1. Fetch observations
obs <- inat_fetch(
taxon_id = 51935, # Drosera genus
place_id = 6857, # United Kingdom
user_login = "andresrb",
annotation = c("green_leaves", "flowers"),
quality_grade = "research",
licensed = TRUE
)
# 2. Download photos and metadata to the same folder
inat_download(obs, out_dir = "drosera_photos", size = "large")
# Download photos only, no metadata
inat_download(obs, out_dir = "drosera_photos", metadata = FALSE)
# 3. Export metadata separately if needed
inat_metadata(obs, path = file.path("drosera_photos", "metadata.csv"))
| Function | Description |
|---|---|
inat_search_taxon() |
Search for a taxon by name and retrieve its ID |
inat_search_place() |
Search for a place by name and retrieve its ID |
inat_fetch() |
Fetch observations from the iNaturalist API |
inat_download() |
Download photos (and optionally metadata) to a local folder |
inat_metadata() |
Export observation metadata to CSV |
inat_annotations |
Table of all available annotation labels and IDs |
inat_search_taxon()name — taxon name to search (common or scientific)rank — filter by taxonomic rank e.g. "genus", "species", "family" (optional)n — maximum number of results to return (default 10)inat_search_place()name — place name to searchn — maximum number of results to return (default 10)inat_fetch()taxon_id — iNaturalist taxon ID (required)place_id — iNaturalist place ID (optional)user_login — iNaturalist username (optional)annotation — filter by one or more annotation labels e.g. "flowers", c("flowers", "green_leaves") (optional)quality_grade — "research", "needs_id", or "any" (default)year / month — filter by observation date (optional)licensed — if TRUE, return only CC-licensed observations (optional)inat_download()out_dir — output folder for photos and metadata (required)size — photo resolution: "square" (75px), "small" (240px), "medium" (500px), "large" (1024px, default), or "original" (full resolution). For research use "large" or "original"; for quick previews use "small" or "medium". Size is appended to the filename (e.g. obs123_456_large.jpg).metadata — if TRUE (default), saves metadata.csv to out_dir automaticallyoverwrite — re-download existing files (default FALSE)inat_metadata()path — output CSV file path (required)extra_cols — additional columns from the API response to includeUse the search functions or find IDs directly in iNaturalist URLs:
inaturalist.org/taxa/51935 → 51935inaturalist.org/places/6857 → 6857inat_annotations in R to see all available optionsinatpick is MIT licensed. However, photos downloaded from iNaturalist retain
their own licenses as set by individual observers (CC0, CC-BY, CC-BY-NC, etc.).
Users are responsible for respecting these licenses when using downloaded images
for research or publication. Use licensed = TRUE in inat_fetch() to restrict
downloads to CC-licensed photos only.
See iNaturalist Terms of Service for more information.
MIT © Andrés Romero-Bravo
This package was developed as a personal project to support biodiversity research using iNaturalist data. It is maintained on a best-effort basis.
For bug reports, feature requests, or general questions, please open an issue on GitHub.
Disclaimer: This package is provided as-is, without warranty of any kind. Users are responsible for complying with iNaturalist's Terms of Service and respecting the licenses of downloaded photos.
This package was developed with the assistance of Claude (Anthropic). All code has been reviewed and tested by the author.