FunnelKit One-Click Upsell Not Working? The Reasons It Doesn’t Fire and How to Fix Each

Last updated: June 2026

Table of contents

  1. The 30-second answer
  2. First, decide which failure you have
  3. How a one-click upsell is supposed to work
  4. When the offer page never shows
  5. When the buyer accepts but nothing gets charged
  6. The saved-card trap that can mislead a test
  7. When acceptors and decliners land on the wrong page
  8. How to test a one-click upsell correctly
  9. Quick reference: symptom to cause
  10. Frequently asked questions
  11. Sources

You built the one-click upsell. The offer page is designed, the product is attached, the discount looks right. Then a real order comes through, the customer clicks Accept — and the upsell isn’t on the order. Or the offer page never appeared at all. Or the buyer who accepted ended up on the same page as the buyer who declined. From the front end it all looks like “the upsell is broken,” but a FunnelKit one-click upsell not working is really several different problems wearing the same costume.

The good news is that they sort cleanly. Once you know which of the failures you’re looking at — page never shows, accept doesn’t charge, or wrong routing — the fix for each is short and specific. This guide walks all three down in the order they actually occur, including the saved-card test artifact that can make a perfectly good upsell look dead.

The 30-second answer

A FunnelKit one-click upsell not working usually comes down to one of these:

  1. You’re testing with a saved card. A reused card from a prior test may behave differently from a freshly entered one, so an accept that fails in testing can be a test artifact rather than a real fault. Re-test with a fresh card before changing anything.
  2. The offer page isn’t fully built, or the Accept/Reject controls were rebuilt as ordinary buttons/links that aren’t wired to FunnelKit’s accept/reject action — only FunnelKit’s own accept control (widget, link, or shortcode) triggers the one-click charge.
  3. The payment gateway doesn’t support one-click — one-click charging requires a gateway that supports card tokenization (storing the payment method and charging it again without re-entry).
  4. Routing is wrong — acceptors and decliners aren’t sent to the pages you intended.
  5. You’re testing as admin, or on a cached page, and seeing behavior a real buyer wouldn’t.

If you only do one thing: re-run the test with a brand-new card entered fresh at checkout, in an incognito window, as a non-admin. A reused saved card is one of the first things to rule out — a normal fresh-card checkout is the cleanest test case, so a failure you saw with a saved test card may not reflect what a real buyer hits. Confirm with a fresh card before you change a single gateway setting.

First, decide which failure you have

Before you change anything, pin down what’s actually happening. The three failures need different fixes, and guessing wastes time:

  • The offer page never appears. After Place Order, the buyer goes straight to the thank-you page and never sees the upsell. This is a setup/routing problem, not a payment problem.
  • The page appears, the buyer accepts, but nothing is charged. The offer showed, Accept was clicked, yet the upsell product isn’t on the order and no extra charge landed. This usually points to payment/tokenization — often the saved-card test artifact.
  • The page works and charges, but routing is off. Acceptors and decliners end up on the wrong follow-up page. This is purely a routing-configuration problem.

Name yours, then jump to the matching section below.

How a one-click upsell is supposed to work

A one-click upsell fires after the customer clicks Place Order and before they reach the thank-you page. They land on an offer page; if they accept, the item is charged and appended to the order they just placed — no re-entering card details, which is the entire point. That last part is also the source of most trouble: charging a card again without asking for it requires card tokenization — the gateway has to support storing the customer’s payment method and charging it again without the customer re-entering anything. When the payment method can’t be charged again that way, the accept can register without the follow-on charge completing.

So a working one-click upsell needs three things to all be true: a built offer page with FunnelKit’s real Accept/Reject controls (widgets, links, or shortcodes), a payment method that supports charging again via tokenization, and routing that sends acceptors and decliners where you want them. Miss any one and the upsell “doesn’t work” in a different way.

One useful exception worth knowing: manual payment methods (bank transfer, cheque, cash on delivery) sidestep the tokenization requirement entirely — there’s no automatic second charge to authorize, because the customer is settling the order manually anyway. If your store runs on manual payments, the “gateway doesn’t support one-click” failure mode doesn’t apply the same way.

When the offer page never shows

If buyers skip straight to the thank-you page, the upsell step isn’t in the path or isn’t built. Check these in order:

Is the offer page actually built? If the offer step exists but the template was never built or customized, the buyer can be routed to a page with nothing meaningful on it — which reads as “the upsell never showed.” Open the offer step and confirm there’s real content on it.

