# GBIF Animal Occurrence Records - CC0 Georeferenced (`nexgensignal/gbif-animal-occurrence-records`) Actor

GBIF georeferenced animal-kingdom occurrences released under CC0 1.0 as clean per-record data - taxonomy, decimal coordinates, locality, dates and source. Collector/identifier names excluded. 100k accessible slice of ~226.6M. $0.05 per record.

- **URL**: https://apify.com/nexgensignal/gbif-animal-occurrence-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 animal occurrence records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## GBIF Animal Occurrence Records - CC0 Georeferenced

GBIF-mediated **animal occurrences** as clean, per-record biodiversity data - **one record per
occurrence** the publisher released under **CC0 1.0**, each carrying decimal latitude/longitude. Taxonomy,
institution codes, locality and dates, with **collector and identifier person names structurally excluded**.

### What one record represents

The source is **GBIF** (the Global Biodiversity Information Facility) occurrence search API, filtered to the
animal kingdom (`kingdomKey=1`) with coordinates (`hasCoordinate=true`), released under CC0. Each record is
**one occurrence**: its GBIF id, publishing dataset key, basis of record, catalogue/occurrence identifiers and
institution/collection codes; the full taxonomy (kingdom through species, plus the accepted scientific name,
taxon rank and keys); locality (country, country code, state/province) with decimal latitude/longitude,
coordinate uncertainty, elevation and depth; the event date (year, month, day and verbatim date); and type
status, establishment means and individual count where recorded.

### Sample output

