Salary structure builder
Turn a CTC number into a real offer letter breakdown. Set your components, watch the percentage total, and copy a formatted table into Word or Docs.
This tool only builds the breakdown, it does not calculate tax. For the Indian take-home picture, use the CTC to in-hand calculator.
Earnings
Components total 79% of CTC.
Deductions
Components total 79%. 21% of CTC is unallocated (₹2,52,000).
These settings only affect the exported table below — the site itself stays as it is.
Preview
This is exactly what “Copy table” puts on your clipboard.
| Salary Component | Monthly | Annual |
|---|---|---|
| Earnings | ||
| Basic | ₹40,000 | ₹4,80,000 |
| HRA | ₹20,000 | ₹2,40,000 |
| Special Allowance | ₹15,000 | ₹1,80,000 |
| LTA | ₹4,000 | ₹48,000 |
| Gross Total | ₹79,000 | ₹9,48,000 |
| Deductions | ||
| Provident Fund | ₹4,800 | ₹57,600 |
| Professional Tax | ₹0 | ₹0 |
| Health Insurance | ₹0 | ₹0 |
| Total Deductions | ₹4,800 | ₹57,600 |
| Net Take-Home | ₹74,200 | ₹8,90,400 |
Saved structures
Structures are saved on this device only, in your browser's local storage. Clearing your browser data will remove them.
Why a CTC number isn't an offer letter
CTC, cost to company, is a single figure. It tells a candidate what the company is budgeting for them in a year, but it doesn't tell anyone how that figure is actually paid out. An offer letter has to answer that second question, and it does it by splitting the total into named components: Basic, House Rent Allowance, Special Allowance, provident fund, and whatever else applies. That split is the salary structure. It's the difference between telling someone a number and telling them how they'll actually be paid.
The split matters beyond formatting. Basic pay is usually the base that provident fund, gratuity, and some tax exemptions are calculated from, so a structure where Basic is 30% of CTC produces different real outcomes than one where it's 50%, even at the same total CTC. HRA is calculated as a percentage of Basic in almost every real structure, which is why this tool lets one row reference another rather than forcing every component to be a flat percentage of CTC.
Why the 100% total is the whole point
Every earnings component, once resolved to an actual amount, has to add up to the full CTC. If it adds up to less, part of the CTC that the company is supposedly paying for has no home in the letter. If it adds up to more, the letter has promised something the CTC figure doesn't actually cover. Both of these are common mistakes in hand built offer letters, usually because someone added a new allowance without adjusting anything else, and most tools that build salary breakdowns don't check for it at all. Some go further and silently absorb the gap into a balancing row, which hides the mistake instead of catching it.
This tool does neither. It shows the running percentage total under the Earnings table at all times, and when it isn't exactly 100%, it states the gap in plain terms, including the actual amount of money involved, not just the percentage. It keeps working while the structure is invalid, because a warning is more useful than a tool that refuses to let you finish. Nothing here blocks you from exporting an unbalanced structure. It just makes sure you can't miss that it's unbalanced.
CTC, gross, and net are three different numbers
CTC is the full cost to the company. Gross is the sum of the earnings components an employee actually sees listed, Basic plus HRA plus allowances. Net is gross minus deductions, the amount that actually reaches a bank account. These three numbers are often confused in conversation, but an offer letter has to be precise about which one it's quoting, because a candidate comparing two offers is comparing CTC figures that can hide very different net outcomes depending on how the structure is built.
Why there's no tax logic in here
This tool deliberately does not calculate income tax. Tax rules depend entirely on the country, and often the state or region within it, while a salary structure, percentages and fixed amounts adding up to a total, is the same idea everywhere. Leaving tax out keeps this tool useful for an offer letter written for a role in India, the UAE, Singapore, or anywhere else, without needing a different tool for each one. For the Indian tax picture specifically, there's a direct link above to the existing CTC to in-hand calculator, which is built for exactly that and isn't duplicated here.
Everything stays on your device
Nothing typed into this tool is sent anywhere. All of the calculation happens in your browser, and if you save a structure to come back to later, it's stored in that browser's local storage, on that device only. There's no account and no server copy, which also means clearing your browser data or switching devices will lose anything you've saved. Keep a copy of the finished table somewhere durable once you're happy with it.
Frequently asked questions
What is a salary structure, and why does an offer letter need one?
A salary structure is the breakdown of a total pay figure into named components: Basic, HRA, allowances, and deductions like provident fund. An offer letter can't just state one number. It has to show a candidate, and later payroll, exactly how that number splits up, because Basic and HRA affect tax treatment, PF contributions, and gratuity calculations differently. The single CTC figure is the input. The structure is what actually goes on the page.
Why do the components have to add up to exactly 100% of CTC?
Because CTC means cost to company, the full amount the company is budgeting for that employee. If the components you've listed only add up to 95%, the remaining 5% is real money that exists in the CTC figure but isn't accounted for anywhere in the letter. If they add up to 105%, you've promised more than the CTC actually covers. Either way, someone in payroll has to go back and figure out what you meant. This tool shows the running total and the exact gap so you catch it before the letter goes out, not after.
What's the difference between CTC, gross, and net?
CTC is the full annual cost to the company, including every earning component and the employer's own contributions. Gross is the sum of the earnings the employee actually sees on a payslip: Basic, HRA, allowances. Net is what lands in the bank account after deductions like provident fund, professional tax, and income tax are taken out of gross. This tool calculates CTC through to net, but the net figure here has no income tax in it, only the structural deductions you've added yourself.
Why doesn't this tool calculate income tax?
Because tax rules are specific to a country, and this tool isn't. A salary structure, on the other hand, is a universal idea: percentages and fixed amounts that add up to a total. Leaving tax out on purpose means this tool works the same way for an offer letter in Bangalore, Dubai, or Toronto. If you need the Indian take-home number for a candidate, use the CTC to in-hand calculator instead, which does model income tax and is linked directly from this page.
Is my salary data sent anywhere?
No. Every calculation happens in your browser. Nothing you type here is sent to a server, logged, or stored anywhere except your own device if you choose to save a structure. There's no account and no sign-in.
Where are saved structures stored?
In your browser's local storage, on this device only. They're not backed up anywhere else, so clearing your browser's site data, switching browsers, or switching devices will lose them. If a structure matters, keep a copy of the exported table somewhere durable, like the offer letter itself.
Can a deduction be a percentage of another deduction?
No, and the tool flags it if you try. Deductions can only be set as a percentage of an earnings row, such as provident fund being 12% of Basic. Chaining deductions off each other doesn't reflect how real payroll components work and makes the structure harder to audit, so it's treated as an invalid reference rather than silently calculated.
What happens if I delete a row that another row depends on?
The dependent row can't resolve to a real number, so its amount shows as unavailable and the tool raises a clear warning naming the row and what it was pointing at. It won't silently show zero and let the mistake slide through into an exported table.