Skip to main content

Geo-based offers

Time: ~15 minutes | Difficulty: Beginner | Type: part of Funnel demos
Finished project: geo-offers. Clone it if you want the working app first — or keep reading and rebuild the same graph.
Everyone buys the same tee. The one-click offer after payment depends on where the visitor is: US traffic sees a cap, EU traffic sees a beanie, everyone else sees a tote. This is the standard play when you run the same creative in several markets — localize the offer, not the whole funnel. Geo-based offers funnel: checkout, then US cap, EU beanie, or rest-of-world tote picked by country

What you need

Prices are integer cents (2999 = $29.99).

The graph

Five steps. The split is three edges out of checkout — the highest-priority matching edge wins, and always with a low priority is the safety net so nobody gets stuck.
More geo conditions exist: customer.fromContinent { continent: 'EU' }, customer.withLocale { locale: 'en-US' }. Hosted funnels resolve the visitor’s location server-side — you never touch an IP.

Same type on the Headless SDK

Self-hosted, the split is just a lookup before you render the offer. The finished project keeps /offer as one route and picks the offer id from the visitor’s region — same shape as the funnel edges:
Accepting still charges the saved card in one click:
The demo app puts region chips (🇺🇸 / 🇪🇺 / 🌍) on the landing so you can walk all three branches from one browser — the browser timezone sets the default. In production, detect the region server-side or let the hosted funnel edges do it for you.

Paths the customer can take

Every accepted offer appears on thank you as a related order (relatedOrders[]), exactly like the basic post-purchase demo.

Next

Finished project on GitHub

Clone geo-offers and walk all three branches in a minute

Basic post-purchase

Start here if this is your first funnel demo

VIP tag offers

Same split, driven by CRM tags instead of geography

Funnel Orchestrator

Nodes, edges, conditions, priorities