Skip to main content

Bill your clients

Create products, start subscriptions, send one-off invoices, and track revenue across every client workspace under your agency.

Before you start

  • Stripe Connect onboarding must be complete with chargesEnabled: true. If it isn't, follow Connect Stripe to bill clients first.
  • The client you're billing must already have a workspace under your agency. Inviting a contact at the client to that workspace is a separate step — see Invite a client to a workspace.
  • v1 of client billing is USD-only. The price field accepts amounts in cents (Stripe's smallest currency unit) with a minimum of 50 cents.

You only need to be an admin or owner on the agency to create products and subscriptions. The owner-only gate is reserved for Stripe Connect onboarding and the revenue dashboard.

Step 1: Define a client product

A product is a reusable SKU you sell to clients — for example, "Automation retainer" at $2,500 monthly, or "Workflow build" at $5,000 one-time. Products live at the agency level so the same product can apply to many client workspaces.

  1. Open the products catalog

    Go to Settings → Billing → Client products, or visit /settings/billing/products directly.

  2. Create a product

    Click Create product and fill in:

    • Name (under 100 characters) — what you want to see on the client's invoice line item, like "Automation retainer".
    • Description (optional, under 500 characters) — extra context that appears on the Stripe-hosted invoice.
    • Billing cadence — one of One-time, Monthly, or Yearly. One-time products are charged once per invoice; monthly and yearly products renew on Stripe's subscription cadence.
    • Amount in cents — 250000 for $2,500, 50 for the minimum allowed charge of 50 cents. The form validates the minimum on submit.
  3. Save the product

    TaskJuice creates the matching Stripe Product and Price on your Connect account in the same request. The new product appears in the catalog list with a Stripe price ID.

Products are reusable across as many client workspaces as you want. You can archive a product later when you stop offering it — archived products stay attached to historic subscriptions and invoices, but don't show up on the new-subscription picker.

Step 2: Start a subscription for a client

A subscription is a product wired to a specific client workspace. Stripe creates a recurring charge on the subscription's cadence (monthly or yearly) and your platform fee is automatically applied to each successful invoice.

  1. Open the client's workspace billing page

    Switch into the client's workspace from your agency sidebar, then go to Workspace → Billing, or visit /[workspaceSlug]/workspace/billing directly. This page is the per-engagement billing view; do not confuse it with /[workspaceSlug]/billing, which is the workspace's TaskJuice plan.

  2. Start a subscription

    Click Start subscription. Pick a product from your catalog. The dialog shows the cadence and amount from the product definition. The billing recipient defaults to the workspace's designated billing contact, or to the first workspace-client member if no contact is set.

  3. Confirm

    Stripe creates the Customer (if one doesn't exist for this workspace yet) and the Subscription on your Connect account. The first invoice generates immediately and the client sees a Pay now button on their portal.

The 0.5% platform fee is set at subscription creation and applied to every invoice the subscription generates. Stripe deducts it automatically from each charge — you never see it as a separate line item, and you cannot adjust it per-invoice.

Step 3: Send a one-off invoice

For ad-hoc work that doesn't fit a recurring product (a custom build, a discovery sprint, a one-time integration), use a one-off invoice instead of creating a one-time product.

On the same workspace billing page, click Charge for project. Enter the description and amount in cents, then click Send invoice. Stripe issues the invoice, the client sees it in their portal, and the billing contact receives an email from Stripe with a pay link.

One-off invoices charge the same 0.5% platform fee on the subtotal. They reuse the workspace's existing Stripe Customer if one exists, or create one on the fly if this is the first time you're billing this client.

Step 4: Watch revenue across all clients

The agency revenue dashboard at /settings/billing/revenue rolls up gross revenue, platform fees deducted, and net to your account across every client workspace under your agency. It's the view you'll use for monthly reconciliation and for spot-checking that subscriptions are still charging successfully.

The dashboard is gated to the agency owner — admins can see the per-workspace billing pages but not the rolled-up revenue surface. This mirrors Stripe's own dashboard convention where consolidated financial views are owner-only.

What clients see

When you start a subscription or send an invoice, the client sees it in their portal at /portal/billing:

  • Billing overview shows active subscriptions and outstanding invoices.
  • Invoices lists every invoice with status (open, paid, void) and a Pay now button on anything unpaid. The button opens Stripe's hosted invoice page so the client can pay with a card, ACH, or whatever methods your Connect account supports.
  • Payment methods opens the Stripe Customer Portal so the client can add or update a card.

TaskJuice never sees card numbers; payment collection happens entirely on Stripe-hosted pages.

Cancel a subscription

On the workspace billing page, the active-subscription card has a Cancel subscription action. Confirm the dialog to cancel the subscription in Stripe. Existing invoices and payment history stay visible in both the agency billing page and the client portal.

Cancellations are an agency action. TaskJuice never unilaterally cancels a client subscription, even if your agency is suspended — billing for existing subscriptions continues until you cancel them yourself.

What happens when something goes wrong

SituationWhat TaskJuice doesWhat you do
Client's card declinesStripe retries on its standard dunning schedule. The invoice flips to past_due. The client sees it in their portal.Nothing required. Stripe handles dunning. If retries fail, contact the client through your normal channel; the invoice stays open until paid or voided.
Client requests a refundTaskJuice doesn't process refunds.Issue the refund in Stripe's dashboard. The client-invoices mirror updates when Stripe sends the refund webhook.
Client disputes a chargeTaskJuice records the dispute on the invoice.Handle the dispute in Stripe's dashboard. Stripe is the merchant-of-record relationship; TaskJuice is not in the loop.
Your agency is suspendedNew subscriptions and invoices are blocked at creation with an AgencySuspendedCannotBillError. Existing subscriptions continue to charge through Stripe.Resolve the suspension on your agency settings page. New billing actions unlock immediately once the suspension is lifted.

Common pitfalls

I can't create a product — the page shows "Connect Stripe to start billing." Connect onboarding hasn't completed, or chargesEnabled is still false. Open /settings/billing/connect and finish the flow. The products page unlocks the moment chargesEnabled flips to true.

The amount field rejects my input. Amounts are in cents, not dollars. $25 is 2500, not 25. Stripe's minimum USD charge is 50 cents, so anything under 50 is rejected.

I want to change a product's price. Stripe prices are immutable once created — this is a Stripe design choice, not a TaskJuice limit. To change the price of a product, archive the existing one and create a new product with the new price. Existing subscriptions on the old price continue at the old price until you migrate them.

The first invoice for a new subscription didn't generate immediately. Stripe's subscription invoicing is usually instant but can take up to a minute. The invoice appears on the client's portal as soon as the invoice.created webhook arrives.

Next steps

Was this helpful?