Payments

Stripe captured the payment. QuickBooks and the shop each found out late

Stripe is the default payment stack for US and global businesses: cards, Apple Pay, Google Pay, invoicing, subscriptions and Connect for marketplaces — one API, strong documentation, webhooks that actually fire.

Getting Checkout to work is the easy part. The hard part is the same as with any payment provider: a payout lands in the bank as one lump sum, refunds arrive days later, and QuickBooks still shows open invoices until someone reconciles by hand. That gap is where integration work pays for itself.

  • Webhooks for every payment state
  • Fees, refunds and chargebacks reconciled
  • From $1,900 plus service fees
The tool

What Stripe is, and which part people underestimate

Stripe is a payment platform: accept cards and wallets online, bill subscriptions, send invoices, and run Connect if you pay out to sellers. Its API and webhook model are the reference many other providers copied — payment intents, customers, charges, refunds, disputes and balance transactions each have clear events.

What teams underestimate is state complexity. A payment can succeed, fail, require action for 3D Secure, settle later, refund partially, or become a dispute weeks after delivery. A shop that only handles succeeded leaves orders stuck; books that only handle succeeded miss fees and chargebacks entirely.

For US clients, Stripe usually pairs with QuickBooks Online rather than European ledgers — same reconciliation problem, different tax fields. HubSpot often sits in the middle for B2B: a paid invoice should move a deal forward, not wait for finance to click receive payment.

What goes wrong

Three things that go wrong around a Stripe payment

Stripe works. These are what happens when the shop and the books only listen for payment succeeded.

Payout reconciliation is a spreadsheet every Friday

Stripe deposits net of fees every day or week. QuickBooks shows gross invoice amounts. Someone exports balance transactions, matches ninety lines to ninety orders, and still misses the dispute fee from Tuesday because it sat on a different row.

What you see instead

Each charge links to an invoice with fee booked separately; payouts reconcile to already-settled lines so the bank deposit is one click, not ninety.

Subscriptions cancel in Stripe but access stays on in the product

A customer cancels in the portal or their card fails three times. Stripe stops charging. The membership site or SaaS account stays active because nothing listened to customer.subscription.deleted or invoice.payment_failed — support finds out when they ask why they were billed, or were not.

What you see instead

Subscription webhooks update access, send dunning emails on failed payment, and log each state change so support sees the same timeline Stripe sees.

A won deal in HubSpot and an open invoice in QuickBooks tell different stories

Sales marks closed-won when the contract signs. Finance invoices later. Stripe pays before someone updates the CRM stage, or the CRM says won while QuickBooks still shows outstanding — pipeline reports and cash reports disagree, and nobody trusts either dashboard.

What you see instead

Payment events update deal stage and invoice status from one handler — with rules for deposit versus final payment so B2B milestones stay honest.

The bill for doing it by hand

What manual Stripe reconciliation costs

Weekly payout matching at fifty to two hundred transactions is an hour or more of export-and-VLOOKUP work — work Stripe and QuickBooks could split automatically if linked properly.

Hidden costs mirror Mollie in Europe: reminders to paid customers, margin overstated because fees sit in unexplained bank differences, and disputes discovered at month end instead of when Stripe opened them.

  • An hour or more weekly matching payouts to invoices.
  • One to three per cent margin optimism because fees hide in the bank feed.
  • Subscription access out of sync with billing status.
  • CRM pipeline stages that disagree with cash collected.
What we build

We build the thing on the other end too

Stripe's official WooCommerce plugin handles checkout well — we keep it and build past it into QuickBooks, HubSpot and subscription lifecycle, the same way we treat Mollie on European shops.

A connection needs two ends. Plenty of agencies will build you the API call and hand you a JSON payload; that is the easy half. The harder half is what the data lands in — a website, a webshop, a portal your customers log into, an internal tool that replaces a spreadsheet. JKC builds both ends, which is why the connections we build tend to keep working: nothing about the receiving side is a black box to us.

API integrations

The connection itself: authentication, field mapping, rate limits, retries and a queue that survives the other system being down for an hour. Built against the documented API where there is one, and against whatever the vendor really offers where there is not.

Websites

WordPress sites that read from your systems instead of repeating them by hand: a careers page fed by your HR system, a team page that follows your payroll, prices and availability that are the real ones.

Webshops

WooCommerce shops where the order is the last time anyone types it: it becomes an invoice in your accounting package, a label at your carrier, a stock mutation in your warehouse, and a line in your CRM, on its own.

Web applications

When the process does not fit any standard product: a customer portal, a quoting tool, a planning board, a dashboard that reads three systems at once. Built on your data, with your systems as the source instead of a copy of them.

What can be connected

