GBIF Biodiversity Scraper — Species, Occurrences & Datasets
Pricing
from $1.50 / 1,000 results
GBIF Biodiversity Scraper — Species, Occurrences & Datasets
Scrape GBIF by species name, taxon key, or country. Extract occurrence records with GPS coordinates, taxonomy, dataset, observer, and date. No API key, no login. 2B+ records.
GBIF Biodiversity Scraper — Species Occurrences, Taxonomy & Dataset Search
Extract millions of biodiversity occurrence records from the Global Biodiversity Information Facility (GBIF) — the world's largest open-access biodiversity database — with no API key and no login.
What does GBIF Biodiversity Scraper do?
GBIF Biodiversity Scraper connects to the official, keyless GBIF REST API (api.gbif.org/v1) and retrieves structured occurrence records, taxonomic species data, and dataset metadata from the world's largest open biodiversity database.
The actor supports four operating modes. Occurrences mode is the flagship: it resolves any scientific species name to a GBIF taxon key via /species/match, then paginates /occurrence/search with offset-based pagination (300 records per page), collecting GPS coordinates, taxonomy, observer information, institution codes, event dates, and IUCN Red List categories. The GBIF occurrence index contains over 2 billion georeferenced records from 1,700+ publishers across 190+ countries — one run can pull thousands of records with a single species name.
speciesMatch mode resolves a taxon name to its accepted canonical name and GBIF usage key. speciesSearch mode returns paginated species catalog results for a keyword. datasets mode searches the GBIF dataset registry to discover data sources by theme or keyword. All modes are keyless, proxy-friendly, and production-hardened with retry logic and graceful error handling.
Who is it for?
- Conservation biologists and ecologists tracking species distribution across time and geography.
- Environmental data scientists building GIS layers, biodiversity maps, or machine-learning datasets.
- Academic researchers needing bulk occurrence data for species distribution models (SDMs) like MaxEnt.
- Nature NGOs and government agencies monitoring population trends and protected-area coverage.
- Data engineers building biodiversity data pipelines for public or private analytics platforms.
Use cases
- Pull 10,000 grizzly bear (
Ursus arctos) sightings across Europe to model habitat range shifts under climate change. - Extract all insect occurrence records in Germany from 2000–2024 to analyse pollinator decline trends.
- Search GBIF datasets related to "coral reef" to discover data sources for marine biodiversity research.
- Match the scientific name "Panthera leo" to its accepted GBIF taxon key and downstream metadata in one call.
- Build a country-level occurrence matrix for endangered amphibians using country + IUCN Red List filters.
Why use GBIF Biodiversity Scraper?
- No API key or account needed — the GBIF API is fully open; zero setup friction.
- 2 billion+ records — the largest open biodiversity index on the planet, updated daily.
- 25 structured output fields per occurrence: coordinates, taxonomy (kingdom to species), observer, institution, dataset, IUCN status, event date, and more.
- Intelligent taxon resolution — supply a plain scientific name; the actor auto-resolves it to the correct GBIF taxon key before querying, handling synonyms and fuzzy matches.
- Bulk pagination — paginate up to 100,000 records per run using offset-based pagination; suitable for large-scale research workflows.
- Export to CSV, JSON, or Excel — one click in the Apify console; or integrate via API, Zapier, or Google Sheets.
What data can you extract?
Each occurrence record contains the following fields:
| Field | Type | Description |
|---|---|---|
key | number | GBIF unique occurrence key |
gbifID | string | GBIF occurrence identifier |
scientificName | string | Full accepted scientific name with authorship |
kingdom | string | Taxonomic kingdom (e.g. Animalia, Plantae, Fungi) |
phylum | string | Taxonomic phylum |
class | string | Taxonomic class |
order | string | Taxonomic order |
family | string | Taxonomic family |
genus | string | Taxonomic genus |
species | string | Canonical species name (genus + epithet) |
taxonKey | number | GBIF taxon key for the occurrence |
country | string | Country name where occurrence was recorded |
countryCode | string | ISO 3166-1 alpha-2 country code |
locality | string | Verbatim locality description |
decimalLatitude | number | WGS84 decimal latitude |
decimalLongitude | number | WGS84 decimal longitude |
eventDate | string | Date or date range of observation |
year | number | Year of observation |
basisOfRecord | string | Record type: HUMAN_OBSERVATION, PRESERVED_SPECIMEN, MACHINE_OBSERVATION, etc. |
datasetName | string | Name of the contributing dataset |
datasetKey | string | GBIF dataset UUID |
recordedBy | string | Observer/collector name |
institutionCode | string | Institution code of the contributing organisation |
occurrenceStatus | string | PRESENT or ABSENT |
iucnRedListCategory | string | IUCN category: LC, NT, VU, EN, CR, EW, EX, or null |
license | string | Creative Commons license URL for the record |
Sample output record:
{"key": "4126541301","gbifID": "4126541301","scientificName": "Ursus arctos Linnaeus, 1758","kingdom": "Animalia","phylum": "Chordata","class": "Mammalia","order": "Carnivora","family": "Ursidae","genus": "Ursus","species": "Ursus arctos","taxonKey": "2433433","country": "Finland","countryCode": "FI","locality": null,"decimalLatitude": 64.201764,"decimalLongitude": 29.570151,"eventDate": "2010-01-01T00:00Z/2010-12-31T00:00Z","year": 2010,"basisOfRecord": "HUMAN_OBSERVATION","datasetName": "Finnish Insect Database","datasetKey": "3b301884-51b9-443f-b63c-47feeccfb89f","recordedBy": "Mikko Heikura","institutionCode": null,"occurrenceStatus": "PRESENT","iucnRedListCategory": "LC","license": "http://creativecommons.org/licenses/by/4.0/legalcode"}
How to use
Option A — Search by species name (occurrences mode)
Use this when you want GPS-tagged sightings for a specific species.
- Set Mode to
occurrences. - Enter the scientific species name in Taxon Name, e.g.
Ursus arctos. - Optionally filter by Country Code (e.g.
FIfor Finland) and Year From / Year To. - Set Max Results to control volume (default 300, max 100000).
- Run. The actor resolves the name to a taxon key, then paginates results.
{"mode": "occurrences","taxonName": "Ursus arctos","country": "FI","yearFrom": 2010,"yearTo": 2024,"maxResults": 1000}
Option B — Search datasets or species catalog
Use this when you want to discover what data sources exist for a topic, or look up species metadata.
- Set Mode to
datasetsorspeciesSearch. - Enter a keyword in Query, e.g.
coral reef. - Set Max Results as needed.
- Run.
{"mode": "datasets","query": "coral reef monitoring","maxResults": 200}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | occurrences | Operation mode: occurrences, speciesMatch, speciesSearch, datasets |
query | string | — | Free-text search query for occurrences, species, or datasets |
taxonName | string | — | Scientific species name to resolve + filter (e.g. Panthera leo) |
country | string | — | ISO 2-letter country code to filter occurrences (e.g. US, DE) |
yearFrom | integer | — | Filter occurrences from this year onwards |
yearTo | integer | — | Filter occurrences up to this year |
maxResults | integer | 300 | Maximum records to return (1–100000) |
proxy | object | Datacenter | Apify proxy configuration |
Full input JSON example:
{"mode": "occurrences","taxonName": "Panthera leo","country": "KE","yearFrom": 2015,"yearTo": 2024,"maxResults": 5000,"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["DATACENTER"]}}
Output example
{"key": "2304895122","gbifID": "2304895122","scientificName": "Panthera leo (Linnaeus, 1758)","kingdom": "Animalia","phylum": "Chordata","class": "Mammalia","order": "Carnivora","family": "Felidae","genus": "Panthera","species": "Panthera leo","taxonKey": "5219404","country": "Kenya","countryCode": "KE","locality": "Maasai Mara National Reserve","decimalLatitude": -1.4061,"decimalLongitude": 35.0078,"eventDate": "2022-07-15","year": 2022,"basisOfRecord": "HUMAN_OBSERVATION","datasetName": "iNaturalist Research-grade Observations","datasetKey": "50c9509d-22c7-4a22-a47d-8c48425ef4a7","recordedBy": "kenya_wildlife_observer","institutionCode": "iNaturalist","occurrenceStatus": "PRESENT","iucnRedListCategory": "VU","license": "http://creativecommons.org/licenses/by-nc/4.0/legalcode"}
Tips for best results
- Use scientific names, not common names. "Brown bear" will produce vague results;
Ursus arctosresolves precisely. - Combine taxonName + country to narrow results to a specific region for a species of interest.
- Set yearFrom / yearTo when you need temporal trend analysis rather than historical archives.
- Start with maxResults 300 to preview the data, then scale to thousands once you confirm the query is correct.
- Check IUCN Red List category in results to quickly identify threatened species (VU, EN, CR) in your dataset.
- Use datasets mode first to discover what GBIF data sources cover your topic — then note the datasetKey and filter by it using the
queryfield. - Occurrence counts vary by species — common widespread species like sparrows have millions of records; rare endemic species may have hundreds.
- Coordinate precision varies — some records are exact GPS points; others are generalised to 10 km grid cells for species protection. Check
coordinateUncertaintyInMetersin raw data. - basisOfRecord helps filter quality —
HUMAN_OBSERVATIONandPRESERVED_SPECIMENare the most common; machine observations from camera traps are tagged asMACHINE_OBSERVATION. - GBIF data is CC-licensed — most records are CC BY 4.0; always check the
licensefield for proper attribution.
Integrations
- Google Sheets: Use the Apify Google Sheets integration to push biodiversity occurrence data directly into a spreadsheet for mapping or analysis.
- Slack: Trigger a Slack notification when a new species occurrence dataset run completes.
- Zapier / Make: Connect GBIF data to any workflow — e.g. auto-export to Airtable, email a summary, or trigger GIS processing.
- Webhooks: Configure a webhook to receive the dataset URL as soon as the run finishes.
- Schedule: Run nightly or weekly to stay current with new GBIF occurrence records submitted by publishers globally.
API usage
cURL:
curl -X POST "https://api.apify.com/v2/acts/logiover~gbif-biodiversity-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"occurrences","taxonName":"Ursus arctos","maxResults":300}'
Node.js:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('logiover/gbif-biodiversity-scraper').call({mode: 'occurrences',taxonName: 'Panthera leo',country: 'KE',maxResults: 1000,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("logiover/gbif-biodiversity-scraper").call(run_input={"mode": "occurrences","taxonName": "Panthera leo","country": "KE","maxResults": 1000,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Use with AI agents (MCP)
GBIF Biodiversity Scraper is compatible with the Apify MCP server, allowing AI agents to request biodiversity data in natural language. Connect the Apify MCP server to Claude, GPT-4, or any MCP-compatible agent and instruct it: "Fetch 500 occurrence records for Apis mellifera in Germany from 2018 to 2023 using the GBIF Biodiversity Scraper actor." The agent will invoke the actor, paginate the results, and return structured JSON ready for analysis or visualisation.
FAQ
Does this actor require an API key or GBIF account?
No. The GBIF REST API is fully public and keyless. This actor requires zero credentials from you — no registration, no token, nothing. Just run it.
How many occurrence records does GBIF have?
GBIF indexes over 2 billion occurrence records from 1,700+ data publishers across 190+ countries. Data comes from natural history museums, citizen science platforms (iNaturalist, eBird, GBIF DwC-A), government agencies, and research institutions.
What is the maximum number of records per run?
This actor caps pagination at 100,000 records per run (GBIF's own API paginates up to this offset). For larger datasets, split by country or year range across multiple runs and merge the results.
Why did my run return zero results?
Check your filters: if you combine taxonName + country + a narrow year range for a rare species, the intersection may be empty. Start without country and year filters to confirm records exist for your species, then narrow.
Some records have null latitude/longitude — is that normal?
Yes. Not all occurrence records are georeferenced. Records from older specimens, some museum collections, or deliberately coarsened coordinates (for species protection) may lack GPS values. Filter on decimalLatitude IS NOT NULL in downstream analysis.
How do I export data to CSV or Excel?
From the Apify console dataset view, click Export and choose CSV, XLSX, or JSON. You can also use the Apify API to download results programmatically.
How fast does the actor run?
In occurrences mode, the actor fetches up to 300 records per API request. A run fetching 5,000 records typically completes in under 2 minutes. The GBIF API is fast and reliable with no throttling for typical research workloads.
Is GBIF data legal to use?
Yes. All data in GBIF is published under open Creative Commons licenses (CC0, CC BY, CC BY-NC). The GBIF API Terms of Use explicitly permit bulk programmatic access for research purposes. Always attribute the original data publisher as indicated in the license and datasetName fields.
What is basisOfRecord and which value should I trust most?
basisOfRecord describes how the observation was made:
HUMAN_OBSERVATION— direct sighting by a person (iNaturalist, eBird, etc.)PRESERVED_SPECIMEN— museum collection specimenMACHINE_OBSERVATION— camera trap, acoustic detector, satellite tagMATERIAL_SAMPLE— DNA sample or environmental sample
For population and distribution studies, HUMAN_OBSERVATION is most common and generally reliable, especially with research-grade iNaturalist records.
Does the actor follow GBIF API pagination correctly?
Yes. The actor uses offset-based pagination (offset=0, 300, 600, ...) and respects the endOfRecords flag returned by GBIF. It stops cleanly when records are exhausted, the offset cap is reached, or maxResults is satisfied.
How often is GBIF data updated?
GBIF ingests new occurrence records from publishers continuously. Major publishers like iNaturalist push updates daily; museum collections update quarterly or annually. Running this actor weekly will catch new citizen science observations for common species.
Can I filter by IUCN Red List status?
Not directly as an input filter (GBIF API does not support IUCN category as a query parameter), but the iucnRedListCategory field is present in results. Export to CSV, then filter by VU, EN, or CR to isolate threatened species records for analysis.
Is it legal?
GBIF data is published under open Creative Commons licenses and the GBIF API is explicitly designed for bulk programmatic access. The GBIF Terms of Use state: "GBIF and its data publishers encourage the use of data from the GBIF network." All data extracted by this actor is publicly available, openly licensed, and intended for scientific and research use. Users must attribute the original publisher as specified in each record's license and datasetName fields. This actor does not circumvent any authentication mechanism.
Related scrapers
- iNaturalist Scraper — Citizen science observations with photos, quality grades, and user profiles direct from iNaturalist.
- PubMed Scraper — Scientific publications from NCBI PubMed, including abstracts, authors, and DOIs.
- OpenAlex Academic Papers Scraper — Bulk scientific literature from OpenAlex's open-access academic graph.
- WHO GHO Scraper — Public health and environmental indicators from the WHO Global Health Observatory.