iNaturalist Observations Scraper avatar

iNaturalist Observations Scraper

Pricing

Pay per event

Go to Apify Store
iNaturalist Observations Scraper

iNaturalist Observations Scraper

Export public iNaturalist observations by taxon, place, project, date, bounding box, or radius for research, GIS, and reports.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Categories

Share

Export public biodiversity observations from iNaturalist into a clean Apify dataset.

Use this actor to collect species occurrence records, coordinates, observation URLs, taxonomy, observer metadata, licenses, and photo URLs from the public iNaturalist observations API.

It is built for recurring research, consulting, conservation, GIS, and reporting workflows.

What does iNaturalist Observations Scraper do?

The actor queries api.inaturalist.org/v1/observations and saves matching observations as structured rows.

You can filter by taxon, place, project, observer, quality grade, date range, bounding box, or radius.

The output is ready for CSV, JSON, Excel, BI tools, GIS tools, and automated pipelines.

Each row represents one public iNaturalist observation.

Who is it for?

Environmental consultants use it to export species occurrence evidence for reports.

Biodiversity researchers use it to build repeatable study datasets.

Conservation NGOs use it to monitor activity in project areas.

GIS analysts use it to pull latitude and longitude fields without custom API code.

Data teams use it when they need scheduled exports from iNaturalist.

Citizen-science coordinators use it to review observations in campaigns and projects.

Why use this actor?

You do not need to write pagination code.

You do not need to normalize nested iNaturalist JSON.

You get stable Apify datasets, API access, scheduling, webhooks, and integrations.

You can run the same export repeatedly and compare changes over time.

You can download results in CSV, JSON, XML, RSS, or Excel from Apify.

Common workflows

Monitor observations in a habitat restoration area.

Export all recent records for a target species.

Download project observations for a grant report.

Build a GIS layer for research-grade observations.

Track new observations from a known iNaturalist user.

Collect licensed photo URLs and observation links for review.

Input overview

The actor accepts simple filters that map to the official observations API.

Set only the fields you need.

Leave optional filters empty for broader exports.

Keep maxItems low for quick tests.

Increase maxItems for scheduled production runs.

Main filters

searchQuery performs a text search.

taxonId filters by a numeric iNaturalist taxon ID.

placeId filters by a numeric iNaturalist place ID.

projectId filters by an iNaturalist project ID or slug.

userId filters by an iNaturalist observer username.

qualityGrade can be research, needs_id, casual, or any.

Date filters

Use dateFrom for the earliest observed date.

Use dateTo for the latest observed date.

Dates should use YYYY-MM-DD format.

These filters are useful for monthly or quarterly monitoring exports.

Location filters

Use placeId for standard iNaturalist places.

Use nelat, nelng, swlat, and swlng for a bounding box.

Use lat, lng, and radiusKm for a radius search.

Bounding-box fields must be supplied together.

Radius fields must be supplied together.

Output data

The actor saves one row per observation.

Important fields include observation ID, URL, observed date, quality grade, species guess, scientific name, common name, coordinates, observer login, license code, photo count, photo URLs, project IDs, and scrape timestamp.

The dataset includes GIS-friendly latitude and longitude fields.

The dataset includes source URLs so users can verify records on iNaturalist.

Output table

FieldDescription
observationIdiNaturalist observation ID
urlPublic observation URL
observedOnDate observed
qualityGradeiNaturalist quality grade
speciesGuessDisplay species guess
taxonNameScientific name
taxonPreferredCommonNamePreferred common name
latitudePublic latitude when available
longitudePublic longitude when available
observerLoginObserver username
licenseCodeObservation license
photoUrlsOptional large photo URLs

Example input: species export

{
"taxonId": 48662,
"placeId": 1,
"qualityGrade": "research",
"dateFrom": "2024-01-01",
"maxItems": 100,
"includePhotos": true
}

This exports research-grade monarch butterfly observations in the United States.

Example input: GIS area monitoring

{
"searchQuery": "oak",
"qualityGrade": "research",
"nelat": 38.1,
"nelng": -121.7,
"swlat": 37.2,
"swlng": -122.6,
"dateFrom": "2024-01-01",
"maxItems": 250,
"includePhotos": false
}

