2026-05-20/2026-05-25
Got questions? See https://globalbioticinteractions.org/euroappa for information, open an issue and share your comments/questions, or reach out to Jorrit or Cala directly.
TLDR; This prototypes offers integrated plant-pollinator data products like euroappa-nuts-2021-gbif.csv, euroappa-nuts-2021-col.parquet, euroappa-nuts-2021.gpkg (view summary on map) and euroappa-cntr-2024-col.csv containing geospatially aligned plant-pollinator records as interpreted from selected versioned taxonomic resources (e.g., GBIF, Catalogue of Life) sourced from a versioned collection of existing species interaction datasets. For a more detailed description, see below.
# R code - getting started
# load duckdb libraries for efficient data access
library(duckdb)
library(duckplyr)
# connect
con <- dbConnect(duckdb())
# create view for convenient viewing
dbExecute(con,
"CREATE VIEW euroappa AS
SELECT * FROM PARQUET_SCAN('https://github.com/euroappa/euroappa.github.io/releases/download/euroappa.p3/euroappa-nuts-2021-col.parquet');")
# show first few records
tbl(con, "euroappa") |>
head() |>
collect()
# bash code for getting started
curl -L1 https://github.com/euroappa/euroappa.github.io/releases/download/euroappa.p3/euroappa-nuts-2021-col.tsv \
| head
Screenshots of EuroAPPA record density as generated using QGIS 3.34 and EuroAPPA p2 data products and NUTS 2021.
See https://github.com/euroappa/euroappa.github.io for associated files. Also, for other examples using these methods (e.g. duckdb, QGIS) see https://www.globalbioticinteractions.org/2026/01/22/euroappa/ .
The changes were facilitated by p2 feedback of Andrea, Ivan, Cala, Jeff, and Noa:
Eupeodes sp. to be replace by Eupeodes. Similarly, allow Taraxacum agg. to be replaced with Taraxacum using Nomer v0.6.5.As part of our https://en.wikipedia.org/wiki/Requirements_management process.
Note that there’s a difference between functional (e.g., generate a list of pollinators) and non-functional (e.g., solution should outlive the lifetime of the project, web accessible, data is versioned) requirements.
P2.FR1. generate a list of plant - pollinator interaction records for a specific geospatial/taxonomic range
P2.FR2. generate list of pollinators for a specific geospatial/taxonomic range
P2.FR3 allows for a way to provide feedback (not yet implemented)
A feature is “a prominent or distinctive user-visible aspect, quality, or characteristic of a software system or systems”, as defined by Kang et al. 1990. A feature implements one or more requirements.
P2.F1. offers a bash script to implement an automated workflow to generate euroappa data products. These data products are deposited in Zenodo and were derived a versioned copy of the GloBI Data Review Corpus [3] and selected taxonomic and geospatial databases ([1,2,4,5])
highlevel workflow:
synthesized interaction data
+ taxonomic alignment
+ geospatial alignment
= EuroAPPA P2 data products
P2.F2. offers data workflows and data products for generating of insect pollinators by country using SQL and DuckDB
Example query:
SELECT DISTINCT
sourceTaxonFamilyName,
sourceTaxonName
FROM
'https://github.com/euroappa/euroappa.github.io/releases/download/euroappa.p3/euroappa-nuts-2021-col.parquet'
WHERE
sourceTaxonPath ~ '.*[^A-Z]Insecta[ ].*'
AND sourceTaxonFamilyName NOT NULL
-- Ireland Statistical Regions https://en.wikipedia.org/wiki/NUTS_statistical_regions_of_Ireland
-- NUTS Level 3 West: IE042
AND NUTS_ID = 'IE042'
GROUP BY sourceTaxonFamilyName, sourceTaxonName
ORDER BY sourceTaxonFamilyName, sourceTaxonName;
first 5 records:
| sourceTaxonFamilyName | sourceTaxonName |
|---|---|
| Andrenidae | Andrena |
| Andrenidae | Andrena angustior |
| Andrenidae | Andrena cineraria |
| Andrenidae | Andrena clarkella |
| Andrenidae | Andrena minutula |
P2.F3. offers data products containing country specific pollinator-plant association record datasets:
Example query:
SELECT DISTINCT
sourceTaxonFamilyName as pollinatorFamily,
sourceTaxonName as pollinatorName,
targetTaxonFamilyName as plantFamily,
targetTaxonName as plantName,
FROM
'https://github.com/euroappa/euroappa.github.io/releases/download/euroappa.p3/euroappa-nuts-2021-col.parquet'
WHERE
sourceTaxonPath ~ '.*[^A-Z]Insecta[ ].*'
AND sourceTaxonFamilyName NOT NULL
AND targetTaxonFamilyName NOT NULL
-- Ireland Statistical Regions https://en.wikipedia.org/wiki/NUTS_statistical_regions_of_Ireland
-- NUTS Level 3 West: IE042
AND NUTS_ID = 'IE042'
GROUP BY sourceTaxonFamilyName, sourceTaxonName, targetTaxonFamilyName, targetTaxonName
ORDER BY sourceTaxonFamilyName, targetTaxonFamilyName, sourceTaxonName, targetTaxonName;
first 5 records:
| pollinatorFamily | pollinatorName | plantFamily | plantName |
|---|---|---|---|
| Andrenidae | Andrena | Apiaceae | Pimpinella saxifraga |
| Andrenidae | Andrena clarkella | Apiaceae | Pimpinella saxifraga |
| Andrenidae | Andrena semilaevis | Apiaceae | Pimpinella saxifraga |
| Andrenidae | Andrena angustior | Asteraceae | Leontodon crispus |
| Andrenidae | Andrena minutula | Asteraceae | Bellis perennis |
P2.F4. allows for online queries through services like https://shell.duckdb.org/ and SQL, a top 10 most used programming language. Example queries include listing the first five interactions associated with bee family Apidae as aligned with GBIF Taxonomy and NUTS 2021.
using query:
SELECT sourceTaxonFamilyName,sourceTaxonName,interactionTypeName,targetTaxonFamilyName,targetTaxonName
FROM 'https://github.com/euroappa/euroappa.github.io/releases/download/euroappa.p3/euroappa-nuts-2021-gbif.parquet'
WHERE sourceTaxonFamilyName = 'Apidae'
LIMIT 5;
P2.F5. allows for spatial queries through QGIS and euroappa-nuts-2021.gpkg, euroappa-nuts-2021-h3-level-4.gpkg, euroappa-nuts-2021-h3-level-6.gpkg and euroappa-nuts-2021.gpkg related (bigish dataset ~500MiB) data products.
P2.F6. data products (parquet files) are compatible with commercial data exploration platforms such as ArcGIS, MotherDuck, and have support for integration into R and Python.
P2.F7. data products (csv files) are compatible with Excel and Google Sheet etc.
| interaction data corpus | geospatial scheme | taxonomic scheme | products |
|---|---|---|---|
| GloBI 2026 [6] | NUTS 2021 euroappa-nuts-2021.gpkg | GBIF Taxonomic Backbone [1] | euroappa-nuts-2021-gbif.csv / .tsv / .parquet |
| GloBI 2026 [6] | CNTR 2024 euroappa-cntr-2024.gpkg | GBIF Taxonomic Backbone [1] | euroappa-cntr-2024-gbif.csv / .tsv / .parquet |
| GloBI 2026 [6] | NUTS 2021 euroappa-nuts-2021.gpkg | Catalogue of Life [2] | euroappa-nuts-2021-col.csv / .tsv / .parquet |
| GloBI 2026 [6] | CNTR 2024 euroappa-cntr-2024.gpkg | Catalogue of Life [2] | euroappa-cntr-2024-col.csv / .tsv / .parquet |
As generated from
duckdb \
-markdown \
-c "describe 'https://github.com/euroappa/euroappa.github.io/releases/download/euroappa.p3/euroappa-nuts-2021-col.parquet';"
| column_name | column_type | null | key | default | extra |
|---|---|---|---|---|---|
| decimalLatitude | DOUBLE | YES | NULL | NULL | NULL |
| decimalLongitude | DOUBLE | YES | NULL | NULL | NULL |
| sourceVerbatimTaxonId | VARCHAR | YES | NULL | NULL | NULL |
| sourceVerbatimTaxonName | VARCHAR | YES | NULL | NULL | NULL |
| sourceVerbatimTaxonPath | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonomicScope | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonNameRelation | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonId | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonName | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonAuthority | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonRank | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonFamilyId | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonFamilyName | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonPathIds | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonPath | VARCHAR | YES | NULL | NULL | NULL |
| interactionTypeId | VARCHAR | YES | NULL | NULL | NULL |
| interactionTypeName | VARCHAR | YES | NULL | NULL | NULL |
| targetVerbatimTaxonId | VARCHAR | YES | NULL | NULL | NULL |
| targetVerbatimTaxonName | VARCHAR | YES | NULL | NULL | NULL |
| targetVerbatimTaxonPath | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonomicScope | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonNameRelation | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonId | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonName | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonAuthority | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonRank | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonFamilyId | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonFamilyName | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonPathIds | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonPath | VARCHAR | YES | NULL | NULL | NULL |
| eventDate | TIMESTAMP | YES | NULL | NULL | NULL |
| referenceCitation | VARCHAR | YES | NULL | NULL | NULL |
| citation | VARCHAR | YES | NULL | NULL | NULL |
| namespace | VARCHAR | YES | NULL | NULL | NULL |
| datasetReviewUrl | VARCHAR | YES | NULL | NULL | NULL |
| lastSeenAt | TIMESTAMP | YES | NULL | NULL | NULL |
| CNTR_CODE | VARCHAR | YES | NULL | NULL | NULL |
| NUTS_ID | VARCHAR | YES | NULL | NULL | NULL |
| NUTS_NAME | VARCHAR | YES | NULL | NULL | NULL |
| LEVL_CODE | BIGINT | YES | NULL | NULL | NULL |
with an example record from NUTS ID PT200 (Região Autónoma dos Açores) shown below as generated via
duckdb \
-csv \
-c "select * from 'https://github.com/euroappa/euroappa.github.io/releases/download/euroappa.p3/euroappa-nuts-2021-col.parquet' WHERE NUTS_ID = 'PT200' limit 1;" \
| mlr --icsv --oxtab cat
yielding
decimalLatitude 38.5416407112
decimalLongitude -28.449280411
sourceVerbatimTaxonId https://www.inaturalist.org/taxa/469701
sourceVerbatimTaxonName Attalus lusitanicus
sourceVerbatimTaxonPath Animalia | Arthropoda | Insecta | Coleoptera | Melyridae | Attalus
sourceTaxonomicScope Animalia
sourceTaxonNameRelation HAS_ACCEPTED_NAME
sourceTaxonId COL:LNN3T
sourceTaxonName Attalus lusitanicus
sourceTaxonAuthority Erichson, 1840
sourceTaxonRank species
sourceTaxonFamilyId COL:KVJMP
sourceTaxonFamilyName Melyridae
sourceTaxonPathIds COL:CS5HF | COL:N | COL:RT | COL:L2655 | COL:H6 | COL:C2L | COL:DDHNW | COL:KZYT4 | COL:KV5BM | COL:KVJMP | COL:DDNFL | COL:DDNFZ | COL:DDNGH | COL:LNN3T
sourceTaxonPath Eukaryota | Animalia | Arthropoda | Hexapoda | Insecta | Coleoptera | Polyphaga | Cucujiformia | Cleroidea | Melyridae | Malachiinae | Malachiini | Attalus | Attalus lusitanicus
interactionTypeId http://purl.obolibrary.org/obo/RO_0002622
interactionTypeName visitsFlowersOf
targetVerbatimTaxonId https://www.inaturalist.org/taxa/64114
targetVerbatimTaxonName Ageratina adenophora
targetVerbatimTaxonPath Plantae | Tracheophyta | Magnoliopsida | Asterales | Asteraceae | Ageratina | Ageratina adenophora
targetTaxonomicScope Plantae
targetTaxonNameRelation HAS_ACCEPTED_NAME
targetTaxonId COL:65RW9
targetTaxonName Ageratina adenophora
targetTaxonAuthority (Spreng.) R.M.King & H.Rob.
targetTaxonRank species
targetTaxonFamilyId COL:622TP
targetTaxonFamilyName Asteraceae
targetTaxonPathIds COL:CS5HF | COL:P | COL:CMQ8S | COL:TP | COL:MG | COL:ST | COL:622TP | COL:J6T | COL:KV97G | COL:KVM35 | COL:QPD | COL:65RW9
targetTaxonPath Eukaryota | Plantae | Pteridobiotina | Tracheophyta | Magnoliopsida | Asterales | Asteraceae | Asteroideae | Eupatorieae | Oxylobinae | Ageratina | Ageratina adenophora
eventDate 2024-03-28 13:54:00
referenceCitation https://www.inaturalist.org/observations/204811374
citation http://iNaturalist.org is a place where you can record what you see in nature, meet other nature lovers, and learn about the natural world.
namespace globalbioticinteractions/inaturalist
datasetReviewUrl https://zenodo.org/search?q=%22hash://md5/84769ffbbd03f0580b2adbde67a621e4%22
lastSeenAt 2026-05-06 15:48:15.203
CNTR_CODE PT
NUTS_ID PT200
NUTS_NAME Região Autónoma dos Açores
LEVL_CODE 3
As generated from
duckdb \
-markdown \
-c "describe 'https://github.com/euroappa/euroappa.github.io/releases/download/euroappa.p3/euroappa-cntr-2024-col.parquet';"
| column_name | column_type | null | key | default | extra |
|---|---|---|---|---|---|
| decimalLatitude | DOUBLE | YES | NULL | NULL | NULL |
| decimalLongitude | DOUBLE | YES | NULL | NULL | NULL |
| sourceVerbatimTaxonId | VARCHAR | YES | NULL | NULL | NULL |
| sourceVerbatimTaxonName | VARCHAR | YES | NULL | NULL | NULL |
| sourceVerbatimTaxonPath | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonomicScope | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonNameRelation | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonId | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonName | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonAuthority | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonRank | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonFamilyId | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonFamilyName | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonPathIds | VARCHAR | YES | NULL | NULL | NULL |
| sourceTaxonPath | VARCHAR | YES | NULL | NULL | NULL |
| interactionTypeId | VARCHAR | YES | NULL | NULL | NULL |
| interactionTypeName | VARCHAR | YES | NULL | NULL | NULL |
| targetVerbatimTaxonId | VARCHAR | YES | NULL | NULL | NULL |
| targetVerbatimTaxonName | VARCHAR | YES | NULL | NULL | NULL |
| targetVerbatimTaxonPath | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonomicScope | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonNameRelation | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonId | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonName | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonAuthority | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonRank | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonFamilyId | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonFamilyName | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonPathIds | VARCHAR | YES | NULL | NULL | NULL |
| targetTaxonPath | VARCHAR | YES | NULL | NULL | NULL |
| eventDate | TIMESTAMP | YES | NULL | NULL | NULL |
| referenceCitation | VARCHAR | YES | NULL | NULL | NULL |
| citation | VARCHAR | YES | NULL | NULL | NULL |
| namespace | VARCHAR | YES | NULL | NULL | NULL |
| datasetReviewUrl | VARCHAR | YES | NULL | NULL | NULL |
| lastSeenAt | TIMESTAMP | YES | NULL | NULL | NULL |
| ISO3_CODE | VARCHAR | YES | NULL | NULL | NULL |
| CNTR_ID | VARCHAR | YES | NULL | NULL | NULL |
| NAME_ENGL | VARCHAR | YES | NULL | NULL | NULL |
With example record from country code IRL (Ireland) generated via:
duckdb \
-csv \
-c "SELECT * from 'https://github.com/euroappa/euroappa.github.io/releases/download/euroappa.p3/euroappa-cntr-2024-col.parquet' WHERE ISO3_CODE = 'IRL' limit 1;" \
| mlr --icsv --oxtab cat
yielding
decimalLatitude 53.016666412353516
decimalLongitude -9.071666717529297
sourceVerbatimTaxonId NULL
sourceVerbatimTaxonName Bombus hortorum
sourceVerbatimTaxonPath Hymenoptera | Apidae | Bombus
sourceTaxonomicScope Animalia
sourceTaxonNameRelation HOMONYM_OF
sourceTaxonId COL:MFKV
sourceTaxonName Bombus hortorum
sourceTaxonAuthority (Linnaeus, 1761)
sourceTaxonRank species
sourceTaxonFamilyId COL:6KD
sourceTaxonFamilyName Apidae
sourceTaxonPathIds COL:CS5HF | COL:N | COL:RT | COL:L2655 | COL:H6 | COL:HYM | COL:KZPW7 | COL:KZMNP | COL:625GP | COL:6KD | COL:J5V | COL:KN5 | COL:62H8K | COL:MFKV
sourceTaxonPath Eukaryota | Animalia | Arthropoda | Hexapoda | Insecta | Hymenoptera | Apocrita | Aculeata | Apoidea | Apidae | Apinae | Bombini | Bombus | Bombus hortorum
interactionTypeId http://purl.obolibrary.org/obo/RO_0002455
interactionTypeName pollinates
targetVerbatimTaxonId NULL
targetVerbatimTaxonName Centaurea nigra
targetVerbatimTaxonPath Asterales | Asteraceae | Centaurea
targetTaxonomicScope Plantae
targetTaxonNameRelation HOMONYM_OF
targetTaxonId COL:S73C
targetTaxonName Centaurea nigra
targetTaxonAuthority L.
targetTaxonRank species
targetTaxonFamilyId COL:622TP
targetTaxonFamilyName Asteraceae
targetTaxonPathIds COL:CS5HF | COL:P | COL:CMQ8S | COL:TP | COL:MG | COL:ST | COL:622TP | COL:B3HBG | COL:KV3QN | COL:KV4DC | COL:3K5Z | COL:S73C
targetTaxonPath Eukaryota | Plantae | Pteridobiotina | Tracheophyta | Magnoliopsida | Asterales | Asteraceae | Carduoideae | Cardueae | Centaureinae | Centaurea | Centaurea nigra
eventDate 2017-08-04 00:00:00
referenceCitation doi:10.1111/1365-2664.13990
citation Lanuza et al. (2025), EuPPollNet: A European Database of Plant-Pollinator Networks. Global Ecol Biogeogr, 34: e70000. https://doi.org/10.1111/geb.70000
namespace JoseBSL/EuPPollNet
datasetReviewUrl https://zenodo.org/search?q=%22hash://md5/1d657817b5537587ce94beeea1af48ef%22
lastSeenAt 2026-05-06 22:50:55.128
ISO3_CODE IRL
CNTR_ID IE
NAME_ENGL Ireland
[1] GBIF Secretariat (2023). GBIF Backbone Taxonomy. Checklist dataset https://doi.org/10.15468/39omei
[2] Bánki, O., Roskov, Y., Döring, M., Ower, G., Vandepitte, L., Hobern, D., Remsen, D., Schalk, P., DeWalt, R. E., Keping, M., Miller, J., Orrell, T., Aalbu, R., Adlard, R., Adriaenssens, E., Aedo, C., Aescht, E., Akkari, N., Alonso-Zarazaga, M. A., et al. (2022). Catalogue of Life Checklist (Version 2022-01-14). Catalogue of Life. https://doi.org/10.48580/d4tp
[3] Poelen, J. H. (ed . ) . (2026). Nomer Corpus of Taxonomic Resources hash://sha256/14b77b8b7561fea78691723c093b62ce3dffb3672a790cd9da0ab3e045145387 hash://md5/8ed9e0756e3d8ac23c014dbdb9006e4e (0.33) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.19924910
[4] Administrative Units: Countries (2024) https://ec.europa.eu/eurostat/web/gisco/geodata/administrative-units/countries https://gisco-services.ec.europa.eu/distribution/v2/nuts/gpkg/CNTR_RG_01M_2024_4326.gpkg hash://md5/f1472535e38a026bd4df4228caf01f82 accessed May 2026.
[5] Territorial units for statistics (NUTS) (2021) https://ec.europa.eu/eurostat/web/gisco/geodata/statistical-units/territorial-units-statistics ‘https://gisco-services.ec.europa.eu/distribution/v2/nuts/gpkg/NUTS_RG_01M_2021_4326.gpkg’ hash://md5/9e1146e52a2cb5e4a34153facaf50b0b
[6] Poelen, J. H., & Global Biotic Interactions Community. (2026). Global Biotic Interactions (GloBI) Review Dataset Corpus hash://md5/9f9f111af19f657e31ce04b9d422eed4 hash://sha256/8467e21bf1194cbbcb201b3ee2bbee0e2d657a772b4e3ce62fc63afe9116c626 [Data set]. Zenodo. https://doi.org/10.5281/zenodo.20072186