For controllers & finance leads

Every bill checked against your own ladder, and a close you can defend

Each invoice is checked against that vendor’s history at that property and against the approval thresholds you wrote down. Coding goes into rules, approvals into policy, and every change into an append-only log.

The free plan processes 25 invoices a month with unlimited users, takes no credit card and does not expire. You get your own intake address at the end of setup.

Bluepoint HVAC · Lakeshore Commons$22,000.00

APPROVAL LADDER

  • Under $2,5001 approval
  • $2,500 – $15,0002 approvals
  • Above $15,000This invoice3 approvals

AUDIT TRAIL · APPEND-ONLY

  1. 09:12Rule matched: Route HVAC over $10k to ControllerRules
  2. 09:40Due date edited: Oct 14 → Oct 21J. Rivera
  3. 10:05Approved, 1 of 3D. Okafor
  4. 11:30Approved, 2 of 3M. Chen
  5. NextWaiting for approval 3 of 3
An example invoice. The ladder is the one you write; every row has a person and a time.

The job today

Where the time goes today. And what changes.

Today

  • Coding standards live in one person's memory and a spreadsheet.
  • Approvals happen over email and Slack, with no record of who saw what when.
  • Close is a reconstruction: which invoices posted, which failed, which were duplicated.
  • A rework cycle every month for the same vendors nobody has mapped.
  • Auditors ask who approved a $22,000 HVAC invoice and the answer takes an afternoon.
  • Separate owner books mean manual CSV surgery outside the main ledger.
  • A new system means re-keying every building, unit and vendor from the spreadsheet.

What inletAP takes off you

  • Every bill compared, from the first invoice. Against that vendor's history for that property and against your own approval thresholds, with nothing to set up.
  • Coding in rules, not in memory. Rules run once the document is extracted, and the matched rule is recorded on the document.
  • Approvals by written tiers. Low-confidence invoices go to review before they can be sent up, and each invoice carries an SLA deadline from its tier.
  • An audit log that answers. Who, what, when, before and after — without anyone reconstructing anything.
  • Duplicates before payment. Detection runs before payment, not during reconciliation.
  • Exports you can reconcile. Batches carry external IDs and retry idempotently when something breaks.
  • Owner and JV books kept apart. Multi-entity separation is in the model, so they stay apart by default, and intake can be split per property at the mailbox, before coding.
  • Shared invoices split once. To the cent, on a basis that is recorded — not rebuilt in a spreadsheet every month and rounded differently each time.
  • The portfolio comes from your spreadsheet. Properties, units, vendors and entities import from a file you export yourself. The preview writes nothing and names every row it would create or change, old value beside new.

The second look

Eight ways a vendor bill gets past you. Each checked against your own numbers.

From your first day

  • Possible duplicate

    Nine matching rules, and six guards

  • Just under an approval threshold

    Within 5% below, more than once in 90 days

  • One job, several invoices

    Each under the threshold, together over it

  • First invoice from this vendor

    A note, not a warning

Once there is history

  • Exactly-billed contract changed

    Needs 3 invoices

  • Higher than usual

    Needs 5 invoices

  • Looks like a rate change

    Needs 5 invoices

  • Never seen this high

    Needs 9 invoices

Every finding, acceptance and dispute is written to the audit trail with a person and a timestamp, so the control is showable rather than asserted. How the checks work

Why your own numbers

The comparison is against your own numbers, not a generic rule: what that vendor billed for that property before — never that vendor averaged across the portfolio — and the approval ladder you already wrote. Nothing has to be configured for it to work: the defaults are published on the page, and so is the single number you may change.

Baselines are kept per vendor AND property. A possible duplicate is checked against up to 200 of your recent invoices from that vendor.

What you get

The parts of the product built for this role

Rules engine for coding and routing

If vendor is X and amount is over Y, then set the GL account and assign the reviewer — or quarantine the document.

More
Explainable on the document, with a read-only preview before you enable it.

Approval tiers you write down

Under $2,500 one approval within a day; $2,500 to $15,000 two approvals; above that three.

More
An invoice the extractor scored under 70% goes to review before it can be sent up at all. Approved bills are exported when you run the export.

Append-only audit trail

Actor, timestamp and before/after values on field edits, plus routing decisions, approvals and successful exports.

More
Filterable on screen, with a CSV of the entries in view.

SLA deadlines and overdue alerts

Each invoice carries one SLA deadline from its tier. Overdue invoices surface on the dashboard and send one email when the deadline passes.

More
So a late fee is a decision rather than a surprise.

Reconcilable exports

Approved bills post to QuickBooks Online with the external ID recorded. Failed batches state the cause and retry without double-posting.

Shared costs split once and recorded

One invoice across several buildings, by amount, percent, even share, unit count or square footage, balanced to the cent and saved as a template.

More
Next month is one action. Each allocation stores the basis and the figures behind it, so “why did Elm Terrace get 33.33%?” is answered from the event log.

