Ten days out, the two things that will cost a Shopify jewellery store money on Dhanteras are a stale price and a piece sold twice. Both are build problems, not marketing problems, and both are fixable this week. Get a cached live rate feeding your variant prices on a threshold trigger, turn off "continue selling when out of stock" across the whole catalogue, and split your showroom inventory from your online inventory into separate locations. Everything else on this page is detail around those three.
Dhanteras sits at the front of the Diwali window, which means your highest-intent traffic of the year lands on a day when the spot rate can move 1.5% between morning and evening. A jeweller running fixed prices through that is either leaving margin on the floor or selling below cost, and won't know which until the GST returns are filed.
Putting a live gold rate on the product page without wrecking your LCP
The rate ticker is the easy part conceptually and the part most stores implement badly. The common pattern is a client-side fetch to a rate API on every page load. It fires after first paint, pushes the layout down when it resolves, and on a 3G connection in a tier-2 town it sometimes never resolves at all. You get a Dhanteras-day PDP with a blank strip where the price should be.
Do it the other way. Pull the rate on a schedule into a Shopify metaobject or shop metafield, render it in Liquid so it's in the HTML the browser receives, and let a small script refresh the number in place if the page has been open for a few minutes. The reserved space stops the layout shift. The server-rendered value means the price is visible at first paint even if the script is blocked.
Cache aggressively. You do not need a fresh quote per visitor. A 10 to 15 minute cache is more than enough resolution for retail jewellery, and it keeps you off the API provider's throttle on the one day everyone is hitting it.
How to price gold jewellery online during Dhanteras
The shop-floor formula moves to the website unchanged. What changes is that you now have to defend it in writing to someone who is comparing four tabs.
Take a 22K chain, 8.5 g, at a ₹7,200 per gram rate, 8% wastage, ₹650 per gram making charge:
- Metal value: 8.5 × 7,200 = ₹61,200
- Wastage at 8%: ₹4,896
- Making charge: 8.5 × 650 = ₹5,525
- Subtotal: ₹71,621
- GST at 3%: ₹2,148.63
- Total: ₹73,769.63
Now move the rate ₹120 a gram, which is an ordinary intraday swing, not a crisis. Metal value becomes ₹62,220, wastage ₹4,977.60, making charge unchanged at ₹5,525, subtotal ₹72,722.60, GST ₹2,181.68, total ₹74,904.28. The gap is ₹1,134.65 on one chain. Sell forty of them on a stale morning price and you've given away ₹45,386 before anyone has looked at the ad spend.
That is the whole argument for automating the reprice. It isn't about looking modern. It's arithmetic that compounds across every SKU in the catalogue on your busiest day.
Showing the making charge and wastage breakup on Shopify
Shopify gives you one price field per variant. The breakup has to live somewhere else and be assembled at render time.
The structure that holds up: store net weight, purity, wastage percentage, making charge basis (per gram or flat) and HUID as product metafields, then compute the four lines in Liquid against the cached rate. Output a small table under the price with metal value, wastage, making charge and GST as separate rows, with the per-gram rate the calculation used and a timestamp.
Two reasons to bother. First, every serious buyer on Dhanteras is price-checking you against a neighbourhood jeweller who will quote the breakup out loud across a counter; an opaque single number loses that comparison by default. Second, it kills a category of support ticket. "Why is your 8.5 g chain ₹2,000 more than theirs" is answerable in one screenshot when the wastage line is on the page.
Flat making charges per piece are easier to render and easier to defend than per-gram on light items. For coins, drop making charge into a flat minting charge line and be done.
If you'd rather not build the rate fetch, the metafield schema and the breakup table from scratch in the ten days you have, our Gold & Silver Live Rate app does the rate display, the automatic repricing and the metal/making/wastage/GST breakup as a single install. The listing has the current plans.
GST display for gold jewellery, and the line you need on the invoice
Finished gold jewellery sold as one article is normally treated as a composite supply, with the making charge subsumed into the principal supply and the whole value taxed at 3%. Jewellers who bill making as a separate job-work line are in different territory at 5%. Which applies to your billing depends on how you actually invoice, so confirm the treatment with your CA rather than copying whatever a competitor's storefront shows.
On the Shopify side, what matters is consistency. Set prices tax-exclusive and let Shopify add the 3%, or set them tax-inclusive and show the tax component in the breakup table. Pick one. A store that advertises a tax-inclusive total on the PDP and then adds GST at checkout will watch its Dhanteras cart abandonment double, and no amount of Meta retargeting fixes a price that changed between two screens.
Keep the GSTIN capture field on checkout for the buyers purchasing through a business, and make sure your invoicing app carries HSN 7113 and the hallmark details through to the PDF. E-way bill requirements for gold vary by state, so check your own state's position before you ship interstate on the 2nd of November rather than after.
Gold rate change automation on Shopify without hitting the API ceiling
Repricing a catalogue means writing to productVariantsBulkUpdate in batches. A 3,000-variant catalogue is 30 mutations per full pass. Run that every 15 minutes and you're doing 96 passes a day, nearly 3,000 mutations, plus whatever your other apps are spending against the same bucket. You'll get throttled at the worst moment.
Trigger on movement instead of on the clock. Reprice when the cached rate moves more than a set amount per gram, say ₹25, and otherwise leave the catalogue alone. On a flat morning you might run two passes. On a volatile afternoon, eight. Either way you stay well inside the rate limit and the prices stay honest.
Set a sanity guard too. If the feed returns a rate more than 5% off the last known value, do not write it to 3,000 variants. Hold, alert, and have a human look. We've seen a bad feed response turn a catalogue into a clearance sale, and Shopify will happily process those orders at the price you published.
One more thing people forget: discount codes and automatic discounts stack on top of the repriced value. A "FESTIVE10" running against a live metal price is a 10% cut on gold cost, not on margin. Scope festive discounts to making charges only, or to silver and fashion lines, or skip them and offer a making-charge waiver instead. Buyers understand that one.
Preventing oversell on jewellery variants
Most jewellery inventory is one of one. A specific 8.5 g chain exists once. Shopify's default behaviour is fine for this, right up to the three places it isn't.
"Continue selling when out of stock" is on. Themes set it, bulk CSV imports set it, and nobody checks. Filter the variant list by that flag today and switch it off across the catalogue. This is the single most common cause of a Dhanteras oversell and it takes ten minutes to fix.
The showroom and the website share a location. If your POS and your online store both draw from one location, the piece sold at the counter at 11 a.m. is still live on the site until someone syncs. Create a separate location for online-fulfilled stock, assign only what you are willing to ship, and leave the showroom location unpublished to the online sales channel. The awkward case: if you genuinely want to sell the same physical piece through both, you need near-real-time POS sync and you should accept that a handful of double-sells will happen anyway. Budget a refund workflow and a polite WhatsApp script for it.
Checkout holds expire. Shopify reserves inventory once a customer enters checkout, but the hold isn't indefinite. A buyer who sits on the payment page while deciding between UPI and net banking can lose the piece to someone faster. Nothing to fix there, but your support team should know it's normal rather than a bug.
For coins and bars, which is where Dhanteras volume actually lands, you're dealing with real stock depth rather than one-offs. Set honest quantities and publish them. "Only 3 left in 8 g" is true, converts, and prevents the cancellation emails you'd otherwise be writing on the 20th.
COD on a ₹70,000 chain
Don't. Cash on delivery carries a refusal and RTO rate that is survivable on a ₹1,200 apparel order and ruinous on gold, and you're also carrying three to five days of rate exposure on a piece you've already removed from stock. If the buyer refuses at the door and the metal has moved against you, you eat both the logistics cost and the repricing loss.
Prepaid only on gold, with UPI, cards and net banking through Razorpay, PayU or Cashfree. If you must offer something COD-shaped for buyers who won't pay in full online, take a prepaid advance and collect the balance on delivery, with insured shipping through Blue Dart or a Delhivery value-declared service. Silver articles, puja items and gifting under ₹5,000 are a different conversation and COD is reasonable there.
Booking advance for gold, and what a rate lock actually commits you to
Advance booking is the oldest trick in the trade and it maps onto Shopify awkwardly, because the platform has no native deposit concept outside of Plus checkout customisations.
The workable pattern for a standard plan: publish a booking product at a fixed advance, ₹2,000 or ₹5,000, with the terms in the description. The customer pays the advance, you create a draft order for the balance at the locked rate, and you send the payment link over WhatsApp when the piece is ready. It's manual, it works, and on Dhanteras volumes the manual part is manageable because bookings are a small share of orders.
Write the lock terms properly. How many days the rate holds, what happens if the customer walks away, whether the advance is adjustable against a different piece. A rate lock is a short position on gold that you are handing out for free, so cap the window at 7 to 15 days and cap the number of grams you'll lock in total. If you lock 400 g at the Dhanteras rate and the metal runs ₹300 a gram over the next fortnight, that's ₹1.2 lakh out of your pocket.
Plus merchants can do this more cleanly with deposits in checkout, which is one of the few genuine reasons for a jeweller to be on Plus. If bookings are a rounding error in your revenue, they are not.
The Dhanteras landing page for a jewellery store
Your bridal collection is not what sells on Dhanteras. Coins, small bars, silver articles and light daily-wear pieces are. Build the landing page around that and treat it as a shopping page, not a campaign brochure.
What earns its place above the fold: the live per-gram rate for 22K and 24K with a timestamp, a delivery cut-off date stated in plain text, and a grid of coins by weight — 1 g, 2 g, 5 g, 8 g, 10 g — with prices already computed. Below that, price bands, because a large share of festive buyers shop to a budget rather than to a product. Under ₹10,000. ₹10,000 to ₹25,000. ₹25,000 to ₹50,000.
Keep the page light. Traffic on Dhanteras is overwhelmingly mobile and a meaningful slice of it is on a weak connection. A hero video and six carousels will push your LCP past three seconds and you'll lose buyers before the rate ticker even renders. We usually strip the festive page back to server-rendered HTML, one compressed hero image, and lazy-loaded product tiles. If your current theme can't get there, speed work on the template is a better use of the next week than another creative round.
Muhurat timings are worth a line, because people genuinely plan the purchase around them. Pair it with a shipping promise that you can keep.
A ten-day build order
If you're starting cold, this is the sequence we'd run, highest payoff first.
- Audit every variant for the oversell flag and turn it off. Split locations. Half a day.
- Stand up the rate feed, cache it in a metafield, render it server-side on the PDP. One to two days.
- Wire threshold-based repricing with the sanity guard and a Slack or email alert on every pass. Two days.
- Add the breakup table and the metafield schema behind it. One day.
- Fix the tax display so the PDP total and the checkout total agree. Half a day, and test it with an actual order.
- Build the landing page. Two days.
- Booking product and draft-order workflow, if you're offering it. One day.
- Load test the page on a throttled connection and place three real orders, including one prepaid UPI and one booking advance.
Step eight is the one people skip and the one that catches everything. Place the orders yourself, on your phone, on mobile data, from outside the office network.
If the rate automation is the piece you can't get done in time, run fixed prices with a manual morning reprice and a visible "prices as of 9:30 a.m." stamp, and raise your buffer. It's a worse answer than automation, but it beats a half-built integration writing bad prices to your catalogue on the 18th. We'd rather you ship the simple version.
Short on hands this week? You can bring in a Shopify developer for a defined scope like the rate feed and the location split, or send us the store URL for a free audit and we'll tell you which of the eight items above are already broken.


