Shopify runs a food and beverage catalogue in India perfectly well. What it doesn't do out of the box is tell you which FSSAI licence you need, force a batch number onto a product page, or stop a customer in Guwahati from ordering a 4-day-shelf-life cold-pressed juice on cash on delivery. Those are the four things that decide whether an F&B store is compliant and profitable, and every one of them is a setup decision you make before launch. Using Shopify for food and beverage in India is mostly a catalogue-hygiene and shipping-zone problem wearing a compliance hat.
Here's the order we work in when we build one.
Get the FSSAI licence class right before you build anything
Three tiers, and online sellers get pushed up a level more often than they expect.
- Basic Registration — small operators, annual turnover up to ₹12 lakh.
- State Licence — turnover between ₹12 lakh and ₹20 crore, single-state operations.
- Central Licence — turnover above ₹20 crore, importers, and operators supplying across state lines or through e-commerce.
That last clause is the one people miss. If you're shipping pan-India from a Bengaluru kitchen, you are an e-commerce food business operator, and FSSAI's position has consistently been that you need a Central Licence for that activity even if your turnover is small. Manufacturers also need a licence at each premises. If you use a co-packer and a third-party warehouse, that's potentially three licence numbers in play: yours as the brand owner, the manufacturer's, and the storage facility's.
Your licence number has to be visible to the customer. We put it in the footer, on the About page, and inside the product description block, because a customer looking for it and a regulator looking for it check different places. The manufacturer's licence number belongs on the label and on the product page for each SKU it makes.
Get a food-law consultant to confirm your class in writing. It costs a few thousand rupees and it's cheaper than a notice.
The label rules apply to the product page, not only the pack
This is the part that catches most new brands. Under the Legal Metrology (Packaged Commodities) Rules, an e-commerce listing has to display the same mandatory declarations that appear on the physical pack. Not a photo of the pack. Readable text on the page. FSSAI's labelling and display regulations then stack their own list on top.
Between the two, a compliant Indian packaged-food listing carries:
- Name of the food and the brand
- Full ingredient list in descending order of weight, with additives named or numbered
- Allergen declaration
- The green or brown veg/non-veg mark
- Nutritional information per 100g/100ml and per serving
- Net quantity
- MRP, inclusive of all taxes
- Name and complete address of the manufacturer, packer or importer
- FSSAI logo and licence number
- Country of origin for imported goods
- Consumer care contact — name, phone, email
- Date of manufacture or packing, and best-before or use-by
- Lot or batch number
Pasting all of that into the description field is what most stores do, and it's why their PDPs look like a tax form. Don't. Model it as data.
Batch, expiry and label fields belong in metafields
Create a metafield definition set on the product and, where the pack size differs, on the variant. Ingredients as multi-line text. Allergens as a list of single-line text so you can filter on it later. Veg/non-veg as a true/false or a two-value list, which then drives the icon in the theme. Net quantity as a weight measurement. FSSAI licence number of the manufacturing unit as single-line text. Nutrition as a JSON or metaobject if you want a proper table rather than a blob.
Then render them in the theme as a structured block. One template change, and every new SKU inherits the layout. Adding a product becomes filling a form instead of remembering fourteen things.
Batch and expiry are harder, and I'd rather say so than sell you a clean answer. Shopify has no native lot tracking. Expiry attaches to a physical unit, not to a SKU, so a product-level expiry date metafield is a lie the moment you hold two batches. Three ways we've handled it:
- Single active batch. Keep one batch live at a time and update a current_batch and best_before metafield on receipt. Works for brands with fast turns and one 3PL. Breaks the day you add a second location.
- Batch as a metaobject. Each batch is an entry with manufacture date, best-before, quantity and unit. Products reference the active one. More honest, more admin.
- Push it to the WMS. Your 3PL picks FEFO (first expiry, first out) and stamps the batch on the invoice. Shopify shows a shelf-life guarantee statement rather than a hard date.
Option three is what most scaling brands land on. Just make sure the guarantee you publish is one your warehouse can actually keep.
The remaining-shelf-life rule will eat part of every batch
FSSAI's e-commerce guidance sets a floor on how much life a product must have left when it reaches the customer: 30% of total shelf life, or 45 days, whichever is greater. Read that as an inventory constraint, because that's what it is.
Take a ghee SKU with a 9-month shelf life. 270 days total, 30% of that is 81 days, and 81 is more than 45, so 81 days is your floor. A batch made on 1 January expires around 27 September. Subtract 81 days and your last dispatch date is roughly 8 July. You have about 6.2 months of sellable window out of 9. Plan production and purchase orders against 6.2, not 9, or you'll be writing off perfectly good stock every quarter.
Short-life products are where the rule gets awkward. A 21-day fresh product can never carry 45 days at delivery. The practical reading is the 30% test with a documented internal policy, and this is exactly the kind of thing you want your consultant's opinion on rather than a blog's.
Shipping perishable food: decide which pincodes you refuse
The single most useful thing we do on a perishables build is turn deliveries off. Ambient-stable goods — pickles, masalas, honey, packaged snacks, coffee beans — go anywhere Delhivery or Shiprocket's surface network reaches. Chocolate in May does not. Fresh, chilled or frozen goods go to a short list of metros on air with a specialist temperature-controlled service, and nowhere else.
Practical setup:
- Pincode check on the product page. A serviceability widget before the customer adds to cart. Cheaper than a refund and a wasted gel pack.
- Separate shipping profiles per product type. Perishables in their own profile with a restricted zone list. Ambient SKUs in the default profile.
- Cut-off days. No perishable dispatch on Friday or Saturday if the lane isn't guaranteed for Sunday delivery. Sitting in a hub over a weekend is how you get a complaint and a chargeback.
- Block mixed carts where a frozen SKU and an ambient SKU would need two different boxes and two different services, or split them at fulfilment and tell the customer up front.
On Shopify Plus you can enforce most of this with a delivery customization function at checkout. Below Plus you're combining shipping profiles, a pincode app and a validation on the cart, which is functional but less tidy. That's a fair reason to look at Plus eventually, and not a reason on its own to move today.
COD on perishables is usually a mistake
Cash on delivery still carries a large share of Indian D2C orders, and food buyers are no exception. The problem is that a refused COD parcel of masala comes back sellable and a refused COD parcel of fresh paneer does not.
Run the arithmetic on your own numbers. Say 100 orders at ₹450 average value, 55 of them COD, and a 22% RTO rate on those COD orders. That's about 12 parcels coming back. On a perishable, each one costs you COGS of ₹180 plus ₹70 forward freight plus ₹70 reverse, so ₹320 gone, twelve times: ₹3,840 burned across 100 orders, or ₹38 a head off your contribution margin. Prepaid-only on the perishable range removes almost all of that. You'll lose some orders. Push a 5% prepaid discount and UPI through Razorpay or Cashfree, and on most F&B catalogues the discount costs less than the RTOs did.
Keep COD on shelf-stable SKUs where the parcel survives the round trip.
Theme choice for food brands: plain beats fancy
The best theme for a food brand is whichever Online Store 2.0 theme lets you build a clean nutrition and label block, supports metafield-driven sections, and loads fast on a 4G connection in a tier-2 town. Dawn does all three and costs nothing. Refresh and Sense are fine. The heavy multipurpose themes from marketplaces load three sliders and a countdown timer you didn't ask for, and food shoppers on mobile abandon while the hero video buffers.
Things that actually matter for this category: appetising photography at sensible file sizes, a variant selector that handles pack sizes and bundles without confusing anyone, an ingredients and allergens block that's readable without pinching, and a filter set built on real attributes (sugar-free, gluten-free, vegan, roast level, spice heat). If your catalogue crosses a couple of hundred SKUs, the filtering work pays back faster than another round of ad creative. We've written more about what actually moves Shopify page speed, and if you'd rather just see where your store stands, SwiftStore scans the storefront and tracks the score as you change things.
Subscription boxes: good economics, fiddly compliance
Coffee, tea, granola, snack boxes and meal kits all work as subscriptions in India, and the retention maths is far kinder than one-off sales. Two things to set up properly.
First, mandates. UPI Autopay and card e-mandates are how recurring payments actually clear here, and the RBI framework means the customer gets a pre-debit notification and can pull the plug. Pick a subscription app that supports UPI Autopay through your gateway rather than one built for Western card rails. Test the failure path, not the happy path.
Second, the shelf-life rule follows the subscription. If your December box ships stock manufactured in July, run the 30% test on every SKU going into it. Curated boxes are where old inventory goes to hide, and that's precisely the habit the rule exists to stop.
WhatsApp handles the rest: dispatch alerts, pause-and-skip, upcoming-charge reminders. Open rates on utility templates beat email comfortably for this audience.
GST, invoices and the e-way bill
Food sits across several GST slabs and the rate depends on HSN code and on whether the item is pre-packaged and labelled. Loose and packaged versions of the same commodity have been taxed differently. Get your CA to map every SKU to an HSN code and a rate before you enter a single price, because fixing it later means reissuing invoices.
Selling goods interstate means GST registration regardless of turnover. Your Shopify invoices need your GSTIN, HSN codes, place of supply and the CGST/SGST or IGST split, which means an invoicing app rather than Shopify's default order printer. E-way bills rarely trigger on B2C parcels because of the ₹50,000 consignment threshold, but they absolutely apply to stock transfers into your 3PL warehouses. Plan for the festive restock in September, not on the day the truck is loading.
A launch sequence that works
- Confirm your FSSAI licence class and get the certificate in hand.
- Build the metafield definitions for label data before you upload products.
- Map HSN codes and GST rates per SKU.
- Split the catalogue into ambient, chilled and frozen shipping profiles.
- Set serviceable pincodes per profile and add a PDP checker.
- Set prepaid-only rules on perishables; keep COD on shelf-stable lines.
- Publish your shelf-life guarantee and confirm the warehouse picks FEFO.
- Then worry about ads.
Questions we get asked most
Can I start selling with only a Basic FSSAI Registration? If you're shipping across state lines or operating as an e-commerce food business, plan for a Central Licence. Confirm it with a consultant before you take your first interstate order.
Do I have to show the expiry date on the product page? You must show best-before or use-by and the batch number for the pack the customer receives. A shelf-life guarantee statement plus a batch printed on the invoice and the pack is the workable pattern when you hold multiple batches.
Which carrier for chilled and frozen? Air lanes to metros through a temperature-controlled service, and accept that you cover fewer pincodes. Trying to run frozen goods on standard surface freight to save ₹60 a parcel ends in spoiled stock and one-star reviews.
Can I sell homemade food on Shopify? Yes, with the appropriate FSSAI registration for your kitchen and honest labelling. Keep the range shelf-stable and local until you have a licensed co-packer.
Do I need a developer for all this? For the metafields and the theme blocks, one competent build gets you a template you can run yourself for years. If you'd rather not learn Liquid to do it, that's what we do.
If you already have a store live and you're unsure whether your listings carry every declaration they should, send us the URL through the free audit form and we'll go through the PDP data, the shipping profiles and the COD rules and tell you what's missing.


