Developer tools · Automation
GBIF Species Occurrence Scraper — Biodiversity Records
Search GBIF's 3B+ record global biodiversity index by species name, country, year, or dataset and export clean, typed rows — full taxonomy, coordinates, event date, and dataset provenance — with automatic species-name-to-taxon-key resolution and no API key required.
Free Apify credit covers a first run. No credit card to try.
What this Actor scrapes
GBIF (the Global Biodiversity Information Facility) aggregates species occurrence records from museums, herbaria, citizen-science apps and government surveys into one searchable index of over three billion records. Its raw API is generous and keyless, but it forces callers to look up an internal taxonKey before they can filter by species, and most occurrence records are sparse — a huge share of optional fields are simply absent on any given row. This Actor resolves a plain species name to that taxon key for you, then returns fully flattened, typed rows so a distribution map, an ESG nature-risk screen, or a species checklist lands straight in a spreadsheet.
What we handle for you
- 🛡️ Browser fingerprint rotation — the target sees a real browser TLS handshake, not a script.
- 🌐 Proxy rotation — fresh exit on every block through Apify Proxy.
- 🔁 Retries with backoff — 408 / 429 / 5xx retried up to five times, Retry-After honoured.
- 🧊 Clean, typed rows — schema-validated output with ISO-8601 timestamps.
- 💰 Pay per result — no data, no result charge.
Use cases
- Build a species distribution map from georeferenced occurrence records.
- Screen a project site or supply chain footprint for nearby protected or at-risk species (ESG / nature-risk analysis).
- Assemble a country or region species checklist for an environmental impact assessment.
- Track how observation records for a species change year over year across citizen-science and museum datasets.
Input
Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.
| Field | Type | Required | What it does |
|---|---|---|---|
scientificName | string | no | Species name to resolve to a GBIF taxon key, e.g. Puma concolor. Takes priority over Taxon key. Leave empty to skip name resolution. |
taxonKey | integer | no | Raw GBIF taxon key, used only when Scientific name is empty. |
query | string | no | Free-text search across occurrence records. Leave empty if you are filtering only. |
countryCode | string | no | Restrict to one ISO-3166-1 alpha-2 country code, e.g. US. |
yearFrom | integer | no | Only occurrences recorded on or after this year. |
yearTo | integer | no | Only occurrences recorded on or before this year. |
hasCoordinate | boolean | no | Restrict to georeferenced records (has a decimal latitude/longitude). |
basisOfRecord | string | no | Restrict to one GBIF basis-of-record type. |
datasetKey | string | no | Restrict to one GBIF publisher dataset (UUID). |
maxResults | integer | no | Stop after this many occurrences. Each row is one billed result. Hard-capped at GBIF's ~100 000 offset ceiling. |
{
"scientificName": "Puma concolor",
"hasCoordinate": true,
"maxResults": 3,
"proxyConfiguration": {
"useApifyProxy": false
}
} Output
One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.
occurrence_keyscientific_nametaxon_rankkingdomclass_familygenusspeciesyearcountrycountry_codedecimal_latitudedecimal_longitudebasis_of_recorddataset_namelicense
{
"occurrence_key": 5938145577,
"scientific_name": "Puma concolor (Linnaeus, 1771)",
"taxon_rank": "SPECIES",
"kingdom": "Animalia",
"class_": "Mammalia",
"family": "Felidae",
"genus": "Puma",
"species": "Puma concolor",
"year": 2026,
"month": 1,
"day": 2,
"country": "United States of America",
"country_code": "US",
"state_province": "Oregon",
"decimal_latitude": 44.59237,
"decimal_longitude": -121.27005,
"basis_of_record": "HUMAN_OBSERVATION",
"dataset_name": "iNaturalist research-grade observations",
"license": "http://creativecommons.org/licenses/by-nc/4.0/legalcode",
"issues": [
"CONTINENT_DERIVED_FROM_COORDINATES",
"TAXON_ID_NOT_FOUND"
]
} Pricing
| Event | Price | When |
|---|---|---|
| Actor start | $0.20 | Once per run, covers warm-up and proxy session setup. |
| Result emitted | $0.0020 | Per result written to the dataset. |
You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.
Limitations
- Live search results only — this Actor does not use GBIF's asynchronous bulk Darwin Core Archive download.
- No media/image download — occurrence records may reference photos, but files are not fetched or mirrored.
- GBIF's search API caps how deep any single search can page (~100 000 records); narrow by country, year, or basis of record to reach records beyond that.
FAQ
Do I need an API key?
What if my species name doesn't match?
Why are so many fields empty?
Ready to run it?
Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.
Related Actors