How to Set a Free Shipping Threshold for Your D2C Store
"Free shipping above ₹999" is a margin decision, not a marketing slogan. Here is how to calculate the right threshold from your real per-zone shipping costs, gross margin and AOV, with worked numbers.

Shipping is never free. Either the customer pays for it, or your margin does. A free-shipping threshold is the point at which you agree to pay — and the number should come from your costs, not from what the competitor's banner says. The calculation takes four steps and one month of order data.
Step 1: Find what shipping really costs you, per lane
Start with true costs, including fuel surcharge and GST. For a 1 kg prepaid surface parcel, the five standard lanes price roughly like this:
- Within city: base ₹35 + ₹22 per kg, about ₹75 all-in
- Within state: base ₹48 + ₹32 per kg, about ₹106
- Metro to metro: base ₹55 + ₹38 per kg, about ₹123
- Rest of India: base ₹65 + ₹46 per kg, about ₹147
- Special zones (North-East, J&K, islands): base ₹95 + ₹72 per kg, about ₹221
"All-in" means freight plus 12% fuel plus 18% GST. Your own figures will differ with weight and packaging, so price your actual orders rather than a typical one. The shipping rate calculator gives you any lane in seconds.
Step 2: Blend by your lane mix
Costs only matter in the proportion you ship them. Suppose last month's orders split like this:
- Within city: 10%
- Within state: 25%
- Metro to metro: 30%
- Rest of India: 30%
- Special zones: 5%
Blended cost per order:
(0.10 × 75) + (0.25 × 106) + (0.30 × 123) + (0.30 × 147) + (0.05 × 221)
= 7.5 + 26.5 + 36.9 + 44.1 + 11.1
= ₹126 per order
That ₹126 is what "free shipping" costs you on an average order.
Step 3: Work out the basket uplift you need
Free shipping pays for itself only if it makes customers add enough to the basket to cover the shipping you absorb. The extra margin has to be at least the extra cost:
required uplift = shipping cost absorbed ÷ gross margin
With a 45% gross margin:
₹126 ÷ 0.45 = ₹280
A customer has to add about ₹280 of product for you to break even on giving away ₹126 of shipping.
Step 4: Place the threshold above your AOV
If your current average order value is ₹850, the break-even threshold is roughly:
₹850 + ₹280 = ₹1,130
Round to a clean number at or above it: ₹1,149 or ₹1,199. Set it at ₹799 and you give free shipping to orders that were coming anyway, with no uplift to pay for it. Set it at ₹2,499 and almost nobody stretches that far, so it changes nothing.
A useful check: look at how last month's orders are distributed. A threshold works hardest when a good share of orders sit just below it — within ₹150–300 — because those are the baskets that can realistically stretch.
One threshold or several?
A single national threshold hides a large spread. Run the same maths per lane group:
- City, state and metro lanes (65% of orders above): blended cost about ₹109, uplift ₹242, threshold near ₹1,099
- Rest of India: cost ₹147, uplift ₹327, threshold near ₹1,199
- Special zones: cost ₹221, uplift ₹491, threshold near ₹1,349
Tiered thresholds by pincode are legitimate and easy to explain: "Free delivery above ₹1,099 in most cities; above ₹1,349 for the North-East and J&K." If you prefer one number, at least know that special-zone orders at that number are subsidised, and watch their share. The reasons these lanes cost more are covered in the shipping zones guide.
Things that break the maths
- Bulky SKUs. A 1 kg cushion billed at 5 kg volumetric weight blows through any average. Exclude oversized items from free shipping or give them their own rule.
- COD. The COD fee (about ₹35 plus 1.5% of order value) is separate from freight. Free shipping does not have to mean free COD — show the fee as its own line.
- RTO. If free-shipping COD orders come back more often, your real cost per delivered order is higher than the blended figure. See the RTO cost breakdown.
- Mix drift. A campaign that lands in rest-of-India or special-zone pincodes raises your blended cost without any change in courier rates.
Re-run it every quarter
The threshold is not a one-time decision. Each quarter, price the previous month's orders through the rate API and recompute the blend:
for each order in last_month:
cost = POST /v1/rates/calculate(order)
blended = sum(cost) / number_of_orders
threshold = AOV + (blended / gross_margin)
If the threshold has moved by more than ₹100, change the banner. If you would rather not offer free shipping on every lane, the flat-rate vs real-time comparison describes a hybrid that keeps display simple while charging live rates where the maths fails.
Frequently asked questions
How do I calculate a free shipping threshold?
Divide the average shipping cost you would absorb by your gross margin to get the extra basket value needed, then add that to your current AOV. With ₹126 shipping, 45% margin and ₹850 AOV, the break-even threshold is about ₹1,130. Round up to a clean number.
Should the free shipping threshold be the same for all pincodes?
It does not have to be. Shipping to special zones can cost close to twice a metro lane, so a higher threshold for those pincodes is fair and common. If you keep a single threshold, track how many orders come from expensive lanes.
Does free shipping include COD charges?
Not necessarily. Freight and the COD fee are separate costs, and many stores waive shipping above a threshold while still showing a COD fee. Being clear about both lines at checkout avoids surprises and encourages prepaid orders.