This exports research-grade oak observations within a bounding box.

How much does it cost to scrape iNaturalist observations?

This actor uses pay-per-event pricing.

There is a small start charge for each run.

There is a per-observation charge for each saved dataset row.

Current BRONZE pricing is $0.005 per run plus $0.000021994 per saved observation, with lower per-observation prices on higher Apify tiers.

The exact live price is shown on the Apify actor page before you run it.

Use a small maxItems value for testing.

Use larger values for recurring production exports.

How to run the actor

Open the actor on Apify.

Choose your filters.

Set maxItems.

Start the run.

Open the Dataset tab when the run finishes.

Download CSV, JSON, Excel, or connect the dataset to your pipeline.

Tips for better results

Use numeric iNaturalist IDs when possible.

Use qualityGrade: research when you need verified records.

Use qualityGrade: any when you need broader coverage.

Use date windows for scheduled monitoring.

Use includePhotos: false when you only need GIS fields.

Use bounding boxes carefully so they match your survey area.

Integrations

Send completed datasets to Google Sheets with Apify integrations.

Trigger webhooks after each scheduled monitoring run.

Load CSV exports into ArcGIS, QGIS, or BI tools.

Use the Apify API to run exports from Python, Node.js, or workflow tools.

Archive monthly snapshots for trend analysis.

API usage with Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/inaturalist-observations-scraper').call({
taxonId: 48662,
placeId: 1,
qualityGrade: 'research',
maxItems: 100
});
console.log(run.defaultDatasetId);

API usage with Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/inaturalist-observations-scraper').call(run_input={
'taxonId': 48662,
'placeId': 1,
'qualityGrade': 'research',
'maxItems': 100,
})
print(run['defaultDatasetId'])

API usage with cURL

curl -X POST 'https://api.apify.com/v2/acts/automation-lab~inaturalist-observations-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"taxonId":48662,"placeId":1,"qualityGrade":"research","maxItems":100}'

MCP usage

Use Apify MCP to call this actor from AI tools.

Claude Code example:

$claude mcp add apify https://mcp.apify.com/?tools=automation-lab/inaturalist-observations-scraper

Claude Desktop can use the same MCP URL in its MCP server configuration.

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=automation-lab/inaturalist-observations-scraper"
}
}
}

Example prompt: "Run the iNaturalist Observations Scraper for research-grade monarch observations in the United States and summarize the top states from the dataset."

Data freshness

The actor reads live public iNaturalist API results during each run.

Freshness depends on iNaturalist API indexing and availability.

For monitoring, schedule daily, weekly, or monthly runs on Apify.

Limitations

The actor exports public API data only.

Private or obscured coordinates may be unavailable or generalized.

Very broad searches can return many more records than your maxItems limit.

The actor does not identify species; it exports iNaturalist's existing fields.

API availability and rate limits are controlled by iNaturalist.

Legality and responsible use

This actor uses public iNaturalist API data.

Respect iNaturalist terms, licenses, and community guidelines.

Check observation license fields before reusing media or records.

Comply with privacy, conservation, and endangered-species handling requirements in your jurisdiction.

Do not use public biodiversity data to harm species, habitats, or private individuals.

Troubleshooting

If you get no results, broaden filters or set qualityGrade to any.

If bounding-box validation fails, provide all four bounding-box fields.

If radius validation fails, provide lat, lng, and radiusKm together.

If a project search is empty, verify the project ID or slug on iNaturalist.

If photo arrays are not needed, turn off includePhotos to reduce output size.

FAQ

Does this actor need an iNaturalist account?

No. It uses public observations API endpoints.

Can I export research-grade observations only?

Yes. Set qualityGrade to research.

Can I export by species?

Yes. Use the iNaturalist taxonId for the species or broader taxon.

Can I use the output in GIS tools?

Yes. Export CSV or JSON and use the latitude and longitude columns.

Are photo URLs included?

Yes, when includePhotos is enabled.

Explore related Automation Lab actors for public data, maps, locations, and research workflows:

Support

If a run fails, open the run log first.

Check the exact input used for the run.

Try a smaller maxItems value.

Share the run URL when reporting an issue.

Changelog

See .actor/CHANGELOG.md for release notes.