Stripe Connect sits at the architectural center of any agency that wants to do more than collect a flat retainer. Whether you're processing payments on behalf of clients, taking a percentage of client revenue, or running a true marketplace, Connect is the substrate that makes it work without your name showing up on every transaction.
It's also the substrate that's most commonly set up wrong. A bad Stripe Connect setup creates compliance exposure, tax filing chaos, and a migration project later that costs weeks. This walkthrough covers the right architecture and the four common mistakes to avoid.
When you actually need Stripe Connect
You need Stripe Connect when:
- You're processing payments where the funds belong to the client, not to your agency
- You want to deduct an agency fee or platform fee from each transaction automatically
- You want clients to see their own dashboard and own the disputes/payouts on their funds
- You want to issue 1099s correctly without manually reconciling whose money went where
You do not need Stripe Connect when:
- You're collecting a flat retainer from the client into your own Stripe account (that's a regular Stripe customer subscription)
- You're billing clients metered usage that goes into your own account (regular Stripe billing)
- The client's end-customers pay the client directly through the client's own Stripe account, untouched by your agency
The trap to avoid: setting up Stripe Connect when you don't need it. It adds compliance overhead (KYC, dispute handling, tax reporting) that wasn't warranted by the business model.
The three Connect account types
Stripe offers three flavors of Connect, and the choice shapes everything downstream.
Standard accounts. The client has their own full Stripe account, signs up directly with Stripe, and grants your platform OAuth-style access. The client manages their own dashboard, disputes, payouts. This is the simplest from your side and the most flexible for the client. It's what most agencies should use.
Express accounts. A simplified onboarding flow hosted by Stripe but branded as your platform. The client gets an account but the dashboard is more limited. Good for use cases where the client doesn't need full Stripe functionality, just payouts and basic reporting.
Custom accounts. Maximum control, maximum responsibility. You handle KYC, you handle compliance, you handle disputes, you handle the dashboard UX. Required for marketplaces with complex flows; overkill for most agencies.
For most agency operators, Standard accounts are the right answer. The client owns their Stripe relationship. You operate on top of it. If the relationship ends, the client keeps their account; you don't have a data-extraction problem.
The setup walkthrough
The setup proceeds in five steps.
Step 1: Enable Connect on your platform Stripe account
In the Stripe dashboard, under "Connect," enable Connect for your platform account. You'll need:
- A platform name and logo (shown to clients during onboarding)
- A redirect URL for the OAuth flow (e.g.,
https://yourapp.com/stripe/callback) - Branding settings (colors, support email, terms link)
This is configured once and lives at the platform level, not per-client.
Step 2: Build the OAuth onboarding flow
Each client connects their Stripe account through OAuth. The flow:
- Client clicks "Connect Stripe" in your dashboard
- Redirected to Stripe's OAuth URL with your
client_id - Client logs into their Stripe (or creates a new account)
- Stripe redirects back with an authorization code
- Your backend exchanges the code for an
access_tokenandstripe_user_id - Store the
stripe_user_idagainst the client record
The stripe_user_id (also called accountId) is what you use to make API calls on the client's behalf via the Stripe-Account header.
Step 3: Configure platform fees
Decide your fee model:
- Application fee. A flat or percentage fee deducted from each charge. The cleanest model. Stripe handles the split automatically; the platform fee lands in your platform account, the rest in the client's account.
- Subscription on top. You charge the client a separate flat fee through standard Stripe billing, and let their Connect account handle their end-customer revenue at full retention.
- Hybrid. A flat retainer plus an application fee on transactions, common in performance-aligned agencies.
The application-fee approach is cleaner from a tax-reporting perspective: the client's 1099 reflects their gross revenue, and your 1099 reflects your fees, with no manual reconciliation.
Step 4: Process charges with the platform fee
The API call:
const charge = await stripe.charges.create(
{
amount: 50000, // cents
currency: 'usd',
source: 'tok_xxxxx',
application_fee_amount: 2500, // your platform fee in cents
description: 'Booking deposit'
},
{
stripeAccount: clientStripeUserId // route to client's account
}
)
The application_fee_amount lands in your platform account; the rest, minus Stripe's processing fees, lands in the client's account.
Step 5: Webhook handling
The webhook layer is what most operators get wrong. You'll receive webhooks for events on:
- Your platform account (fees collected, platform-level account updates)
- Each connected account (charges, refunds, disputes, payouts)
Connected-account webhooks come with an account field in the payload identifying which client the event belongs to. You need to:
- Set up a webhook endpoint that handles both platform and connected-account events
- Verify the webhook signature (different endpoint secrets for platform vs. Connect)
- Route the event by
accountfield to the correct client record - Idempotency: webhooks retry; your handler must be idempotent
The four common mistakes
Mistake 1: Mixing your fees and the client's revenue in one account.
If you bill the end-customer through your own account and "manually pay out" the client later, you're operating as a money transmitter from a regulatory perspective in many jurisdictions, and you're carrying the entire 1099 burden on revenue that wasn't yours. Use Connect, route money correctly, let Stripe handle the split.
Mistake 2: Using Custom accounts when Standard would do.
Custom accounts mean you handle disputes, KYC, and compliance on the client's behalf. That's a real operational burden and real liability. Most agency operators don't need it. Default to Standard.
Mistake 3: Not handling disputes correctly.
When an end-customer disputes a charge on a Standard connected account, the dispute hits the client's account. The client needs to respond to the dispute through their own Stripe dashboard. Most clients have never seen a dispute and need coaching the first time it happens. Build a notification flow that alerts the client immediately and gives them the response template.
Mistake 4: Forgetting about 1099-K thresholds.
Stripe issues 1099-Ks to connected-account holders based on gross processing volume. The thresholds shifted in 2024 and again in 2026. Your platform doesn't issue the 1099 — Stripe does, to the connected account. But your clients will absolutely ask you about it, and you should know what they're going to receive.
The integration with the agency stack
Stripe Connect plugs into the broader agency tech stack at three points:
- GHL integration. When a client is provisioned a GHL sub-account, you also onboard their Stripe Connect. The two together form the operational foundation for billing on their behalf.
- Attribution. Stripe Connect events (charges, refunds) flow into the attribution pipeline as conversion events. Revenue attribution gets cleaner because the source of truth is the connected account, not the client's manual reporting.
- Operator economics. The application-fee model lets the operator participate in client growth. As the client's transaction volume grows, the agency's fee grows. It's the cleanest way to align incentives without rebuilding the billing relationship every quarter.
Where AcquireOS handles Stripe Connect
The platform provisions Stripe Connect as part of the standard client onboarding. The OAuth flow is white-labeled to the operator's brand, the application-fee model is configurable per client, the webhook layer is multi-tenant by default, and dispute notifications route to both the operator and the client through the unified inbox. Operators don't write any of the integration code; they configure their fee model once and the platform handles the rest across all clients.
The principle: Stripe Connect is one of the highest-leverage architectural decisions an agency makes. Set up cleanly in week one, it scales effortlessly to 50+ clients. Set up wrong, it's a re-architecture project that costs months. The walkthrough above is the version that scales.



