Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

iNaturalist Scraper — Observations, Taxa & Species Occurrence Data (No API Key)

Apify Actor No API key Pay per result Biodiversity Export

Extract biodiversity and species occurrence data from iNaturalist at scale — filter by species, taxon, place or free-text keyword and pull research-grade wildlife observations with GPS coordinates, photos, observer, quality grade and Creative Commons license, in clean structured JSON. No API key, no login, no registration required. A single run can collect thousands of georeferenced records across any group of life — birds, mammals, insects, plants, fungi and more.

This is a turnkey iNaturalist data export tool for ecologists, conservation teams and biodiversity informatics. Point it at a taxon (Panthera leo), a place, or a keyword, choose your quality grade, and export thousands of species occurrence records to JSON, CSV or Excel — ready for distribution modeling, habitat analysis, GIS pipelines or a species checklist app.

This repository is documentation only. The scraper itself runs on the Apify platform — there is no source code here. ▶️ Run it on Apify »


✨ What you get

Every run returns one row per observation (or taxon) with clean, structured fields, exportable to JSON, CSV, Excel, JSONL or XML.

  • 🔑 Completely keyless — no registration, account or API key required.
  • 🧭 Three modes — search observations, browse the taxa / species catalog, or fetch a single observation by ID.
  • 🦅 Any group of life — mammals, birds, reptiles, amphibians, fish, molluscs, arachnids, insects, plants, fungi and more.
  • 🌍 Geographic filtering — restrict to a country or region with a place ID, and get GPS latitude/longitude plus positional accuracy per record.
  • ✅ Quality grades — filter to research-grade (verified), needs-ID or casual observations.
  • 🖼️ Photos & attribution — first-photo URL, observer username and the Creative Commons license code for every record.
  • 📦 Bulk pagination — pull up to 10,000 records per run with automatic paging.

💡 Use cases

  • Species distribution mapping — download all research-grade lion (Panthera leo) observations across a region to map current range and density hotspots.
  • Protected-area checklists — extract observations by place ID for a national park to power a visitor species checklist app.
  • Taxonomy lookups — search the taxa catalog for all Panthera species to get scientific names, ranks, photos and observation counts.
  • Pollinator & invasion monitoring — pull recent insect observations by keyword to track pollinator activity or invasion fronts.
  • Biodiversity ML datasets — assemble georeferenced species occurrence data for machine learning, phylogenetics or ecological modeling.
  • Species galleries & alerts — fetch individual observation details, including photos, for a curated gallery or a species-alert system.
  • Conservation reporting — capture new research-grade submissions on a schedule for ongoing species monitoring.

🚀 Quick start

Run this Actor from the Apify Console, the CLI, the API, or the official JavaScript / Python clients. Leave everything empty to get the most recent research-grade observations.

1. Apify Console (no code)

  1. Open the iNaturalist Scraper on Apify.
  2. Click Try for free. Leave the input empty for recent research-grade observations, or set a taxonName / query and pick a mode.
  3. Click Start, then open the Output tab and download as CSV, JSON or Excel.

2. Apify CLI

npm install -g apify-cli
apify login
apify call logiover/inaturalist-scraper --input '{
  "mode": "observations",
  "taxonName": "Panthera leo",
  "qualityGrade": "research",
  "maxResults": 500
}'

3. API / cURL

curl -X POST "https://api.apify.com/v2/acts/logiover~inaturalist-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "observations",
    "taxonName": "Aquila chrysaetos",
    "qualityGrade": "research",
    "maxResults": 500
  }'

