Skip to the page
Forestline

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.

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

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

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

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

  1. 01

    Clean the farm edgeRules

    Remove jitter, spikes and crossings. Close the line. Round to 6 decimals.

  2. 02

    Read the farm edge on the photoForestline AI

    Does the line take in a road, a river, houses or a neighbour's farm?

  3. 03

    Forest in 2020Rules

    The EU 2020 forest map, read inside the farm edge.

  4. 04

    Tree loss by year, and recent alertsRules

    University of Maryland loss record for 2021 onward, then Global Forest Watch alerts.

  5. 05

    Pick the photosRules

    A dry-season photo near 31 December 2020 and the latest clear one, preferring the least haze and cloud.

  6. 06

    Photo CheckForestline AI

    Reads both photos and says what the land looked like and what changed.

  7. 07

    Clear, Check or StopRules

    Fixed rules turn the facts into a result and list the reasons.

  8. 08

    ReviewA person

    Reads every Check, and every farm where the maps and Forestline AI disagree. Accepts or rejects and writes why.

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

  1. 01

    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
  2. 02

    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
  3. 03

    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
  4. 04

    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
  5. 05

    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
  6. 06

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

    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
  8. 08

    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
  9. 09

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

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

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

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

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

    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: cutForestline AI: not cut
Forest cut after 2020 (map layers), n = 80575
Forest kept (map layers), n = 80080
Never forest (map layers), n = 80278

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.