Arbeitnow Jobs Scraper - Germany & Visa Sponsorship
Pricing
from $1.84 / 1,000 jobs
Arbeitnow Jobs Scraper - Germany & Visa Sponsorship
Scrape Arbeitnow jobs from its boards for Germany, the UK, France and Switzerland. Each row has the title, company, location, the board's remote and visa-sponsorship flags, job types, tags and the full description. Lookups add the employer's own date and apply link. $1.90 per 1,000 jobs.
Pricing
from $1.84 / 1,000 jobs
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
8 days ago
Last modified
Categories
Share
Pull Arbeitnow job postings as rows, with the board's own visa-sponsorship flag on every one: the title, company, location, remote flag, job types, tags and the full description, filtered by keywords, a city or a date window. Two optional lookups add the date the employer really published the job and their own application page.
Two things to know before you build on it. Arbeitnow is a board, not an archive: it holds roughly the last week of postings, about 7,500 when measured in September 2026. And its feed now mixes four boards, Germany, the UK, France and Switzerland. On 2 October 2026, 208 of the newest 651 postings came from the German one.
| Input | Keywords, a location, job types, tags or a date window, or just a number of postings |
| Output | One row per job posting: title, company, location, remote and visa flags, job types, tags, description |
| Ceiling | 10,000 per run, though the board itself holds about a week of postings |
| Speed | About 5 seconds for the newest 50 postings, about 5 minutes for 2,000. The job-page lookups add time |
| Account needed | None |
| Price | $1.90 per 1,000 jobs on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 2,600 |
🔍 What Arbeitnow Jobs Scraper does
The visa flag is the field worth being exact about. It is Arbeitnow's own flag, the list behind its
visa sponsorship jobs page, not a guess of ours. visaSponsorshipOnly reads that list directly.
Leave it off and every row still carries visaSponsorship as true or false. It is null only on a
run where the list could not be read.
What the flag tells you depends on the board. On the German board it is selective: 3 of the newest
208 German postings carried it on 2 October 2026. On the UK, French and Swiss boards every posting
did. If you want employers in Germany that sponsor, keep the rows whose jobUrl is on
arbeitnow.com.
Arbeitnow filters on visa sponsorship itself and on nothing else. Keywords, location, remote, job
type, tags and the date window are applied here, after the postings are read, and a posting they
drop is never charged. Because of that, a keyword that matches nothing could walk the whole board,
so a filtered run reads the newest 10 pages and tells you when it stopped there. Raise
maxPagesScanned for rare terms.
Two dates, and they are not the same one. listedAt is when Arbeitnow picked the posting up.
postedAt is when the employer published it, and it only arrives with Read each job page on.
The row further down was published on 21 August and listed on 19 September.
📋 What data you get from each Arbeitnow job
| What you get | Field |
|---|---|
| The posting's id, its page and the company's page on Arbeitnow | jobId, slug, jobUrl, companyUrl |
| Title and company, as the employer wrote them | title, companyName |
| Arbeitnow's apply link, and with the lookup on, the employer's own page and the hiring system behind it | applyUrl, employerApplyUrl, atsProvider |
| The location as typed, split into city, region, country and postcode where the text allows | location, city, region, countryCode, postalCode |
| The board's remote and visa-sponsorship flags | isRemote, visaSponsorship |
| The board's type labels, a normalised type and the tags | jobTypes, employmentType, tags |
| A salary, when the employer published one | salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText |
| The employer's publication date, the expiry, and when Arbeitnow listed it | postedAt, validThrough, listedAt |
| The posting text, as HTML and as plain text | descriptionHtml, descriptionText |
| Which of your phrases matched, where the posting sat on the board, when it was read | searchQuery, page, position, scrapedAt |
▶️ How to scrape Arbeitnow jobs
- Open Arbeitnow Jobs Scraper and click Try for free.
- Set How many postings.
- Add phrases under Keywords, or tick Only jobs that sponsor a visa or Only remote jobs.
- For the employer's own date and application page, turn on Read each job page and Follow the apply link.
- Click Start, then download the dataset as JSON, CSV or Excel.
The form arrives with software engineer and 50 already filled in, so a run started without editing
it is a real search. Called through the API with an empty input, it writes one free sample row and
stops.
💰 How much does it cost to scrape Arbeitnow jobs?
$1.90 per 1,000 jobs on the Free plan, which is $0.0019 a posting, a little less on paid plans. On the free plan, the $5 Apify gives you each month covers about 2,600 postings.
Not charged: the sample row, diagnostic rows, and every posting a filter drops. A posting is never returned twice in one run. The description and both lookups add no charge of their own, only time. If you set a maximum cost for the run, it stops when that is reached.
📥 What you give it
{"maxItems": 200,"visaSponsorshipOnly": true,"searchQueries": ["software engineer", "data analyst"],"location": "Berlin","postedWithin": "week","includeJobDetails": true,"resolveApplyUrl": true}
Set maxItems on its own and you get the newest postings. Add any filter and you get the newest
that match.
| Field | When left out | What it is |
|---|---|---|
maxItems | 50 | 1 to 10,000 postings. |
searchQueries | none | Phrases to look for in the title, company, location, tags or description. A posting matches if it holds every word of one phrase, so "data engineer" needs both words. German and English both work. |
visaSponsorshipOnly | off | Only postings Arbeitnow flags for visa sponsorship. |
remoteOnly | off | Only postings the board marks remote. |
location | none | Text the location must contain, case-insensitive. A plain city name works best: Berlin, München. Postings with no location cannot match. |
jobTypes | none | Partial, case-insensitive match on the board's type labels, so student catches "Working student". |
tags | none | Postings carrying at least one of these tags, such as Engineering, Sales or IT. A tag matches whole and case-insensitive, so IT does not catch "Security". A rare tag can come back with fewer postings than asked, since a filtered run reads at most maxPagesScanned pages. |
postedWithin | any time | day, 3days, week or 2weeks, measured on listedAt. |
maxPagesScanned | 10 | 1 to 120. How far back a filtered run reads. |
includeDescription | on | The posting text as HTML and as plain text. No extra charge. Turn it off for smaller rows. |
includeJobDetails | off | Reads each job page for the publication date, expiry, a normalised employment type, the address and a salary where one is published. One extra request per posting, so a big run is slower. |
resolveApplyUrl | off | Follows the apply link one hop and records the employer's own page and the hiring system behind it. |
proxyConfiguration | not needed | Optional. Only for sending the requests through servers of your own, which are used exactly as given. |
📤 What you get back
A real row from a run on 20 September 2026 with both lookups on, the description cut short:
{"jobId": "infrastructure-engineer-deployments-munich-392732","slug": "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?#apply?utm_source=arbeitnow.com&_pc=arbeitnow.com","atsProvider": "Personio","location": "Munich","city": "Munich","region": "BAVARIA","countryCode": "DE","postalCode": null,"isRemote": false,"visaSponsorship": true,"jobTypes": ["Experienced", "Permanent", "Full time"],"employmentType": "FULL_TIME","tags": ["Infrastructure"],"salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"salaryText": null,"postedAt": "2026-08-21T17:27:58+02:00","listedAt": "2026-09-19T17:09:53.000Z","validThrough": "2026-10-31T19:09:53+01:00","descriptionHtml": "<br><strong>Responsibilities</strong>...","descriptionText": "ResponsibilitiesAs an Infrastructure Engineer, you will be responsible for the reliable delivery and deployment of our software systems...","searchQuery": null,"page": 1,"position": 3,"scrapedAt": "2026-09-20T01:11:17.527Z"}
| Field | How to read it |
|---|---|
jobUrl | Also tells you the board: arbeitnow.com is the German one, and .co.uk, .fr and .ch the others. |
employerApplyUrl, atsProvider | Only with resolveApplyUrl on: where the application really lands, and which hiring system that is. |
countryCode, city, region | Split out of the location text where it allows, and null where it does not. With includeJobDetails on, the address Arbeitnow publishes fills the gaps. |
salaryMin to salaryText | Only from the job page, and only when the employer published one. Null means not published, not zero. |
postedAt, validThrough | Only with includeJobDetails on. listedAt is always there. |
descriptionHtml, descriptionText | Present while includeDescription is on. |
🧾 Reading the output
| Row | How to spot it | Charged |
|---|---|---|
| A job | no _sample and no _diagnostic field | yes |
| The sample row | _sample: true and charged: false. Only when the input asks for nothing at all | no |
| A diagnostic | _diagnostic: true, ok: false, charged: false, and an errorCode | no |
Real job rows carry no charged field. The sample row looks like a job, jobId and all, so drop
rows with _sample or _diagnostic and you are left with the jobs you paid for.
errorCode | What it means |
|---|---|
NO_RESULTS | Nothing matched. The row says how many postings were read, how many each filter dropped (breakdown), and whether the run stopped at maxPagesScanned (stoppedEarly). |
VISA_LIST_UNAVAILABLE | You asked for sponsored jobs only and the sponsorship list could not be read on that run. Try again in a few minutes. |
RATE_LIMITED, HTTP_ERROR, NETWORK, NOT_FOUND, BAD_PAYLOAD | Arbeitnow could not be read, so nothing came back. Worth one re-run a few minutes later. |
TIME_LIMIT | The run got close to its time limit and stopped on its own. The jobs delivered before that are complete and charged. Give the run more time, or ask for fewer jobs, to get the rest. The run ends as failed only when the stop came before any job did. |
If the board stops answering partway through, you keep what already arrived and the status message names the code.
💡 What people use it for
- A list of employers Arbeitnow flags for visa sponsorship, with their real application pages from
resolveApplyUrl. Keep the arbeitnow.com rows if it has to be Germany. - A morning feed of the last day's postings. With
postedWithinset todaythe run stops reading once it is past the window, so it does not re-read the whole board every day. - Seeing which hiring systems employers apply through, straight off
atsProvider.
🚧 What it does not do
- No archive. Roughly a week of postings, nothing older.
- No country filter. The German, UK, French and Swiss boards arrive mixed, in blocks of about 50.
jobUrlsays which board a posting came from, whilecountryCodeis often null because the location is free text. - Salaries are rare. On a sample of 14 job pages, one published a salary. Most German employers do not print a number, and this never makes one up.
- The remote flag is the board's, and it is sparse, 50 of the newest 651 postings on 2 October
2026, and now and then wrong: one posting located "Remote-US, Canada" carried
isRemote: false. If remote matters, read the location and the description too. locationis free text. Employers type it, so it runs fromStuttgarttoBerlin, Berlin, Germanyto nothing at all.- The visa list is today's. Sponsored roles that have aged off the board are gone.
- No salary or language filter.
- It is not an official Arbeitnow tool. Dami's Studio is independent and is not affiliated with or endorsed by Arbeitnow, or by any other company named on this page.
🧭 Which job scraper do you need?
| If you want | Use |
|---|---|
| Arbeitnow's postings for Germany, the UK, France and Switzerland, with its visa-sponsorship flag | This one |
| Jobs in Germany, Austria and Switzerland, marked remote, hybrid or on-site | XING Jobs Scraper |
| Every open job at companies you name, read from their own hiring system | Career Site Jobs Scraper |
| Public LinkedIn jobs by keyword and location | LinkedIn Jobs Scraper |
| Remote jobs, with the region the employer hires from | Remotive Jobs Scraper |
❓ Questions people ask
Do I need an Arbeitnow account or a key?
No. Nothing to sign into, nothing to paste.
Can I get only jobs that sponsor a visa?
Yes, tick visaSponsorshipOnly. Leave it off and you can split the rows yourself on
visaSponsorship. Read the note on the four boards first, because outside Germany the flag sits on
every posting.
Why is postedAt empty?
It only fills with Read each job page on. listedAt is always there, but it is when the board
picked the posting up, sometimes weeks after the employer published it.
Why did I get fewer jobs than I asked for?
Either the board ran out of matching postings, or a filtered run reached maxPagesScanned. The
run's log says which, and a NO_RESULTS row shows how many postings each filter dropped.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made
code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/arbeitnow-jobs-scraper. Either way the
run happens on your Apify account at the same price.
Is scraping Arbeitnow legal?
It reads the public job board, the same postings any visitor sees, with no login. If a posting names a person, that is personal data under GDPR and similar laws, so have a reason for keeping it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the input you used and the run ID, plus the diagnostic row if you got one.