Product

The document pipeline, end to end

Capture, validation, duplicate checks, coding and ledger sync — each stage is a separate module you can enable independently. Most teams start with capture and expand from there.

Modules

Six modules, one record

Every module writes to the same document record, so context from capture stays available when coding and syncing.

Universal capture

Email forwarding, mobile camera, drag-and-drop upload, watched folder or S3 bucket. The document lands in one queue regardless of where it started.

Structured extraction

Vendor, date, tax ID, line items, subtotal, tax breakdown, total and currency — each returned as a typed field with its own confidence score.

Tax validation

EU VAT numbers are checked against VIES, UK numbers against HMRC, and US exemption certificates against expiry date before any record posts.

Duplicate detection

Vendor, amount, date and document hash are compared against 24 months of history. Near-matches surface for review instead of auto-filing.

Rule-based coding

Map vendors, categories and cost centres to GL accounts with conditions. Rules evaluate top-down and the winning rule is stored on the record.

Ledger sync

Two-way posting to Xero, QuickBooks, NetSuite and Sage Intacct. Approved documents push automatically; edits made in the ledger flow back.

Pipeline

What happens after upload

Each stage is idempotent, so a failed run can be replayed without creating duplicate records.

1

Ingest

File is checksummed, virus-scanned and routed to the extraction stage. Original is stored under your retention policy.

2

Parse

Layout analysis identifies the document type, then field extraction runs against the matching template.

3

Validate

Tax IDs, arithmetic totals and currency are checked. Discrepancies lower confidence on the affected fields only.

4

Code and post

Coding rules assign GL account and cost centre, then the record posts to your ledger if approval thresholds are met.

API

Built to be part of your stack

Every module is available through the REST API, so tvmmm can sit inside an existing approval flow rather than replacing it.

// post a document and stream progress const stream = rr.documents.createAndWatch({ file: invoicePdf, entity: "EU-NL-8842" }); stream.on("parsed", d => console.log(d.fields.total) ); stream.on("posted", d => console.log(d.ledgerEntryId) );

Webhooks

Signed callbacks for parsed, validated, approved, posted and failed states, with automatic retry on non-2xx.

Idempotency keys

Replay-safe writes. A retried request with the same key returns the original result instead of duplicating it.

Sandbox

A separate environment with synthetic vendors and tax IDs, so you can test rules without touching production data.

Audit log

Every field change records who made it, what the prior value was, and which rule applied.

Security

Built for finance data

01

Encryption

AES-256 at rest, TLS 1.3 in transit, customer-managed keys available on Enterprise.

02

Data residency

Pin processing and storage to EU or US regions. Data does not leave the region you select.

03

Compliance

SOC 2 Type II audited annually, with a DPA and sub-processor list available on request.

Run it on your last month of receipts

Upload a sample batch before connecting anything. Most teams know within one pass whether the field coverage holds for their vendors.