iNaturalist Scraper — Observations, Taxa & Species avatar

iNaturalist Scraper — Observations, Taxa & Species

Pricing

from $1.50 / 1,000 results

Go to Apify Store
iNaturalist Scraper — Observations, Taxa & Species

iNaturalist Scraper — Observations, Taxa & Species

Scrape iNaturalist by taxon name, place, or keyword. Extract species, location, photo, observer, quality grade, and taxonomy for biodiversity research, conservation, and wildlife monitoring. No API key, no login.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

iNaturalist Scraper — Observations, Taxa & Species Data

Scrape millions of biodiversity observations from iNaturalist by species, location, or keyword — no API key, no login, fully automated.

What does iNaturalist Scraper do?

iNaturalist Scraper connects to the official iNaturalist open API (https://api.inaturalist.org/v1/) to extract wildlife observation data at scale. The actor operates in three modes: observations (paginate through thousands of citizen science records filtered by taxon name, place ID, or free-text query), taxa (search the iNaturalist species catalog), and observationDetail (fetch a single observation by ID with full metadata).

The engine uses keyless HTTP GET requests against the /observations, /taxa, and /observations/{id} endpoints, paginating with page and per_page=200 parameters until your maxResults cap is reached. Each observation includes the species identification, GPS coordinates, observer username, photo URL, quality grade, and CC license — structured and ready to export to CSV, JSON, or Excel. A single run can pull thousands of research-grade wildlife records across any taxonomic group: birds, mammals, insects, plants, fungi, and more.

Who is it for?

  • Ecologists and conservation researchers needing bulk georeferenced species occurrence data for distribution modeling or habitat analysis.
  • Wildlife NGOs and park managers tracking species presence in specific regions without manual portal downloads.
  • Academic institutions building datasets for biodiversity informatics, machine learning, or phylogenetics research.
  • Data journalists and science communicators exploring species invasion fronts, climate-linked range shifts, or endangered species trends.
  • Developers and data engineers integrating citizen science biodiversity data into dashboards, apps, or GIS pipelines.

Use cases

  • Download all research-grade lion (Panthera leo) observations in Africa to map current range and density hotspots.
  • Extract bird observations by place ID for a national park to power a visitor species checklist app.
  • Search the taxa endpoint for all Panthera species to get taxonomy, photos, and observation counts.
  • Pull recent insect observations tagged with a specific keyword to monitor pollinator activity across a region.
  • Fetch individual observation details including photos and identifications for a curated species gallery or species alert system.

Why use iNaturalist Scraper?

  • Completely keyless — the iNaturalist API is public and open; no registration or API key required.
  • 14 structured fields per observation: ID, species guess, taxon name, rank, iconic taxon, date, place, GPS coordinates, observer, quality grade, photo, URL, and license.
  • Bulk pagination — fetches up to 10,000 records per run with automatic page cycling.
  • Three modes — observations search, taxa/species catalog lookup, and single observation detail.
  • Flexible filters — filter by taxon name, place ID, quality grade (research, needs_id, casual), or free-text query.
  • Export to CSV, JSON, Excel, or XML via Apify platform; integrate with Google Sheets, Zapier, or Make in one click.

What data can you extract?

The actor extracts the following fields per observation or taxon record:

FieldTypeDescription
idstringUnique iNaturalist observation ID
speciesGuessstringCommon name or species guess by the observer
taxonNamestringScientific name of the identified taxon
taxonRankstringTaxonomic rank (species, genus, family, etc.)
iconicTaxonstringHigh-level group (Mammalia, Aves, Insecta, Plantae, etc.)
observedOnstringDate the observation was recorded (YYYY-MM-DD)
placeGuessstringHuman-readable location text provided by the observer
latitudestringGPS latitude of the observation
longitudestringGPS longitude of the observation
userstringiNaturalist username of the observer
qualityGradestringQuality grade: research, needs_id, or casual
photoUrlstringDirect URL to the observation photo (medium size)
uristringCanonical URL of the observation on iNaturalist.org
licensestringCreative Commons license code (e.g., cc-by-nc)

Example JSON output:

{
"id": "123456789",
"speciesGuess": "African Lion",
"taxonName": "Panthera leo",
"taxonRank": "species",
"iconicTaxon": "Mammalia",
"observedOn": "2024-03-15",
"placeGuess": "Maasai Mara, Kenya",
"latitude": "-1.5033",
"longitude": "35.1433",
"user": "wildlife_observer",
"qualityGrade": "research",
"photoUrl": "https://inaturalist-open-data.s3.amazonaws.com/photos/12345/medium.jpg",
"uri": "https://www.inaturalist.org/observations/123456789",
"license": "cc-by-nc"
}

How to use

Option A — Search observations by taxon name or keyword

Set mode to observations and provide a taxonName (scientific or common name) or query (free text). Optionally filter by placeId and qualityGrade.

{
"mode": "observations",
"taxonName": "Panthera leo",
"qualityGrade": "research",
"maxResults": 500
}

Option B — Search species catalog (taxa)

Set mode to taxa to search the iNaturalist species catalog. Returns taxonomy, photos, and observation counts for matching species.

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

Option C — Fetch a single observation by ID

Set mode to observationDetail and provide the observationId for a specific iNaturalist observation.

{
"mode": "observationDetail",
"observationId": 12345678
}

Input parameters

ParameterTypeDefaultDescription
modestringobservationsScraping mode: observations, taxa, or observationDetail
querystringFree-text search query (works in observations and taxa modes)
taxonNamestringScientific or common taxon name filter (e.g., Panthera leo)
placeIdintegeriNaturalist place ID to filter geographically (e.g., 1 for USA)
qualityGradestringresearchQuality filter: research, needs_id, casual, or empty for all
observationIdintegerSpecific observation ID for observationDetail mode
maxResultsinteger200Maximum number of records to extract (max 10,000)
proxyConfigobjectApify DatacenterProxy configuration — datacenter proxies work fine

Full input example:

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

Output example

{
"id": "987654321",
"speciesGuess": "Golden Eagle",
"taxonName": "Aquila chrysaetos",
"taxonRank": "species",
"iconicTaxon": "Aves",
"observedOn": "2024-06-01",
"placeGuess": "Rocky Mountain National Park, Colorado, USA",
"latitude": "40.3428",
"longitude": "-105.6836",
"user": "raptor_watcher",
"qualityGrade": "research",
"photoUrl": "https://inaturalist-open-data.s3.amazonaws.com/photos/99887/medium.jpg",
"uri": "https://www.inaturalist.org/observations/987654321",
"license": "cc-by-nc"
}

Tips for best results

  • Use scientific names in taxonName for precise filtering — Panthera leo returns only lion records, while query=lion may match unrelated results.
  • Set qualityGrade=research to get verified, community-validated observations with two or more matching identifications.
  • Find place IDs by browsing iNaturalist.org — navigate to a region's page and extract the numeric ID from the URL (e.g., inaturalist.org/places/6986 → place ID 6986 for Kenya).
  • Combine taxonName + placeId to map species distribution within a specific country or protected area.
  • Use taxa mode first to discover the correct scientific name before running a large observations scrape.
  • Set maxResults conservatively for testing — start with 200, then scale up to 5,000–10,000 for full datasets.
  • iNaturalist's API is rate-limited to ~60 requests/minute per IP — the actor includes automatic retries for 429 responses.
  • null fields are expected — some observations lack GPS coordinates (geoprivacy=obscured) or photos; these fields will be null.
  • Use observationDetail mode to enrich a list of known observation IDs with complete metadata, including identification history.
  • Schedule runs on Apify to capture new research-grade observations weekly for ongoing species monitoring projects.

Integrations

  • Google Sheets — export datasets directly to Google Sheets via Apify's built-in integration; update your biodiversity tracking spreadsheet automatically.
  • Slack — configure Apify webhooks to post new observation counts to a Slack channel when a scheduled run completes.
  • Zapier / Make — trigger downstream workflows (email alerts, database inserts, GIS updates) when the actor finishes.
  • Webhooks — call any HTTP endpoint with run metadata and dataset URL on completion.
  • Apify Scheduler — run daily or weekly to capture newly submitted research-grade observations.

API usage

cURL:

curl -X POST "https://api.apify.com/v2/acts/logiover~inaturalist-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"observations","taxonName":"Panthera leo","qualityGrade":"research","maxResults":500}'

Node.js:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_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.items);

