Shopify added bubble maps to the Analytics report builder on 28 October, and for a Kerala brand shipping to the Gulf it's the first time the answer to "where are my orders actually coming from" shows up as a picture instead of a CSV you never get around to pivoting. A Shopify analytics bubble map plots each location as a circle sized by whatever metric you pick — orders, net sales, average order value — so a cluster of 40 orders in Sharjah looks visibly different from 400 in Dubai. That difference is the whole point. It's the input to two decisions that cost real money: where you hold stock, and how you split ad spend by geography.
The chart itself is easy. The judgement about what to do with it is not, and that's most of what follows.
Where the bubble map sits, and how to build a Shopify sales by city report
Go to Analytics, open Reports, and either start from one of the sales reports or create a new one. In the report editor you set a dimension and a metric, then choose how it's drawn. Pick a location dimension — shipping city, shipping region, billing country — set the metric to net sales or order count, and switch the visualisation to the map. Bubble sizing is one of the map options. Set the date range to twelve months if you're making a fulfilment decision, and to the last 90 days if you're making an ad decision. Shopify shuffles labels between releases, so if your menu doesn't match this exactly, look for the dimension picker rather than a dedicated "bubble map report".
Two settings matter more than people expect. First, shipping address versus billing address — these produce genuinely different maps for Kerala brands, and I'll come back to that. Second, order count versus net sales. Order count flatters your COD-heavy districts. If your return-to-origin rate in a particular area runs at, say, 15%, those parcels still show as orders on the map while the money never arrives. Build the map on net sales when you're deciding anything financial.
Reading a Kerala cluster
Domestic Kerala demand almost always resolves into the same four bubbles: Ernakulam, Thiruvananthapuram, Kozhikode and Thrissur. That's not insight, that's where the people are. What's useful is the ratio between them and how it moves across the year.
A few patterns we see repeatedly when we open these maps with clients:
- Thrissur over-indexes on gold, wedding-adjacent and gifting categories, and its bubble swells before Onam and again around Vishu in April rather than tracking the national festive calendar.
- Kochi over-indexes on prepaid. Razorpay card and UPI share in the 682 pin codes tends to run well ahead of the state average, which means the real margin per order is better there than the map alone suggests.
- Kozhikode and the northern districts carry more COD, and more RTO with it. A big bubble there deserves a second look at delivered revenue before you point ad money at it.
The map plots to a city centroid. It will not give you pin codes. For that you still need the Orders export from the admin and a pivot on the shipping zip column — ugly, but it's a ten-minute job and it's the only way to see that most of your Ernakulam volume is actually 682024 and 682036 rather than the district as a whole. Pin-code level is what you hand to a courier when you're negotiating rates, so do the export once a quarter.
The Onam gift problem: your Gulf demand hides inside a Kerala bubble
This is the one that catches people out. A son in Dubai buys a saree, a hamper of banana chips or an ayurvedic gift set and ships it to his mother in Chalakudy. Card issued in the UAE, billing address in Dubai, shipping address in Thrissur district.
If your bubble map is built on shipping address, that order is a Thrissur order. Your Gulf demand is invisible, and your Meta campaigns are being optimised for the wrong country. Build the same map a second time on billing country or billing city and compare. The gap between the two maps is your NRI gifting business, and for a lot of Kerala food, handloom and Ayush brands it's a double-digit share of August and September revenue.
The practical consequence: those customers want UAE-style checkout. Prepaid card, dirham pricing, a delivery promise expressed in days not weeks, and a gift note field. They do not want COD. Running Shopify Markets with a separate AED price list for billing-in-UAE traffic is usually a bigger lever than anything you'll do to the product page.
Gulf order concentration, and the arithmetic that decides a fulfilment hub
Here's where the map earns its keep. Say your twelve-month bubble map shows 980 UAE-shipped orders, and inside that, Dubai is 520, Abu Dhabi 210, Sharjah 160, the rest scattered. Average parcel weight 600g, average order value ₹2,400.
Today, direct from Kochi: 980 orders × ₹1,150 per parcel on an international express rate = ₹11,27,000 a year in outbound shipping.
Alternative, consolidate and hold stock with a Dubai 3PL:
- Air freight, 700kg chargeable after volumetric, at ₹380/kg = ₹2,66,000
- Import duty at the standard 5% line on ₹23,52,000 of goods = ₹1,17,600 (check your HS code, some Ayush and food lines differ)
- 3PL pick, pack and last mile at roughly AED 18 an order = ₹4,01,800
- Storage = ₹30,000
Total ₹8,15,400. You save ₹3,11,600 a year, about ₹318 an order.
Now the unwelcome part. ₹3.1 lakh is roughly ₹26,000 a month of recovered margin. Against that you take on a UAE entity or a partner of record, VAT registration once you're holding stock and cross the threshold, product registration for anything food or supplement-shaped, a monthly minimum from the 3PL, stock sitting in a warehouse 2,500km away, and a person whose job includes answering a Dubai warehouse's emails at 9pm. At that volume it is not worth it. Our rough threshold is around 150 orders a month into a single GCC metro, sustained for two quarters, before a hub pays for the overhead. Below that, negotiate a better export rate and keep shipping from Kerala.
The bulk-import point deserves emphasis for Kerala categories specifically. Sending individual parcels of banana chips or an ayurvedic oil to a consumer is one regulatory situation. Importing a pallet of it into the UAE to hold as stock is another, and it puts your labelling, shelf life and ingredient list in front of a regulator. Get your freight forwarder to confirm the registration path for your exact SKUs before you book anything. We've seen a hub plan die at that step more than once.
For jewellers the maths runs differently again, because the cost per order is dominated by insured value rather than weight, and because Gulf buyers price-check against the Dubai gold souk the same morning. If you're a Thrissur or Kozhikode jeweller selling into that market, live rate display on the storefront is table stakes — our Gold & Silver Live Rate app handles the repricing and the metal-plus-making-charge-plus-GST breakup so your UAE visitors aren't comparing a stale price against a live one.
Using order clusters to split campaigns, not just warehouses
Fulfilment decisions need twelve months of data. Ad geography decisions need 90 days and are reversible by Friday, which makes them the better first use of the map.
Three things we act on:
Split the GCC out of a single "Middle East" campaign. If Dubai is more than half your Gulf volume, it deserves its own ad set with its own creative, in English, with AED pricing in the ad itself. Abu Dhabi and Sharjah can share one. Doha, Muscat and the Saudi cities usually can't carry their own budget yet, and forcing them to just starves the whole campaign of learning volume.
Check cost per order by bubble, not by country. A country-level CPA of ₹480 can hide a Dubai CPA of ₹310 and a long tail at ₹900. Pull the geographic breakdown in Meta and lay it against the net-sales map. Where the two disagree, trust the Shopify numbers.
Mind the Malayalam decision. High smartphone penetration and a strong appetite for Malayalam creative inside Kerala, but Gulf-resident buyers often respond better to English ads with Malayalam in the product detail. Test it rather than assuming — the split by billing city tells you which audience you're writing for.
Exporting the geography report when the map isn't enough
Every report in the Analytics builder has an export, and it gives you the underlying rows as CSV. Do that whenever you need to compare two periods properly, because eyeballing bubble sizes across two tabs is not analysis. Set the report to your location dimension, export this Onam versus last Onam, and compute percentage change per city in a sheet. Thirty rows, five minutes.
The export is also how you build the pin-code view the map won't give you, and how you get something your 3PL or courier will actually quote against. Nobody prices a contract off a screenshot.
What the map gets wrong
It shows orders placed, not revenue kept. Returns, RTO and cancellations sit outside the default view, so a COD-heavy cluster will always look stronger than it is. Build a second report on refunds by city and keep it next to the first one.
It also flattens a district into one dot, which matters in Kerala more than in most places, because delivery performance between Kochi city and the hill pin codes an hour inland is not remotely the same. And it says nothing about why a bubble exists. A single Instagram post from an NRI community account in Sharjah can create a cluster that evaporates in six weeks. Before you commit stock to a location, check whether the bubble has been there for three consecutive months.
Quick answers
Is this a shipping address heat map? Not quite. A heat map shades regions by density; the bubble version draws a sized circle at each point. For order data the bubble is more honest, because it doesn't imply demand spreads evenly across a district it doesn't reach. If you want shaded regions, the region map visualisation does that.
How do I find sales hotspots fast? One report: shipping city as the dimension, net sales as the metric, last 90 days, map view, sorted descending. The top eight bubbles are your hotspots. Everything below that is noise until it repeats for a quarter.
Does it work across multiple locations or POS? The map plots customer-side geography. If you run a shop in Kochi alongside the online store, POS orders will cluster on the store's address and drown your actual online signal. Filter to online sales channel first — we forget this ourselves about a third of the time on the first pass.
Where to start this week
Build two maps, twelve months each: one on shipping city, one on billing city. Put them side by side. If the second map shows meaningful Gulf volume the first one hid, your next job is a dirham price list and a Markets configuration, not a warehouse. If both maps agree and one GCC city is clearing 150 orders a month, run the freight arithmetic above with your real rates before anyone starts pitching you a hub.
We do this exercise as part of a store audit, and it's usually the fastest hour of the whole engagement. If you want someone local to sit with the numbers, our work with Kerala brands and on the Dubai side of the route covers both ends of this particular problem.


