Free embeddable salary cards
Paste one line of HTML and your page shows current U.S. pay for any of 1,008 jobs: what the job pays at entry, at the median, and at the top of its range. It is free, it needs no account or API key, and it sets no cookies.
Wage figures: U.S. Bureau of Labor Statistics, Occupational Employment and Wage Statistics, May 2025. Cards are rebuilt whenever that data changes.
Pick a job
Start typing. Click a job to preview its card and get the code.
Preview: Registered Nurse
Your code
The code, written out
Every card lives at a URL built from the job slug, so you can write the markup yourself without using the picker above:
<iframe src="https://paycrunch.co/embed/registered-nurse-salary.html"
title="Registered Nurse salary — PayCrunch"
width="100%" height="230"
style="border:0;max-width:420px" loading="lazy"></iframe>The slug is the same one the job page uses. /jobs/registered-nurse-salary.html becomes /embed/registered-nurse-salary.html. The full list of 1,008 slugs is at /data/embed-index.json.
Optional: let the card size itself
A fixed height of 230 pixels fits every card at normal widths. If you would rather the frame shrink to the card exactly, add this once anywhere on your page — the card already posts its height, and does nothing if you skip this:
<script>
addEventListener('message', function (e) {
if (!e.data || !e.data.paycrunchEmbed) return;
var f = document.querySelector(
'iframe[src*="/embed/' + e.data.slug + '.html"]');
if (f) f.style.height = e.data.height + 'px';
});
</script>Terms, in plain words
- Free, commercially too. News sites, staffing firms, schools, personal blogs — all fine, no permission needed.
- Leave the attribution link. The small “Source: PayCrunch” link at the foot of the card is the price. It is marked
rel="nofollow"on purpose. - Do not rewrite the anchor text. Keyword-stuffed widget links are a link scheme under Google’s guidelines, and they would put both sites at risk.
- Do not present the estimate as BLS data. Cards for occupations the Bureau does not publish separately say “Est. ceiling” and name the estimate on the card. Leave that wording in place.
- No warranty. These are public wage statistics, not an offer of employment or a salary guarantee.
Want the numbers without the markup? The free JSON API returns the same data under the same terms, and the best-paying-states dataset is published under CC BY 4.0.
What is on a card
- Entry — the 10th-percentile annual wage: what the bottom of the field earns, not a starting-salary survey.
- Median — the midpoint. Half the field earns more.
- Top of range — the highest figure the data supports, taken from the best-paying state where that state employs at least 500 people in the occupation. Below that floor the national figure is used instead, because a state-level wage drawn from a handful of workers is noise.
The bar underneath shows where the median sits between entry and top. The card names its own source in the footer, and links to the full job page, which carries the state-by-state breakdown, the tasks the job actually involves, and the tools that move pay in that field.
Questions
Is it really free?
Where do the numbers come from?
Will the card change under me?
Does the card track my readers?
Can I restyle it or pull the raw numbers instead?
What counts as proper attribution?
How this page is built
The cards, the job index and this page are generated by .github/embed-engine/build_embed.py from data/pagedata.json, the same file the job pages read. There are 1,008 cards covering every job page on the site. Nothing on a card is typed by hand, so a card and its job page cannot disagree.
Cards carry noindex,follow. They are meant to be framed on your page, not crawled as a thousand more pages on ours.