Treadstone Associates
Case File · Payroll & Tax Compliance

A T5018 filing catches a missing subcontractor

Anonymised, illustrative composite. A contractor building its annual T5018 list found one active subcontractor missing entirely — not because the sub had gone unpaid, but because every one of its invoices had been coded to the wrong account.

Treadstone Associates · Updated 2026

At a glance

  • • Ontario general contractor, 26 active subcontractor accounts through the year.
  • • T5018 filing is built from payments coded to Subcontract Labour GL accounts.
  • • A roofing subcontractor was paid $84,500 across 11 invoices, all miscoded to Materials & Supplies during a staff absence.
  • • That put the sub at $0 in the T5018 aggregation despite an active vendor file with a valid HST number on record.
  • • A reconciliation pass matching vendor HST numbers against invoiced amounts, regardless of GL coding, caught the gap before the six-month filing deadline.

The situation

A general contractor worked with 26 active subcontractor accounts over the course of the year, building its T5018 information return the way most contractors do: pulling every payment coded to a Subcontract Labour general ledger account and aggregating the totals by vendor for the year.

The problem

Income Tax Regulation 238(2) requires an information return from every person who pays an amount for goods or services rendered in the course of construction activities, where the payer’s business income for the period is derived primarily from those activities — which describes this GC and every one of its genuine subcontractors. A roofing subcontractor had invoiced the firm eleven times over the year, totalling $84,500 in payments, but a bookkeeper covering a leave had coded every one of those eleven invoices to Materials & Supplies instead of Subcontract Labour. When the T5018 aggregation query pulled from the labour account, that subcontractor never appeared in it at all.

The numbers

The gap was not that the sub went unpaid or unreported to anyone — the $84,500 was fully paid and sitting in the general ledger the whole time. It simply was not going to appear on a T5018 slip, because the query that built the T5018 list only looked at one account, and none of these eleven invoices were coded to it.

The rule that decided it

A reconciliation pass built for the filing cross-checked every vendor with an active subcontractor file — one carrying a business number and HST registration on record — against the T5018 aggregation, regardless of which GL account its payments had been coded to. That surfaced an anomaly the account-based query alone could not: a vendor with a live subcontractor file, an HST number, and eleven invoices in the general ledger, showing zero in the T5018 total. Under s.238(3)–(4), the reporting period is fixed once chosen and the return is due within six months after the end of it — a gap caught before that deadline is a correction; one caught after is a late or incomplete filing.

The mis-coding itself was an easy mistake to make and a hard one to notice from inside the accounting system: a roofing sub’s invoice, describing shingles, underlayment and labour on one line, genuinely could be read as a materials purchase by someone unfamiliar with how this particular vendor normally billed. Nothing about the invoice was fraudulent or unusual on its own; the account it landed in was simply the wrong one for what the T5018 filing needed to see.

The outcome

The eleven invoices were recoded to Subcontract Labour, and the roofing subcontractor was added to the year’s T5018 filing before the six-month deadline, with the full $84,500 correctly reported. The firm also changed how its T5018 aggregation runs going forward: matching against every vendor carrying an HST number on file, not only against payments already coded to a specific account, so a future miscoding cannot silently drop a vendor from the list again.

For the mirror-image problem — workers coded as subcontractors who should never have been on a T5018 list at all — see a contractor that reclassified nine long-term subs. For the filing mechanics themselves, see T5018 reporting and whether a payment gets a T5018 or a T4A.

What it would have cost otherwise

An information return is a statement of what the payer reported, independent of whatever the subcontractor did with its own tax filings — a $84,500 gap in the GC’s own T5018 return would have been a compliance failure on the GC’s side regardless of whether the subcontractor separately reported the income correctly. Left uncaught until after the six-month filing window closed, the correction would have become a late or amended filing instead of an on-time one, for a gap that had nothing to do with the underlying payment being legitimate and everything to do with which account it happened to be coded to.

The tell

The tell is a vendor file that is active and complete — a real business number, a real HST registration, real invoices in the ledger — sitting at zero in a report that is supposed to be built from exactly that vendor’s activity. A T5018 aggregation built only from one GL account will miss anything coded elsewhere by mistake; reconciling against the vendor file itself, not just the account, is what catches a miscoding instead of assuming an empty total means no activity.

Takeaways

  • • T5018 applies to payments for goods or services rendered in the course of construction activities, where the payer’s income is derived primarily from those activities.
  • • A vendor with an active subcontractor file and an HST number on record showing $0 in a T5018 aggregation is an anomaly worth checking, not a sign of no activity.
  • • Reconcile a T5018 filing against the vendor file itself, not only against payments already coded to the expected GL account.
  • • The reporting period is fixed once chosen, and the return is due within six months of its end — catching a gap before that deadline is a correction; catching it after is a late filing.

See where AI pays off first in your business.

A 30-minute call is enough to tell you whether AI pays for itself here.