How to compare job offers before you negotiate
Put every offer in one table, on the same yearly footing where the arithmetic allows it, and see what is actually different. Then, if you want, draft a short script that cites published pay data instead of a number from nowhere.
Not financial or legal advice
The rule we hold to
Compare like with like, or do not rank at all
Offers rarely arrive in the same shape. One is a monthly salary, one a yearly figure with options attached, one an hourly contract. The usual mistake is to convert everything in your head and compare the results, which quietly bakes in guesses: how many hours a contract really runs, what the options will be worth, which exchange rate to use.
The offer table on the job tracker refuses to make those guesses. A month becomes a year by multiplying by twelve and a week by fifty-two, because that is arithmetic. A day or an hour rate is shown as given, because turning it into a year needs hours we do not know. Offers in different currencies sit side by side but are never ranked, because picking an exchange rate would put our number into your decision. Bonus, equity and notice are recorded in your own words and never scored.
Worked example
Two offers, then a third that changes the table
Invented employers, real output: every cell below is produced by the same functions the tracker uses.
| Term | Larkspur Data (highest base pay) | Tiller Analytics |
|---|---|---|
| Base pay | 9,000 USD a month (108,000 USD a year) | 105,000 USD a year |
| Bonus | 10% target, paid yearly | Not given |
| Equity | Not given | 2,000 options over four years |
| Start date | 1 December 2026 | Not given |
| Location | Austin, Hybrid | Remote |
| Notice | Not given | Reply by Friday |
Larkspur Data offered 9,000 USD a month, which the table also shows as 108,000 USD a year. Tiller Analytics offered 105,000 USD a year. Both are in dollars and both have a yearly figure, so the table marks Larkspur Data as the highest base pay, and says underneath that this is base pay only.
That label is the start of the comparison, not the end. The gap is 3,000 USD a year in base. Larkspur Data adds a 10% target bonus; Tiller Analytics is remote and adds options. Whether options over four years outweigh a target bonus is a question about the company, not arithmetic, and the table leaves it to you.
| Term | Larkspur Data | Tiller Analytics | Quillfeather Health |
|---|---|---|---|
| Base pay | 9,000 USD a month (108,000 USD a year) | 105,000 USD a year | 55 USD an hour |
| Bonus | 10% target, paid yearly | Not given | Not given |
| Equity | Not given | 2,000 options over four years | Not given |
| Start date | 1 December 2026 | Not given | Not given |
| Location | Austin, Hybrid | Remote | Austin, On site |
| Notice | Not given | Reply by Friday | Not given |
Now a contract role at 55 USD an hour arrives. An hourly rate has no yearly figure, so the offers can no longer all be put on one footing, and the table marks nothing: highest base pay is now not shown. That can feel unhelpful, and it is deliberate. If you know the contract runs forty hours a week for fifty weeks, you can do that sum yourself and you will know exactly what you assumed.
Negotiating
A script that cites its numbers
Once an offer is saved, you can draft a short negotiation script from one of your resumes. It uses AI and needs a pass. It reads three things: your resume, the offer you recorded, and published wage figures for the role and place where we hold them.
The only wage data we hold is the US Bureau of Labor Statistics Occupational Employment and Wage Statistics, reference period May 2025 (checked 31 October 2026): national percentiles for the roles we cover and figures for the largest metro areas. When the job title matches one of those roles and the job is in the US, the script quotes the figures with the source and date. When it does not match, or the job is outside the US, the script quotes no market figure at all and tells you why. Nothing is estimated or borrowed from another country.
Every number and name in the draft is then checked against what the script was given. Anything else, such as a figure the model added on its own, is highlighted with a note to remove it unless you can source it yourself. The script never says how likely an employer is to agree, and nothing is sent: you edit it, fill in the bracketed parts and copy it.
Before you call
A short checklist for comparing offers
- Write each offer down in the terms it was given, with the currency and period. Convert nothing yet.
- Work out take-home pay for each, not just gross. Our US, UK and India CTC calculators do this with their assumptions stated.
- Separate guaranteed pay from conditional pay. A target bonus and unvested options are not salary.
- Note the start date and the reply deadline. A deadline is often the real constraint in a negotiation.
- If one offer depends on a visa, read what the employer has actually said about sponsorship, and check the government sponsor lists.
- Ask for one or two specific things, with a reason you can stand behind. A sourced market figure is a reason; a feeling is not.
Limits
What it does not do
- It does not tell you which offer to take. The only mark it makes is highest base pay, and only when that is plain arithmetic.
- It does not value equity, bonus, benefits or pensions. Those stay in your words.
- It does not convert currencies or compute tax. Use a take-home calculator for each country.
- It has no pay data outside the US, so scripts for roles elsewhere carry no market figure.
- It does not contact the employer, and it is not financial, tax or legal advice.
Questions
Frequently asked questions
Put your offers in one table
Move the job to Offer on your tracker, record the terms, and see them side by side. Free, and only you see it.
Comparing offers is free
No exchange rate of ours
Nothing sent for you
No card to start · One payment · Nothing renews