Bills

Bills are money you owe vendors and suppliers. You enter them manually, capture them from a forwarded email, or extract them from a PDF/image with AI — then track them through a status lifecycle until they're paid. Each bill that's received or paid posts a double-entry journal entry (Debit Expense, Credit Accounts Payable), so your AP balance and aging stay accurate to the cent.

Key capabilities

  • Multiple entry paths: manual draft, AI extraction from documents, bulk CSV import, or auto-created from a purchase order/transfer
  • Six-state lifecycle (draft, forecasted, received, partially_paid, paid, canceled) with capability gating per state
  • One-time and recurring bill types, with recurring templates that auto-generate future bills
  • Partial payments that track the amount paid and a live remaining balance, flipping status to partially_paid then paid
  • Vendor credits applied against a bill to reduce the net balance due alongside cash payments
  • AP aging report bucketed by vendor (Current, 1-30, 31-60, 61-90, 91+ days past due)
  • Bill metrics (total due, total balance due) across all open bills
  • Bank-transaction payment matching with confidence scoring, plus split one payment across many bills
  • Contract comparison that stamps each bill with a contract-match status (feeds AP approval)
  • Three-way match (PO ↔ receipt ↔ invoice) with quantity/price variance flags on PO-sourced bills
  • Document attachments (PDF/image) kept on the bill for the audit trail
  • Optional payment-method label (Wire Transfer, ACH, Check, Credit Card) for reporting
  • Automatic AP approval routing when the workflow is enabled

How it works

A bill is created, optionally routed for approval, marked received (posting to AP), then paid down by one or more transactions until the balance is zero.

flowchart LR
  create["Create (manual / AI / CSV / PO)"] --> draft["draft / forecasted"]
  draft --> received["received (posts to AP)"]
  received --> partial["partially_paid"]
  partial --> paid["paid"]
  received --> paid
  draft --> canceled["canceled"]

How to use it

  1. Open Bills under the Payables sidebar group (/books/bills).
  2. Click New Bill to enter one manually, or use the Bill Inbox to convert an emailed/AI-extracted draft.
  3. Pick the vendor, enter the amount, expense account (ledger), bill number, and dates (received and due).
  4. Save — a received bill posts its journal entry and starts showing in AP aging; a draft waits until you mark it received.
  5. To pay, open the bill and use Record Payment, choosing the matching bank transaction and amount. Partial amounts are allowed.
  6. Use the search and filter controls to narrow by vendor, status, payment method, or linked journal entry.
  7. Review the AP aging view regularly to catch overdue balances before late fees hit.

Pro tips

  • Recording a payment requires a real bank transaction — DayZero links the bill to that transaction's journal entry rather than inventing cash movement, so reconcile your bank feed first.
  • Removing a payment only un-links the transaction; it never deletes the bank transaction, and the bill's status recalculates back to received or partially_paid.
  • Use the payment-matching engine to auto-find likely payments (default confidence floor 0.50), then bulk-approve the high-confidence ones (≥ 0.85) instead of matching by hand.
  • Split a single bank payment across several bills with the batch endpoint — it validates the total against the transaction's unallocated balance before creating any payment, so an over-allocation fails cleanly.
  • The payment-method label is informational only — it never touches the ledger, so it stays editable even after a bill is paid.
  • Bills that come from a purchase order carry a three-way match status; a qty_variance or price_variance flag means "ordered ≠ received ≠ billed" and is worth investigating before paying.
  • Keep vendor contracts current: the contract-match status stamped on each bill is what lets the AP approval workflow auto-approve or escalate it.

In-depth guide

Lifecycle & balances

  • Edit / delete / cancel — allowed only while in draft, forecasted, or received.
  • Payments — accepted only in received or partially_paid.
  • Remaining balance — the bill amount minus payments applied (cash side).
  • Balance due — also subtracts applied vendor credits and is 0 for paid/canceled.
  • Overdue — true when the bill is unpaid and its due date is in the past.

Accounting impact (double-entry)

  • Mark received (or create-received with a ledger_id): Debit the chosen expense ledger, Credit Accounts Payable.
  • Record payment: Debit Accounts Payable, Credit Cash. When payments reach the bill amount, status flips to paid.
  • Cancel: status moves to canceled and any associated journal entries are removed.

Journal entries are only created when the business has the ledger integration enabled.

AI bill capture (OCR / extraction)

  • Inputs — AI extraction accepts pasted text, PDFs, images, Excel, or a multi-bill CSV and returns draft bills for review before anything is created.
  • Auto-matching — matches an existing vendor at ≥ 80% name similarity and an expense ledger at ≥ 75% similarity to the detected category, and returns a per-item confidence score.
  • File handling — files process concurrently (uploading 5 is roughly as fast as 1), cap at 20 MB each, and use a vision-capable model for PDFs/images.
  • On approval — reviewed drafts are created through the create-received path so they post a journal entry immediately.
  • Inbox flow — see AP Emails and AP Automation & Bill Capture.

Payment matching

  • Scan — the matching engine scans unallocated outgoing bank transactions against open bills, scoring amount, date, memo, and vendor similarity.
  • Thresholds — suggestions appear with a confidence score; the default minimum is 0.50, auto-match accepts ≥ 0.85, and bulk-approve clears all pending suggestions above a threshold (default 0.85).
  • Accepting — creates the real payment and updates the bill.
  • Payment priority — the AI payment-priority endpoint can rank which open bills to pay first.

Related features & AP approval

  • Trigger — on creation and on receipt, DayZero calls the AP approval trigger.
  • Routing — when automatic routing and a published workflow are present, the bill's amount and contract-match status are read to route it into auto-approve, operations, or advisor + owner tiers — see AP Approval Workflow.
  • Downstream — bills also feed AP aging, cash forecasting, and (when sourced from inventory) the PO/transfer three-way match.

Edge cases

  • A bill can exist without a vendor — useful for quick drafts, but contract matching and approval routing need a vendor.
  • Bulk CSV import creates rows as draft, forecasted (when approve=true), or received (with create_as_received, which requires a resolvable expense ledger per row).
  • Force-deleting a bill with payments removes the link records but not the underlying bank transactions.

Start free and take control of your payables.