sheetscope_
Accounts payable

Turn the AP inbox into a ledger you can reconcile

Vendor invoices, statements and credit notes become rows: vendor, invoice number, PO, due date, total. Query for the exceptions, check them against the document, hand the clean file to whatever pays them.

sources 3 documents
PDF northwind-2041.pdf

Northwind Supply Co.

INV-2041PO-88214
PDF acme-statement-jun.pdf statement

Acme Logistics LLC

6 open items
PDF meridian-credit-note.pdf credit note

Meridian Print

−$66.00
[1] SQL
invoice_line_item
Run
1
SELECT vendor_name, count(*) AS invoices, sum(total) AS due FROM "invoice_line_item" WHERE purchase_order IS NULL GROUP BY 1;
4 rows · 5 cols · 240 ms
↓ export
#vendor_nameinvoice_numberpurchase_ordertotalstatus
1Northwind Supply Co.INV-2041PO-882141240.00 ok
2Acme Logistics LLCINV-20423980.50 no PO
3Meridian PrintINV-2044PO-882311015.00 duplicate
4Cascade FacilitiesINV-7781PO-88190402.75 ok
DOCUMENT IN, ROW OUT

Whatever the vendor sent, one ledger

Invoices, month-end statements and credit notes are three different documents describing the same thing you owe. They land in the same table.

PDF acme-statement-jun.pdf statement

Acme Logistics LLC

6 open items
extract
vendor_nameinvoice_numberpurchase_ordertotaldue_date
Acme Logistics LLCINV-20423980.502026-07-08

Invoices, statements, credit notes. One ledger.

PDF northwind-2041.pdf

A vendor invoice

one document, one bill
PDF acme-statement-jun.pdf statement

A month-end statement

six bills at once
PDF meridian-credit-note.pdf credit note

A credit note

a negative row
WHERE THE HOURS GO

A payables month, in three jobs

Clear the month’s invoices

One dataset for everything that arrived, so approving a batch is reading a table rather than opening forty PDFs.

Find what needs chasing

Invoices with no PO, the same invoice number twice, a vendor you have never paid before. All of it one WHERE clause away.

Prepare the file your ERP imports

Export exactly the columns the import template wants, named the way it wants them.

THE COLUMNS A RUN NEEDS

The starter schema, plus what payables adds

The first group is the app’s invoice schema, verbatim. The second is what payables teams define on top, in the same editor.

invoice_line_item: the starter schema in the app, verbatim

  • invoice_number string
  • invoice_date string
  • vendor_name string
  • line_description string
  • quantity number
  • unit_price number
  • line_total number
  • currency string

fields AP teams usually add

  • purchase_order string
  • due_date string
  • payment_terms string
  • remit_to string

the same rows, asked a different question

Once the ledger is a table, the exception list is a WHERE clause — and it runs over the whole folder rather than the batch that arrived this morning.

vendor_nameinvoice_numberpurchase_ordertotalreason
Harbor Freight Co.INV-66202210.00no PO on the invoice
Tellus CleaningINV-4417PO-87740860.00invoice number seen twice
Ridgeline PaperINV-9903PO-880151174.25due in 4 days
HUMAN REVIEW

The rows a person still has to see

Extraction is not approval. What it changes is that review means reading a row next to its document, instead of typing the document into a spreadsheet first.

review queue
documentreview
northwind-2041.pdf Northwind Supply Co. checked
acme-logistics-jul.pdf Acme Logistics LLC needs a look
meridian-print.png Meridian Print on hold
cascade-7781.pdf Cascade Facilities checked

the row, beside the page

Every value points back to the page it was read from, so a check is reading a row beside a document rather than re-keying it.

↓ export CSV → your ERP

QUESTIONS

What AP teams ask us

Starting with what this doesn’t do.

Does this pay the invoices?
No. sheetscope stops at clean, checked data. It never touches your bank, your ledger or your approval chain. It removes the keying, not the control.
How do I catch what it got wrong?
Every row is traceable to its document, and extraction is per field, so review means reading a row beside a page rather than re-keying it.
Half our invoices arrive with no PO.
WHERE purchase_order IS NULL is the exception queue: a query you edit, not a workflow rule somebody configures for you.
Vendors send the same invoice twice.
GROUP BY vendor_name, invoice_number HAVING count(*) > 1, across every document you have ever uploaded rather than just this batch.
It has to land in NetSuite, Xero or Sage.
CSV and Excel out, with the columns you defined. The import template becomes a SELECT list rather than a mapping screen.

Nearby workflows

Stop keying invoices into a spreadsheet

Upload this month’s vendor documents and define the fields your process actually uses.