Python:

from apify_client import ApifyClient
client = ApifyClient('YOUR_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)

Use with AI agents (MCP)

This actor is available as an MCP tool for AI agents. When connected to Claude or another MCP-compatible agent, you can instruct it: "Use the iNaturalist scraper to pull 1,000 research-grade owl observations in Europe and summarize the species distribution by country." The agent calls the actor, retrieves the dataset, and processes the results autonomously — no manual data download required.

FAQ

Does this actor require an API key or iNaturalist account?

No. The iNaturalist API is publicly accessible without any authentication. The actor makes standard GET requests to api.inaturalist.org/v1/ — no API key, no account, no login needed.

How many observations can I extract?

The iNaturalist database contains over 200 million observations. Each actor 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. These observations are used in scientific publications and GBIF data exports.

Why are some coordinates null?

iNaturalist allows observers to obscure their GPS location for sensitive or endangered species. When geoprivacy is set to obscured, the API returns null coordinates. The placeGuess field (human-written location text) may still be populated.

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 extracting the ID from the URL. For example, Kenya = 6986, USA = 1, Germany = 7082.

What taxon groups are covered?

All of iNaturalist's iconic groups: Mammalia (mammals), Aves (birds), Reptilia, Amphibia, Insecta, Actinopterygii (fish), Arachnida, Mollusca, Plantae, Fungi, and more — any life form recorded on the platform.

How often is iNaturalist data updated?

Observations are submitted in near-real-time by millions of citizen scientists worldwide. Running the actor daily captures new research-grade submissions as they are community-validated.

Can I get all species in a genus?

Use taxa mode with query set to the genus name (e.g., Panthera). This returns all species, subspecies, and higher ranks matching that name from the iNaturalist taxonomy.

How do I export to CSV or Excel?

In Apify, every dataset can be downloaded as CSV, JSON, XML, or Excel from the dataset view or via API with ?format=csv. Google Sheets integration is also available in one click.

Is the photo URL always available?

Most research-grade observations include at least one photo. The actor returns the medium-size URL. Some observations may have no photo (sound-only or text-only records), in which case photoUrl is null.

What happens if I get zero results?

Check that your taxonName is spelled correctly and matches iNaturalist's taxonomy (use taxa mode first to verify). Also confirm your placeId is valid. Some rare species may have very few or no research-grade observations.

Is there a rate limit?

The iNaturalist public API allows approximately 60 requests per minute per IP. The actor handles 429 responses automatically with exponential back-off and retries.

iNaturalist observations are published under Creative Commons licenses (primarily CC BY-NC) by the contributors who upload them. The iNaturalist API is publicly documented and designed for programmatic access. This actor retrieves only publicly available observation data. Always respect the license field in each record when republishing or using the data commercially — some records are CC BY-NC (non-commercial use only). Review iNaturalist's Terms of Service and the applicable Creative Commons license for each observation before use in commercial products.