GBIF Occurrence Search Scraper
parseforge/gbif-occurrence-search-scraper
EducationDeveloper toolsOther
Scrapes GBIF occurrence records by taxon, scientific name, country, year range, or record type and returns each record as a flat row. No API key required.
- Total users
- 2
- Monthly active
- 1
- Total runs
- 107
- Bookmarked
- 0
- Rating
- Not rated yet
- Last modified
- 9 days ago
Overview
GBIF Occurrence Search Scraper
Scrape biodiversity occurrence records from GBIF by species, country, year, or taxon key, up to one million per run. Every record returns with its scientific name, coordinates, basis of record, and publishing dataset. No API key required. Export to CSV, JSON, Excel, or XML.
The GBIF portal and API let you search half a billion species occurrence records, but downloading more than a few thousand means paging through a web interface or writing pagination logic against their REST API. This Actor reads the public occurrence search endpoint directly, filters by scientific name, taxon key, country, year range, coordinate availability, or record type, and streams every matching record into one flat dataset.\n\nYou get a repeatable, auditable extraction that runs on the Apify platform with scheduling, proxies, and storage built in.
| Who uses it | What they scrape GBIF for |
|---|---|
| Ecologists and conservation researchers | Pull all georeferenced records for a species across a country to model its current range. |
| Data journalists | Track the spread of an invasive species over a decade by filtering on year and basis of record. |
| Museum curators and collections managers | Audit a dataset key for duplicate or misattributed preserved specimens. |
| Graduate students | Gather the raw occurrence data behind a published biodiversity study for a reproducibility check. |
What it does
This Actor collects GBIF occurrence records by taxon, scientific name, country, year range, or record type, and returns each one as a flat row with its full set of occurrence fields.
- π¬ Taxonomy-driven search: filter by taxon key (e.g. 212 for Aves) or exact scientific name to pull every record GBIF holds for that group.
- π Geographic scoping: restrict to one or more ISO country codes, or require decimal coordinates so every row is mappable.
- π Temporal windowing: set a year-from and year-to range to study a specific time slice, from historical collections to the latest citizen-science observations.
- π·οΈ Record-type filtering: limit results to preserved specimens, human observations, fossil specimens, material samples, and more, so you only pay for the evidence class you need.
- π Flat-row output: every occurrence lands in your dataset as one row, ready for GIS, statistical software, or a pandas DataFrame.
Results export to CSV, JSON, Excel, or XML, or straight from the API.
What you can do with GBIF data
π Model a species distribution.
An ecologist pulls all georeferenced records for Panthera onca in Brazil from 2000 onward, exports a CSV, and feeds it into a MaxEnt model.
πΊοΈ Map an invasive spread.
A conservation NGO collects human observations of Aedes albopictus across Europe by year, then animates the northward expansion in QGIS.
π§ͺ Reproduce a published analysis.
A graduate student re-extracts the same dataset key and taxon filter cited in a paper to verify the occurrence counts before building on the work.
ποΈ Audit a museum collection.
A collections manager filters by dataset key and basis-of-record PRESERVED_SPECIMEN, then cross-checks the returned records against the internal CMS.
Why choose this scraper
| What you get | |
|---|---|
| No API key | Reads the public GBIF occurrence search endpoint; no registration, no token, no OAuth dance. |
| Up to 1M records | Collect as many as one million occurrences in a single run, far beyond the default web-interface limit. |
| Fixed flat schema | Every record lands with the same columns, so you can merge runs without reshaping. |
| Scheduled & incremental | Run on a cron schedule to monitor new records for a taxon or region as datasets update. |
How it compares
Three other actors also target GBIF occurrence data; here is how they compare on the filters and output shape a biodiversity workflow needs.
| Feature | ParseForge | Gbif Occurrence Search Scraper | GBIF Species & Occurrence API Scraper | GBIF Biodiversity Scraper - Species, Occurrences |
|---|---|---|---|---|
| Filter by taxon key | Yes | Not listed | Not listed | Not listed |
| Filter by scientific name | Yes | Not listed | Not listed | Not listed |
| Filter by country (ISO codes) | Yes | Not listed | Not listed | Not listed |
| Filter by year range | Yes | Not listed | Not listed | Not listed |
| Filter by basis of record | Yes | Not listed | Not listed | Not listed |
| Require coordinates only | Yes | Not listed | Not listed | Not listed |
| Taxonomy and vernacular names | Not listed | Not listed | Yes | Yes |
Configure the run
Drive the Actor from a taxon key, scientific name, dataset key, country list, year range, coordinate requirement, and basis-of-record types, alone or together, and filters run as each record is read so only matches reach your dataset. The Input tab lists every parameter.
A first run with the defaults:
{
"maxItems": 10
}
A larger pull:
{
"maxItems": 200
}
Pricing
Pay-per-result: $0.024 per result collected. You pay only for the results written to your dataset.
| Results collected | Approximate cost |
|---|---|
| 100 results | $2.40 |
| 1,000 results | $24.00 |
| 10,000 results | $240.00 |
New Apify accounts start with $5 in free credit.
Free users
Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.
Run it
- Create a free Apify account with $5 in credit.
- Open the GBIF Occurrence Search Scraper.
- Set your inputs and any filters, then click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.
Use with AI agents (MCP)
Give an AI agent live access to GBIF through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/gbif-occurrence-search-scraper"
Then prompt it in plain language to run the scraper and read back the results.
Troubleshooting
Why am I getting no results?
Check that your taxon key or scientific name is spelled exactly as GBIF expects it. Try removing the year range and coordinate filter to see if any records exist, then tighten filters one at a time.
The run stopped before reaching my maxItems limit.
This is normal when the total number of records matching your filters is smaller than the maximum you set. The Actor returns every match and then finishes.
Some records are missing coordinates even though I checked 'Has Coordinates'.
The filter applies to the decimal latitude and longitude fields. A record may have a textual locality description but no machine-readable coordinates; those records are excluded.
I got a timeout or a partial dataset.
Large queries can take time. Increase the run timeout in the Actor's advanced settings, or reduce the maxItems and paginate across multiple runs with narrower filters.
The scientific name filter returns unexpected subspecies.
GBIF matches scientific names broadly. Use a taxon key instead for an exact match to a specific taxon concept, or add a country filter to reduce noise.
FAQ
| Question | Answer |
|---|---|
| Do I need a GBIF account or API key? | No. The Actor reads the same public occurrence search endpoint that the GBIF website uses, so no registration or token is required. |
| How many records can I get in one run? | You set the maximum with the 'Maximum occurrences' field, up to 1,000,000 per run. The Actor will stop early if fewer records match your filters. |
| What is a taxon key and where do I find one? | A taxon key is GBIF's internal integer identifier for a taxon. Search for a species or group on GBIF.org, open the taxon page, and copy the number from the URL (e.g., 212 for Aves). |
| Can I filter by multiple countries at once? | Yes. The Country field accepts an array of ISO 3166-1 alpha-2 codes. Select as many as you need and the Actor will return records from any of them. |
| Does this Actor return images or media? | The Actor returns the occurrence record fields that GBIF provides through its search API, which include references to associated media but not the binary files themselves. |
| What does 'Has Coordinates' do? | When checked, the Actor only keeps records that include a decimal latitude and longitude. Use it when you need mappable data for GIS or spatial analysis. |
| Can I limit results to a single publishing dataset? | Yes. Paste a GBIF dataset UUID into the Dataset Key field and the Actor will restrict results to that dataset only. |
| What export formats are supported? | You can export your dataset in CSV, JSON, Excel, or XML from the Apify platform storage tab after the run completes. |
| How do I get fossil records only? | Select FOSSIL_SPECIMEN in the Basis Of Record filter. You can combine it with a taxon key and a year range to narrow further. |
| Can I schedule this Actor to run weekly? | Yes. Apify supports cron-style scheduling. Set the Actor to run on a schedule and it will collect new or updated occurrence records each time. |
Related actors
Browse the full ParseForge collection for more scrapers.
π Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.
β οΈ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by GBIF Secretariat. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.
Input
| Field | Type | What it does | Default |
|---|---|---|---|
| maxItems | integer | How many occurrences to collect per run. | 10 |
| taxonKey | integer | GBIF taxon key. Example: 212 = Aves (birds), 359 = Mammalia, 6 = Plantae. | not set |
| scientificName | string | Filter by scientific name. Example: Anas platyrhynchos. | not set |
| datasetKey | string | GBIF dataset UUID. Restricts results to a single publishing dataset. | not set |
| country | array | ISO 3166-1 alpha-2 country codes. Leave empty for worldwide. | not set |
| yearFrom | integer | Earliest event year (inclusive). Example: 2010. | not set |
| yearTo | integer | Latest event year (inclusive). Example: 2024. | not set |
| hasCoordinate | boolean | Only include records with decimal latitude/longitude. | false |
| basisOfRecord | array | Type of evidence backing the occurrence record. | not set |
Pricing
from $18.00 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| Result Item | Charged once per result collected. | $0.018 to $0.024 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
API
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~gbif-occurrence-search-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"helloWorld": 123
}' Examples
Input that runs as-is.
{
"helloWorld": 123
} Reviews
No reviews yet. Be the first.
Issues
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
