Arbeitnow Jobs Scraper - Germany & Visa Sponsorship avatar

Arbeitnow Jobs Scraper - Germany & Visa Sponsorship

Pricing

from $1.90 / 1,000 job returneds

Go to Apify Store
Arbeitnow Jobs Scraper - Germany & Visa Sponsorship

Arbeitnow Jobs Scraper - Germany & Visa Sponsorship

Scrape Arbeitnow job listings across Germany and Europe: title, company, location, remote flag, the board's own visa-sponsorship flag, job types, tags, full description, listing date and apply URL. Optional lookups add the real publication date, expiry and the employer's own application link.

Pricing

from $1.90 / 1,000 job returneds

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Arbeitnow Jobs Scraper

Pulls job postings from Arbeitnow, the German job board whose whole pitch is visa sponsorship and English-speaking roles. You get the title, company, location, the board's remote flag, its visa-sponsorship flag, job types, tags, the full description and a link that goes straight to the employer's application page.

The visa flag is the reason most people come here, so start with the honest version of it: it is Arbeitnow's own flag, not our inference. When this was written the board was flagging 242 postings for sponsorship out of roughly 7,500 live listings. Every row this actor returns carries visaSponsorship as true or false, and you can filter down to only the sponsored ones.

What this actually is

Arbeitnow is a job board, not an archive. It holds about 7,500 postings covering roughly the last week and refreshes hourly. That shapes everything below:

  • You can pull the newest 50 postings in about five seconds.
  • You can pull 2,000 of them in about five minutes.
  • You cannot pull last month. It is not there to pull.

Most of the postings are in Germany. Austria, Switzerland, the Netherlands and the rest of the EU show up, and the occasional fully-remote role from further out, but if you are looking for a Germany-and-neighbours feed this is the right board and if you are looking for US jobs it is not.

What a row looks like

A real one, trimmed:

{
"jobId": "infrastructure-engineer-deployments-munich-392732",
"title": "Infrastructure Engineer - Deployments (d/f/m)",
"companyName": "Arculus",
"companyUrl": "https://www.arbeitnow.com/jobs/companies/arculus",
"jobUrl": "https://www.arbeitnow.com/jobs/companies/arculus/infrastructure-engineer-deployments-munich-392732",
"applyUrl": "https://www.arbeitnow.com/jobs/companies/arculus/infrastructure-engineer-deployments-munich-392732/apply",
"employerApplyUrl": "https://arculus.jobs.personio.de/job/2763879",
"atsProvider": "Personio",
"location": "Munich",
"city": "Munich",
"region": "BAVARIA",
"countryCode": "DE",
"isRemote": false,
"visaSponsorship": true,
"jobTypes": ["Experienced", "Permanent", "Full time"],
"employmentType": "FULL_TIME",
"tags": ["Infrastructure"],
"salaryMin": null,
"salaryMax": null,
"postedAt": "2026-08-21T17:27:58+02:00",
"listedAt": "2026-09-19T17:09:53.000Z",
"validThrough": "2026-10-31T19:09:53+01:00",
"descriptionText": "Responsibilities. As an Infrastructure Engineer, you will be r...",
"descriptionHtml": "<p>Responsibilities</p>..."
}

That is a real row, and look at its two dates: the employer published it on 21 August, the board listed it on 19 September. Twenty-nine days apart. More on that below.

employerApplyUrl, atsProvider, employmentType, postedAt, validThrough and postalCode only appear when you switch on the two optional lookups described further down. Everything else is there on every row.

Two dates, and they are not the same date

This one trips people up, so it gets its own heading.

  • listedAt is when Arbeitnow picked the posting up.
  • postedAt is when the employer actually published it.

They can be weeks apart. One posting measured here was published on 30 July and listed on 19 September, a gap of seven weeks. If you are deduplicating against your own database or reporting on hiring velocity, postedAt is the one you want, and it only arrives when Read each job page is on.

The Listed within filter works on listedAt, because that is the only date available before the job pages are read.

Input

Set maxItems on its own and you get the newest postings. Add anything else and you narrow it.

{
"maxItems": 200,
"visaSponsorshipOnly": true,
"searchQueries": ["software engineer", "data analyst"],
"location": "Berlin",
"postedWithin": "week",
"includeJobDetails": true,
"resolveApplyUrl": true
}
FieldWhat it does
maxItemsHow many postings to return.
searchQueriesWords that must appear in the title, company, location, tags or description. Every word in a phrase has to match.
visaSponsorshipOnlyOnly postings the board flags for sponsorship.
remoteOnlyOnly postings the board marks remote. Read the caveat below first.
locationCase-insensitive substring of the location text.
jobTypesPartial match against the board's own type labels.
postedWithin24 hours, 3 days, a week or 2 weeks, measured on listedAt.
maxPagesScannedHow deep to dig when a filter is set. Default 10 pages, about 1,300 postings.
includeDescriptionThe posting text, on by default. Costs nothing extra.
includeJobDetailsReads each job page for the real publication date, expiry, employment type, postal code and salary.
resolveApplyUrlFollows the apply link to the employer's own page and records the ATS.