How you're measured

The numbers this role gets asked about, and where inletAP helps

Approval SLA compliance

The share of approvals decided inside their window, day by day and by building, on the reports page. It measures our approval deadline, not the vendor's payment terms.

More
Invoices past the deadline are still grouped at the top of the queue and emailed oldest first, so the percentage and the work list agree with each other.

Auto-processing rate

Of the invoices that reached approval or export in a range, the share that got there with no human edit, week by week on the reports page. It is not the opposite of the exception rate.

More
Pressing Approve is a decision rather than an edit, so an invoice you read and signed unchanged still counts. An invoice sent to review, read, and approved unchanged is both.

Exception rate by vendor

Your vendors ordered by how often their invoices needed a human, over the invoices that arrived in the range rather than the ones in the queue today.

More
Usually the fix is one mapping rule rather than more review capacity, and the list says which rule to write first. Invoices we could not match to a vendor get their own row, because not knowing whose bill it is is often why it landed in review.

How each of these is counted, including which measures we deliberately do not report: the metrics reference.

Worth knowing

Straight answers before you evaluate

The commercial shape

The price is published, users are unlimited on every plan including the free one, you pay per document rather than per seat, and the free plan repeats: 25 processed invoices every month, forever, with no card.

Take your data out whenever you like

One request builds a ZIP of the whole workspace: every table as NDJSON and as CSV, with the original invoice files, the audit trail and a coverage report that names anything left out.

inletAP does not move money

There are no ACH or check disbursement rails in the product. It produces approved, coded bills in your ledger, and payment happens where it happens today.

That is a deliberate boundary, not a roadmap gap we are quiet about.

Questions from this seat

How do I stop coding drifting between operators?
Put it in rules rather than in people's heads. A rule matches on vendor, source email, intake mailbox, amount, a keyword in the document or a property alias, and its action sets the GL account, assigns a reviewer, addresses the approval to a named person, sends the invoice straight to approval without a review, or quarantines it. Rules run once the document has been extracted, and the document records which rule matched, so a coding decision is explainable months later. You set each rule's priority in the builder — a whole number from 0 to 1000, 100 by default — and rules run lowest number first, with rules that share a priority running oldest first.
Can I test a rule before it affects live documents?
Yes. Simulate, on the rules screen, runs the rule you are editing over recent documents your workspace already holds and shows which it would match and what it would do to each. A simulation changes nothing: no document is coded, routed or approved, no audit entry is written, and the rule's match count does not move. It matches with today's vendor mappings and property aliases, so it tells you what the rule would do to those invoices now, not what would have happened when they arrived. A match is not always a rule that fires — an earlier rule that quarantines the invoice gets there first, and the row says so. How many documents it reads is printed on the screen and in the rules reference.
What does the audit trail actually record?
Every document state change with an actor and a timestamp — field edits with their before and after value, rule matches, routing decisions, approvals, rejections with their comment, and exports. A failed export is in the trail as well, naming the batch, the destination and the reason the ledger gave, and so is a retry, naming the person who pressed it. The one exception is a bill your ledger already holds: it posted, so no failure is recorded against it. It is append-only — there is no edit path, so you are not asked to trust that nobody rewrote it.
How are approvals controlled?
By written policy rather than convention. Amount tiers decide how many approvals are needed, properties can carry their own approver, and an invoice the extractor was not confident about goes to the review queue before it can be sent for approval at all, whatever the amount. One SLA deadline is stamped when an invoice is sent for approval, from the tier it falls in; the queue groups by time left, and one email goes out per invoice once its deadline passes. Rejections require a comment.
Does it handle separate books per owner or joint venture?
Multi-entity separation is part of the data model, and per-property mailboxes let you keep intake separated at the door. Exports can go to QuickBooks Online — several company files per workspace, with an ownership entity routed to its own company — or to a CSV whose columns you map, with an entity column per allocation where an owner's ledger sits outside your main file.
If an invoice is split across buildings, can it be approved a slice at a time?
Yes, and the default is deliberately conservative about it. An approval can be scoped to one property's share, so the manager for that building signs for that building, and you choose whether an approver sees the whole document or only their own slice. Auto-approval, though, is evaluated against the DOCUMENT total by default rather than against each slice: a $50,000 invoice cut into twelve $4,999 pieces would otherwise clear a $5,000 threshold twelve times with nobody reading it. Per-slice auto-approval exists as a setting, and it is opt-in for exactly that reason.
What happens when an export fails at close?
The batch reports what broke — an inactive GL account, a vendor that no longer exists — and can be retried without duplicating. Exports are idempotent and record the external ID they created, so a posted bill can be traced back to the original document and a retry cannot double-post.

The rest of the team

Everyone who touches the invoice gets their own view. Here is theirs.

Start free and run your own invoices through it

25 invoices a month, unlimited users, no credit card. Send this month's vendor bills and watch each one get checked, coded and posted to your books.