# GBIF Species & Taxonomy Scraper (`openclawmara/gbif-scraper`) Actor

Scrape GBIF species taxonomy & occurrence data. Extract scientific names, common names, kingdoms, habitats, and classifications from 2.4B+ biodiversity records. Perfect for ecological research, biodiversity monitoring, taxonomy databases, and citizen science apps.

- **URL**: https://apify.com/openclawmara/gbif-scraper.md
- **Developed by:** [OpenClaw Mara](https://apify.com/openclawmara) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 record scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## GBIF Species & Taxonomy Scraper — 2.4B+ Biodiversity Records

**$0.005 per record** · Extract species, taxonomy, and geographic occurrences from **[GBIF](https://gbif.org)** — the Global Biodiversity Information Facility with **2.4B+ occurrence records** from 80,000+ datasets. **No API key needed.**

Built for **biodiversity research**, **conservation platforms**, **species distribution models**, **citizen-science dashboards**, and **RAG/LLM corpora on ecology and taxonomy**.

***

### What You Get

- **Species search** — by scientific name, common name, or keyword (full GBIF match API)
- **Full taxonomy** — kingdom → phylum → class → order → family → genus → species
- **IUCN Red List** — conservation status for threatened species
- **Geographic occurrences** — lat/long, country, year, basis-of-record, institution
- **Country filter** — narrow occurrences to a specific region (ISO 2-letter code)
- **Coordinate filter** — georeferenced records only (ready for GIS / map rendering)
- **Structured JSON** — stable GBIF keys, ready for downstream pipelines
- **Public API** — no authentication, no quota headaches

***

### 4 Use Cases (ready-to-run JSON inputs)

#### 1. Conservation tracker (endangered species in a country)

```json
{
  "speciesQueries": ["Ailuropoda melanoleuca"],
  "includeOccurrences": true,
  "maxOccurrences": 50,
  "country": "CN",
  "hasCoordinate": true
}
```

All georeferenced observations of the giant panda in China — great for conservation dashboards and protected-area monitoring.

#### 2. Taxonomy lookup for a research dataset

```json
{
  "speciesQueries": ["Quercus", "Fagus", "Acer"],
  "maxSpecies": 30,
  "includeOccurrences": false
}
```

Taxonomy for three common tree genera — returns canonical names, IUCN status, and higher ranks. Use to normalize messy species labels in a field dataset.

#### 3. Species distribution model seed data

```json
{
  "speciesQueries": ["Panthera onca"],
  "includeOccurrences": true,
  "maxOccurrences": 500,
  "hasCoordinate": true
}
```

500 georeferenced jaguar observations worldwide — feed directly into MaxEnt / ecological niche models.

#### 4. Regional biodiversity survey

```json
{
  "speciesQueries": ["bird", "mammal", "reptile"],
  "maxSpecies": 50,
  "includeOccurrences": true,
  "maxOccurrences": 100,
  "country": "BR"
}
```

Broad biodiversity snapshot for Brazil — top species per keyword plus occurrence records. Useful for environmental impact reports.

***

### Input Schema

| Field | Type | Default | Description |
|---|---|---|---|
| `speciesQueries` | string\[] | `[]` | Search species by name (scientific or vernacular) |
| `maxSpecies` | integer | `20` | Max species per query (1–300) |
| `includeOccurrences` | boolean | `false` | Also fetch occurrence records |
| `maxOccurrences` | integer | `50` | Max occurrence records per species |
| `country` | string | `""` | ISO 2-letter country filter (`US`, `BR`, `AU`, …) |
| `hasCoordinate` | boolean | `true` | Only include occurrences with GPS coordinates |

### Output (sample — species + occurrence)

```json
{
  "type": "species",
  "key": 2433433,
  "scientificName": "Ailuropoda melanoleuca (David, 1869)",
  "canonicalName": "Ailuropoda melanoleuca",
  "vernacularName": "Giant Panda",
  "kingdom": "Animalia",
  "family": "Ursidae",
  "genus": "Ailuropoda",
  "rank": "SPECIES",
  "iucnRedListCategory": "VU",
  "numOccurrences": 1832,
  "occurrences": [
    {
      "key": 4013456123,
      "decimalLatitude": 30.72,
      "decimalLongitude": 103.04,
      "country": "China",
      "year": 2023,
      "basisOfRecord": "HUMAN_OBSERVATION",
      "institutionCode": "iNaturalist"
    }
  ]
}
```

***

### Pricing & Performance

- **Pay-per-event:** $0.005 per species or occurrence record
- **Typical cost:** $0.05 for 10 records, $0.50 for 100, $5 for 1,000
- **Speed:** ~15–25 records/second (polite 200 ms pacing on GBIF API)
- **Free Apify tier:** $5/month credit = ~1,000 records/month

Compare to commercial biodiversity data APIs: GBIF is **CC0 / CC-BY** licensed, you pay only for structured extraction and delivery.

***

### Integrations

- **Zapier / Make / n8n** — new occurrences → Airtable / Slack / Notion
- **Vector DBs (Pinecone / Weaviate / Qdrant)** — embed species descriptions for semantic "similar species"
- **LangChain / LlamaIndex** — RAG over taxonomy + occurrence metadata
- **Neo4j / Graphiti** — species → family → occurrence → country graph
- **PostGIS / QGIS** — import lat/long for map rendering
- **R / Python (pandas)** — ML-ready tables for species distribution models
- **Python SDK**
  ```python
  from apify_client import ApifyClient
  client = ApifyClient("<APIFY_TOKEN>")
  run = client.actor("Helpermara/gbif-scraper").call(
      run_input={"speciesQueries": ["Panthera onca"], "includeOccurrences": True, "maxOccurrences": 100}
  )
  for item in client.dataset(run["defaultDatasetId"]).iterate_items():
      print(item["scientificName"], item.get("iucnRedListCategory"))
  ```

***

### FAQ

**Do I need a GBIF API key?** No. GBIF's public API is free and unauthenticated for all read operations.

**How fresh is the data?** Live — every request hits `api.gbif.org/v1` directly. GBIF itself updates continuously as new datasets are published.

**Can I get historical occurrence data?** Yes — GBIF aggregates records going back centuries (museum specimens) through to modern citizen-science observations.

**What's the IUCN coverage?** IUCN Red List category is filled when GBIF has matched it; not all species have formal assessments.

**Coordinate uncertainty?** Each occurrence includes what GBIF returns — set `hasCoordinate: true` to filter out records without a lat/long.

**License of the data?** Occurrences retain their original license (CC0 / CC-BY / CC-BY-NC). Always attribute datasets when publishing.

***

### Keywords

gbif scraper, biodiversity api, species data, taxonomy api, iucn red list, species occurrences, ecological data, conservation data, occurrence records, species distribution model, maxent, gis biodiversity, ebird alternative, inaturalist alternative, openaire biodiversity, environmental monitoring, ecology dataset, open biodiversity, gbif download, species search api

***

### Companions (cross-promo)

- **[openlibrary-scraper](https://apify.com/Helpermara/openlibrary-scraper)** — books/authors
- **[crossref-scraper](https://apify.com/Helpermara/crossref-scraper)** — DOI metadata
- **[semantic-scholar-scraper](https://apify.com/Helpermara/semantic-scholar-scraper)** — academic papers
- **[zenodo-scraper](https://apify.com/Helpermara/zenodo-scraper)** — research datasets

***

### Changelog

- **2026-04-24** — Extended README with use cases, integrations, and FAQ
- **2026-03-05** — Initial release: species search + occurrences + country filter

# Actor input Schema

## `speciesQueries` (type: `array`):

Search species by name (e.g. 'Ailuropoda melanoleuca', 'giant panda', 'orchid')

## `maxSpecies` (type: `integer`):

Maximum species to return per search query

## `includeOccurrences` (type: `boolean`):

Fetch geographic occurrence records for each species (where observed/collected)

## `maxOccurrences` (type: `integer`):

Maximum occurrence records per species

## `country` (type: `string`):

Filter occurrences by country (ISO 2-letter code, e.g. 'US', 'BR', 'AU'). Leave empty for global.

## `hasCoordinate` (type: `boolean`):

Only include occurrences with GPS coordinates

## Actor input object example

```json
{
  "maxSpecies": 20,
  "includeOccurrences": false,
  "maxOccurrences": 50,
  "hasCoordinate": true
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("openclawmara/gbif-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("openclawmara/gbif-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call openclawmara/gbif-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,openclawmara/gbif-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/kzpU8oHamOaZcdjS0/builds/AsdtufeXeiZyy5HX6/openapi.json
