Skip to content
Examples

How to give free shipping to specific customers on Shopify

A shipping offer can be limited to customers carrying a tag such as vip. The offer is evaluated against the signed-in customer, so it deliberately does nothing for a logged-out cart rather than leaking to everyone.

  • Free shipping
VIP free shippingShipping class
Offer type
free_shipping
Reward
100% off shipping
Who gets this offer
Customers with tags
Tags
vip
Logged-out carts
offer does not apply
Two settings do the whole job: the shipping reward, and who it reaches.
What the shopper sees

A signed-in customer carrying the vip tag sees shipping at zero. Everyone else sees normal rates, and no message hints that a hidden discount exists.

Build it

How to set this up

  1. 1

    Campaign > Offer type

    Pick Free shipping.

    type = free_shipping

  2. 2

    Who gets this offer

    Switch the audience from everyone to customers with tags, then add the tag.

    customerTarget.scope = tags

  3. 3

    Tags

    Enter the tag exactly as it appears on the customer record. If you currently use a customer segment, convert it to a tag first, because segments cannot be read at discount time.

    customerTarget.ids = ["vip"]

  4. 4

    Stacking

    Opt into combining with product and order discounts so the VIP shipping survives alongside a public sale.

    stacking.combinesWithShippingDiscounts = not applicable, shipping never combines with shipping

  5. 5

    Preview

    Test signed in as a tagged customer, as an untagged customer, and signed out. The signed-out case must show no discount, which is the intended behaviour.

The exact settings

Every setting, spelled out

These are the real configuration keys the offer is saved with, so you can check your own setup against this table field by field.

SettingValueConfig key
Offer typefree_shippingtype
Audience scopetagscustomerTarget.scope
Tagsexact match, comma separatedcustomerTarget.ids
Logged-out behaviouroffer emits nothing (fail closed)customerTarget.scope
Discount classshippingdiscountClasses
MethodautomaticdiscountMethod
Watch it

See it built end to end

The episode is not up yet

We are recording this one. The written recipe above is complete, so you can build it today.

Without an app

What Shopify does natively

What you can do

A native discount can be limited to specific customers or to a customer segment, so a manually maintained VIP list is possible without an app.

Where you need an app

Native customer targeting is set on the discount node, which does not give you tag matching evaluated at checkout time, and it cannot be combined with the per-offer stacking controls this recipe relies on.

Before you publish

Watch out for

  • A logged-out cart gets nothing. This is deliberate: a targeted offer must never leak to anonymous shoppers. It also means your own signed-out test will look like a bug.
  • Customer segments cannot be read at discount time, so a segment has to be converted to a tag first.
  • Tags match exactly. A trailing space or a capital letter difference means the customer does not qualify.
  • An audience of tags with no tags entered is rejected at save time, because the offer could never apply to anyone.

Common questions

Why does the discount not apply when I test it?
Almost always because the test cart is signed out. A tag-targeted offer is evaluated against the signed-in customer and emits nothing when there is no identity.
Can I target a customer segment instead of a tag?
No. Segments are not queryable inside the discount function, so the supported route is to convert the segment into a customer tag.
Are tags case sensitive?
Match the tag exactly as it appears on the customer record.
Can I target several tags?
Yes. A customer carrying any of the listed tags qualifies.

Related examples

Customer tag discount

A standing discount for tagged customers only, with no code that can leak.

B2B pricing by company

Wholesale pricing scoped to specific B2B companies rather than to individual customers.

Conditional free shipping

Free shipping once the cart passes a threshold, with a progress nudge in the cart.

Build this in your own store

Every recipe in this library runs on the same server-side engine, so the cart total and the checkout total agree.

We use essential cookies to run this site, and, only with your permission, analytics cookies to understand traffic. Read our Cookie Policy.