Skip to main content

Build a good table

/extract never stores a template: it reads the table you select, each time. How you lay the table out decides what Moby matches, what it fills and what it leaves alone. This page gives the reading rules, the habits that make a run reliable and the mistakes seen most often.

How /extract reads a table​

ElementRule
Header rowsThe first rows of the selection, top to bottom: category (matching only), column titles, optional description row. The data starts right under the last one
Description rowA row directly under the titles with hints ("in euros", "DD/MM/YYYY", "bottom right of the invoice") becomes part of the meaning of each column. A row of numbers or dates is data, never a description
Filled columnA matching key: Moby uses its values to find the document of each row. It is never written, even when partly blank
Empty column with a titleFilled from the document, one value per cell
Formula columnSkipped entirely
Column with no title and no dataDropped
Merged label above columnsOne document-type block (Invoice, Delivery note, Bank statement). A block holding only filled columns is the ledger block: an empty column inside it stays a key and is never filled
Same document type in two blocksRead as one group when both blocks carry the same label. Two different labels for one document type mean two groups and two extractions
ModeKeys and columns to fill: matching. No filled column: extraction, one new row per document. No column left to fill: Moby only matches and writes the Document column

The rules​

For every table​

#RuleAvoidDo
R1One value, not a presence"Is there an invoice in this document?""Invoice number"
R2A clear title, and a description under it only when the title alone is unclear"Amount" alone: excl. VAT, incl. VAT or VAT?"Amount incl. VAT", or "Amount" with the description "incl. VAT, in euros, bottom right of the document"
R3One reading per title"Reference": invoice, order or customer?"Order number, format PO-XXXX, top right"
R4The workflow extracts, it does not computeAsking for the sum of the linesExtract the values, then =SUM() in Excel. The agent can compute
R5Paste only the useful rows and columnsThe whole general ledger or trial balanceThe rows and columns the check needs
R6One document per PDFA PDF bundling several documents, or one document spread over several files/split a bundle first, /merge the pieces first

For a matching table​

#RuleWhy
K1Every key gets an empty twin in the document blockMatching uses the filled keys and never writes them. You can only compare the ledger and the document when the document's value is extracted next to the key: "Amount" filled on the ledger side, "Amount (invoice)" empty on the invoice side
K2One labelled block per document typeWithout a label, the columns of a second document type are read as if they came from the first
K3Never split one document type under two labelsTwo groups mean every document is read twice
K4Keys that identify: a reference first, then a distinctive amount, then the counterparty and a dateMoby tries identifiers first, then a distinctive amount, then the entity and its context

For an extraction table​

#RuleWhy
E1Select every header row and keep the rows under the header freeMoby writes one row per document there without inserting rows. Only cells inside the selection are protected, so a description row left out of the selection is overwritten

Common mistakes​

What you seeWhyFix
One new row per document instead of your rows being filledThe table has no filled column, so Moby reads it as an extractionPaste the rows to test with their ledger columns (reference, amount, date)
Rows under the header are overwrittenExtraction writes from the first row under the header, without insertingSelect the description row too, and clear or move what sits under the header
Nothing is filled, only the Document columnNo empty column with a titleAdd the columns to fill, empty, in the document block
The value Moby found is not on the sheet, so no check is possibleA key has no empty twinAdd an empty "Amount (invoice)" column in the document block
A column you wanted filled stays emptyIt sits under the ledger label, or it has no title, or it holds formulasMove it into a document block, give it a title, move the formula elsewhere
A column you wanted filled is treated as a keyIt was already fullClear it, or add a new empty column
The wrong amount or date comes backThe title can be read several waysA precise title, or a description row
Values of a second document type look wrongSeveral document types share one block, or one type sits under two labelsOne merged label per document type, the same label for the same type
The run is refusedMore than 30 columns or 400 rowsSplit the table or the run
Columns or rows are ignoredThe selection stops before the edge of the tableSelect the whole table

Two layouts that work​

Titles only, for extraction. Select the header rows.

ABCD
1Invoice no.Invoice dateSupplierAmount incl. VAT
2empty: one row per document from here

A ledger block and a document block, for matching. Select the whole table.

ABCDEFGH
1Accounting (merged A1:D1)Invoice (merged E1:H1)
2Entry refEntry dateCustomerAmount excl. VATInvoice dateCustomerAmount excl. VATInvoice no.
3on the invoice, DD/MM/YYYYname printed on the invoiceexcl. VAT, number onlytop right
4535120009302/12/2025Spécialités Pharma46,348

Columns A to D are filled: the keys. Columns E to H are empty: filled from the invoice. F and G are the twins of C and D, and H adds the identifier.

With several document types, add one block per type: for a bank reconciliation, the account columns as keys, then a block for the reconciliation statement, one for the bank statement and one for the bank confirmation. The tie-out checks are formulas, not extracted values.

Shortcuts​

You wantDo this
A sheet already built for an audit test/workpaper, tab Moby: ready-made sheets by cycle. See Workpaper library
A second opinion on your table before a runAsk the agent: "check my table before extracting". It reports what the run should do and proposes edits; it changes the sheet only when you say which ones
To practise on sample documentsYour first dive