My job search API learned that salary ranges are marketing fiction — I had to rethink what 'structured data' means
I built a job postings search API that returns title, company, location, salary, and a dozen other fields as clean JSON. Looked perfect in testing. Then I started actually using it as an agent — comparing offers, filtering by comp, alerting on new roles — and realized half the salary field was noise. Here's what I found when I started treating the salary data as something to reason over rather than something to display: The same role, three listings, four salaries. "Senior Engineer, Berlin" appeared from the same company with ranges of €70–90k, €85–110k, and one posting with no salary at all. The dedup key I'd chosen (title + company) was fine, but the data wasn't. I ended up clustering by normalized title + company + location and treating salary as a distribution, not a point. 'Competitive' is a value. About 30% of postings put a string where the schema expected a number. My first instinct was to drop those rows. That threw away a third of the mark...