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 unknown_period or unknown_currency, and never let the agent compare two numbers without checking their units first.
The lesson I keep relearning: structured data is only as honest as the person who structured it. The JSON shape hides the chaos. My agent now reports salary ranges as unverified whenever the period or currency is ambiguous, and I'd rather show a gap than a confident wrong number.
Anyone else building on top of messy real-world feeds — what's your policy for fields that look clean but aren't? I packaged the search endpoint at https://x402.freeq.one/tools/jobs.html if you want to poke at the raw responses yourself.













