Arbeitnow API: Free Job Board Endpoint, Limits & Examples

CleanJobData Engineering

TL;DR

Arbeitnow's job board API is a free, keyless GET endpoint at https://www.arbeitnow.com/api/job-board-api, with a separate UK endpoint at arbeitnow.co.uk. It returns 300 jobs per page, focused on Europe and Germany and sourced mostly from ATS platforms such as Greenhouse, SmartRecruiters, Join, Teamtailor, Recruitee and Comeet. The only documented filter is visa_sponsorship, and paging is a page parameter with no total count. Arbeitnow's terms require a link back to Arbeitnow.com and say the permission to use the API can be revoked at any time.

On this page

The Arbeitnow API is one free endpoint with no key: send GET https://www.arbeitnow.com/api/job-board-api and you get 300 jobs per page as JSON, newest first. There's a separate UK endpoint at https://www.arbeitnow.co.uk/api/job-board-api. The only documented filter is visa_sponsorship=true, and Arbeitnow's terms ask for a link back to Arbeitnow.com in exchange.

Arbeitnow is a Berlin-based job board focused on Europe, with an emphasis on visa sponsorship, remote and four-day-week roles. Its blog says the API's data comes mostly from applicant tracking systems: Greenhouse, SmartRecruiters, Join.com, Teamtailor, Recruitee and Comeet. This guide covers the endpoints, the full response, working code, and the terms and limits that matter before you build on it. Everything here was checked against Arbeitnow's own pages and live responses on November 1, 2026.

At a Glance

EndpointGET https://www.arbeitnow.com/api/job-board-api
UK endpointGET https://www.arbeitnow.co.uk/api/job-board-api
AuthNone, no key or signup
Page size300 jobs per page (meta.per_page)
Filtersvisa_sponsorship=true is the only one documented
Paging?page=, with links.next; no total count
Rate limitx-ratelimit-limit: 50 header; window not stated
TermsLink back to Arbeitnow.com required; access can be revoked

Getting Access

There's nothing to sign up for. Arbeitnow's blog post on the API says it "requires no API key," and every response includes a short notice in meta.terms:

This is a free public API for jobs, please do not abuse. I would appreciate linking back to the site. By using the API, you agree to the terms of service present on Arbeitnow.com

That last sentence matters, and it's covered under Terms and Usage below.

The Endpoint

curl "https://www.arbeitnow.com/api/job-board-api"
 
# Only jobs that offer visa sponsorship
curl "https://www.arbeitnow.com/api/job-board-api?visa_sponsorship=true"
 
# Second page
curl "https://www.arbeitnow.com/api/job-board-api?page=2"

Request Parameters

ParameterNotes
pagePage number, starting at 1
visa_sponsorshiptrue to return only jobs offering visa sponsorship

That's the whole documented list. remote is a field in the response, not a filter: when we sent remote=true, the first page still came back mixed, with only 9 of 300 jobs marked remote. Filter on job.remote in your own code instead. There's no keyword, location, company or date filter, so for anything more specific you fetch pages and filter client-side.

The Response

A response has three top-level keys: data, links and meta. The structure below is from a live response; the job values are trimmed:

{
  "data": [
    {
      "slug": "senior-backend-engineer-123456",
      "company_name": "Acme GmbH",
      "title": "Senior Backend Engineer",
      "description": "<p>We are looking for...</p>",
      "remote": false,
      "url": "https://www.arbeitnow.com/jobs/companies/acme/senior-backend-engineer-123456",
      "tags": ["Engineering"],
      "job_types": ["fulltime permanent"],
      "location": "Berlin, Berlin, Germany",
      "created_at": 1793537717
    }
  ],
  "links": {
    "first": "https://www.arbeitnow.com/api/job-board-api?page=1",
    "last": null,
    "prev": null,
    "next": "https://www.arbeitnow.com/api/job-board-api?page=2"
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "to": 300,
    "per_page": 300,
    "path": "https://www.arbeitnow.com/api/job-board-api",
    "terms": "This is a free public API for jobs, please do not abuse. ...",
    "info": "Jobs are updated every hour and order by the `created_at` timestamp. Use `?page=` to paginate. ..."
  }
}
FieldWhat it is
slugArbeitnow's job identifier, also the end of its URL
company_nameCompany name
titleJob title
descriptionFull description as HTML; in our responses it arrived HTML-escaped (&lt;p&gt;), so decode it before rendering
remoteBoolean remote flag
urlThe job's page on arbeitnow.com, not the employer's own posting
tagsCategory tags, such as Engineering or Product
job_typesFree-form strings, such as fulltime permanent or Experienced; often empty
locationOne display string, sometimes empty
created_atUnix timestamp in seconds

