Issue Nº 04 — Aug 14, 2026

GBIF: 3.9 billion species records, no key required to read them

Issue four covers the Global Biodiversity Information Facility, a nonprofit-run index of species and occurrence data that stays open for reading and only asks for an account once you want a bulk download. Every number below came from calling the live API this week.

What it covers

GBIF aggregates species, occurrence, and dataset records from natural history museums, herbaria, and citizen-science platforms into one queryable index. We called GET /occurrence/search?limit=1 with no filters and got back a live count of 3,921,386,398 records. A separate call to /occurrence/count a moment later returned 3,921,385,769. The gap is small, but it's real: the index keeps growing while you're querying it, not serving up a static snapshot. Each result carries the full GBIF backbone taxonomy classification and the dataset that published it, down to which organization and country it came from.

Species lookups run through a dedicated matching endpoint rather than full-text search. GET /species/match?name=Puma%20concolor returned an exact match at 99% confidence with the complete kingdom-to-species classification attached in that one response. A separate /species/search endpoint handles looser, autocomplete-style queries against the same backbone, and /dataset/search covers the underlying collections themselves.

Free to read, an account to download in bulk

Every read we ran this week, both the species match and the occurrence search, went through with no API key and no signup. GBIF's own docs say plainly that most of the API needs no authentication at all.

The exception is the bulk download endpoint. POST /occurrence/download/request requires HTTP Basic Authentication tied to a real GBIF user account, the same login used on the website, because a download is billed to that account for citation and attribution purposes. That one endpoint accepts up to 100,000 search parameters per request and builds the result asynchronously, meant for pulling millions of records into a file instead of paging through /occurrence/search by hand.

No published quota, just a recommendation to switch endpoints

GBIF doesn't publish a numeric rate limit anywhere in its docs. Throttling is dynamic and tied to server load: common calls like species matching and single-occurrence lookups can sustain rapid querying, but a search spanning thousands of results can return an HTTP 429 when the servers are busy. Their documented fix is to switch to the download endpoint above and let GBIF assemble the file, rather than slow down and keep paginating.

CORS is handled the same way a browser-facing API should be. We re-ran both calls with an Origin: https://greatapis.com header and got access-control-allow-origin: * back on each, along with a Vary header naming Origin and the preflight request headers, so the server is actually evaluating the cross-origin request rather than echoing a static wildcard.

Why it's worth a look

For a species checklist or a citizen-science dashboard that needs a name resolved against a real taxonomic backbone, GBIF clears the two usual blockers: no signup to start reading, and a documented path (the download endpoint above) for anyone who outgrows ad hoc search calls. Its OpenAPI spec, published at techdocs.gbif.org and already checked into this catalogue, resolves to 73 real operations against the same Occurrence API we tested, and a status page tracks uptime separately from the docs site.

Two community-maintained clients cover the languages most of this data ends up in: pygbif for Python, maintained under GBIF's own GitHub org, and rgbif for R, maintained by rOpenSci. Both repos were still live and reachable when we checked, so neither is an abandoned wrapper around a REST API you could just call directly.

GBIF, by the numbers

Rendered live from the atlas entry
AuthenticationNone required
HTTPSSupported
CORSEnabled
PricingFree
FormatsJSON
Rate limit

GBIF publishes no fixed numeric quota (techdocs.gbif.org/en/openapi/#rate-limits) — throttling is dynamic based on server load. Common lookups (species matching, geocoding, single-occurrence retrieval) sustain rapid querying; occurrence *search* queries spanning thousands of records may return HTTP 429 under load, at which point GBIF recommends the asynchronous occurrence download API (accepts up to 100,000 search parameters per request) instead of paginating search results.

Key endpoints
  • GET/occurrence/search
  • GET/occurrence/{gbifId}
  • GET/occurrence/count
  • POST/occurrence/download/request
  • GET/occurrence/download/request/{key}
biodiversitytaxonomyoccurrence-dataopen-datanatural-history

Sources

Facts checked Aug 2026