GBIF Species Occurrence Scraper icon

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.

FieldTypeRequiredWhat 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

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Result emitted$0.0020Per 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?
No. GBIF is free and keyless — no account, no auth header, no signup.
What if my species name doesn't match?
The Actor logs the resolved taxon and rank so you can verify the match. If GBIF can't resolve a name at all, the Actor falls back to an unfiltered-by-taxon search rather than silently returning nothing.
Why are so many fields empty?
GBIF occurrence records are contributed by thousands of independent institutions with wildly varying completeness — a museum specimen from 1950 rarely has GPS coordinates, for example. Every field is nullable by design; this Actor never fabricates a value GBIF didn't report.

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

Teams that run this also run