August 5, 2026

How to recover unpaid subcontractor invoices before they quietly age out

By Drumtap · August 5, 2026

You sent the invoice, the GC portal shows a "Pay App #14" line under your name, and 45 days later the bank deposit is short by the amount of that pay app with no clear reason attached. QuickBooks shows the invoice as open and aging. AR's last three follow-ups went unanswered. The pay-app summary the GC posts to the job trailer is short by the same line. These are the four signals that the invoice did not silently age out — it was actively swallowed between the moment you billed it and the moment disbursement sat down. The status codes that usually drive it are G-01 (invoice missing from the portal), G-02 (missing PO/reference), and G-04 (partial or short payment). Quiet AR silence on the GC's side, a portal pay-app summary that is short by exactly one line, a QB aging report that grows while the bank balance does not — any one of those by itself is not proof, but together they are the only reliable fingerprint that this specific invoice is the one that died at the portal rather than at the bank.

The place the invoice disappears is the chain between QuickBooks and disbursement: the bid you signed at award, the schedule of values the GC issued against the bid, the pay-app you submitted against the schedule, the GC's review portal where pay-app status codes live, and the disbursement that finally hits your account. Somewhere in that chain — most often at the GC review step — the portal silently modifies a line, drops a line, or rejects the whole pay-app, and your QuickBooks ledger never gets the news because the only authoritative confirmation of what changed is the portal CSV your AR person was not watching that week. The portal pays the GC's version of the SOV, not your invoiced version. The G-04 partial or short payment sits on the pay-app until somebody pulls the conditional waiver to close out the under-payment; meanwhile your invoice has cycled once. The change-order you logged in QB may or may not have been sequenced into the GC's side of the SOV before pay-app #14 closed. Whenever the portal's verdict differs from your billed version, the discrepancy lives where AR cannot see it and QB does not write it down — and that is the structural reason the same subcontractor can be profitable on jobs and cash-poor at the office.

If the portal route has eaten the invoice for two pay cycles and the dispute packet is still empty, the lien-rights fallback is on the table — and the exact window, form, and sequencing are state-specific. A properly noticed lien, sent inside your state's statutory window after first furnishing labor or materials to the project, secures a claim against the property itself — but the priority of that claim relative to the GC's lender, prior recorded interests, and any subsequent owner is not uniform across states, and depends on whether the per-state notice and recording deadlines were met on time, on federal lending law, and on the title-insurance underwriting that sits underneath the closing. That attachment is the leverage that turns a quiet portal rejection into a phone call from somebody who can actually disburse. This paragraph is not legal advice and the state-specific numbers are not a substitute for reading your state's lien statute and talking to a construction attorney about the specifics of your job; consult counsel for any specific job. The operational fact is the same everywhere: a notice that arrives inside the window, addressed and served correctly, moves the case from "AR person chasing a portal status code" to "GC or owner answering a lien claim," and those two conversations close at very different rates.

Drumtap's reconciliation is the work that surfaces the gap at the line-item level the moment a pay cycle closes, before the next pay-app is due rather than after the next month-end close. Every QB invoice row gets paired to the corresponding portal CSV row for the same pay-app; change-order sequencing, conditional/unconditional waiver status, and the SOV delta the GC posted back are the connective tissue that explains the difference. A single line that does not match flags the whole pay-app, the dollar gap sums into the recovery amount, the per-line evidence list assembles the dispute packet, and the email draft lands in your queue pre-filled so the case hits the GC inside the pay-app window instead of two cycles later. For the structural framing of the same problem and what the monthly subscription looks like, the /pricing page spells out the $199 / $349 / $499 monthly tiers (with Pro and Auto on the Coming-next waitlist) and notes that the 2–8% recovery fee you may see elsewhere is illustrative only — Drumtap has not published a fee schedule covering the percentage, trigger, or partial-payment / retainage / disputed-deduction cases, so Drumtap does not charge under any band today. For the specific rejection codes and the lien-rights / lien-waiver sequencing that drives most of those gaps, start with portal reconciliation: the core problem Drumtap solves.

Next pillar

See how Drumtap prepares the refile packet for rejected invoices.

Walk the disputes section — see how a rejection turns into a refile packet.