Optical retail operations
Optical Shop Profit Margin in India: What 163 Frames Show, and the Discount That Eats 85% of It
Real numbers from two branches of one Indian optical business. The median frame margin is 60% and it barely moves with price — but the average discount consumes 85% of what the frame earned, and most shops cannot calculate their lens margin at all.
Ask what margin an optical shop makes and you will be told "two to three times on frames" by someone at a trade fair, and something between 40% and 300% by whichever website ranks first that week. Nobody shows their workings.
So here are mine.
What follows is taken from the order records of a family-run optical business — two branches — as recorded in its ERP between June and September 2026. Every figure is counted, not estimated. Where the data is thin I say so, because the thin parts turn out to be the most useful thing in this article.
Disclosure and limits, before the numbers. I build Optocore, an optical ERP, and these figures come out of it. This is one shop, two branches, one city, and roughly three months of orders — 271 orders and 163 frames with both a cost and a selling price recorded. It is a real sample, not a large one. Treat the shape as informative and the decimal places as not.
Frames: the median is 60%, and the band is tight
Across 163 frames where we knew both what we paid and what we sold it for:
| Lowest | 25th percentile | Median | 75th percentile | Highest |
|---|---|---|---|---|
| 46.8% | 57.2% | 60.0% | 66.7% | 82.2% |
Half of every frame we sold landed between 57% and 67% gross margin. Not one frame was sold below 46.8%, and nothing reached the "three times cost" that gets repeated in the trade.
That tightness is the first useful finding. Frame margin is not a wide, mysterious range that depends on your negotiating skill. It is a narrow band that the market has already decided, and your job is to sit inside it deliberately rather than discover afterwards where you landed.
Gross margin is not profit. Rent, salaries, electricity, the lab's bill and your own time all come out of that 60%. A shop running at 60% gross is not keeping 60%, and any comparison that forgets this is comparing two different things.
Expensive frames do not earn a better percentage. They earn more rupees.
This is the finding I expected to be wrong, and it held.
| Selling price band | Frames | Average sale | Average margin | Rupees earned |
|---|---|---|---|---|
| Under ₹1,000 | 35 | ₹699 | 57.4% | ₹402 |
| ₹1,000–1,999 | 69 | ₹1,455 | 62.8% | ₹911 |
| ₹2,000–3,999 | 28 | ₹2,690 | 65.7% | ₹1,781 |
| ₹4,000–7,999 | 26 | ₹5,766 | 59.9% | ₹3,456 |
| ₹8,000 and above | 5 | ₹14,080 | 66.5% | ₹9,295 |
The margin column wanders between 57% and 67% with no trend. The rupees column moves 23 times over.
Which settles an argument a lot of shops have with themselves. Stocking dearer frames does not improve your margin percentage — the supplier has already priced that in. It improves what a single sale is worth. Twenty-three sales in the bottom band earn what one sale in the top band earns, and both took the same forty minutes at the counter.
The last row is five frames. Read it as a direction, not a number.
The discount is eating the margin
Now the part I did not enjoy finding.
Of 292 sale lines across both branches, 85 carried a discount — 29.1%. Nearly one sale in three.
On its own that is unremarkable; every shop rounds a bill down. What matters is the size. On the lines where we also knew the frame's cost:
| Average discount given | Average gross profit on that frame | Share consumed |
|---|---|---|
| ₹2,265 | ₹2,676 | 85% |
The discount consumed about 85% of what the frame earned. Not 85% of the bill — 85% of the gross profit, which is the only part that was ever ours.
Sit with that. A 60% margin business, discounting on 29% of lines, at a size that removes five-sixths of the gross profit on those lines. The shop looks busy. The counter feels successful. The frame goes out of the door having earned ₹411.
And nobody at the counter knows it, because the person authorising the discount is looking at the selling price, not at the cost. ₹2,265 off a ₹8,000 frame sounds like 28%. Against the ₹2,676 the frame was going to earn, it is 85%.
What to do about it on Monday, without a system: write the cost price on the back of the tag in a code only your staff can read. The moment the person giving the discount can see the floor, the discount changes shape — not because you forbade it, but because they can finally tell the difference between giving away change and giving away the sale.
This is also why a flat "we give 10% to everyone" policy is more dangerous than it sounds on a category where margin varies from 46.8% to 82.2%. The same 10% is a haircut on one frame and most of the profit on another.
Most shops cannot calculate their lens margin — including, until recently, ours
Here is the honest gap, and it is the most widely shared problem in this article.
Across both branches we had 281 lens lines. The lens cost was recorded on 38 of them. Fourteen percent.
The reason is structural, not carelessness. A frame's cost arrives on a purchase bill with the frame, so it gets captured as stock. A lens cost arrives weeks later, on a monthly statement from the lab covering dozens of jobs at once, long after the customer has collected and the job is closed. Going back to attach the right amount to the right job is nobody's task, so it is nobody's task.
The consequence: a shop can tell you its frame margin to the rupee and is genuinely guessing at the lens — which is half the bill. On the 38 lines where we did have it, lens gross margin at one branch averaged 84.7% on an average lens price of ₹1,594. That is a much higher percentage than frames, on a smaller ticket, and it is exactly the number a shop most needs and least has.
I am not presenting 84.7% as a benchmark. Thirty-four lines is not a benchmark. I am presenting the 38-out-of-281 as the finding.
The fix is a workflow one: capture the lab cost against the job when the job is created, as an expected cost, and correct it when the statement arrives. An estimate attached to the right job beats an exact figure attached to nothing.
Two branches, same family — 2.7× apart on price, four points apart on margin
Both shops are in the same city, a few kilometres apart. Same owners, same buying, same discipline on margin. They are not the same business. I have left them unnamed — which branch is which is not the point, and the point survives without it.
| Branch A | Branch B | |
|---|---|---|
| Orders in the period | 91 | 180 |
| Average frame sold for | ₹3,993 | ₹1,489 |
| Frame margin | 63.9% | 60.2% |
The average frame sells for 2.7 times as much at one branch as at the other. Frame margin differs by less than four percentage points.
That is the shape of this whole article in one table. Margin percentage is roughly a constant. Everything that actually varies is ticket size and volume. Branch B does twice the orders on a much cheaper frame; Branch A does fewer, dearer. Neither is doing margin better.
It also means the question "what margin should I make?" is close to the wrong question. You will make about 60% on frames whatever you do. The questions that decide whether you have a good year are what does an order average, how many do you do, and how much of the gross do you give back at the counter.
What to actually measure
Four numbers. If you track nothing else, track these, monthly, and watch the direction rather than the value.
- Gross margin on frames. Needs cost price captured at purchase. If you are between 55% and 67% you are normal; outside that, find out why before you change anything.
- Average order value, per branch. The single most moveable number in the shop, and the one that responds to what you stock and what you show first.
- Discount given as a share of gross profit — not as a share of the bill. This is the number that surprised us, and it is the one almost nobody computes, because it needs cost and discount in the same place.
- Percentage of lens lines with a cost attached. A process metric, not a money one. Ours was 14%. Until it is high, every profit figure you have is frames-only.
Three of those four are impossible from a register or a plain billing tool, because they need cost and price sitting on the same line. That is not a sales pitch, it is just where the arithmetic lives. The comparison of what generic billing software can and cannot do goes into which tools hold cost at line level.
Frequently asked
Is 60% a good margin for an optical shop?
It is a normal one. Whether it is good depends on your rent and your volume — a 60% margin on eight orders a day in a high-rent location can lose money, and the same 60% on thirty orders in a modest one does well. Margin percentage is a constraint you work within, not a score.
Should I stock more expensive frames?
If your customers will buy them, yes — but for the rupees, not the percentage. The table above shows the percentage barely improves. Test it with a small buy in one band above your current top seller, and watch whether it moves or sits.
How do I compare my shop to others?
Carefully. Our own two branches sell frames at average prices 2.7× apart while sitting within four points on margin. Your own trend over six months tells you far more than any benchmark, including this one.
Does GST change the margin picture?
It changes the bill, not the margin, provided you are billing correctly — and it costs you real money if you are not. Billing a frame and lens as one lump risks being taxed at the higher rate on the whole amount. The HSN and rate reference is here.
Figures are counts from the order records of one optical business's two branches, held in the Optocore ERP, covering orders created between 21 June and 12 September 2026: 271 orders, 292 sale lines, 163 frames with both cost and selling price recorded, 281 lens lines of which 38 carried a lens cost, and 3,142 prescriptions on file. No customer information is published — only totals and distributions. The sample is one business over roughly one quarter; percentages are reported to one decimal because that is how they were computed, not because the sample supports that precision.