meta.info says jobs are updated every hour and ordered by created_at.

Code Examples

JavaScript (Node 18+)

async function fetchArbeitnowPage(page = 1, { visaSponsorship = false } = {}) {
  const params = new URLSearchParams({ page: String(page) });
  if (visaSponsorship) params.set("visa_sponsorship", "true");
 
  const res = await fetch(`https://www.arbeitnow.com/api/job-board-api?${params}`);
  if (!res.ok) throw new Error(`Arbeitnow API error: ${res.status}`);
 
  const { data, links } = await res.json();
  return { jobs: data, hasMore: Boolean(links.next) };
}
 
const { jobs } = await fetchArbeitnowPage(1);
const remoteJobs = jobs.filter((job) => job.remote); // remote is a field, not a filter
console.log(`${jobs.length} jobs on page 1, ${remoteJobs.length} remote`);

Python

import html
import requests
 
def fetch_arbeitnow_page(page: int = 1, visa_sponsorship: bool = False) -> dict:
    params = {"page": page}
    if visa_sponsorship:
        params["visa_sponsorship"] = "true"
    res = requests.get("https://www.arbeitnow.com/api/job-board-api", params=params, timeout=30)
    res.raise_for_status()
    return res.json()
 
body = fetch_arbeitnow_page(1)
for job in body["data"]:
    description_html = html.unescape(job["description"])
    print(job["title"], "|", job["company_name"], "|", job["location"] or "no location")

Paging Through Results

Request ?page=1, then follow links.next until it's null or a page comes back empty. There's no total count: links.last is null and meta has no total, so you can't know up front how many pages exist.

Pages are big (300 jobs), and the feed only changes hourly, so fetch on a schedule, store what you get, and dedupe on slug. Re-reading the whole feed on every user request is exactly the abuse the meta.terms notice asks you to avoid.

Errors

Arbeitnow doesn't document error codes. Treat any non-200 response as a failure, back off, and retry later. Responses carry x-ratelimit-limit and x-ratelimit-remaining headers, so watch x-ratelimit-remaining and slow down before it reaches zero.

Limits and Pricing

The API is free. The only limit we could see is the x-ratelimit-limit: 50 response header; Arbeitnow doesn't say over what time window it applies. There's no published paid plan, but Arbeitnow's blog offers a "custom, private, tailored API endpoint" for a monthly fee, by email.

Terms and Usage

Read these before you put Arbeitnow data in a product:

  • Link back. Section 11 of Arbeitnow's terms of service says: "You also agree to providing a link back to Arbeitnow.com on your platform."
  • Revocable. The same section says the API is provided "as is" and "as available" and "We may revoke the permission to use API at any time."
  • Use license. Section 2.1 grants permission "to temporarily download one copy of the materials" and lists restrictions including using the materials "for any commercial purpose, or for any public display (commercial or non-commercial)" and mirroring them "on any other server." The terms don't say whether that clause covers API data, so ask Arbeitnow before you build a commercial or public product on it.

What the Arbeitnow API Doesn't Give You

  • Search filters. No keyword, location, company, salary or date filters; only visa_sponsorship.
  • Salary. There's no salary field.
  • Structured location. location is one string, sometimes empty, with no IDs or coordinates.
  • Direct employer apply links. url points to Arbeitnow's job page.
  • Company data. Only company_name: no logo, website or size.
  • Global coverage. The focus is Europe and Germany, plus the separate UK endpoint.

Alternatives

FAQ

Does the Arbeitnow API need an API key?

No. You call https://www.arbeitnow.com/api/job-board-api directly with no key, header or signup.

How many jobs does the Arbeitnow API return per request?

300 per page, according to meta.per_page in the response. Use ?page= to get the next 300, and stop when links.next is null.

Can I filter Arbeitnow jobs by remote or location?

Not server-side. The only documented filter is visa_sponsorship=true. remote is a boolean on each job, so filter on it in your code; the same goes for location.

What are the Arbeitnow API rate limits?

Responses carry an x-ratelimit-limit header of 50, but Arbeitnow doesn't say what time window it covers. Fetch on a schedule and cache, since the feed only updates hourly.

Can I use Arbeitnow API data commercially?

It isn't clearly granted. The terms require a link back to Arbeitnow.com, let Arbeitnow revoke API access at any time, and include a use license that restricts commercial use and public display, without saying whether that applies to the API. Ask Arbeitnow before launching a product on it.

Is there an alternative with global coverage and filters?

CleanJobData is a self-serve API with a free trial: search by title, location IDs, remote type, salary, experience level and more, using GET requests and a Bearer token. It sources from employer ATS platforms and career sites worldwide rather than from Arbeitnow's board. See the Jobs API reference or try it in the playground.