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

This page and the tools it describes help you lay offers side by side and draft what to say. They do not tell you which offer to take, what an offer is worth after tax in your situation, or whether a contract term is enforceable. Drafts only. Not legal or financial 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.

Two offers in US dollars
TermLarkspur Data (highest base pay)Tiller Analytics
Base pay9,000 USD a month (108,000 USD a year)105,000 USD a year
Bonus10% target, paid yearlyNot given
EquityNot given2,000 options over four years
Start date1 December 2026Not given
LocationAustin, HybridRemote
NoticeNot givenReply 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.

The same two, plus an hourly contract
TermLarkspur DataTiller AnalyticsQuillfeather Health
Base pay9,000 USD a month (108,000 USD a year)105,000 USD a year55 USD an hour
Bonus10% target, paid yearlyNot givenNot given
EquityNot given2,000 options over four yearsNot given
Start date1 December 2026Not givenNot given
LocationAustin, HybridRemoteAustin, On site
NoticeNot givenReply by FridayNot 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

  1. Write each offer down in the terms it was given, with the currency and period. Convert nothing yet.
  2. Work out take-home pay for each, not just gross. Our US, UK and India CTC calculators do this with their assumptions stated.
  3. Separate guaranteed pay from conditional pay. A target bonus and unvested options are not salary.
  4. Note the start date and the reply deadline. A deadline is often the real constraint in a negotiation.
  5. If one offer depends on a visa, read what the employer has actually said about sponsorship, and check the government sponsor lists.
  6. 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