What can be connected between Stripe, your shop, CRM and books

Stripe sits between checkout and ledger — both directions need webhooks, not polling.

  • Payments and Checkout sessions from your site (into the tool)

    Amount, currency, customer, metadata with order ID — so every webhook can find its row in WooCommerce or QuickBooks without guessing.

  • Payment status to shop and QuickBooks (out of the tool)

    Succeeded, failed, requires_action, refunded and disputed — each with the right order release, invoice mark-paid or credit memo.

  • Fees and net amounts per transaction (out of the tool)

    Stripe fee as its own ledger line so gross revenue stays gross and payouts reconcile cleanly.

  • Subscriptions and customer portal events (both ways)

    Created, renewed, failed, cancelled — tied to product access and HubSpot lifecycle where relevant.

  • Payouts matched to balance transactions (out of the tool)

    Bank deposit linked to the set of charges and refunds it contains — one reconciliation pass instead of a Friday spreadsheet.

Status webhooks plus fee booking are the minimum for any shop taking real volume. Subscriptions and payout matching layer on when billing complexity justifies them.

How it works

How a connection gets built at JKC

The same four steps every time, whichever tool it is. Nothing here is a workshop you pay for: step one exists because scoping a connection wrong is the single most expensive thing that can happen to it.

  1. 1. We look at what is actually being retyped

    Not "which fields exist" but "which fields does somebody currently move by hand, how often, and what breaks when they get it wrong". Most projects turn out to need two or three flows, not a full two-way sync of everything. That conversation is what keeps the quote where it is.

  2. 2. We pick the route, and say why

    A maintained connector from the vendor, a platform like Make or Zapier, or a custom integration against the API. Cheapest first, not custom first: if a supported plugin does exactly what you need, that is the answer and we will tell you so. Custom is for the cases where the off-the-shelf option would need so much configuring that it becomes the fragile option.

  3. 3. We build it to survive the other system

    Every connection ships with retries, a queue and an idempotency key, so an order that arrives while the other side is down is delivered later rather than lost, and a retry does not create a second invoice. On a test environment first where the vendor offers one, so the first thing your real administration sees is a working connection.

  4. 4. We hand it over with the failure modes written down

    Which alerts you will get, what each one means, what to do about it, and who to call. Plus the credentials in your own name, in your own vault — not in ours. A connection nobody but us can maintain is a connection you do not own.

After it goes live

A connection that fails silently is worse than no connection

This is the part most quotes leave out. A connection that stops working without telling anyone is worse than manual work, because with manual work at least somebody notices when it does not get done. Every connection JKC builds is monitored, and the monitoring is not an upsell — it is in the service fee.

An alert per failed message, not a monthly report

A message that does not get through raises an alert the same hour, with the record it was about. Not a dashboard you have to remember to look at.

Replay, not re-enter

Anything that failed sits in a queue and can be sent again once the cause is fixed, in order. Nobody goes back through yesterday to find the four orders that did not land.

We watch the vendor's changes, so you do not have to

APIs get versioned, deprecated and rate-limited. When a vendor announces a change that affects your connection, adjusting to it is part of the service fee, not a new project.

What it costs

From €1,700, and the biggest variable is who built the other end

Stripe checkout itself is not the project — the plugin or Stripe Checkout covers that. What costs money is every state handled, fees booked, refunds as credit memos, and QuickBooks or HubSpot kept level with what Stripe already knows.

A connection starts from €1,700 plus a monthly service fee, which covers the monitoring, the queue and keeping up with the vendor's API changes. Work outside a fixed scope is €95 per hour.

What moves the number is not the tool — it is how well the system on the other end is known. If JKC built your website, your webshop or your web application, we already know its data model, its edge cases and where its stock numbers really come from, and a connection into it is mostly configuration and testing. If it is a system we have never opened, we start with a short technical check of both sides and quote after that, so you are not paying hourly for us to work out the basics.

Two more things that move it, in our experience more than anything else: whether the tool has a real API or only a CSV export, and whether the sync has to go both ways. One-way is roughly half the work of two-way, because two-way means deciding, per field, which system wins when they disagree — and that decision is the expensive part, not the code.

Questions

Questions we hear about Stripe connections

Not usually — Mollie wins on iDEAL and Bancontact familiarity in the Netherlands; Stripe wins on US cards, global wallets and a single stack if you operate in both regions.

Many businesses run both: Mollie for local methods in the EU, Stripe for US and international card volume. We design so each payment routes to the right ledger rules.

Free, 10 minutes

Not sure where the manual hours actually go?

That is what the Growth Scan is for. Ten minutes, no sales call attached: you get back where the double work sits, which connection would pay for itself first, and which one honestly would not.