Documentation
Onboarding
Per Product Shipping is currently in ONBOARDING MODE. Rates will not be live in checkout until enabled in Shopify Settings.
- Add Per Product Rule
- Add Rate
- Register Carrier
Carrier registration steps
- Open your app and go to Shipping Rules.
- Scroll to the Per product shipping section.
- Check status. If it says not registered, click Register carrier.
- In Shopify Admin, go to Settings -> Shipping and delivery.
- Edit the zone you want, then add/select Per Product Shipping as the rate source.
- Save the zone and run a checkout test with a product that has per-variant rules configured.
How to add rates
Go to Shipping Rules and click Add rate.
- Flat rate: set custom name, optional description, price, and condition.
- Per Product Shipping: add once; uses per-variant rules you configure in Products.
Flat rate fields
- Custom rate name: the checkout-visible name for the flat rate.
- Custom delivery description (optional): helper/marketing text shown under the rate name.
- Price ($): amount charged for this rule when matched.
Flat rate conditions
- Based on order price: optional min/max order thresholds control when this flat rate applies.
- Based on item weight: optional min/max weight thresholds control when this flat rate applies.
Per Product Shipping defaults (Edit Per Product Shipping rule)
- Default service name: the shipping method name customers see at checkout (example: Standard Shipping).
- Default service description: optional short helper text shown under the service name at checkout.
When some cart items have no per-variant rule
- Strict - no rate (hide shipping until all items have rules): returns no per-product shipping rate unless every relevant item has a matching destination rule. Best when you want full control and never want estimated fallbacks.
- Per-product for configured items + amount for others (one combined rate): adds configured per-product totals, then also adds your fallback amount for items without rules so checkout still shows one combined shipping option.
- Charge fallback rate only: ignores partial per-product totals and returns only the fallback amount when items are missing rules. Useful when you prefer a single predictable backup charge.
- Try next rule (e.g. use a flat rate below): skips the per-product result and lets the next lower-priority shipping rule decide the rate (commonly a flat rate).
How to add per product shipping
- In Shipping Rules, register carrier if needed.
- In Shopify, go to Settings -> Shipping and delivery and add Per Product Shipping to a zone.
- Add Per Product Shipping once from Add rate.
How to add per variant
Go to Products, open a product, select a variant, then add rows in Individual Shipping Rules.
| Field | Rule |
|---|---|
| country_code | 2-letter code like US or *. |
| state_code | State/region code or *. |
| postcode | Single code or wildcard like PE*. |
| line_cost | Per line amount. |
| item_cost | Per quantity amount. |
How to use import csv per variant
- Select a variant.
- Download variant template.
- Upload CSV, click Analyze, then Import.
country_code,state_code,postcode,line_cost,item_cost
Troubleshooting
If you don't see expected fields (like the country dropdown) or your rates don't appear at checkout, try these checks.
Missing / empty country code dropdown in per-product shipping
This usually means Shopify did not fully refresh the shipping zone configuration after you enabled or edited the app shipping rate. Do the following:
- In Shopify Admin, go to Settings -> Shipping and delivery.
- Open the shipping profile/zone where you added Per Product Shipping.
- Click Save for that zone (even if nothing changed).
- Wait a few seconds, then refresh the app page where you configure per-product/per-variant rules.
Per Product Shipping enabled but no rate at checkout
- Confirm Per Product Shipping was added only once in Shipping Rules.
- Open Products, select your product, then configure Individual Shipping Rules for each variant.
- If you set the "missing per-variant" behavior to Strict (none), customers may not see shipping when a destination has no matching per-variant rule.
Bulk import issues
- Use required columns: product_id, variant_id, country_code, state_code, postcode.
- Header names must match (including underscores).
- After fixing your file, run Analyze again to locate the rows that failed.
How to use bulk import etc
Use bulk page /app/import for all products/variants.
Required: product_id,variant_id,country_code,state_code,postcode Optional: line_cost,item_cost
Analyze first, then import. Optional override replaces existing data for combinations in CSV.
