FAQ
Is Fjord free?
Lite is, and it is not a trial. Flows, steps, routing, guarding, checkout steps that stock the cart, the store-checkout override, the Twig variable, per-step conversion reporting, the console commands and export/import are all free, for as many funnels as you like.
Pro is a one-off $99 with a $79 annual renewal, and adds the offer engine — order bumps and one-click post-purchase upsells — plus split testing, condition-builder routing, auto-coupons, revenue reporting and webhooks.
Does it replace my checkout?
No. Fjord routes to your templates and hands them the state; the checkout itself is still an
ordinary Craft Commerce checkout, posting to commerce/payments/pay. There is one line to change —
pointing redirect at craft.fjord.continueUrl — and no page builder to learn.
Is this CartFlows for Craft?
That is the idea, and CartFlows' model was read from its source rather than its marketing. What does not translate has been left out rather than faked: there are no page-builder integrations, no checkout field editor — a Commerce checkout is a template you already own, so there is no fixed form to edit — and no template importer.
Will an upsell work with my gateway?
It needs a gateway that supports payment sources and purchases, and a customer who chose to save
their card. Stripe and most modern gateways qualify; a manual or offline gateway does not.
php craft fjord/flows/check tells you whether any enabled gateway can do it.
If the gateway asks for an interactive step — 3-D Secure, a hosted page — that is not a one-click charge, so Fjord records the failure and moves the customer on instead of stalling them.
Does the upsell go on the original order?
No, on a new order linked to it. A completed Commerce order is locked and its totals have already been emailed and invoiced; adding a line rewrites a document the customer already has. The linked order refunds on its own and shows up in Commerce's own screens.
If you would rather see them together, the thank-you page can list both — craft.fjord.grants(order)
returns what each offer resolved to.
Can a customer be charged twice?
The offer engine is idempotent on (orderId, offerId), enforced by a unique database index rather
than a check-then-act. A double-submitted form, a retried request and an impatient customer all
collide on the index instead of charging twice. There is also a time window, a paid-order
requirement and an eligibility check, and all of them are re-checked when the endpoint is called —
not when the page was rendered.
What happens if I let Pro lapse?
Every offer, variant and routing rule stays in the database and stops being served. Nothing is deleted, nothing charges a customer, and the control panel says what it is ignoring. Renewing picks up where you left off.
Does it work with multiple sites?
Yes. A flow can be scoped to one site or served on all of them, and its routes are registered per site.
Will it slow my checkout down?
The offer decisions are database reads against small tables, and webhook deliveries are queued rather than made inline. The one thing Fjord adds to the payment path itself is recording the gateway and payment source, which is a single row update.
How do I move a funnel to production?
php craft fjord/flows/export --file=… and import on the other side. Configuration lives in the
database rather than project config because flows reference purchasable and entry IDs, which differ
between environments — so purchasables travel by SKU, and are matched by SKU first on the way back
in.
Can I A/B test the checkout itself?
Yes — a checkout step takes variants like any other. Bear in mind the conversion it records is "moved on from this step", so a checkout's conversion rate is the share of visitors who completed an order.
Does Fjord pick the winning variant for me?
No, and it will not reweight traffic on its own. It reports conversion rate, uplift and a two-proportion z-score, marks anything under 30 visitors per arm as too early, and leaves the decision to you.