Are the Accept/Reject controls wired to FunnelKit? This is the big one. The one-click charge is triggered only by FunnelKit’s own accept control — its Accept widget, Accept link, or accept shortcode. If someone rebuilt the buttons as ordinary HTML links or styled buttons that aren’t wired to FunnelKit’s accept/reject action, they’ll look right but won’t trigger the charge. Edit the offer page through the funnel step’s own “Edit Template” (which opens the offer sub-step in the editor), keep FunnelKit’s Accept/Reject controls, and build your content around them rather than replacing them with plain buttons.

Is a product attached to the offer? The offer product is attached on the offer sub-step’s Products tab. No product, nothing to sell.

Default template copy can mislead, too. An imported offer template can ship with copy written for physical goods — an “add to my order” label with subtext like “we’ll ship it in the same package.” On a digital product that’s simply wrong, and the default decline wording rarely matches your brand. Replace both labels and remove any shipping subtext in the widget settings, not in HTML.

When the buyer accepts but nothing gets charged

This is a common “upsell not working” report, and an easy one to misdiagnose. The offer showed, Accept was clicked, and yet the product never appears on the order. Two things to check before you touch any settings.

Does your gateway support one-click upsells at all? One-click append-to-order depends on the payment gateway supporting card tokenization — the ability to store the payment method and charge it again without re-entry. Card gateways built for this (Stripe is the common one) support it. Some payment methods can’t charge a second time without the customer’s involvement — with those, a true one-click charge isn’t possible and the offer behaves differently. Confirm your gateway is one FunnelKit supports for one-click upsells before assuming the feature is broken.

Was the original payment set up to be charged again? For a supported card gateway, FunnelKit normally handles the tokenization on a normal fresh-card checkout. The thing most likely to interfere in testing is a saved card — which gets its own section below.

A note on what you’ll see in the order timeline. During the upsell hop, FunnelKit’s order notes can move through several statuses before settling. The most reliable confirmation of whether a charge happened is your payment processor’s charge list — verify there before concluding from the WooCommerce order screen alone that the upsell failed.

The saved-card trap that can mislead a test

Here’s an easy-to-miss cause that sends people down the wrong debugging path, so it’s worth calling out on its own.

When you test a one-click upsell using a card that was already saved from a previous run, the saved card can behave differently from a freshly entered one, depending on your gateway and how it stored that card. So an accept that doesn’t result in a charge during testing may be a quirk of the reused card rather than a fault in your checkout. The trap is concluding the feature is broken and starting to flip gateway settings — when the checkout was working the whole time and the saved test card was the variable.

The fix is a testing-discipline fix, not a settings fix:

  1. Always test one-click with a fresh card entered at checkout — not a saved card, not one the browser or gateway remembered from a prior attempt. A normal fresh-card checkout is the cleanest test case, which is exactly why a saved-card failure is often a test artifact.
  2. If a fresh card also fails, only then look deliberately at your gateway’s tokenization / save-cards configuration in FunnelKit’s one-click upsell settings. Don’t change settings on a checkout that works for fresh cards.
  3. Use FunnelKit’s admin test gateway (in the one-click upsell settings) to exercise the accept flow while you’re building — then confirm with a real fresh-card order before launch.

Want the upsell wiring done right the first time? The free FunnelKit Resources kit includes a one-click-upsell build-and-test checklist — gateway prerequisites, the fresh-card test protocol, and the routing settings to confirm before you go live. Get the kit →

When acceptors and decliners land on the wrong page

Sometimes the upsell charges fine, but the follow-up is wrong — people who accept still get shown the downsell, or decliners skip a page they should see. That’s a routing problem, and routing for a one-click offer is controlled per offer through FunnelKit’s Dynamic Offer Path.

Open the offer in the funnel canvas and look for the Dynamic Offer Path controls in the offer settings, after the offer’s products are configured. This is where you choose what an accept and a reject each lead to. It becomes available once the offer has at least one other offer to route between (for example an upsell paired with a downsell) — with a single standalone offer there’s nothing to branch to, so the option only appears when multiple offers exist.

The usual target setup: upsell accept → thank-you page (skip the downsell — they already bought), upsell reject → the downsell, and the downsell’s own accept and reject both → the thank-you page. If the location of these controls doesn’t match what you remember from an older tutorial, trust where it is in your install — in the offer settings, available when the step has two or more offers.

How to test a one-click upsell correctly

