GBIF Species Occurrence Scraper — Biodiversity Records avatar

GBIF Species Occurrence Scraper — Biodiversity Records

Pricing

Pay per event

Go to Apify Store
GBIF Species Occurrence Scraper — Biodiversity Records

GBIF Species Occurrence Scraper — Biodiversity Records

Search GBIF's 3B+ record global biodiversity index by species name, country, year, or dataset and export clean rows — full taxonomy, event date, coordinates, basis of record, and dataset provenance — as JSON, CSV, or Excel.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share


🎯 What this 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

resolves a species name to GBIF's internal taxon key automatically pages past sparse, deeply nested records into one clean flat row each stops cleanly at GBIF's ~100 000-record offset ceiling instead of erroring into it retries transient 429/5xx responses with backoff instead of failing the whole run

💡 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.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Type a species name (or leave the default) — most other fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
scientificNamestringno'Puma concolor'Species name to resolve to a GBIF taxon key. Takes priority over taxonKey.
taxonKeyintegernoRaw GBIF taxon key, used only when scientificName is empty.
querystringnoFree-text search across occurrence records.
countryCodestringnoRestrict to one ISO-3166-1 alpha-2 country code, e.g. US.
yearFrom / yearTointegernoOnly occurrences recorded within this year range.
hasCoordinatebooleannoTrueRestrict to georeferenced records.
basisOfRecordstringnoRestrict to one basis-of-record type, e.g. HUMAN_OBSERVATION.
datasetKeystringnoRestrict to one GBIF publisher dataset (UUID).
maxResultsintegerno100Stop after this many occurrences. Each row is one billed result.
proxyConfigurationobjectno{"useApifyProxy": false}GBIF is a public API and does not need a proxy.

Example input

{
"scientificName": "Puma concolor",
"hasCoordinate": true,
"maxResults": 3,
"proxyConfiguration": {
"useApifyProxy": false
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
occurrence_keyintegerGBIF occurrence identifier.
scientific_namestringScientific name as recorded.
accepted_scientific_namestringGBIF's accepted taxon name.
taxon_rankstringTaxonomic rank, e.g. SPECIES.
kingdom / phylum / class_ / order / family / genus / speciesstringFull classification.
event_date / year / month / daystring / integerWhen the occurrence was recorded.
country / country_codestringWhere the occurrence was recorded.
locality / state_provincestringFiner-grained location detail.
decimal_latitude / decimal_longitudenumberCoordinates in decimal degrees.
coordinate_uncertainty_mnumberCoordinate uncertainty, in metres.
elevation_m / depth_mnumberElevation / depth, in metres.
basis_of_recordstringHow the occurrence was recorded.
dataset_name / dataset_keystringPublishing dataset.
publishing_org_keystringGBIF publishing organization UUID.
institution_code / collection_code / catalog_numberstringSpecimen/record provenance.
recorded_by / identified_bystringWho recorded/identified the occurrence.
licensestringData license, e.g. CC_BY_4_0.
issuesarrayGBIF data-quality issue flags.

Example output

{
"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

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.05One-off warm-up charge per run
result$0.002Per dataset item

Example: 1 000 results at the rates above ≈ $2.05. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 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.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.