Why coaching invoices and accounting software need to talk
Chasing down client payments is already time-consuming. Manually re-entering those same transactions into QuickBooks or Xero at the end of the month is the kind of double-handling that quietly eats hours every week. If you run a coaching business — whether solo or with a team — getting your Coachful invoices flowing cleanly into your accounting software is one of the highest-leverage admin wins you can make.
Coachful's billing is powered by Stripe Connect, which means every payment you collect — one-time, recurring, payment plan, or coupon-discounted — is recorded in Stripe first. That single source of truth is what makes the QuickBooks and Xero connections reliable. This guide walks you through exactly how to route your coaching invoices into either platform, what maps where, and how to avoid the most common sync errors.
TL;DR
- Coachful billing runs through Stripe Connect — connect Stripe to QuickBooks or Xero using a native integration or a middleware tool like Zapier.
- Stripe's official QuickBooks connector (via the Stripe App Marketplace) syncs charges, refunds, and payouts automatically.
- For Xero, use the official Stripe + Xero integration or a tool like Zapier/Make to push invoice data on each successful charge.
- Match Coachful offer types (one-time, subscription, payment plan) to the correct product/service line in your accounting software for clean P&L reports.
- Always reconcile against your Stripe payout, not individual charges, to account for Stripe's fees correctly.
How Coachful billing works under the hood
Before you configure any accounting integration, it helps to understand the Coachful billing stack. When a client buys a coaching offer — a program enrollment, a recurring retainer, or a standalone booking — Coachful creates a Stripe charge (or subscription) under your connected Stripe account via Stripe Connect. You are the merchant of record. The money lands in your Stripe balance and then gets paid out to your bank on your normal Stripe payout schedule.
This architecture has an important implication: your accounting integration should connect to your Stripe account, not to Coachful directly. All the financial data lives in Stripe. Coachful surfaces it in your dashboard for context — you can see per-client revenue, offer performance, and payout history under Coach → Billing → Payments — but Stripe is the authoritative record.
Coachful supports four billing structures:
- One-time payments — single charge for a program, session pack, or digital product.
- Recurring subscriptions — monthly or annual plans billed automatically.
- Payment plans — a fixed total split across scheduled installments (e.g., 3 × $500).
- Multi-tier offers — different price points for the same program (e.g., DIY vs. VIP).
Each of these creates distinct Stripe objects (charges, invoices, subscriptions) that map differently in QuickBooks and Xero. Getting the mapping right up front saves hours of reconciliation later.
Connecting Stripe to QuickBooks Online
Option 1 — Stripe's native QuickBooks app (recommended)
Stripe maintains an official connector in the Stripe App Marketplace that pushes charges, refunds, and payouts directly into QuickBooks Online as sales receipts or invoices. It also records Stripe fees as a bank charge, which keeps your net revenue accurate.
- Log in to your Stripe Dashboard and navigate to Apps → App Marketplace.
- Search for QuickBooks Online and click Install.
- Authorize the connection with your QuickBooks credentials.
- In the app settings, map your Stripe products to QuickBooks Products & Services items. For Coachful, create at minimum: Coaching Program, 1:1 Session, and Subscription Retainer as service line items in QuickBooks first.
- Choose whether charges sync as Sales Receipts (payment collected immediately) or Invoices + Payments (two-step). For most coaches, Sales Receipts is simpler.
- Set your sync start date — ideally the first day of your current fiscal quarter — and let the initial import run.
- Review the first 10–20 synced transactions in QuickBooks under Sales → All Sales and confirm amounts, customers, and product lines look correct before trusting the automation.
After setup, every new charge in Stripe (triggered by a Coachful enrollment or booking) will appear in QuickBooks within minutes. Refunds processed in Coachful (Coach → Billing → Payments → Refund) flow through Stripe and sync as credit memos automatically.
Option 2 — Zapier or Make for custom workflows
If you need more control — custom invoice numbering, specific chart-of-accounts mapping, or conditional logic based on the Coachful offer type — Zapier and Make (formerly Integromat) both offer robust Stripe → QuickBooks zaps/scenarios.
A typical Zapier workflow: Trigger: Stripe — new charge succeeded → Action: QuickBooks Online — create sales receipt. Add a filter step in the middle to only fire for charges above $0 (to exclude free trials). You can also use metadata fields that Coachful attaches to Stripe charges (such as program_id and offer_name) to dynamically populate the QuickBooks description field.
Pro tip: Coachful tags every Stripe charge with metadata including the client's name, offer title, and program ID. In Zapier, map metadata.offer_name to the QuickBooks line-item description for invoices that are immediately self-explanatory — no decoding cryptic Stripe charge IDs at tax time.
Connecting Stripe to Xero
Option 1 — Official Stripe + Xero integration
Xero has a built-in Stripe connection available from the Xero App Store. It is primarily designed to collect payment on Xero invoices via Stripe, but it also imports Stripe transaction history into your Xero bank feeds.
- In Xero, go to Accounting → Bank Accounts and add a new bank account. Choose Stripe as the bank.
- Authorize with your Stripe credentials. Xero will create a virtual "Stripe" account in your chart of accounts.
- Stripe payouts to your real bank account will appear as transfers between the Stripe account and your bank account in Xero — this is how Xero handles the Stripe balance model.
- Each individual charge appears as a line in the Stripe bank feed. Use Xero's bank rules to auto-code recurring charge patterns (e.g., any charge with description containing "Monthly Coaching" → revenue account Coaching Services).
- Reconcile weekly: match Xero's Stripe account transactions against your actual Stripe dashboard balance.
Option 2 — Zapier: Stripe → Xero invoice
For invoice-level detail (client name, line items, due date), the Zapier Stripe → Xero path gives you more granularity than the bank feed alone.
Recommended zap: Trigger: Stripe — payment intent succeeded → Action: Xero — create invoice (status: Paid). Map the Stripe customer email to Xero contact, metadata.offer_name to the line item description, and the charge amount (in dollars, divided by 100 from Stripe's cents format) to the unit amount. Set the account code to your coaching revenue account.
Heads up: Stripe amounts are always in the smallest currency unit (cents for USD). A $500 coaching program appears as 50000 in Stripe's API. In Zapier, use a Formatter step to divide by 100 before passing the value to Xero, or you will create invoices for $50,000.
Mapping Coachful offer types to your chart of accounts
A clean chart of accounts makes your P&L immediately useful. Here is a recommended mapping for coaches:
- Group programs / cohort enrollments → Group Coaching Revenue
- 1:1 session bookings → 1:1 Coaching Revenue
- Monthly retainer subscriptions → Recurring Coaching Revenue
- Payment plan installments → Recurring Coaching Revenue (same account as subscriptions — they are economically equivalent)
- Digital products / standalone resources → Digital Product Sales
- Stripe fees → Merchant Processing Fees (expense account)
Keeping program revenue and session revenue in separate accounts lets you quickly see whether your scalable (group/program) income is growing relative to your time-for-money (1:1) income — a key metric for any coaching business scaling toward leverage.
Running a growing coaching practice? Coachful gives you the billing infrastructure — Stripe Connect, payment plans, coupons, multi-tier offers — so your accounting setup only needs to connect once and stay clean as your revenue scales. Sign in to your workspace to review your current offer billing structures before configuring your accounting sync.
Handling refunds, chargebacks, and coupons
Refunds
Refunds issued in Coachful are processed through Stripe and appear as negative charges in your Stripe dashboard. Both QuickBooks (via the native app) and Xero (via bank feed) will pick these up automatically. In Zapier-based setups, add a second zap: Trigger: Stripe — new refund → Action: QuickBooks/Xero — create credit memo.
Chargebacks / Disputes
Stripe records chargebacks as separate dispute objects. These do not automatically flow into QuickBooks or Xero via most integrations. You will need to manually create a journal entry when a chargeback is opened (debit Chargeback Reserve, credit Coaching Revenue) and reverse it if you win the dispute. Check your Stripe dashboard under Payments → Disputes monthly.
Coupons and discounts
When a client uses a Coachful coupon at checkout, Stripe records the discounted amount as the charge — it does not record the full price minus a discount as two separate line items (unless you use Stripe's invoice-level discount feature). In most accounting setups, the discounted charge is what syncs. If you want to track discounting activity, add a custom field or tag in your accounting software rather than relying on the Stripe charge data alone.
Common mistakes and troubleshooting
Duplicate transactions appearing in QuickBooks or Xero
This almost always happens when you have both the native Stripe integration and a Zapier zap running simultaneously. Pick one method and disable the other. Check QuickBooks under Banking → For Review or Xero under Accounting → Bank Accounts → Manage Account → Import Statement for duplicates, and exclude or delete the extras before reconciling.
Customer names not matching
Stripe creates customers using the email address collected at Coachful checkout. If a client has two email addresses, Stripe may create two customer records, leading to two separate contacts in your accounting software. Merge duplicate contacts in QuickBooks or Xero once you spot them — do not just delete, as the transaction history will detach.
Payout amounts don't match individual charge totals
Stripe batches multiple charges into a single payout (minus fees). Always reconcile to the payout total in Xero/QuickBooks, not the sum of individual charges. The Stripe QuickBooks app handles this automatically. In manual/Zapier setups, you may need a clearing account ("Stripe Clearing") that accumulates charges and is zeroed out by each payout transfer.
Subscriptions showing as one-time payments
Stripe subscriptions generate a new charge each billing cycle. If your zap triggers on charge succeeded, each renewal will create a new invoice in your accounting software — which is correct behavior. If you only see the first charge, check that your Zapier/Make scenario is turned on and that the Stripe trigger is not filtered to "first charge only."
Currency mismatches
If you charge international clients in their local currency (Coachful supports multi-currency via Stripe), make sure your accounting software is set up for multi-currency before connecting. In QuickBooks, enable multi-currency under Settings → Account and Settings → Advanced. In Xero, enable it under Settings → Currencies. Once enabled, charges in EUR, GBP, CAD, etc., will land in the correct currency account.
Michelle (AI assistant) can't push data to QuickBooks directly
Michelle, Coachful's AI co-pilot, can help you find payment records, identify which clients are on payment plans, and surface billing history within your Coachful dashboard. She cannot currently write data directly to third-party accounting tools — that connection happens at the Stripe layer as described above.
Best practices for a clean coaching accounting setup
- Reconcile weekly, not monthly. A 15-minute weekly reconciliation prevents month-end pile-ups and catches sync errors before they compound.
- Name your Stripe products consistently. In Coachful, the offer name becomes the Stripe product name. Use clear, consistent naming (e.g., "12-Week Business Coaching Program" not "Program A") so your accounting descriptions are readable.
- Separate personal and business Stripe accounts. If you use Stripe for anything other than Coachful, ensure your accounting integration filters by the correct Stripe account or restricted API key.
- Store client invoices. Coachful automatically emails PDF receipts to clients after every charge. You can also download these from Coach → Billing → Payments for your own records. Keep a copy in a cloud folder organized by tax year.
- Involve your bookkeeper early. Share this article with your bookkeeper or accountant before going live. The Stripe-first architecture is slightly different from a typical e-commerce or SaaS setup, and orienting them up front avoids rework.
Ready to get your coaching finances in order?
Sending coaching invoices to QuickBooks or Xero is straightforward once you understand that the connection lives at the Stripe layer, not inside Coachful itself. Set up the native Stripe integration for whichever accounting platform you use, map your Coachful offer types to clean revenue accounts, and reconcile weekly. You will have audit-ready books and a clear picture of which programs and services are actually driving your revenue.
If you haven't yet set up your billing offers in Coachful, now is a great time. Start your free trial and build your first coaching offer — one-time, subscription, or payment plan — so your accounting integration has real data to work with from day one. Already a Coachful coach? Sign in to your workspace and head to Coach → Billing to review your current offer setup before configuring your sync. For more platform guides, browse the Coachful help center.