
At a glance
The problem
Method runs the whole customer relationship — contacts, pipeline, estimates, invoices. But the moment money actually moved, the experience left the platform. Payments ran through a bolted-on third-party gateway with its own setup, its own dashboard, and its own support queue.
The invoice lived in Method. The payment lived somewhere else. The problem was never “we lack payments” — it was that we didn’t own them. Ten gateways in the picker, and per transaction exactly one margin earner: whichever one the merchant happened to choose. The software doing the work captured none of the money passing through it.

of accounts had never enabled payments at all
our share of processing revenue — the gateway took the other 80%
six-month payment retention — the incumbent baseline to beat
Tiny share × tiny attach rate meant annualised application-fee revenue of roughly $5.2K against a $100M gross payment volume ambition for 2027. The gap between those two numbers is this case study. Read properly, it was an activation problem wearing a payments costume — the growth was sitting inside the existing base, not in new markets.
“How might we make taking a payment feel like part of Method — and make not using it feel like the workaround?”
The opportunity was never to out-build Stripe. It was to answer what payments look like when they belong to the tool where the work already happens. Every decision below traces back to that sentence.
Research
I studied two markets before designing anything: how vertical platforms embed payments into an existing base (HubSpot, Keap, Jobber, QuickBooks, Zoho) and how payment-native products design the payment layer itself (Stripe, Square, Adyen, Braintree, GoCardless). One taught adoption; the other set the craft bar. Alongside it: 14 merchant interviews across four situations, payments-tagged support tickets, and shadowed sales and CS calls.
merchant interviews — on the incumbent gateway, no gateway, churned, and high-volume
products audited across vertical platforms and payment-native processors
merchant segments, each with its own entry point and adoption strategy
“When do I get my money?”
Every conversation reached this question. Fees were the stated objection; cash-flow speed was the felt one. It drove the payouts surface.
“My payments work today. Don’t break them.”
Incumbents survive on inertia, not love. It drove parallel-rails migration — the existing gateway keeps running, untouched.
“I set this up once, years ago. I’d never find it again.”
Payments config was invisible until something broke. It drove points of entry: meet merchants in the workflow, not in settings.
I built a research agent, then made it prove itself
The pipeline runs competitor research → flow options → heuristic scoring → diagrams → PRD and user stories, parameterised by industry, feature and source domains. The one thing I added was a verification pass — a second agent whose only job is to refute. Two independent sources or the claim doesn’t ship. It caught a wrong dispute fee in my own notes: $25, when Stripe charges $15 and Square charges nothing. That’s why I trust the rest of the report.
Three checkpoints stay mine — the competitor list, the axes of comparison, and the synthesis. Nothing moves to the next stage until I’ve signed it off.
Of ten products, only Shopify lets a merchant say what happens to returned stock — and even there it’s one checkbox that defaults to on, so “came back fine” and “came back broken” are the same answer. QuickBooks restocks silently. You find out when the broken unit ships to the next customer.
I scored three refund models against seven usability heuristics. Option C won six of seven and lost efficiency by two points — it asks one question the others skip. That trade was the decision, so it stayed visible rather than being scored away. It’s why Method’s refund has three stock outcomes, not a checkbox.
Five segments, five strategies — not one launch
Same product, five different entrances into five different lives. The largest and most reachable was the 84% — existing users invoicing in Method with no gateway at all. The revenue segment was the smallest: high-volume merchants doing $50K+ a month, who get direct outreach and a rate conversation rather than a prompt.
New small business
Just signed up, still juggling separate tools for invoicing and payments.
Entry · Payments as a prominent onboarding step
Existing user, no gateway
Uses Method for invoicing only — the 84%. The largest and most reachable segment.
Entry · Invoice “Pay now” + in-workflow prompts
High-volume SMB
$50K+ a month in payments. Small in count, outsized in GPV — the revenue segment.
Entry · Direct outreach and rate conversations
Incumbent-gateway user
Already processing through the legacy gateway — familiar, but constrained.
Entry · Guided migration path and incentives
Churned payments user
Tried payments before and left over reliability or cost. Sceptical by earned right.
Entry · Invoice moments plus concrete proof
Who could even see it — a ladder, not a launch
The launch-date argument was the wrong argument. I reframed it as an exposure sequence: five rungs, each opening only after the last one held, each with a different audience and a different enablement bar — so the launch of a money product never became a money incident.
Hidden
Behind a feature flag. Built and tested with zero exposure.
Targeted accounts
Manually enabled through sales conversations. Hand-picked.
Low-risk accounts
Flag opened by risk profile — merchants discover and apply.
Limited beta
Broader availability, with sales, support and PS briefed.
GA & migration
Staged rollout to everyone, incumbent migration path open.
Enablement shipped before exposure at every rung — the org is part of the interface. Application approval gated every merchant regardless of stage.
Build vs. partner. Then which partner.
Building processing from scratch meant owning PCI compliance, KYC, fraud and disputes — years of work that isn’t Method’s craft. Partnering meant choosing the platform whose embedded surface we’d live inside. We ran a structured bake-off between Stripe and a US-focused challenger on compliance coverage, embedded component maturity, pricing economics, and scale.
Embedded-component maturity. I was choosing the UI we’d live inside — the rate card mattered less than that. Stripe won: the deepest embedded toolkit, battle-tested KYC/KYB, and room to grow internationally without re-platforming.
Borrow the vault. Own the storefront.
Where users act on regulated data, compliance should sit with the platform certified to hold it. Where users read, the experience must be unmistakably Method. Two embedded Stripe surfaces made the cut — KYC/KYB onboarding and card checkout — because both carry real liability and both could be themed to Method. Everything else is Method’s own UI over Stripe’s APIs.
The same principle settled the brand question. I pushed for white-label — Method Pay as Method’s product, not “Powered by Stripe” — with HubSpot’s adoption data as the evidence. The nuance that won it wasn’t binary, it was placement: disclose Stripe at the KYC and bank moments, where a name regulators recognise is the reassurance.
“Every screen I gave to Stripe was a screen where the liability outweighed the brand value.”
Three money flows — and who owns each step
The tints are the argument: violet steps live inside Stripe’s certified components, blue steps are ours over the APIs. Note the “Needs information” loop in the application flow — it loops back, it never dead-ends.
Applying to move money — without leaving Method
A regulated identity check and the biggest drop-off in the funnel. The old world sent merchants to a gateway’s site and hoped they came back. I embedded Stripe’s onboarding component in Method, themed to our design system, and wrapped it in a status ladder the merchant can always see. The wait is the worst part of any application, so I made the wait legible: Processing → Needs information → In review → Approved, with Declined routed to a human team instead of a dead end.
Nothing switches off while they apply. The old gateway keeps running on parallel rails, and the approved screen still links back to it — merchants switch when they see it working. We went first, moving Method’s own billing across before asking anyone else.
“The fields are Stripe’s; the flow is ours.” The journey, the states, and the seams were the design work.
Setup meets the merchant where the money already is
Payments config lived in Settings — findable if you went looking, but nobody goes looking. Merchants don’t wake up wanting to configure payments; they wake up wanting to get paid. So usage has a home, setup doesn’t. Payments keeps its page for watching money move. Setup meets merchants in the work: on the Invoices hub beside what’s owed, and on the invoice itself, where Payment collection makes the rail a per-invoice choice. Graded later, the invoice-flow prompt converted about 3× the settings page.
A quick win alongside it: status pills weren’t a Method component, so teams had been improvising them. I audited the variants, standardised the states so invoices and payments share one vocabulary, and contributed the component back to the system.
Dunning drafts
AI · BetaChasing overdue invoices is the work merchants skip, so the AI drafts the whole escalating sequence — gentle first reminder, firmer second, final notice — queued most-overdue first. Nothing sends until the merchant approves each one, and there is no “send all.” The AI writes the awkward part; the merchant still decides to send it.
Every dollar, one legible ledger
Merchants don’t think in “charges” — they think “did the Hendersons pay, and what did it cost me?” The old gateway answered in processor-speak, in someone else’s dashboard. This is a custom Method surface: payments, refunds and disputes in one list with real-time status, filter and search by customer, and a detail view that shows the money honestly — gross → application fee → processing fee → net. Showing our own fee plainly is a trust decision, not an accident.
“Where’s my money?” — answered in-product
The most emotionally loaded question in payments is about the payout. With a bolt-on gateway, merchants logged into a processor’s site to find their own money. Here every payout opens up: the balance separates what’s spendable from what’s still settling, and any deposit traces back to the payments and refunds behind it. A merchant who can answer “why is this one short?” doesn’t need to open a ticket — and the itemised decomposition is what accountants actually need at month-end.
A refund is a decision, and Method can explain it
A refund carries information a processor never sees: why it happened, which lines came back, and whether the stock can be sold again. So the modal asks — partial or full, a business reason, and a stock outcome: returned to stock, written off, or not returned. A processor structurally can’t ask that question, because it doesn’t own the order. That’s the bundled-CRM argument made concrete.
Card refunds take days to reach a statement, so I designed the waiting too: a pending state, an arrival estimate the moment you hit refund, and email copy telling the customer it landed. The problem was never speed — it was uncertainty. “Where’s my refund” tickets became self-serve.
Refund-reason clustering
AI · BetaBecause reasons are captured as structured data rather than free text, they’re countable. Three refunds on one SKU for “wrong item shipped” surfaced on its own and pointed at the pick process — a fulfilment problem found in payments data, with nobody running a report.
Disputes — a queue against the clock
Miss the response window and the money is gone for good; once you’ve responded there’s nothing to do for weeks. So it lives in a strip that empties out, sorted by deadline, turning red three days out rather than when it’s already late. Skip is first-class — forcing a decision when you’re missing a document produces bad decisions. And Accept shows its price: “$230 debited” against “3 items ready.” Sometimes accepting is the cheaper call, and it should read like the business decision it is.
Evidence assembly
AI · BetaDeadlines are tight and gathering proof is slow, so the AI pre-fills the packet and drafts the rebuttal. The move that earns trust is that it names what it couldn’t find — “Refund policy, not on file.” A tool that hands back a full packet every time teaches you to stop reading it. On a money surface, “AI never commits money” isn’t a limitation — it’s the thesis.
Alive, then used, then paying
Three rungs, each de-risking the next: proof of life (does real money move end to end?), proof of adoption (do merchants choose it, use it, and stay?), then proof of impact. You don’t get to argue revenue until merchants have voted with usage.
It was measurable because it was instrumented before launch, not after. I co-authored the Amplitude tracking dictionary with the PM and analyst, and the rule was to instrument the state machine, not pageviews — every event mirrors a state I designed, carrying entry point, segment and current gateway as properties. Two of the secondary metrics were deliberate counter-metrics: switchback rate, and support contacts per 100 payments. Every headline number went up, so I wanted at least two that could have gone against me.
Proof of life
Does it work end to end, with real money?
Proof of adoption
Do merchants choose it, use it, and stay?
Proof of impact
Does it move the business?
Each rung de-risks the next. Alongside them, the events themselves: application_started · application_step_completed · application_status_changed · payment_succeeded · payout_landed · migration_started.
Three instrumentation findings
All three were invisible in aggregate. They surfaced because the events were named after the states, so each one pointed at something specific we could go change — two drop-offs sitting in a transition rather than on a screen, and one ceiling on the entry point I’d already called the winner. The screens tested fine in isolation.
01 · The bank connection
The biggest single-step drop in the application. It looked like a trust problem and wasn’t — Stripe was already disclosed on that step. It was a preparation problem: merchants arrived without their details to hand, went looking, and didn’t come back. So I told them what to gather before starting, made bank login the default path with manual entry as fallback, added save-and-resume, and sent a nudge email linking straight back in. Application completion 68% → 84%.