Most false “it’s broken” conclusions come from testing wrong. A clean test looks like this:

  • Incognito window, logged out. First rule out admin-session and cache artifacts — testing as admin or in your normal session can produce behavior a real buyer never sees.
  • A fresh card, entered at checkout. This is the single most important rule — it sidesteps the saved-card trap entirely.
  • Walk the whole path. Place the order, watch the offer page render, click Accept, and confirm on the thank-you page. Then check that the upsell amount actually appended to the order.
  • Verify on the processor. Confirm the additional charge in your payment processor’s dashboard. If the WooCommerce screens and the processor disagree, the processor’s charge list is the more reliable record.
  • If you ran the store in test/sandbox mode for the test, switch it back to live afterward and confirm the live keys are serving — a store left in test mode silently takes no money.

Do all five and you’ll either see the upsell work end to end, or you’ll have isolated exactly which of the three failures you’re dealing with.

Quick reference: symptom to cause

Symptom Most likely cause First fix to try
Buyer goes straight to thank-you, no offer Offer page not built, or not in the path Build the offer page; confirm the step routes to it
Accept button does nothing Buttons/links not wired to FunnelKit’s accept/reject action Use FunnelKit’s Accept/Reject widgets, links, or shortcodes
Accept clicked, no charge, in testing Saved test card behaving differently from a fresh one Re-test with a fresh card entered at checkout
No charge even with a fresh card Gateway tokenization / save-cards config, or unsupported gateway Check one-click gateway settings; confirm gateway support
Acceptors and decliners land on wrong page Dynamic Offer Path not set in the offer settings Set accept/reject paths (offer settings, 2+ offers)
Works for you but “not for customers” Testing as admin or on a cached page Test incognito, logged out, fresh card
Store takes no money at all Left in test/sandbox mode Switch back to live; confirm live keys serving

If the bump on your checkout is the thing that’s missing rather than the upsell, that’s a different (and also common) problem — see FunnelKit order bump not showing? The 9 reasons and how to fix each. And if you’re still building the offer ladder, start with how to set up a FunnelKit order bump. The full checkout-to-upsell architecture is in The Missing Manual for FunnelKit.


Grab the free FunnelKit Resources kit. Includes the one-click-upsell build-and-test checklist, the fresh-card test protocol, the order-bump setup checklist, and a pre-launch QA list so nothing ships with a dead button or an untested charge. One download. Get the kit →


Frequently asked questions

Why does my FunnelKit upsell get accepted but never charged? An easy-to-miss cause is testing with a saved card, which can behave differently from a freshly entered one depending on your gateway. Re-test with a fresh card entered at checkout; a normal fresh-card checkout is the cleanest test case, so the failure is often a test artifact. If a fresh card also fails, check that your gateway supports card tokenization for one-click upsells.

Why doesn’t my one-click offer page show up after checkout? Usually the offer page was never fully built, the step isn’t in the funnel path, or the Accept/Reject controls were rebuilt as plain HTML that isn’t wired to FunnelKit’s accept/reject action. Build the page through the funnel step’s Edit Template, keep FunnelKit’s Accept/Reject controls (widgets, links, or shortcodes), and attach the product on the offer’s Products tab.

Do I need a specific payment gateway for one-click upsells? You need a gateway that supports card tokenization — storing the payment method and charging it again without re-entering details. Card gateways built for this (such as Stripe) support it; some payment methods cannot charge a second time without customer involvement. Manual payment methods sidestep the requirement because there’s no automatic second charge. Confirm your gateway is supported for FunnelKit one-click upsells before assuming the feature is broken.

Where do I set where acceptors and decliners are sent? Through FunnelKit’s Dynamic Offer Path, in the offer settings, after the offer’s products are configured. The accept and reject paths become available when the step holds more than one offer (for example an upsell plus a downsell).

Why does the upsell work for me but not for customers? First rule out admin-session and cache artifacts — testing as admin or on a cached page can show behavior a real buyer never sees. Test in an incognito window, logged out, with a fresh card, and verify the charge in your payment processor’s dashboard rather than the WooCommerce order screen.

The order screen shows a smaller refundable amount than I expect — did the upsell fail? Not necessarily. The WooCommerce order display can show numbers that look like a failure when the charge actually succeeded as a separate transaction. Check your payment processor’s charge list before concluding the upsell didn’t charge.

Sources

Verified live as of June 2026:


Brian Kasday writes The Operator’s Library for MMS Vegas — production-grade reference manuals for the tools small operators actually run. The Missing Manual for FunnelKit is the long-form companion to articles like this one.


Brian Kasday writes The Operator’s Library for MMS Vegas — production-grade reference manuals for the tools small operators actually run.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *