ExpenseBot

Agency Passthrough Billing: How to Invoice Clients for Vendor Costs

Three passthrough models (at-cost, cost-plus, bundled), how to tag costs by client in ExpenseBot, building consolidated invoices, and the tax trap everyone hits.

Agencies and freelancers who hire subcontractors, purchase software for client projects, or buy media and vendor services face a billing question every cycle: how do you invoice clients for costs you paid out of pocket? The answer depends on whether you're passing costs through at cost, with a markup, or bundling them into a retainer — and each model has different accounting and tax implications.

This guide covers the three passthrough models, how to tag and track costs by client in ExpenseBot, how to build a consolidated invoice, and the tax trap that catches many first-time agency operators: passthrough revenue is still income, even when the net is zero.

What Passthrough Billing Is (and Isn't)

Passthrough billing means invoicing a client for costs you incurred on their behalf — subcontractor fees, ad spend, software licenses, hosting, production costs — on top of or separately from your own labor or management fees.

What it is: a billing mechanism for recovering project costs. You pay a vendor, track the cost, and include it on the client's invoice. The client ultimately bears the vendor cost; you're the intermediary who manages the relationship and payment.

What it isn't: a tax-free pass-through in the IRS sense. The full billed amount runs through your revenue line — even at exact cost. The accounting treatment is revenue + offsetting expense = zero net income, but gross revenue goes up. This matters for several practical reasons:

  • GST/HST/VAT thresholds: in Canada, the $30,000 threshold for mandatory GST/HST registration is based on gross taxable supplies, not net income. Passthrough revenue counts toward the threshold.
  • Loan qualification: gross revenue is used in small business loan applications. Higher gross revenue (even from passthroughs) can help.
  • 1099-K and platform reporting: if you receive client payments through Stripe or PayPal that include passthrough amounts, the 1099-K shows the full gross — you need the corresponding expense records to reconcile.

Three Models: At-Cost, Cost-Plus, and Bundled

At-cost passthrough: you charge the client exactly what you paid the vendor, no markup. Common for media buying at agencies that earn their margin on management fees, and for subcontractor costs where the client is aware of the underlying rates. Net income effect: zero (revenue = expense). Gross revenue increases.

Cost-plus: you add a markup percentage to vendor costs before billing. The standard for creative agencies is 15–20% on out-of-pocket vendor costs. For media buying, 15% above net cost is traditional. The markup percentage is ordinary taxable income on Schedule C. Your contract should specify the markup rate — undisclosed markups on passthrough costs erode trust when clients eventually compare invoices to vendor receipts.

Bundled: vendor costs are included in a fixed monthly retainer — the client pays one amount that covers your labor, overhead, and estimated vendor costs. This simplifies billing but creates a reconciliation question: what happens when actual vendor costs are higher or lower than estimated? Most bundled agreements have a cap on vendor costs or a true-up at quarter-end.

Choose the model that fits your client relationship and the predictability of your project costs. At-cost is cleanest for audit transparency. Cost-plus reflects your value as a vendor manager. Bundled works best for ongoing retainers with stable cost structures.

Tagging Costs in ExpenseBot by Client Project

The foundation of clean passthrough billing is tagging every vendor cost to the correct client project as you incur it — not at invoice time.

In ExpenseBot, use the Tags system to create a tag for each active client or project (e.g., "ACME-Q2-Website," "Smith-Retainer"). When a vendor receipt is scanned or a subcontractor invoice arrives in Gmail, tag it to the client project immediately. The tag carries through to:

  • The per-client expense report (pull at any time to see costs to date)
  • The profit-by-client view — shows revenue, tagged costs, and margin for each client in real time
  • The reimbursable expense invoice builder (pull tagged costs into an invoice)

For recurring vendor costs (monthly software subscriptions for a client, weekly subcontractor invoices), set up the tag once. ExpenseBot's recurring expense tracker can auto-tag expenses from known senders so the cost is attributed to the right client without manual tagging every cycle.

Critical habit: tag at receipt time, not at billing time. At the end of a three-month project, a pile of untagged vendor receipts is a billing accuracy and dispute risk. Tag immediately — it takes five seconds per receipt.

Building a Consolidated Client Invoice

A consolidated invoice for an agency client typically has three sections: your labor or management fee, vendor/subcontractor costs (passthrough), and third-party fees (Stripe processing, platform fees, etc.).

Structure that works for client AP departments:

  1. Labor / management fee section: your hours, description of deliverables, rate, total. This is your margin-generating line.
  2. Vendor costs section: each passthrough item as a separate line with vendor name, description, amount (+ markup if applicable). Attaching or referencing original vendor receipts here prevents disputes.
  3. Third-party fees: Stripe processing, platform commissions, or any other administrative costs you're rebilling. These are often small but add up over a multi-month project.
  4. Subtotal, tax (if applicable), total due.

In ExpenseBot: open the Bill Client tool, select the client tag and date range. Tagged expenses appear as selectable line items. Add your labor fee manually. The tool generates a consolidated invoice with all line items and the correct tax calculation if you're GST/HST or VAT registered.

Before you send: check the profit-by-client view for this client to verify the margin is what you expected. If vendor costs ran higher than projected, now is the time to catch it — before the invoice goes out or after, depending on your contract terms.

The Tax Trap — Passthrough Revenue Is Still Income

This is the most common accounting mistake for first-time agency operators: they treat passthrough costs as "not really income" and don't record them on Schedule C.

Here's what actually happens on your tax return:

You billed a client $10,000: $4,500 your labor, $4,500 subcontractor costs (at-cost), $500 markup on those subcontractor costs. How Schedule C sees this:

  • Revenue (Line 1): $10,000
  • Contract labor expense: $4,500 (deductible)
  • Net taxable from this project: $5,500 ($4,500 labor margin + $500 markup)

If you accidentally omit the $4,500 passthrough from revenue: Revenue = $5,500, same expense of $4,500 = $1,000 net. You've understated income by $4,500. When a 1099 or payment record shows $10,000 received, the IRS sees a $4,500 gap.

If you accidentally omit the expense but report the revenue: Revenue = $10,000, no expense = $10,000 taxable. You've overpaid taxes by roughly $1,350 (30% tax rate on $4,500).

The correct move: record both sides. Every dollar you collect goes in revenue. Every dollar you pay a vendor or subcontractor goes in expenses. They offset for at-cost passthroughs; the markup is your taxable profit.

Subcontractor Invoices and 1099-NEC

If you pay a subcontractor $600 or more in a calendar year for services, you're required to file a 1099-NEC (Nonemployee Compensation) by January 31 of the following year.

Who gets a 1099-NEC:

  • Individual freelancers and contractors
  • Sole proprietors
  • Single-member LLCs (taxed as sole proprietor)

Who doesn't get a 1099-NEC:

  • Corporations (including S-corps and C-corps) — with one exception: attorneys
  • Partnerships that are not providing professional services
  • Payments via credit card or payment network (Stripe, PayPal) — the card processor handles reporting on 1099-K
  • Payments for products, software, or non-service purchases

Collect W-9 forms before paying: get a W-9 from every subcontractor before the first payment. The W-9 gives you their legal name, TIN, and business type — everything you need to prepare the 1099 in January without chasing them.

Tracking in ExpenseBot: subcontractor invoices received via Gmail are scanned and logged as expenses. Tag each to the relevant client project, and use the profit-by-client view to see subcontractor costs by client at a glance. At year-end, filter by "Contract Labor" category to identify every subcontractor who may have crossed the $600 threshold.

For the agency management overview, see the agencies solution. For billing clients for combined labor and passthrough costs, see bill client invoice. For the Schedule C guide to deducting contract labor and vendor costs, see Schedule C expense guide.

Share:

Track Mileage Automatically with ExpenseBot

Google Maps calculates your distances. Current IRS & CRA rates applied automatically. Tax-ready mileage log in seconds.

No credit card required · Deploys in 30 seconds