4. JavaScript (apify-client)

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('logiover/inaturalist-scraper').call({
  mode: 'observations',
  taxonName: 'Panthera leo',
  qualityGrade: 'research',
  maxResults: 500,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

5. Python (apify-client)

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("logiover/inaturalist-scraper").call(run_input={
    "mode": "observations",
    "taxonName": "Panthera leo",
    "qualityGrade": "research",
    "maxResults": 500,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

More detailed, copy-pasteable recipes live in examples/.

📥 Input

All fields are optional — leave everything empty for the most recent research-grade observations.

Field Type Description
mode string (dropdown) observations (search observations), taxa (search the species catalog), or observationDetail (single observation by ID). Default observations.
query string Free-text search term (e.g. lion, eagle). Used in observations and taxa modes.
iconicTaxon string (dropdown) Restrict to a major group of life — Mammalia, Aves, Reptilia, Amphibia, Actinopterygii, Mollusca, Arachnida, Insecta, Plantae, Fungi, and more.
taxonName string Scientific or common name at ANY rank — species (Panthera leo), genus (Panthera), family, order, or class (Mammalia).
placeId integer Place ID to filter observations geographically (e.g. 1 = USA, 6986 = Kenya, 7082 = Germany).
qualityGrade string (dropdown) research (verified), needs_id, casual, or empty for all. Default research.
observationId integer For observationDetail mode — the specific observation ID to fetch.
maxResults integer Maximum records to scrape (1–10,000). Default 200.
proxyConfig object Optional proxy configuration.

Example — full input

{
  "mode": "observations",
  "taxonName": "Aquila chrysaetos",
  "placeId": 1,
  "qualityGrade": "research",
  "maxResults": 1000
}

Example — species catalog lookup

{
  "mode": "taxa",
  "query": "Panthera",
  "maxResults": 50
}

📤 Output

One row per observation (or taxon). Here is a sample record:

{
  "id": 987654321,
  "speciesGuess": "Golden Eagle",
  "commonName": "Golden Eagle",
  "taxonName": "Aquila chrysaetos",
  "taxonId": 5305,
  "taxonRank": "species",
  "iconicTaxon": "Aves",
  "observedOn": "2024-06-01",
  "placeGuess": "Rocky Mountain National Park, Colorado, USA",
  "latitude": 40.3428,
  "longitude": -105.6836,
  "positionalAccuracy": 25,
  "user": "raptor_watcher",
  "qualityGrade": "research",
  "numIdentificationAgreements": 3,
  "photoUrl": "https://…/photos/99887/medium.jpg",
  "uri": "https://www.inaturalist.org/observations/987654321",
  "license": "cc-by-nc"
}
Field Description
id Observation (or taxon) numeric ID
speciesGuess Observer's species guess
commonName Preferred common name of the taxon
taxonName Scientific name of the identified taxon
taxonId Taxon numeric ID
taxonRank Taxonomic rank (species, genus, family, etc.)
iconicTaxon Major group (Mammalia, Aves, Plantae, …)
observedOn Date the organism was observed
placeGuess Human-readable place description
latitude / longitude Decimal GPS coordinates
positionalAccuracy Coordinate accuracy in metres
user Observer's username
qualityGrade research / needs_id / casual
numIdentificationAgreements Number of agreeing identifications (or total observation count in taxa mode)
photoUrl URL of the first photo
uri Canonical observation URL
license Content license code (e.g. cc-by-nc)

🔌 Integrations & automation

  • Schedules — capture newly submitted research-grade observations daily or weekly with the Apify Scheduler.
  • Webhooks — post new observation counts to Slack or trigger a downstream call when a run completes.
  • Google Sheets — export datasets straight into a biodiversity tracking spreadsheet.
  • Amazon S3 / storage — archive raw occurrence data for later GIS analysis.
  • Zapier, Make, n8n & Pipedream — trigger email alerts, database inserts or GIS updates when the run finishes.
  • Apify API — pull datasets programmatically from any language.

📦 Export formats

Download every run's dataset as CSV, JSON, JSONL, Excel (XLSX) or XML from the Console, or fetch it via the Apify API with a format query parameter.

❓ FAQ

How do I scrape iNaturalist observations?

Open the iNaturalist Scraper on Apify, set a taxonName or query (or leave the input empty), choose a mode and qualityGrade, and click Start. Each observation comes back as structured data you can export to CSV or JSON.

Does this require an iNaturalist account or API key?

No. The scraper reads publicly available iNaturalist data — no account, login, registration or API key is needed, only an Apify account.

How many observations can I extract?

Each run can pull up to 10,000 records (set via maxResults). For larger datasets, schedule multiple runs with different place IDs or taxon filters.

What is a "research grade" observation?

Research grade is iNaturalist's highest quality tier — the observation has a photo, a date, coordinates and at least two community identifications agreeing on the species. Set qualityGrade: research to get only these verified records.

Can I filter by country or region?

Yes — use the placeId parameter. Find the numeric ID by visiting the country or region page on iNaturalist.org and reading it from the URL (for example, Kenya = 6986, USA = 1, Germany = 7082).

Can I get all species in a genus?

Use taxa mode with query set to the genus name (e.g. Panthera) to return matching species and higher ranks from the iNaturalist taxonomy, along with photos and observation counts.

Why are some coordinates null?

iNaturalist allows observers to obscure their GPS location for sensitive or endangered species. When geoprivacy is obscured, coordinates come back null; the placeGuess text may still be populated.

How do I export iNaturalist data to Excel or CSV?

Every dataset can be downloaded as CSV, JSON, JSONL, Excel or XML from the Console or via the Apify API — a clean iNaturalist data export for spreadsheets, GIS tools or BI.

Is the photo URL always available?

Most research-grade observations include at least one photo (the medium-size URL is returned). Some records are sound-only or text-only, in which case photoUrl is null.

Is it legal / can I use the data commercially?

iNaturalist observations are published under Creative Commons licenses (primarily CC BY-NC) by the contributors who upload them, and this Actor retrieves only publicly available data. Always respect the license field in each record — some are non-commercial only. Review iNaturalist's Terms of Service and the applicable license before commercial use.

🔗 Related actors by logiover

Building a wider open-data or geospatial dataset? Pair the iNaturalist Scraper with:

👉 Browse all logiover scrapers on Apify Store.


📄 Documentation only — the Actor runs on the Apify platform; no source code is included in this repository. ▶️ Run it: https://apify.com/logiover/inaturalist-scraper

Licensed under the MIT License · © 2026 logiover

About

Scrape iNaturalist species occurrence & observation data — GPS, photos, taxonomy, quality grade. No API key. Export JSON/CSV/Excel for biodiversity research.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors