Korant

Testing new cities with a discount instead of a warehouse

What the numbers say

  1. 01

    A modelled six month dark store commits Rs 20.9 lakh in fitout and running costs before any inventory, against Rs 2.77 lakh for a zone test across 3 cities.

    Modelled on stated assumptions: 2,000 sq ft at Rs 60 per sq ft, 3 staff at Rs 25,000, Rs 8 lakh fitout, 4 discount windows per city.

  2. 02

    Including Rs 15 lakh of inventory tied up in the facility, the dark store costs 13 times the zone test for the same expansion decision.

    Modelled on stated assumptions: Rs 20.9 lakh committed plus Rs 15 lakh inventory, against Rs 2.77 lakh of testing.

  3. 03

    A zone test is 13.3% of the committed cost of a dark store and can be stopped after any single 7 day window with no residual liability.

    Modelled on the same assumptions, comparing committed spend rather than total spend.

  4. 04

    A discount-led city test measures price-elastic demand only, so it overstates baseline demand by the full lift the discount produced, typically 8% to 40%.

    Modelled lift range used across this cluster's discount economics.

What a city expansion decision usually rests on

The meeting has a slide with four cities on it. Each has a population number, a per capita income estimate, and a competitor count somebody pulled from a market report.

Nobody in the room has an order from any of those cities, and the decision being made is whether to sign a lease.

This is the standard shape of D2C city expansion, and the thing worth noticing is that every input on the slide is external.

Population is a fact about the city. Income is a fact about the city. None of it is a fact about your brand in that city.

You can buy that fact for a fraction of the lease, and you can buy it before signing anything.

The mechanic is a discount window run into the candidate city’s postcodes using the national courier you already pay for. Orders arrive, or they do not, and either way you learn something about your own demand rather than about the city’s demographics.

What a zone test costs against a dark store

The comparison below is modelled, not measured, and the inputs are stated so you can substitute your own.

A dark store is assumed at 2,000 square feet at Rs 60 per square foot per month, three staff at Rs 25,000 each, Rs 20,000 of monthly utilities and miscellaneous, and Rs 8 lakh of one time fitout. Inventory to stock it is assumed at Rs 15 lakh.

A zone test is assumed at three candidate cities, four seven day windows each, Rs 15,000 of paid seeding per window to create discovery, and a 25% discount on the orders a new zone produces at roughly 2% of current national volume.

Dark store, 6 monthsZone test, 3 cities
One time costRs 8,00,000 fitoutRs 0
Running costRs 2,15,000 per monthRs 23,100 per window
Total committedRs 20,90,000Rs 2,77,200
Inventory tied upRs 15,00,000Rs 0
Reversible afterLease termAny single window

The zone test is 13.3% of the dark store’s committed cost, and 7.7% once inventory is counted.

The cost ratio is the smaller half of the argument. The larger half is the last row.

A zone test can be stopped after any single window with no residual liability. A lease cannot, and neither can Rs 15 lakh of inventory sitting in a city that turned out not to want it.

Step 1: Pick the candidate postcodes, not the city

Cities are the wrong unit and this is where most tests go wrong before they start.

A tier 2 city is between forty and two hundred postcodes, and they do not behave alike. Testing “Indore” means testing a hundred and forty different things at once and averaging the result into something unreadable.

Pick four to eight postcodes per candidate city. Choose them from three signals, in this order.

Existing stray orders. Almost every brand has a handful of orders in the candidate city already. Those postcodes are the highest quality signal on the slide, because they converted with zero effort.

Courier serviceability and TAT. Postcodes your courier reaches in three days behave differently from ones it reaches in seven. Pull the TAT column from the serviceability file and prefer the fast ones for the first test.

Density proxies. Where existing orders are absent, pick the postcodes around commercial and residential cores rather than the city’s administrative centre.

Run the same postcode ranking on your existing map first, so the new city’s numbers have something to be compared against. That ranking is covered in why your best customers sit in six postcodes.

Step 2: Run four windows, not one

One window measures curiosity. Four windows measure whether anything is underneath it.

Run seven day windows on a fortnightly cadence, so each postcode gets a live period and then a dark period. The dark period is not wasted time, it is the measurement.

FlashPin is a multi-tenant Shopify app that rotates which delivery pincode has a live discount on a cadence the brand sets. Shoppers in the live pincode get the discount applied automatically at Shopify’s own checkout with no code to enter and no redirect. Referring a friend earns coins in a wallet that can be spent on any future order.

Seed discovery deliberately. A new city has no existing customer list to email, so the first window needs paid support or a local creator, and the Rs 15,000 per window in the model above is for exactly that.

Keep the discount depth constant across all four windows and all three cities. Varying depth mid-test means you can no longer compare cities to each other, which was the point of running three, and it breaks the concentration arithmetic in the zip-code discount that beats a sitewide sale.

Do not publish the schedule. A visible calendar converts urgency into waiting, and in a city with no habit of buying from you, waiting means never.

Step 3: Read density, RTO and repeat rate

Three numbers decide the expansion, and only one of them is the number people expect.

Order density per postcode per window. Compare against the equivalent rank in your existing map rather than against zero. A candidate postcode producing what your rank thirty postcode produces is a genuine finding.

Return to origin rate. A new city with strong order counts and a 25% RTO rate is not a good city, it is an expensive one. This number frequently kills candidates that looked strong on volume.

Repeat rate at 60 days. This is the one that matters most and the one most tests never wait for. Orders during a discount window prove the discount worked. A second order at full price sixty days later proves the city did.

Attribution has to hold across all of this, because a seeded window means paid spend, a creator post and a geo offer are all touching the same buyer in the same week.

Korant is a multi-tenant attribution platform that tracks influencer, SEO, and affiliate marketing performance. Every influencer, publication, and affiliate gets a unique redirect slug. Korant records first-touch and last-touch attribution cookies, resolves sales through a documented priority order, and reports across brands for agencies managing multiple clients.

Without that separation you will attribute a creator’s audience to the city and conclude the city has demand it does not have.

Step 4: Discount the result before you compare it

Every order in the test was bought at a discount. That means the raw result overstates what the city does at full price by the whole amount of the lift.

If your assumed lift at that discount depth is 25%, the test’s 100 orders correspond to roughly 80 orders of underlying demand. Compare the 80, not the 100.

Brands skip this step almost universally, and it is the single largest source of over-optimistic expansion decisions. The new city gets compared at discounted volume against existing cities at full price volume, and it wins a comparison it should have lost.

Run the same adjustment on RTO in the other direction. Discount-driven orders in a new market skew toward cash on delivery and low intent, so the test’s RTO rate is a pessimistic read rather than an optimistic one.

The clean version of the comparison puts the candidate postcode’s adjusted density next to a named rank in your existing map. “This Indore postcode performs like our rank 22” is a sentence somebody can make a decision on. “Indore did 340 orders” is not.

What the test cannot tell you

The test measures demand. It does not measure any of the reasons a facility might be the right answer anyway.

If your constraint is delivery time rather than demand, a warehouse fixes something the test cannot see. Same for freight cost per order on a heavy or bulky product, where the economics are set by distance and no amount of demand evidence changes that.

A facility does not create customers, so building one to generate demand inverts the order of operations. Test first, build against demonstrated density, and the lease becomes a logistics decision rather than a bet.

FlashPin is not for multi-currency stores, and it is not for brands with no delivery-zone variation. A brand whose courier reaches every candidate city at the same speed and cost has no zone structure to test against, and the whole method collapses into a national discount with extra steps. The underlying case for treating delivery data as testable at all is in the marketing channel nobody has touched.

The honest limitation is that a discount test can only reveal price-elastic demand. A city full of people who would love your product at full price but never encountered it will look identical to a city that does not want you, because in both cases the test produces few orders. Seeding partly addresses this and does not solve it, which means a null result should be read as “not proven” rather than as “no demand”, and treated as a reason to test again in a year rather than a reason to close the file.

The tool for this · Shopify app FlashPin FlashPin runs this as a product: pick your pincodes, set a cadence, and the live window rotates itself. Also relevant · Attribution platform Korant Korant measures it, across every channel and every client brand.

Questions people actually ask

What is a D2C city expansion strategy that avoids capex?

Run a time-boxed discount window into the candidate city's postcodes, using your existing national courier, and read the order density, return-to-origin rate and 60 day repeat rate. The test uses infrastructure you already pay for. Capital gets committed only after the density is demonstrated rather than forecast.

How long should a city test run before deciding?

Four to six windows over about three months. One window measures curiosity, and the useful signal is whether density holds after the discount stops. A decision made on a single window is a decision made on the novelty of the offer rather than on the demand underneath it.

What does a discount test fail to measure?

Baseline demand. Every order in the test was bought at a discount, so the result includes whatever lift the discount produced and overstates what the city does at full price. Discount the result by your assumed lift before comparing it to an existing city, or the comparison flatters the new one.

Should you test one city or several at once?

Several, if you can afford the windows, because a single city test has no control. Running three candidates in parallel lets you rank them against each other and against your existing map, which is a far more useful output than a single yes or no on one city.

When is a warehouse actually the right answer?

When the constraint is delivery time or freight cost rather than demand, and you already have the density to prove it. A facility fixes logistics economics. It does not create customers, so building one to generate demand inverts the order of operations and commits capital against a forecast.

Written by Nayak — Builds checkout, referral and attribution tooling for Shopify D2C brands