Targeting & conditions

Market & customer-tag targeting in depth

Master the market and customer-tag campaign filters, including the three-state market behavior, multi-currency, and evaluation order.

Two of the campaign-level targeting filters — markets and customer tags — decide where a campaign can run and who is allowed to see it, before any cart conditions are checked. This page is the deep reference for both. It covers the three-state market behavior that trips up most merchants, how price thresholds resolve per market currency, and exactly how these filters interact with your condition rules.

This guide is only about markets and customer tags. The third campaign-level filter — scheduling by date range — has its own deep guide at Targeting by schedule, markets & customer tags.

Market targeting

Market targeting restricts a campaign to one or more of your Shopify markets. Use it to run different offers, prices, or messaging by region — for example a US-only free-gift promotion or an EU-specific threshold for free shipping.

You set the market list in the campaign editor, alongside your conditions. The list behaves differently depending on whether it is unset, populated, or empty — and that distinction is the single most important thing to understand about this filter.

The three states of the market list

The market list has three distinct states, and they produce very different results:

StateWhat it meansWho the campaign runs for
No market list set (default)You never touched market targetingAll markets — every shopper
Populated listYou selected one or more marketsOnly shoppers in those markets
Empty listA list exists but contains no marketsNo one — the campaign reaches nobody

The first two states are intuitive. The third is the trap: an empty market list is not the same as no market list. An empty list is a list that exists but has zero markets in it, and in that state the campaign is shown to no one at all.

An empty market list silently hides your campaign from every shopper. The app flags this on the campaign list with a red health icon and the message "No markets have been specified." If you see that warning, either add at least one market or clear market targeting entirely so it falls back to all markets. See Campaign statuses & health for the full list of health warnings.

To clear market targeting and return to the all-markets default, remove every market from the list so it reverts to unset — do not leave it as an empty selection.

How a shopper's market is determined

Shopify assigns each shopper to a market based on their location and the way your store routes traffic between markets. When a campaign has a populated market list, the app compares the shopper's current market against that list:

  • If the shopper's market is in the list, the campaign passes the market filter and continues to the next check.
  • If the shopper's market is not in the list, the campaign is skipped for that shopper — none of its conditions are evaluated and the offer never appears.

Because the match is on the shopper's current market, the same person can qualify for one campaign while shopping your US store and a different campaign while shopping your EU store.

Running different offers per region

Market targeting does not let one campaign serve different offers to different regions. Instead, the pattern is one campaign per market (or per group of markets):

Duplicate or create a campaign per region

Build one campaign for each region you want to treat differently — for example a "US Summer Sale" and an "EU Summer Sale."

Set each campaign's market list

Open each campaign and add only the markets it should serve. Make sure each list has at least one market so it doesn't fall into the empty-list state.

Tailor the offer and thresholds per campaign

Give each campaign its own offer products, messaging, and price thresholds. Shoppers only ever see the campaign that matches their market, so the two campaigns never collide.

Multi-currency interplay

When you target a market, any price threshold in your conditions (cart subtotal, cart total, filtered-product totals) resolves in that market's currency. This matters because a threshold like "$50" needs a defined value in every currency a targeted market checks out in.

There are two ways a price threshold resolves for a given currency:

How the value is resolvedWhen it appliesResult
Explicit per-currency amountYou set a specific amount for that currency on the ruleThe exact amount you typed is used as-is (e.g. £45)
Converted base amountNo explicit amount exists for that currencyYour base amount is multiplied by the market's exchange rate (e.g. £39.72)

For round-number thresholds across markets — like "free gift over $50" — set the amount explicitly per currency wherever you want a clean number. Otherwise the auto-converted figure can land on an odd value (such as £39.72 instead of £45), which looks unintentional to shoppers.

For a full walkthrough of how per-currency price values are stored and resolved, see the multi-currency section of Complex conditions.

Customer-tag targeting

Customer-tag targeting restricts a campaign to logged-in customers based on the tags on their Shopify customer record. Use it to reward loyal customers, run VIP-only offers, or exclude a group such as wholesale buyers.

Has any / all / none of the tags

The campaign-level customer-tag filter offers three options, so you can require a match on any of several tags, all of them, or none:

RequirementUI matcherCampaign runs when
Customer has at least one of the tagsHas any of the tagsThe logged-in customer's record includes any one of the listed tags
Customer has every listed tagHas all of the tagsThe logged-in customer's record includes all of the listed tags
Customer has none of the tagsHas none of the tagsThe logged-in customer's record includes none of the listed tags

Tag matching is case-insensitive, so VIP, vip, and Vip are treated the same.

Note that these three "Has …" options are the campaign-level filter's matchers. The in-condition Customer Tag selector (a rule inside a condition) is different — it uses is equal to / is not equal to instead. See the comparison table below.

Tags only exist for logged-in customers

Customer tags live on the Shopify customer record, which only exists once a shopper is signed in. A guest (not logged in) has no tags at all. This has two consequences:

  • A "has tag" requirement (Has any / Has all of the tags) can never be satisfied by a guest, so the campaign is skipped for everyone who isn't signed in.
  • Customer-tag targeting is checked before your individual condition rules. If the shopper doesn't meet the tag requirement, the campaign is skipped before any cart conditions are evaluated — so the offer never appears, regardless of what's in the cart.

If you require a customer tag, anonymous shoppers will never see the campaign. That's correct behavior, but it surprises merchants who test in an incognito window or while logged out. Always test a tag-targeted campaign while signed in as a customer who carries the matching tag.

Campaign-level customer tags vs the Customer Tag condition selector

The app exposes customer tags in two places, and they are not the same thing. Mixing them up is a common source of confusion.

Campaign-level customer-tag filterCustomer Tag condition selector
Where it livesThe campaign's targeting filtersA rule inside a condition's rule group
What it gatesThe whole campaign — pass or fail before conditions runA single cart-condition rule, evaluated alongside other rules
When it runsBefore any condition rulesAs part of condition evaluation
MatchersHas any of the tags / Has all of the tags / Has none of the tagsis equal to / is not equal to
Use it toDecide whether the entire campaign is allowed to run for this shopperCombine a tag check with cart rules (AND/OR) inside one condition

When to use each:

  • Use the campaign-level filter when an entire campaign should only exist for a customer group — e.g. a VIP-only gift campaign that should never run for anyone else.
  • Use the Customer Tag condition selector when a tag check is one factor among several cart rules — e.g. "subtotal over $100 and customer is tagged wholesale" inside a single condition. The selector lets you AND or OR the tag against product and cart rules.

Both honor the same logged-in-only limitation: a guest has no tags, so neither a campaign-level "has tag" filter nor a is equal to Customer Tag rule will match for them. See the Customer tag entry in the Condition selectors reference.

Evaluation order

For each shopper, the campaign-level filters are applied first, in a fixed order. Condition rules only run if every filter passes. The first failure short-circuits the whole campaign — it is skipped and the shopper never sees the offer.

Date range

If the current date and time fall outside the scheduled window, the campaign is skipped immediately. (Covered in the scheduling guide.)

Markets

If the shopper's market isn't in the campaign's market list, the campaign is skipped. A campaign with no market list set passes this step for everyone; an empty list fails for everyone.

Customer tags

If the shopper doesn't meet the tag requirement, the campaign is skipped. Guests automatically fail a "has tag" requirement here.

Condition rules

Only now are your cart condition rules evaluated. All rule groups must pass (or at least one, depending on your connector) for the offer to appear.

Because the order is fixed and the first failure wins, a shopper has to clear the schedule, then the market filter, then the tag filter, and then match your conditions before they ever see the offer.

Recipes

Troubleshooting

On this page