Agentic Excel parsing

Turn messy spreadsheets into data agents can trust

Airfront finds the tables, infers the headers, and reads the meaning hidden in formatting — so your AI works from clean, structured data instead of guessing at a grid of cells.

$airfront parse "Price List.xlsx" --schema pricing > data.json
Raw sheet
Price List.xlsx
A
B
C
D
E
F
G
H
1
Price List
2
Effective Date:
1st January 2021
3
Revision:
J
4
5
Weight when fully packaged
Qty/pallet
Pallet Size
6
460ST2-xxxx (139mm high)
10.3 kgs
36
1000mm x 1200mm
7
8
USD ($)
9
RELEASED PRODUCT MODELS
MOQ
OEM
DISTRIBUTOR
RESELLER
MSRP
10
STANDARD RANGE
11
102mm High Euro (8 coins 7 notes) Random Key Blue Grey texture 82474
460ST2-0007
SMART!!! Product - Standard. Includes top down fixing bracket (TDFB) or self release brackets (no cables by default)
1 x Pallet for distribution 10 offs for reseller unless otherwise agreed
$832.49
$849.75
$944.16
$1,238.58
12
UNBRANDED RANGE
Structured output
data.jsonparsed
{
"sheet": "Price List",
"meta": { "currency": "USD", "revision": "J",
"effective_date": "2021-01-01" },
"products": [
{
"part": "460ST2-0007",
"category": "102mm High Euro",
"config": { "coins": 8, "notes": 7, "key": "random" },
"price": { "currency": "USD", "oem": 832.49,
"distributor": 849.75, "reseller": 944.16,
"msrp": 1238.58 }
}
]
}
912real-world taskspulled from Excel forums
2,729test spreadsheetsonline-judge style grading
~70%best-model scoreon the simpler V1 tasks

The reliability gap on SpreadsheetBench — the benchmark for real-world spreadsheet manipulation.

Why Airfront

Spreadsheets aren't structured data

Excel runs the real world's data — and almost none of it is clean. Three properties make it uniquely hard for LLMs to read.

01

Non-standard layouts

Nested tables, missing or incomplete headers, and free-form notes sit side by side in one sheet. There is no schema to rely on, so naive parsing breaks immediately.

02

No clear table boundaries

Nothing marks where a table begins, where it ends, or how two tables relate. An agent has to infer the structure before it can read a single value correctly.

03

Meaning hidden in formatting

A red cell, a bold total, a merged header — critical meaning lives in color and style that plain text extraction silently throws away.

How it works

How Airfront reads a sheet

An agentic pipeline that reasons about a spreadsheet the way a person does — structure first, then values.

1

Detect regions

Segment the sheet into distinct tables and blocks, separating real data from titles, notes, and stray labels.

segmentation
2

Infer structure

Reconstruct headers, boundaries, and the relationships between tables — even when they're implicit or missing.

layout model
3

Interpret formatting

Read color, bold, merges, and number formats as first-class signals instead of discarding them as noise.

style semantics
4

Emit structured output

Return typed, validated JSON — with provenance for every value — that your agents and pipelines consume directly.

typed json

The benchmark

The gap is measurable

SpreadsheetBench evaluates models on 912 real questions pulled from Excel forums, graded online-judge style across 2,729 spreadsheets with multiple test cases each.

Even the strongest models top out around 70% on the simpler V1 tasks— well short of the accuracy real workflows demand. A wrong cell isn't a rounding error; it's a broken report.

Source: Ma et al., “SpreadsheetBench”, arXiv:2406.14991 (NeurIPS D&B 2024). Repository.

Accuracy on real spreadsheet tasks
Best model — V1 (simpler)70%
What production needs99%
~30%of tasks still fail — the gap Airfront is built to close.

Capabilities

Built for the messy reality

Multi-table detection

Find every table in a sheet — even stacked, side-by-side, or separated only by a blank row.

Header inference

Reconstruct single- and multi-row headers, including merged and repeated label groups.

Format-aware extraction

Capture color, bold, and highlights as structured flags instead of losing them.

Formula & type awareness

Resolve formulas to values and normalize dates, currencies, and percentages to real types.

Structured JSON output

Emit typed, schema-validated JSON ready for agents, RAG, and data pipelines.

Verifiable accuracy

Every parse is checked online-judge style against expected outputs, so you can trust the result.

Get started

Give your agents spreadsheets they can actually read

Get started now

parse.ts
import { parse } from "airfront";

const sheet = await parse("Price List.xlsx", { schema: "pricing" });
sheet.tables[0].rows[0];
// { part: "460ST2-0007", category: "102mm High Euro", ... }