EUDR Plot Deforestation Risk Screener
Pricing
Pay per usage
EUDR Plot Deforestation Risk Screener
Per-plot deforestation risk screening for EUDR due diligence: checks polygons against official open UMD Hansen and EC JRC forest-change layers, cross-checks signals, runs geometry QC, pins layer versions and emits evidence records. Risk indicators - not a compliance verdict.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Atlas
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Per-plot deforestation risk screening for Regulation (EU) 2023/1115 ("EUDR") due-diligence workflows, built entirely on official, openly licensed geospatial layers. Submit plot polygons; get back a conservative risk flag, per-layer evidence, geometry QC, pinned layer versions and full provenance — one dataset record per plot.
This Actor produces risk indicators and evidence records only. It is not a compliance verdict, legal clearance, or legal/regulatory/scientific advice. Final due-diligence responsibility always rests with the economic operator.
Who this is for
Compliance managers, sustainability leads and EUDR consultants at small traders, roasters, importers and consultancies who need to screen many plots quickly and keep an auditable record of which map versions were checked, when — without GIS staff or enterprise monitoring contracts.
What it checks
| Layer | What it detects | License / access | Version pinning |
|---|---|---|---|
UMD Hansen Global Forest Change (lossyear) | Annual tree-cover loss events, 2000–latest edition | CC BY 4.0 — public bucket, verified 2026-08-26 | Discovered live from the public bucket listing (e.g. GFC-2025-v1.13), reported in every record |
EC JRC Tropical Moist Forest (DeforestationYear) | Humid tropical moist forest deforestation event year, 1982–current edition | Free of charge, without restriction of use (Copernicus); attribution required — verified 2026-08-26 | The tile endpoint serves the current production vintage without exposing which one it is; records report this explicitly |
Both layers are fetched anonymously over their official distribution endpoints. No scraping, no circumvention, no third-party re-hosting.
How the flag logic works (conservative by design)
- A plot is
flaggedwhen any checked layer shows forest-change events strictly after the cut-off date (default2020-12-31, the EUDR reference date). - A plot is
clear_on_checked_layersonly when all requested layers were checked, had examinable pixels over the plot, and none shows a post-cutoff signal. - Anything else is
inconclusive: a requested layer failed or was skipped (e.g. tile budget), the plot is sub-pixel, or coverage was insufficient. Inconclusive results are never silently "clear". - Layer disagreement is preserved, not averaged away:
hansen_only/jrc_onlycross-check classifications are reported with an explanatory note (JRC TMF maps humid tropical moist forest domains only).
Input
{"plots": [{"plotId": "lot-42-plot-1","commodity": "coffee","geometry": {"type": "Polygon","coordinates": [[[-45.2523, -13.0336], [-45.2477, -13.0336], [-45.2477, -13.029], [-45.2523, -13.029], [-45.2523, -13.0336]]]}},{ "plotId": "lot-42-plot-2", "commodity": "cocoa", "wkt": "POLYGON((...))" }],"cutoffDate": "2020-12-31","layers": ["hansen_gfc", "jrc_tmf"],"maxTilesPerRun": 4,"maxCacheEntries": 300}
plots[].geometryaccepts GeoJSON Polygon/MultiPolygon in EPSG:4326 (WGS84), orplots[].wktas POLYGON/MULTIPOLYGON text. Coordinates must be[longitude, latitude].commodityis metadata carried into the output (cattle,cocoa,coffee,oil_palm,rubber,soy,wood,other,unspecified). It does not change the analysis.- Up to 200 plots per run. Plot IDs must be unique (auto-generated stable IDs from the geometry hash when omitted).
- Geometry QC: unclosed rings are closed, duplicate vertices dropped, winding normalized (RFC 7946), self-intersections rejected with a clear reason, sliver plots (< 0.05 ha) flagged, implausibly large plots (> 50,000 ha) rejected.
Output (default dataset)
One run_summary plus one plot_result per plot:
{"type": "plot_result","recordId": "40-hex-stable-id","plotId": "demo-flagged-frontier","commodity": "coffee","riskFlag": "flagged","crossCheck": "hansen_only","layersRequested": ["hansen_gfc", "jrc_tmf"],"layersChecked": ["hansen_gfc", "jrc_tmf"],"layerChecks": {"hansen_gfc": {"checked": true, "status": "ok","versionLabel": "UMD Global Forest Change GFC-2025-v1.13","tileLabels": ["10S_050W"],"pixelsExamined": 380,"postCutoffPixels": 130,"earliestEventYearPostCutoff": 2021,"latestEventYearPostCutoff": 2023,"eventsByYear": { "2021": 14, "2022": 39, "2023": 77 }},"jrc_tmf": { "...": "same structure" }},"hansenVersion": "GFC-2025-v1.13","geometry": { "qcStatus": "ok", "areaHa": 20.9, "warnings": [], "fixesApplied": [] },"provenance": { "sources": [ ... ], "attribution": "...", "productDisclaimer": "..." }}
Every record embeds source URLs, licenses, attribution strings, the official-source disclaimer and the product disclaimer, so exports are self-contained audit artifacts. Dataset rows can be exported from Apify as JSON/CSV/XLSX.
Incremental state (bounded)
Repeat checks are served from a bounded key-value cache keyed by (normalized geometry, requested layers, cut-off date, Hansen version, JRC product label):
- Cache hits carry
cacheHit: trueandoriginallyCheckedAt, keeping the original evidence while making repeat runs fast and cheap. - The cache is capped (
maxCacheEntries, default 300) with oldest-first eviction — state growth is bounded by design. - Any new upstream layer version automatically invalidates affected entries (they are part of the key).
Known limitations (explicit)
- No near-real-time alert layers (GLAD/RADD). Their APIs require registration tokens and their terms could not be independently verified for commercial derivative products at build time. This Actor uses only layers verified as open; sub-annual alert sensitivity is therefore not included.
- Annual granularity. Both layers are annual products; events are dated to the calendar year, not the day.
- Hansen datamask not consulted. The separate observation-coverage mask is not downloaded; pixels with no mapped loss are treated as "no signal on this layer" rather than "confidently observed".
- JRC domain. JRC TMF maps humid tropical moist forest only — zero JRC signal outside those domains is expected and does not contradict a Hansen flag.
- EPSG:4326 only. No reprojection; submit WGS84 longitude/latitude. Polygons crossing the antimeridian (±180°) are not supported — split them at the dateline first.
- No buffering/point support in v1. Submit real polygons.
- Bbox fallback. Very large plots (> ~400k pixels) fall back to bounding-box analysis, which can only over-approximate flags, never under-approximate;
analysisModereports when this happens. - Tile budget. Each 10°×10° raster tile can be 50–150 MB; runs cap downloads via
maxTilesPerRunand mark un-checked plotsinconclusiveinstead of skipping silently.
Regulatory context (informational only)
Verified against the consolidated official text (CELEX 02023R1115-20251226) on 2026-08-26:
- Main obligations apply from 30 December 2026;
- natural persons and micro-/small undertakings established by 31 Dec 2024 from 30 June 2027;
- the dates were already postponed twice ((EU) 2024/3234, then (EU) 2025/2650). Always confirm current deadlines on eur-lex.europa.eu. This Actor does not provide legal advice and its outputs are not filings.
Local development
npm installnpm run lint && npm run typecheck && npm test # unit + integration + adversarial + schemaSMOKE=1 npx tsx --test test/smoke.test.ts # live-source smoke (~100-200 MB downloads)npm run smoke:local # local Actor run with the example input
Sources & attribution (embedded in every output record)
- Hansen, M.C., Potapov, P.V., Moore, R., Hancher, M., Turubanova, S.A., Tyukavina, A., et al. "High-Resolution Global Maps of 21st-Century Forest Cover Change." Science 342 (2013): 850–53. Data: UMD Global Forest Change (CC BY 4.0).
- European Commission Joint Research Centre — Tropical Moist Forest data. Provided free of charge, without restriction of use (Copernicus Regulation); acknowledgement required. https://forobs.jrc.ec.europa.eu/TMF/
- Regulation (EU) 2023/1115 (EUDR) consolidated text: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32023R1115