02 · The winning entry point had a ceiling
The invoice-flow prompt converted best — and only fires when a merchant is invoicing, which they do in bursts. With 84% of accounts never having enabled payments, most were never going to walk past it. Home converted at about a third of the rate, exactly as expected, but reached roughly 4× as many never-enabled accounts in a month. Home is owned by the onboarding growth team; what I brought was the entry-point question — at what point in the merchant’s journey does this offer make sense, and what should gate it. It became the second-largest source of first payments, behind the invoice prompt and ahead of settings.

03 · Approved, and then nothing happened
A gap between approval and the first payment: merchants got approved and then didn’t send anything. Approval became a launchpad rather than a receipt — “send your first payment link” as the next action, pointed at an invoice they already had open. First-payment rate among approved merchants 43% → 71%.
Before · the receipt

After · the launchpad
Outcomes
of accounts now take payments — and ~2 in 3 who enable choose Method Pay
annualised GPV run-rate, tracking toward the $100M 2027 target
annualised fee revenue — the referral fee became a product line
Worth being honest about recency: GA is only months old, so these are early readings. Activation and run-rate move weekly, and the GA retention cohorts are still maturing against the 41% baseline. Pilot and closed-beta cohorts have passed six months and sit above it. The open front now is migration at scale.
Reflection
Theming Stripe’s certified components to Method, choosing where the boundary sits, and owning every state around them was most of the design work. By surface area, most of what a merchant touches is ours.
Loading states, error recovery, and the handoff between an embedded zone and a Method surface. Nobody at the provider designs those.
Switching a live merchant’s revenue is the scariest ask in the product. Parallel rails, and dogfooding on our own billing first, were design decisions as much as engineering ones.
Adoption is placement, not a feature you announce. Payments belongs at the moments of intent — the invoice, onboarding, the workflow — not at a settings destination.
Where I’d take it next
Migration at scale — moving the rest of the incumbent-gateway base across, white-glove for high-volume accounts, and sunsetting the last legacy connections.
Time-to-payment on the dashboard. We track whether an invoice gets paid, not how long it sat — so the product’s central claim is the one number we never put in front of the merchant.
Recurring billing — the most-requested capability in the research and the natural next monetisation layer, since saved payment methods are already the foundation. Plus multi-stage dunning.
Merchants still get paid by cash and cheque, and today those land outside Method Pay — recording them is what makes “one legible ledger” true rather than aspirational. Then international activation, designed per market rather than translated.