Skip to content

Job feeds

Every live job on Level, as XML, in the <jobs>/<job> format Adzuna and Careerjet read as-is, and in the formats of Jooble, Talent.com and Thribee. The underlying data is refreshed every six hours and each file is regenerated at most an hour after it was last built, so a feed is never more than a few hours old. Expired postings are removed the same day. Files are served with gzip, ETag and Last-Modified, so a conditional fetch of an unchanged file costs nothing.

Your aggregator's feed (start here)

Each aggregator gets its own set of URLs in the format of its own specification. The full catalogue is split into 128 files, each well under 10 MB; together they contain every job exactly once, and a job always stays in the same file. The jobs posted in the last 7 days are also split into 16 small files for routine fetches: import the full catalogue once, then poll the recent files. Job titles are published exactly as the employer wrote them, in every format.

The size, job count and build time of every file are listed in a machine-readable index, filterable by aggregator: https://jobsbylevel.com/feeds/index.json (for example ?destination=jooble).

Original URLs (unchanged)

The URLs below were handed out before the per-aggregator files existed. They keep working exactly as before; new integrations should take the files above.

Recent jobs (start here for routine fetches)

Jobs posted in the last 7 days, and nothing else, in one file. On busy weeks it can exceed 50 MB; the 16 recent files above hold the same jobs in smaller pieces.

https://jobsbylevel.com/feeds/jobs/recent.xml

Full catalogue

One file, every job, several hundred megabytes uncompressed: above the import limit of most aggregators. Take the split files above if yours caps file size.

https://jobsbylevel.com/feeds/jobs.xml

Split feeds (16 files)

The same catalogue, split into 16 files. Together they contain every job exactly once; as the catalogue grew, some passed 30 MB, which is why the 128-file split above exists. A job always stays in the same file, whatever is added to or removed from the catalogue in between, so the files can be fetched hours apart without any job being missed or counted twice.

Trovit format (Thribee)

The same catalogue in the <trovit>/<ad> format Thribee reads, with their field names. Same split into 16 files for the initial import, same 7-day file for routine fetches. Dates are written as YYYY/MM/DD HH:MM:SS, salary as free text, and the ISO country code travels in <region>.

https://jobsbylevel.com/feeds/jobs/trovit/recent.xml

What is in a feed, and what is not

Each job carries its title, company, full HTML description, location and ISO 3166-1 country code, remote flag, employment type, salary range when the posting states one, category, posted date and expiry date. Jobs without a resolvable country, without a title, or with a description under 100 characters are left out rather than published incomplete. So are jobs reposted by an intermediary “on behalf of a partner company”, because the actual employer is not named. The XML comment at the end of every file reports how many jobs were published and how many were left out, by reason.

Two addresses travel with every job. <url> is the Level page for the posting, which carries the level and how it was assigned. <apply_url> is the employer's own application address, as the employer's applicant tracking system publishes it: the shortest path to the employer we know of. It is written only when it parses and is served over HTTPS, so it is absent rather than wrong. Which of the two you send a candidate to is your call.

<level> is the level we assign the job, 1 to 4, with <level_label> carrying the printed form. How the level is derived, and how often it is right, is written up on our method page.

How jobs are ordered, and what cannot buy a place

Every file is ordered by job identifier and by nothing else. We sell paid postings and boosts on Level itself; neither moves a job in these files, neither adds a job that would not otherwise be here, and there is no promoted or sponsored field in the format. The full catalogue is the complete inventory of live jobs, not a selection: a job is absent only if it expired or failed one of the three completeness checks above, and the count of each is published in the comment at the end of the file.

Contact

Need another format (Indeed, ATS-specific), a country-specific file, or a different refresh rate? Write to us and we will add it.