Why some filters are ours and one is the board's

Arbeitnow's feed accepts exactly one filter: visa sponsorship. We checked the rest. Keyword, location, remote, job type and tags were each sent and compared against a control fetched in the same moment, and they come back byte-for-byte identical to the unfiltered feed. The board ignores them.

So visaSponsorshipOnly is applied by Arbeitnow, and every other filter is applied here, after the postings are read. Postings dropped by our filters are never charged. You pay for rows you receive, not rows we looked at.

That is also why maxPagesScanned exists. A keyword that matches nothing would otherwise send the run through all 7,500 postings to hand you an empty result. The default stops at 10 pages, the newest ~1,300 postings, which is plenty for any keyword people actually search for. Raise it when you are hunting something rare.

The two optional lookups

Both are off by default, because both add one request per posting.

Read each job page (includeJobDetails) pulls the structured data off the posting's own page. On a random sample of 14 postings it filled in:

FieldHit rate
postedAt (real publication date)14 of 14
validThrough (expiry)14 of 14
employmentType (normalised)14 of 14
postalCode4 of 14
salaryMin / salaryMax1 of 14

Read that salary row twice before you plan around it. Roughly one posting in fourteen publishes a number. Most German employers do not print salaries, and no scraper can produce a figure the employer never wrote down. When it is there you get the currency, the period and the range; the rest of the time those fields are null, and null means "not published", not "zero".

Follow the apply link (resolveApplyUrl) follows Arbeitnow's apply route one hop and records where it lands: employerApplyUrl plus atsProvider (Greenhouse, Lever, Personio, Workday and so on). This resolved 15 of 15 on the last test run. It is the field you want if you are building an application pipeline rather than a list.

What this does not do

  • It does not reach back beyond the board. Roughly a week, roughly 7,500 postings. No archive.
  • It does not invent a salary. See the table above.
  • The remote flag is the board's, and it is sparse. Around 5 postings in 100 carry it. It is also sometimes plain wrong in the employer's favour: one posting titled "AI Compiler Engineer" with the location "Remote-US, Canada" has the board's remote flag set to false. If remote matters to you, treat isRemote as a hint and read the location and the description too.
  • location is free text. Employers type it themselves, so it ranges from Stuttgart to Berlin, Berlin, Germany to Hamburg, Gotenstraße to an empty string. We split out city, region and countryCode where the text supports it and leave them null where it does not, rather than guessing. Turning on Read each job page replaces the guess with the address Arbeitnow publishes.
  • The visa list is the current one. It covers the postings the board is flagging now, not everything it has ever flagged. Older sponsored roles that have aged out of the feed are gone.
  • It does not log in anywhere, and it does not need a key from you.
  • It does not filter by salary band, because the underlying data is too thin to filter on.

Speed and size, measured

All on real runs, at the default memory:

RunRowsTime
Newest postings605 seconds
Keyword + both lookups on1514 seconds
Visa-sponsorship only104 seconds
Large pull2,0005 minutes

A run that matches nothing finishes in about 22 seconds and returns a diagnostic row explaining where the postings went: how many were read, how many each filter dropped, and whether it stopped at the page limit. That row is free.

What you pay for

One charge per job returned. That is the whole model.

Free, always:

  • the sample row you get from an empty input
  • every diagnostic row: no matches, a rate limit, a failure
  • every posting a filter drops before it reaches you
  • the description, whether you keep it or not
  • both optional lookups add no charge of their own

The current rate is on the Pricing tab of this listing.

FAQ

Does Arbeitnow have a public API? Yes, and this actor uses it. It is free, it needs no key, and it is updated hourly. What it does not give you is search, salary, the real publication date, an expiry date, a postal code or the employer's application URL, which is most of what this actor adds on top of it.

Can I get only jobs that sponsor a visa? Yes. Set visaSponsorshipOnly and you get the board's own sponsorship list. Leave it off and every row still tells you true or false, so you can sort or split them yourself.

Can I get only English-speaking jobs? Not as a filter. The board does not expose one. Most sponsored roles are advertised in English, so visaSponsorshipOnly gets you close. Otherwise use searchQueries against the description text.

Why did I get fewer jobs than I asked for? Either the board ran out of matching postings, or the run hit maxPagesScanned. The log says which, in plain words, and so does the status message.

Does it return duplicates? No. Postings are deduplicated by their slug within a run.

How fresh is this? Arbeitnow refreshes hourly and the newest posting is usually under an hour old. The feed is ordered newest first, so page one is the last few hours of listings.

Can I run it on a schedule? Yes. A daily run with postedWithin: "day" gives you the last 24 hours and stops reading as soon as it is past the window, so it does not re-read the whole board every morning.

Do I need a proxy? No. Leave the proxy settings alone. The actor already paces itself, because this is a free public feed that asks not to be hammered.

What happens if Arbeitnow rate-limits the run? It backs off, waits and tries again. If it still cannot read the feed, you get a diagnostic row saying so and nothing is charged.