Billing for Forwarders

Earn from shippers, pay couriers, and reconcile every leg of a multi-leg shipment.

A forwarder sits in the middle of every shipment financially: you earn from the shipper and pay out to the couriers running each leg. chrt’s billing model handles both sides on the same order. Rate sheets attach per task group (per leg), line items roll up into statements, and statements settle through Stripe Connect or off-platform.

Before you start

  • Billing primitives — Rate Sheet, Line Item Group, Statement — back every figure on the page. See Billing primitives for the model.
  • To collect from shippers or pay couriers through chrt’s payment processor, your org needs a Stripe Connect account. Set one up early — see step 5.

1. Open Billing

Open chrt.com/billing. The hub gives you direct links to each section.

SectionWhat’s thereForwarder-relevant?
EarningsStatements of money owed to your orgYes — money in from shippers
ExpensesStatements of money you oweYes — money out to couriers
LedgersAgreement-backed billing periodsYes — for rolling invoices and pay periods
Rate sheetsPricing templatesYes — one per shipper, one per courier

2. Attach rate sheets per leg

Every leg of a multi-leg order is its own task group, and each task group gets its own rate sheet. That’s how you can charge a shipper one rate for the full shipment and pay each courier a different rate for their leg.

Two layers of rate sheets:

  • Forwarder ↔ Shipper sheet. What you charge the shipper. Set this as the default on your connection with the shipper so it auto-applies to every order from them.
  • Forwarder ↔ Courier sheet. What each courier charges you. Set this as the default on your connection with the courier so it auto-applies to ground segments assigned to them.

Open chrt.com/rate-sheets to see and edit all rate sheets, or open a connection’s partner detail page and set the default sheet inline.

Rate sheets apply to task groups, not orders. On a ground + flight + ground shipment, you’d typically have two rate sheets — one each for the origin and destination couriers — plus your forwarder-to-shipper sheet on the order.

See Set up a rate sheet for the full create-a-sheet flow.

3. Review earnings (shipper-to-you)

Earnings are statements that group what you’ve billed shippers for. Open chrt.com/billing/earnings and click any row for the detail.

The detail page shows:

  • Statement total and current status (staged, open, paid, uncollectible).
  • The line item groups — one per task group on the order — each with base rates, mileage, surcharges, and adjustments.
  • Messages and attachments between you and the shipper.
  • The Stripe invoice when one has been issued.

Open a statement, attach an invoice PDF or backup detail, and send to the shipper. If you settle through chrt Stripe Connect, the shipper pays through a Stripe-hosted page and the statement marks itself paid on confirmation.

4. Review expenses (you-to-courier)

Expenses are statements couriers open against your forwarder org for the legs they ran. Open chrt.com/billing/expenses to see them.

You can:

  • Pay the statement. If Stripe settlement is configured on the connection, click Pay invoice to settle through Stripe; otherwise pay off-platform and click Mark paid with a reference note.
  • Dispute or message. Use the statement’s message thread to ask questions or surface mistakes. Couriers see the same thread on their side.
  • Adjust a line item before the statement is paid. Open the line item’s Adjust dialog, enter the delta and a comment. Adjustments leave an audit trail; the original quantity and rate stay intact, with the new total reflecting the adjustment.

Statements become immutable once paid. Adjust before payment, not after.

5. Set up Stripe Connect

Stripe Connect is chrt’s payment processor for settling statements through the platform. As a forwarder you typically want it on both sides — collecting from shippers and paying out to couriers via the same Stripe account.

  1. Open Stripe Connect settings.
  2. Click Set up Stripe Connect to open Stripe’s onboarding in a new window.
  3. Complete Stripe’s KYC, banking, and tax information.
  4. Return to chrt — the settings page reflects account status (account ID, payouts enabled) once Stripe finishes onboarding.

Off-platform settlement is fine too — pay each statement however you’ve agreed with the counterparty and mark it paid in chrt with a reference note.

6. Use ledgers for rolling invoicing

A ledger groups statements over a defined billing period for one connection — useful when you and a counterparty settle weekly or monthly instead of one statement at a time.

Open chrt.com/billing/ledgers and open any ledger:

  • See the statements in the current period.
  • Close the period to roll outstanding statements into a single consolidated invoice.
  • See historical periods and what was paid against each.

Set up one ledger per shipper for outbound billing and one per courier for inbound — that way each counterparty has a single rolling tab and you settle on cadence.

7. Driver pay (if you also dispatch drivers)

If your forwarder org also has direct-employed drivers (an OBC team, in-house couriers), each driver’s pay accumulates as line item groups against their task groups. Driver pay isn’t auto-statemented — open the driver’s line items, group them into a statement on your cadence (typically two weeks), and pay through Stripe Connect or off-platform.

How to know it worked

  • Earnings statements move from StagedOpenPaid as shippers pay.
  • Expense statements you pay flip to Paid with a paid_at timestamp.
  • Adjusted line items show the original value and the adjustment as an annotation; the statement total reflects the adjustment.
  • Stripe-settled statements link out to the Stripe invoice with matching status.

If something looks different

  • A leg has no line items. The task group ran without a rate sheet. Check the connection’s default sheet, or attach a sheet directly to the task group.
  • Statement totals don’t match what the shipper expected. Pull up the per-task-group line item groups — multi-leg pricing depends on each leg’s individual rate sheet. The detail breakdown shows where every charge came from.
  • Can’t adjust a line item. The statement is paid or moved past the adjustable state. Adjustments are pre-payment only.
  • Stripe payouts not arriving. Check Stripe Connect settings — payouts enable only after Stripe finishes KYC.
  • Contact hi@chrt.com for settlement issues or if a statement looks wrong on both sides.