Sushinet

Tag Your VIP Customers, Then Give Them a Shipping Option Nobody Else Sees

Auto-tag repeat customers as VIP, then hide your express shipping option from everyone who isn't one — one rule writes the tag, another reads it at checkout.

recipe

You want your best customers to get something the general public does not — a same-day courier, a named express service, a shipping tier you do not want appearing on every anonymous first order. Shopify will not do this natively, because nothing in Shopify's shipping configuration knows who the buyer is.

This is a two-app recipe, and it needs two apps for a real reason rather than a marketing one: the tag is written in one place and read in a completely different one.

Why Shopify can't do this alone

Shipping profiles vary rates by product and destination. That is the whole axis. A profile cannot ask "has this person ordered before", because at the moment Shopify assembles the rate list it is reasoning about a cart and an address, not a relationship.

The two usual workarounds both miss:

  • A free-shipping discount code. The express option is still visible to everyone; you have only made it cheaper for whoever has the code, and codes travel.
  • A customer-account-gated storefront. That changes what someone browsing your theme sees. Checkout is not your theme, and a fast-checkout button skips it entirely.

Step 1 — let a rule own the tag

Tagging VIPs by hand works exactly until the first month you forget. The tag then describes what was true when someone last audited the customer list, which is the worst kind of data to make an automatic decision on.

In Rules2Tag, the VIP definition is a sentence:

When a customer's lifetime spend is over $2,000 → add the tag vip.

Two things about this rule matter more than the threshold you pick:

  • Backfill it. A tagging rule that only runs going forward leaves every existing VIP untagged, and they are precisely the customers most likely to notice. Run the rule across your existing customers once so it starts from the truth.
  • Make it self-correcting. Write the removal alongside the addition, so a customer who no longer qualifies loses the tag without anyone remembering to check. A tag that only ever gets added eventually describes everyone.

Step 2 — let the checkout read it

Now the checkout side, in Ruleproof:

Hide the shipping option Express — except when the customer is tagged vip.

Written as an exception rather than as two rules, because that is the shape that stays correct: express is hidden by default and one named group gets it back. If you write it the other way round — show express to VIPs — you have said nothing about what everyone else sees, and everyone else is most of your traffic.

Customer tags are read at checkout from a field this app keeps in sync, so the tag must be on the account before the customer reaches checkout. In practice that is automatic: the tagging rule ran when their previous order was placed, days or weeks ago.

The join, and the one thing that can go wrong

The two halves meet at a string — the tag vip. Nothing enforces that the tagging rule writes the same string the checkout rule reads. Spell it wrong in one place and the recipe fails silently and in the safe direction: express is hidden from everybody, including the VIPs, and nobody complains because no customer knows to expect an option they cannot see.

So test the join specifically, not each half:

  1. Preview the checkout rule against a shopper with the tag. Express should appear.
  2. Preview it against a shopper without it. Express should not.
  3. After publishing, look at one real VIP order and confirm the tag was on the account.

Ruleproof's preview runs the compiled rule against a test shopper without touching a real order, so step 1 and step 2 take about a minute between them.

A guest checkout has no tag, and that is fine

Customer tags belong to customer accounts. A guest has neither, so a guest sees the ordinary shipping options. Design around this rather than fighting it: the VIP who wants VIP treatment signs in, which is the same deal every loyalty programme makes.

What each app is doing

Where it runs What it decides
Rules2Tag On your store, after an order Who is a VIP, continuously
Ruleproof Inside Shopify's checkout What a VIP sees, in the moment

Neither app can do the other's job, which is why this is a recipe rather than a feature. Tagging needs the Admin API and the whole customer history; the checkout decision has to happen inside checkout in milliseconds with no lookups available to it.

Both have a free plan, so you can build the whole thing and watch it work before deciding it is worth paying for.

Questions

Can Shopify show a different shipping option to different customers?

Not on its own. Shopify's shipping profiles vary rates by product and by destination, never by who the buyer is — a profile has no idea whether the person checking out has ordered forty times or zero. Markets and zones are geography. Customer accounts change what someone sees on the storefront, not which carrier services appear at checkout. So the native answer to "show express only to my best customers" is that there isn't one, and the usual workaround — a discount code for the shipping cost — is a different thing entirely, because the option is still visible to everyone and the code is still shareable. Deciding which shipping options appear, based on who the customer is, happens at checkout and needs a checkout rule.

How does the checkout know a customer is a VIP?

From a customer tag, and the tag has to already be on the account before they check out — this is the part that trips people up. A tag applied by hand, one customer at a time, is accurate but does not scale and goes stale the moment someone's fortieth order makes them a VIP and nobody notices. So the first half of this recipe is a tagging rule that watches orders and writes the tag itself, and the second half is a checkout rule that reads it. Two apps, because they run in genuinely different places: tagging runs on your store through the Admin API after an order, and the checkout rule runs inside Shopify's checkout while the customer is standing there.

Does the customer have to be logged in?

Yes, and you should design the rule around that rather than around the exception. A customer tag belongs to a customer account, so a guest checking out has no account and therefore no tag — from the rule's point of view they are indistinguishable from a brand-new shopper. That is the correct behaviour rather than a gap: a VIP who wants their VIP treatment signs in, which is the same bargain every loyalty programme on the platform makes. Write the rule so that not having the tag is the ordinary case and having it is the exception, and a guest checkout degrades gracefully to the shipping options everybody else gets.

What happens the moment someone stops being a VIP?

You remove the tag and the checkout stops offering the option, with no separate step to remember. This is the real argument for letting a rule own the tag rather than a spreadsheet: the same rule that grants VIP status on the fortieth order can be written to take it back when the criteria stop being met, so the tag stays an accurate description of the customer rather than a record of what was true the last time anyone looked. A tag nobody maintains becomes a tag nobody can trust, and a checkout rule reading an untrustworthy tag makes a confident decision on bad information — which is worse than making no decision at all.

This recipe uses two apps

Each does one half of the job, and neither can do the other's — which is why this is a recipe and not a feature. Both have a free plan, so the whole thing can be built and watched before it costs anything.

Pricing · ← All recipes