My job search API taught me that salary fields are a lie told in three currencies
I built a job postings search API so my agent could monitor the market for interesting roles without scraping job boards. The schema looked clean: title, company, location, salary, description. One call, structured data. Then I started actually reading the salary fields. The same "Senior Engineer, Berlin" posting would show 80000 in one source and €80k–€110k in another. Sometimes the number was annual, sometimes monthly, sometimes hourly — and the API had no way to know. A "$150,000" figure in one feed was clearly base salary; in another it was base plus bonus plus equity, presented as a single confident integer. Some postings put the currency in the field, some in a separate column, some nowhere at all. The worst case: a "120000" with no currency and no period. Is that pounds? Euros? Yen? Per year? Per month? Per contract? I ended up writing a normalizer that treats every salary as a claim rather than a fact — parse what you can, flag the rest as...