Expat Jobs
Back to the board
Evidence firstLast reviewed 1 November 2026

How the data works

A job board is only useful if you can trust the filters. This page explains exactly where each signal comes from, what the badges mean, and where the data stops.

ATS-first

6 public sources

Quoted evidence

on every badge

Unknown stays unknown

no invented numbers

Where listings come from

We ingest jobs directly from companies' public applicant tracking systems: Greenhouse, Lever, Ashby, Workable, Personio and Recruitee. A company is only added if its board is live and returns at least one open role.

We do not scrape LinkedIn job posts into the index. LinkedIn may be used later for discovery of companies, never as the source of a listing. Every role links to the company's own apply page.

Listings are refreshed two to three times a day. A role is marked inactive when it disappears from the source; we do not keep expired jobs to inflate counts.

Remote roles and location scope

A company's headquarters is not the same thing as a job's location. For remote and hybrid roles we read the stated scope: worldwide, a region such as Europe or EMEA, a single country, or a city.

A role is listed under a hub only when its scope includes that hub's country. A US-only remote role at a Copenhagen company is not a Copenhagen job, so it does not appear on the Copenhagen board.

When a posting says only “Remote” and no scope, we anchor it to the company hub and label the scope as not stated rather than inventing a country.

How requirements are extracted

A deterministic rule pass looks for explicit phrases first: “German B2”, “visa sponsorship”, “3 days on-site”, “VSOP”, salary ranges. Only after that does an LLM extraction pass run on the remaining text, with a structured schema.

We store the sentence that produced each claim. If we cannot quote a sentence, we do not show the badge. This is the core trust rule of the product.

Absence is handled differently from confirmation. “No German required” means we found no required German; optional German does not exclude a role, and the absence of a requirement is not a promise that none exists. “English-only confirmed” means the posting explicitly says so.

Posting language

The board lists postings written in English. At ingest we classify the posting text by paragraph, comparing common function words in English against German, Dutch, Spanish, Danish, French, Italian and Portuguese. A role counts as English only when English clearly dominates the text; we do not go by the title alone, and a Dutch description with an English title stays out.

Company boilerplate is often repeated in the local language, so each paragraph votes on its own. A posting whose role section is German is treated as German even when a long English benefits block follows it. This is a text heuristic, not a language certificate: a deliberately bilingual posting can land on either side. You can switch the posting-language filter off to see every role we ingest.

Confidence badges

High (85%+): a verbatim, unambiguous phrase with a level or explicit commitment, e.g. “We sponsor visas” or “German B2 required”.

Medium (60–84%): looser phrasing that still clearly refers to the candidate, e.g. “hybrid, a couple of days in the office”.

Low (under 60%): an inference from context. Treat it as a lead to verify in the interview, not a fact.

Every badge exposes its confidence and evidence on hover; the job page shows the full quote.

Funding and layoffs

Funding rounds come from Tech.eu and company announcements. Layoff events come from Eurofound's European Restructuring Monitor and public reporting.

Undisclosed rounds and valuations are labelled “Unknown”. We do not estimate a valuation to make a company look stronger, and a missing round does not mean a company is unfunded.

Layoffs are shown as a company-level signal with a date and source. They are not a verdict on any individual role.

What we deliberately do not do

No CV upload, no degree-recognition mapping, no real-time alerts in v1. No public launch during the private beta.

We do not rank jobs by who pays us, and companies cannot pay to hide a layoff signal. The free core stays free.

Privacy

When the private beta opens, accounts will use Clerk and product analytics will run on PostHog. Saved searches will store your filter choices and an optional digest preference. We do not sell personal data, and we do not upload CVs in v1 because we do not collect them.

Job data is public company content. If you are a company and want a listing corrected or removed, email hello@expat.jobs.