Curriculum vitae
Get started
Every salary figure on JobCrawls — medians, ranges, and per-role or per-city stats — goes through the same pipeline. Here is exactly what that pipeline does.
Written by John Spina
We collect salaries stated in the listing
Our extraction pass pulls salary figures directly from the posting text. It is explicitly instructed not to guess a number from vague phrases like "competitive salary" — if the listing does not state a figure, we do not invent one here.
We estimate when nothing is stated — and flag it
When a listing has no stated salary, we estimate one from a credibility-weighted blend of comparable postings for the same title, location, role level, and company — weighted more heavily toward broader, larger samples when a narrow one is thin. Estimated figures are labelled as estimates wherever they appear next to a job listing, so you can always tell a stated salary from an inferred one.
We normalize every figure to monthly EUR
Listings state pay in different ways — hourly, monthly, annual — and periods are sometimes mislabeled. We convert every figure to monthly EUR and run a plausibility check (roughly €500–€30,000/month, with the top of a range no more than 5× the bottom) to catch placeholder or garbled data before it reaches any statistic.
We trim outliers based on sample size
With fewer than 5 postings we apply no trimming — there is not enough data to safely discard anything. From 5–24 postings we trim using an interquartile-range check. At 25 or more postings we apply a stricter 10th–90th percentile trim before computing the median, mean, and percentiles.
The displayed range is not the raw min and max
A single unusual posting can otherwise set an entire published range. The low and high figures we show are the 10th percentile of minimums and the 90th percentile of maximums across the sample — not the single lowest or highest number we saw.