How Forestline AI works
One real run, step by step.
Nothing here is a diagram of what might happen. Below, each step of a real run is shown with what went in, what was done, and the result with its numbers.
Four decisions, kept apart.
The satellite check screens each farm. A person reviews. Traceability follows the bags. A named person approves the handoff. Each one is its own step, and none stands in for another.
Decision 1 of 4
Satellite check
By: Rules, on the maps and photos
Clear, Check or Stop for each farm.
Forestline reads the EU 2020 forest map, the forest loss record, alerts and satellite photos. The answer is Clear, Check or Stop. It is a screening result. It does not clear a farm on its own.
Decision 2 of 4
A person's review
By: A person in your workspace
Every Check, and every farm where the maps and Forestline AI disagree.
A person reads the evidence and accepts or rejects the farm. They write what they found and why. When the maps say no forest was cut but Forestline AI sees forest cut in the photos, the farm is a Check, never Clear.
Decision 3 of 4
Traceability
By: Rules, on your records
Every bag traces to a cleared farm.
Each bag in a lot traces to a farm that is Clear or accepted on review. Lots are kept apart. The weights of the bags, the lots and the shipment add up, and the farm location file covers every kilogram.
Decision 4 of 4
Shipment approval
By: A named person
Until someone approves the handoff, the pack is a draft.
The owner or a manager approves the handoff to the EU buyer, with a note. Approval is kept as a record. If the evidence changes after that, the shipment goes back to waiting for approval.
Where a shipment stands
Blocked
Something stops the handoff: a lot is mixed, weights do not add up, or a farm is not cleared.
Draft pack
A pack exists, or can be built, but the evidence is not complete.
Evidence complete
Goods, weights, lots and farm locations match. Waiting for a person to approve.
Approved for buyer handoff
A named person approved the handoff. Your EU buyer still files the EU form.
Who does what.
Forestline AI reads and writes. Rules and maths decide. A person reviews and approves. The line between them is always the same.
- 01
Clean the farm edgeRules
Remove jitter, spikes and crossings. Close the line. Round to 6 decimals.
- 02
Read the farm edge on the photoForestline AI
Does the line take in a road, a river, houses or a neighbour's farm?
- 03
Forest in 2020Rules
The EU 2020 forest map, read inside the farm edge.
- 04
Tree loss by year, and recent alertsRules
University of Maryland loss record for 2021 onward, then Global Forest Watch alerts.
- 05
Pick the photosRules
A dry-season photo near 31 December 2020 and the latest clear one, preferring the least haze and cloud.
- 06
Photo CheckForestline AI
Reads both photos and says what the land looked like and what changed.
- 07
Clear, Check or StopRules
Fixed rules turn the facts into a result and list the reasons.
- 08
ReviewA person
Reads every Check, and every farm where the maps and Forestline AI disagree. Accepts or rejects and writes why.
- 09
ApproveA named person
Approves the shipment for handoff once goods, weights, lots and farm locations match.
The run
Cocoa land near Oluwa Forest Reserve, Ondo
Near Oluwa Forest Reserve, Ondo. Farm edges traced by Forestline from satellite photos near Oluwa Forest Reserve, Ondo State. No farmer was contacted and no bags were bought. Weights are estimates from each plot's size. Not a Forestline customer.
- 01
Farm edge
Farm edge
What went in
Satellite photos of the land near Oluwa Forest Reserve. The farm edge was drawn on a Sentinel-2 true-colour satellite photo of the land. A track on each side of the block shows the edge of the clearing.
What was done
The farm edge was traced along edges the photos show (tracks, clearing edges, the line where trees meet open land). It was saved as a closed ring of longitude and latitude points. It was traced from the photos, not walked with a phone.
The real result
7 corners, 6.09 hectares. Plot OND-OLW-0007. No farmer was contacted.
- corners
- 7
- hectares
- 6.09
- method
- traced from Sentinel-2 photos
- 02
EU 2020 forest map
EU 2020 forest map
What went in
The farm edge and the EU Joint Research Centre Global Forest Cover 2020 map (version V4, 10 m squares, 1 = forest on 31 December 2020).
What was done
Code read the map squares under the farm edge. It weighted each square by how much of it lies inside the farm edge, and added up the forest area.
The real result
4.13 of 6.06 hectares are forest on the EU 2020 map (68%).
- squares under the farm edge
- 755
- forest squares
- 509
- forest hectares
- 4.13
- farm hectares on the map grid
- 6.06
- forest share %
- 68
- 03
Forest loss record
Forest loss record
What went in
University of Maryland Global Forest Change (version GFC-2025-v1.13): the year each 30 m square lost its trees.
What was done
Code laid the loss years over the same squares. It added up the hectares lost in 2021 to 2025, and how much of that was on squares the EU 2020 map calls forest. The loss counts are a rough guide, not an exact area.
The real result
5.98 hectares of tree loss after 2020 (5.98 in 2022); 4.13 hectares of it on forest at the end of 2020. Before 2021: 0.08 hectares.
- tree loss 2021 (ha)
- 0
- tree loss 2022 (ha)
- 5.98
- tree loss 2023 (ha)
- 0
- tree loss 2024 (ha)
- 0
- tree loss 2025 (ha)
- 0
- loss after 2020 (ha)
- 5.98
- loss on forest at the end of 2020 (ha)
- 4.13
- loss before 2021 (ha)
- 0.08
- share of the farm lost %
- 99
- 04
Recent alerts
Recent alerts
What went in
Global Forest Watch integrated alerts: radar and satellite alerts, dated, 10 m.
What was done
Code counted the alert squares inside the farm edge dated 1 January 2021 or later.
The real result
56 alert squares, 0.5 hectares, between 2022-11-02 and 2022-12-20 (56 in 2022).
- alert squares
- 56
- alert hectares
- 0.5
- first alert date
- 2022-11-02
- last alert date
- 2022-12-20
- 05
Protected forests
Protected forests
What went in
OpenStreetMap protected areas (snapshot b0efa2a7, 11 areas). Coverage is partial, so this is an extra check, not a legal map.
What was done
Code measured how much of the farm edge lies inside each protected area, and how far the nearest one is, within 5 km.
The real result
No protected area in the map within 5 km of the farm edge.
- areas within 5 km
- 0
- map version
- snapshot b0efa2a7, 11 areas
- 06
Photo pick
Photo pick
What went in
Sentinel-2 satellite photos of the farm from the dry seasons (November to March), through the Earth Search catalogue.
What was done
Code scored the best-looking candidate photos: cloud and shadow over the farm, haze and the time of year. The lowest score wins. One photo is from the clear dry season nearest to 31 December 2020. The other is from the latest clear dry season.
The real result
2020 photo: 2020-12-26, 0% of the farm hidden by cloud, haze reading 0.27, score 0.33. Latest selected photo: 2026-03-15, 0% hidden, haze reading 0.2, score 0.06.
- photos found, dry season of the 2020 photo
- 40
- photos found, dry season of the latest selected photo
- 39
- photos scored per season (at most)
- 8
- 2020 photo
- 2020-12-26
- 2020 photo score
- 0.33
- 2020 photo cloud %
- 0
- latest selected photo
- 2026-03-15
- latest selected photo score
- 0.06
- latest selected photo cloud %
- 0
- 07
The two photos
The two photos
What went in
The picked scenes S2B_31NFH_20201226_0_L2A and S2C_31NFH_20260315_0_L2A.
What was done
Code cut each photo to the farm edge plus 120 metres and brightened both photos the same way, so the colours can be compared. It drew the farm edge on each in ivory, and saved both photos as the proof the plot page and the pack show.
The real result
Two photos of 352 by 480 pixels, dated 2020-12-26 and 2026-03-15.
- 2020 photo
- 2020-12-26
- latest selected photo
- 2026-03-15
- 2020 photo id
- S2B_31NFH_20201226_0_L2A
- latest selected photo id
- S2C_31NFH_20260315_0_L2A
- 08
Greenness
Greenness
What went in
The red and near-infrared light in the two photos: greenness (NDVI), with cloud squares left out.
What was done
Code did not compare greenness. Greenness moves with the season and with haze as much as with clearing. So it is skipped when the two photos are far apart in the year or differ in haze.
The real result
Skipped: the two photos are 78 days apart in the calendar year (limit 60) (their haze readings differ by 0.07, inside the limit of 0.2, so haze was not the reason).
- days apart in the year
- 78
- haze difference
- 0.07
- used
- no
- 09
Forestline AI photo reading
Forestline AI photo reading
What went in
Both photos, with the facts the code found (forest on the 2020 map, loss, alerts, dates, cloud).
What was done
Forestline AI looked at the two photos and filled in a fixed form: what the land inside the farm edge looks like in each photo, what changed, and whether it sees forest cut, trees replanted, or nothing. It is told not to read a change of colour as a clearing. It may call a clearing only when it sees bare or burnt ground, new rows, young plants or a clear straight edge. If a photo is hazy, it says so and says it is not sure. Code checks every number it writes against the facts, and turns a "forest cut" call into "unclear" when the 2020 photo does not show forest. Forestline AI reads and writes. It cannot raise or lower a result on its own. The rules decide.
The real result
Before: cocoa under shade. Now: plantation rows. "In 2020 the plot was covered by a green canopy that looks like cocoa or other trees under shade. Today the plot shows a grid of brown roads or tracks cutting through remaining green strips, matching large-scale clearing. The facts record 5.984 ha of tree loss in 2022, covering nearly the entire plot." Replant or clear: not sure. Shade cocoa: yes. Confidence: medium.
- land before
- cocoa_under_shade
- land now
- plantation_rows
- replant or clear
- unclear
- shade cocoa
- yes
- confidence
- medium
- proof to gather
- 5
- 10
Rules decision
Rules decision
What went in
Every number above, plus the Forestline AI reading.
What was done
Fixed rules (not AI) turned the facts into a result. Stop: forest at the end of 2020 lost 0.5 hectares or more, or 10% of the plot, or 0.1 hectares or 5% of the plot lies inside a protected forest. Check: something needs a person, including when the maps show no forest cut but Forestline AI reads one, or when Forestline AI says it is not sure what the photos show (at any confidence). When the maps show a Stop-size loss and Forestline AI reads no change with high confidence, the result stays Stop and a person sees both. Clear: no record shows loss, and Forestline AI read the photos and did not read a forest cut, a replanting or "not sure".
The real result
STOP. 4.1 hectares of this plot was forest at the end of 2020 and has lost its trees in 2022. That is 68% of the plot. Do not buy from it for the EU. 1.9 hectares lost trees after 2020 on land the EU 2020 map does not call forest. Often this is old rubber or cocoa cut and planted again. Ask for the planting year and proof. Forestline AI: In 2020 the plot was covered by a green canopy that looks like cocoa or other trees under shade. Today the plot shows a grid of brown roads or tracks cutting through remaining green strips, matching large-scale clearing. The facts record 5.984 ha of tree loss in 2022, covering nearly the entire plot. Satellite alerts show about 0.5 hectares of new tree loss in this plot since 2021. The latest alert is from 2022. A person must look at the latest selected photo. Forestline AI is not sure what the two photos show. A person must look at them.
- result
- stop
- reasons
- forest_cleared_after_cutoff, tree_loss_after_cutoff, alerts_recent, ai_unsure
- rules version
- version 3
- 11
Harvest Sense Check
Harvest Sense Check
What went in
The kilograms recorded against the farmer's plots and what the plots can grow (1,000 kg a hectare a season, the most a hectare gives).
What was done
Code compared the two. No bags were bought from these plots, so the weight is an estimate: the plot's size times the published average yield. It shows how the check works; it is not a sale.
The real result
2,436 kg estimated against 6,090 kg the plot can grow (ratio 0.4). Not flagged.
- estimated kg
- 2436
- can grow (kg)
- 6090
- ratio
- 0.4
- average yield used (kg per ha)
- 400
- 12
Kept Apart
Kept Apart
What went in
Every lot, its bags and the plot each bag traces to.
What was done
Code checked every bag in every lot. A lot is ready for the EU only if every bag traces to a Clear plot, or a Check plot a person accepted. Europe's no-deforestation rule does not allow mixing by weight.
The real result
Lot L-001, 2,862 kg: kept apart. Lot L-002, 16,612 kg: NOT kept apart (8 bag groups trace to a plot that is not Clear).
- lot L-001 kg
- 2862
- lot L-001 kept apart
- yes
- lot L-001 bags blocked
- 0
- lot L-002 kg
- 16612
- lot L-002 kept apart
- no
- lot L-002 bags blocked
- 8
- 13
Proof pack
Proof pack
What went in
The shipment, its lots, the plots and the checks.
What was done
Code wrote the farm location file the EU system accepts (one farm edge per plot, coordinates cut to 6 decimals). It ran the EU file checks on it. It built the plot register, the lot-to-plot table, the EU form draft and the pack as a web page and a PDF. Forestline AI wrote the risk check in plain words from the facts. Plots that are Stop, or Check with no review by a person, are left out.
The real result
1 plot in the location file, 8 left out (OND-OLW-0001: Check, not reviewed by a person; OND-OLW-0003: Check, not reviewed by a person; OND-OLW-0004: Check, not reviewed by a person; OND-OLW-0005: Check, not reviewed by a person; OND-OLW-0006: Check, not reviewed by a person; OND-OLW-0007: Stop; OND-OLW-0008: Stop; OND-OLW-0009: Check, not reviewed by a person). The file passes all EU file checks (0 errors, 0 warnings).
- plots in the file
- 1
- plots left out
- 8
- file checks failed
- 0
- file bytes
- 495
- files
- geojson, csv, trace, dds, html, pdf
- reasons for leaving out
- Result is Check and no person has accepted it. | Result is Stop: forest was cut after 2020, or the plot is inside a protected forest.
- 14
Shipment readiness
Shipment readiness
What went in
Every shipment, its lots, purchases, plots, proof pack and papers.
What was done
A proof pack alone does not make a shipment ready. Code checks that the goods, the weights, the lots and the producer locations tie together. Blocked: a lot is not kept apart, the weights do not add up, or bags trace to a plot that is not in the farm location file. Taking bad plots out of the file does not fix mixed goods. Draft pack: nothing blocks it, but the pack is missing or out of date, or land papers are missing. Evidence complete: nothing blocks and nothing is missing, and a named person still has to approve. Approved for buyer handoff: a named person approved exactly this evidence. Forestline never approves a shipment by itself.
The real result
S-001 (19,474 kg, L-001 and L-002): Blocked: not for your EU buyer. Lot L-002 (16,612 kg) is not kept apart: 8 bag groups trace to a plot that is not cleared. Mixed goods cannot be fixed by leaving plots out of the farm location file. 8 plots behind these goods are not in the farm location file: OND-OLW-0001 (Check, no one has accepted it), OND-OLW-0003 (Check, no one has accepted it), OND-OLW-0004 (Check, no one has accepted it), OND-OLW-0005 (Check, no one has accepted it) and 4 more. The goods and the producer locations do not match. Land papers are missing for 1 plot: OND-OLW-0002. S-002 (2,862 kg, L-001): Draft pack. Land papers are missing for 1 plot: OND-OLW-0002. No shipment in this case is approved.
- S-001 status
- blocked
- S-001 blockers
- 2
- S-001 missing items
- 1
- S-001 kept apart (kg)
- 2862
- S-002 status
- draft
- S-002 blockers
- 0
- S-002 missing items
- 1
- S-002 kept apart (kg)
- 2862
Farm edges and map data: Copernicus Sentinel-2 photos, traced by Forestline, Contains modified Copernicus Sentinel data. This is a real run on public data. It is not a Forestline customer.
How well Forestline AI reads the photos.
We tested the photo step on real 100 m squares, chosen in advance and read blind. The reference layers are maps, not field visits, and the numbers below say where the reading falls short.
The photo reader Forestline uses
68%
How often Forestline AI's reading of the satellite photos agreed with the map layers.
n = 240 squares of 100 m (1 hectare). 95% range 62 to 74%. 240 squares of 100 m (1 hectare) in Ogun, Ondo, Edo, Osun and Cross River, 80 for each map-layer class. Reference classes from the EU Joint Research Centre 2020 forest map (V4) and the University of Maryland tree loss record (GFC-2025-v1.13). Forestline AI saw only the two photos.
5of 80
squares with forest cut after 2020 that it found (95% range 3 to 14%)
2of 160
false alarms on squares where nothing was cut
66.7%
right if it always said "not cut": the baseline to beat
67.9%
agreement with the layers, with the same n
10.8%
of squares it marked unclear or low confidence
Photo reading alone misses most cuts: it found 5 of the 80 squares where forest was cut after 2020.
It raised 2 false alarms on 160 squares where no forest was cut.
A reader that always said "not cut" would be right on 66.7% of these squares. 67.9% is 1.2 points above that, so do not read it as a score on its own.
This is why the result does not come from the photos. The forest maps (the EU 2020 forest map and the tree loss record) set Clear, Check or Stop. Forestline AI reads the photos as a second opinion, and a person reviews every Check.
The reference labels come from open map layers (the EU Joint Research Centre 2020 forest map and the University of Maryland tree loss record), not from people on the ground. Agreement here means Forestline AI agrees with those layers. A disagreement can be the layers being wrong. The 2020 forest map is known to count forest under shaded cocoa and other tree crops, so some "forest" squares are not forest on the ground. Two of the three classes count as "not cut", so a reader that always answered "not cut" would agree on 66.7% of these 240 squares.
The reader in use: map layers (rows) against what Forestline AI read (columns)
| Forestline AI: cut | Forestline AI: not cut | |
|---|---|---|
| Forest cut after 2020 (map layers), n = 80 | 5 | 75 |
| Forest kept (map layers), n = 80 | 0 | 80 |
| Never forest (map layers), n = 80 | 2 | 78 |
Green cells are where Forestline AI agrees with the layers.
The earlier readers, on the same squares
On the same 240 squares, the earlier photo reader agreed with the layers on 68.8% (it found 15 of 80 cut squares and raised 10 false alarms), and a second earlier method on 70.0%.
The 0.9 point gap to the earlier photo reader is within what chance can give (it was right on 8 squares where the earlier one was wrong, and the earlier one on 10 where it was wrong), so it does not show that one reader is better.
Limits
What this cannot tell you.
- The University of Maryland record is an indicator of tree loss, not a measure of forest cut. Its pixels are 30 metres wide, so small plots have rough numbers.
- The EU 2020 forest map is non-binding and often wrong over shaded cocoa and rubber: about 1 in 4 forest calls in Africa is false. That is why shaded cocoa gets Check and not Stop, and why a person reviews it.
- Clouds and haze hide land. Each result says how much of the plot a photo hides, and a cloudy photo lowers the result to Check.
- Forestline AI can misread a photo. It is told to say "not sure", and its reading never clears or stops a farm alone. When it disagrees with the maps, a person must look before the shipment can be approved.
- OpenStreetMap shows only some protected forests. A plot with no protected forest found may still sit in one that is not on the map.
- A satellite result says nothing about who owns the land or whether the farm is legal. Those need papers, and the EU buyer stays responsible for the risk check.
Greenness (NDVI) is a number from the red and near-infrared light a plant reflects. Healthy leaves score high. A drop can mean trees were cut, or only a dry spell, so it is a hint and never a result.
Sources
Where the facts come from.
- EU Joint Research Centre Global Forest Cover 2020
Was the land forest at the end of 2020? The EU's own map, at 10 metres.
Open, European Commission
- University of Maryland Global Forest Change
Tree loss for each year from 2001, at 30 metres. A rough guide, not an exact area.
CC BY 4.0
- Global Forest Watch alerts
Recent signs of tree loss, for the months after the loss record ends.
CC BY 4.0
- Copernicus Sentinel-2
The satellite photos of your plot: a dry-season photo near the cut-off date, and the latest clear one.
Free, full and open (Copernicus)
- OpenStreetMap
Roads, rivers, settlements and some protected forests. Coverage of protected forests is thin, so it is a supplement.
ODbL, OpenStreetMap contributors