![Sample output — GBIF Animal Occurrence Records - CC0 Georeferenced](https://api.apify.com/v2/key-value-stores/IXCaMKjxSmUTLHhmq/records/gbif-animal-occurrence-records.png)

*Real rows from a live run of this actor (first 5 rows, selected columns).*

One full record from the same run, exactly as delivered:

```json
{
  "gbif_id": "1826325281",
  "dataset_key": "7e380070-f762-11e1-a439-00145eb45e9a",
  "basis_of_record": "PRESERVED_SPECIMEN",
  "occurrence_id": "6ec89d63-5cc1-4b7c-b020-addf780ffbf7",
  "catalog_number": "BMNH(E)1900813",
  "institution_code": "NHMUK",
  "collection_code": "BMNH(E)",
  "publishing_org_key": "19456090-b49a-11d8-abeb-b8a03c50a862",
  "kingdom": "Animalia",
  "phylum": "Arthropoda",
  "class_name": "Insecta",
  "order_name": "Lepidoptera",
  "family": "Geometridae",
  "genus": "Agriopis",
  "species": "Agriopis marginaria",
  "scientific_name": "Agriopis marginaria (Fabricius)",
  "accepted_scientific_name": "Agriopis marginaria (Fabricius)",
  "taxon_rank": "SPECIES",
  "taxon_key": 5769068,
  "kingdom_key": 1,
  "type_status": null,
  "establishment_means": null,
  "individual_count": 1,
  "country": "Ireland",
  "country_code": "IE",
  "state_province": "Wicklow",
  "decimal_latitude": 52.9323,
  "decimal_longitude": -6.2311,
  "coordinate_uncertainty_m": null,
  "elevation": null,
  "depth": null,
  "year": 2026,
  "month": 1,
  "day": null,
  "event_date": "2026-01",
  "license": "CC0 1.0",
  "record_id": "1826325281",
  "source": "GBIF (Global Biodiversity Information Facility)",
  "source_dataset": "occurrence/search?kingdomKey=1&hasCoordinate=true&license=CC0_1_0",
  "licence": "GBIF-mediated occurrence data. This cell delivers ONLY records the publisher released under CC0 1.0 (public-domain dedication; license=CC0_1_0); no rights are reserved on the data values. Use is governed by the GBIF Terms of Use (https://www.gbif.org/terms). GBIF asks that GBIF.org and the publishing datasets be cited; dataset_key identifies the publisher.",
  "attribution": "GBIF.org and the publishing institutions (per dataset_key)",
  "caveat": "Georeferenced animal-kingdom (kingdomKey=1) occurrence records released under CC0 1.0 (about 226.6 million match the filter live), each carrying decimal latitude/longitude. GBIF caps offset paging at 100,000, so this cell delivers the first 100,000-record accessible slice; narrow downstream by year, country or dataset to reach records past the cap. Collector and identifier person names (recordedBy, identifiedBy and every *By field) are structurally excluded.",
  "observed_at": "2026-09-25T17:23:10Z"
}
```

### Coverage and volume

About **226.6 million** georeferenced CC0 animal occurrences match the filter live - **226,606,952** measured
at build time from the API's match count. Every record carries coordinates.

**Sol's Wave-3 index put this door at about 226,658,291 matches; measured live at build time 226,606,952 match
under CC0 with coordinates - the live figure is what this listing quotes, delivered as a 100,000-record
accessible slice.**

GBIF caps offset paging at **100,000** (a request past that returns HTTP 400), so this cell delivers the first
**100,000-record accessible slice** of the match set. To reach records beyond the cap, narrow the query
downstream by a facet the API partitions on - `year`, `country` or `datasetKey` - each of which yields its own
sub-100,000 window; the baked filters (kingdom, coordinates and the CC0 licence) always apply. The Actor pages
300 occurrences at a time and stops as soon as your **Maximum records** cap or the 100,000 ceiling is met.

### Licence and attribution

This cell delivers **only** occurrences the publisher released under **CC0 1.0** - a public-domain dedication
with no rights reserved on the data values. The licence filter (`license=CC0_1_0`) is **baked into every
query**, not a buyer option, and a per-record assertion **rejects any occurrence whose licence is not CC0**
(verified with a planted-row test). The full notice travels on every record:

> GBIF-mediated occurrence data. This cell delivers ONLY records the publisher released under CC0 1.0 (public-domain dedication; license=CC0\_1\_0); no rights are reserved on the data values. Use is governed by the GBIF Terms of Use (https://www.gbif.org/terms). GBIF asks that GBIF.org and the publishing datasets be cited; dataset\_key identifies the publisher.

GBIF asks that GBIF.org and the contributing datasets be cited; `dataset_key` on every record identifies the
publisher so you can attribute or trace provenance per row.

### Person-data policy

GBIF occurrences carry collector and identifier person names (`recordedBy`, `identifiedBy`, and every `*By`
/ `*ByIDs` field). This Actor **structurally excludes** all of them: they are never copied into a record. Only
institution and collection **codes**, taxonomy, locality, coordinates and dates are emitted, and a per-record
assertion rejects any collector/observer/person field (verified with a planted-field test). No natural-person
data is processed.

### Interpretation caveat

Georeferenced animal-kingdom (kingdomKey=1) occurrence records released under CC0 1.0 (about 226.6 million match the filter live), each carrying decimal latitude/longitude. GBIF caps offset paging at 100,000, so this cell delivers the first 100,000-record accessible slice; narrow downstream by year, country or dataset to reach records past the cap. Collector and identifier person names (recordedBy, identifiedBy and every \*By field) are structurally excluded.

Values are reproduced verbatim from the API; the Actor never rewrites a field. Coordinates are the publisher's
decimal degrees; because `hasCoordinate=true` is baked, every record has them. `individual_count` and
`type_status` are present only where the publisher recorded them.

### Data quality and freshness

Numeric fields (coordinates, uncertainty, elevation, depth, year/month/day, taxon keys, individual count) are
delivered as real numbers; the licence label is normalised to `CC0 1.0`. Delivery is keyed on the stable GBIF
id, so the dataset is safe to diff, deduplicate or upsert. Every run re-reads the live API, so the data is as
fresh as GBIF's index, and each record's `observed_at` stamp dates the snapshot. The run's `RUN_RECEIPT`
records the live match count alongside how many records were delivered and charged, and the 100,000 hard cap.

### Provenance and compliance

Every run reads `api.gbif.org/robots.txt` at runtime; the gate result (URL, status, byte length, SHA-256 of
the policy) is written to the run's `RUN_RECEIPT`, and the occurrence-search path is confirmed crawlable before
any data request. The API is keyless. The Actor never bypasses a block or fetches through a mirror.

### Inputs

- **Maximum records** (`maxRecords`) - hard cap on occurrence records delivered and billed (also ceilinged at
  the 100,000 accessible slice). You are billed only for records actually delivered.

### Output

Records land in the Actor's default dataset and export as JSON, CSV, Excel or via the Apify API. A tabular
**overview view** surfaces the GBIF id, scientific name, basis of record, country code, coordinates, year and
institution code.

### Fields in detail

The record leads with `gbif_id` and `dataset_key`, then the basis of record and identifiers (`occurrence_id`,
`catalog_number`, `institution_code`, `collection_code`, `publishing_org_key`); the taxonomy block (`kingdom`,
`phylum`, `class_name`, `order_name`, `family`, `genus`, `species`, `scientific_name`,
`accepted_scientific_name`, `taxon_rank`, `taxon_key`, `kingdom_key`); type/ecology (`type_status`,
`establishment_means`, `individual_count`); geography and time (`country`, `country_code`, `state_province`,
`decimal_latitude`, `decimal_longitude`, `coordinate_uncertainty_m`, `elevation`, `depth`, `year`, `month`,
`day`, `event_date`); and the normalised `license`. The provenance block closes every record.

### The third GBIF cell

This completes the fleet's GBIF trio. The three cells draw the same door and the same recipe, and stay distinct
by the baked occurrence filter: the preserved-specimen cell is museum/herbarium specimens (basis of record),
the plant cell is the plant kingdom georeferenced, and this one is the **animal kingdom georeferenced**. Each
is a windowed, licence-clean feed of its slice; together they cover the CC0 georeferenced animals, the CC0
georeferenced plants, and the CC0 preserved specimens without overlapping in scope.

### Typical uses

Nature-risk, conservation and ecology teams use this cell to screen animal presence - a windowed, licence-clean
occurrence feed with coordinates, ready to drop into a species-distribution model, a range map, or a
site-screening query, without touching GBIF's Darwin Core archives or download API. Because the taxonomy is
fully expanded and coordinates are real numbers, the records feed straight into spatial joins against exposure
or land-use data. To assemble a national or multi-year panel that exceeds 100,000 records, run the cell once
per `year`, `country` or `datasetKey` window and concatenate - every window inherits the baked CC0, kingdom and
coordinate filters. A scheduled run keeps a downstream table current with GBIF's index, and the stable GBIF id
makes the dataset safe to upsert.

### Scaling and limits

Set **Maximum records** low to sample cheaply or high to pull toward the 100,000 accessible slice. The Actor
pages the API 300 records at a time and delivers incrementally, so memory stays flat, and you are billed only
for what is delivered. Because the source holds far more than 100,000 matches, treat this cell as a windowed
feed and concatenate windows for a larger panel; re-running picks up GBIF's newly indexed occurrences, and each
record's `observed_at` stamp dates the snapshot.

### Sibling Actors

It sits beside the fleet's GBIF preserved-specimen and plant-occurrence cells (the same door, different baked filters) and completes the fleet's CC0 GBIF coverage. It shares its engineering - the runtime robots gate, offset paging with the licence
filter baked in, push-then-charge billing and verbatim-value discipline - with the fleet's other GBIF cells,
from which it differs only in the baked occurrence filter (animal vs plant vs preserved specimen).

# Actor input Schema

## `maxRecords` (type: `integer`):

Maximum occurrence records delivered and billed. You are billed only for records delivered. GBIF caps the accessible slice at 100,000; about 226.6M georeferenced CC0 animal records match.

## Actor input object example

```json
{
  "maxRecords": 500
}
```

# Actor output Schema

## `results` (type: `string`):

The delivered GBIF animal occurrence record.

# 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 = {
    "maxRecords": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/gbif-animal-occurrence-records").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 = { "maxRecords": 500 }

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/gbif-animal-occurrence-records").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 '{
  "maxRecords": 500
}' |
apify call nexgensignal/gbif-animal-occurrence-records --silent --output-dataset

```

## MCP server setup

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

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/h1gde7nKWuM3kfQX5/builds/BxwXiqLvh6yZiZpLX/openapi.json
