Arbeitnow Jobs Scraper
Scrape Arbeitnow jobs in Germany and Europe. Title, company, location, remote and visa-sponsorship flags, tags, description, apply URL. Pay per job.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
maxItems,searchQueries,visaSponsorshipOnly(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0019 per job = $1.9 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Job returned | One job posting returned in the dataset. Postings dropped by your filters, diagnostics and the labelled sample row are not charged. | $0.0019 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-20, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
maxItems | Stop after this many postings. Set it on its own and you get the newest postings on the board; add any filter below and you get the newest that match. Arbeitnow carries roughly the last week of listings, about 7,500 postings when this was measured, so asking for more than the board holds simply returns everything it has. | integer |
searchQueries | Words that must appear in the posting - title, company, location, tags or the description text. A posting matches if it contains every word in one of your phrases, so "data engineer" needs both words but "python" needs only the one. German and English both work, since the board carries both. Worth knowing: Arbeitnow's feed has no search parameter, so this filter runs on our side after the postings are read. Anything that does not match is dropped and never charged - you only pay for the postings you get back. | array |
visaSponsorshipOnly | Return only the postings Arbeitnow flags as offering visa sponsorship. This is the board's own flag, not a guess of ours, and it is the list behind its "Visa Sponsorship Jobs in Germany" page. Leave it off and you still get the flag: every row carries visaSponsorship as true or false either way. | boolean |
remoteOnly | Keep only postings Arbeitnow marks as remote. That flag is sparse - around 5 in 100 postings on a typical page - because most of this board is on-site work in Germany. | boolean |
location | Keep only postings whose location text contains this, case-insensitive. "Berlin", "München", "Hamburg". The location on Arbeitnow is whatever the employer typed, so it ranges from "Stuttgart" to "Berlin, Berlin, Germany" to an empty string. A plain city name is the reliable way to use this. Postings with no location at all cannot match and are dropped uncharged. | string |
jobTypes | Keep only postings carrying one of these types. Arbeitnow's types come from the employer and are not a fixed list - the common ones are "Full time", "Part time", "Permanent", "Experienced", "Entry", "Intern", "Working student", "Contract" and "Fixed term", and some employers write theirs in German. Matching is partial and case-insensitive, so "student" catches "Working student". | array |
tags | Keep only postings carrying at least one of these tags, as Arbeitnow shows them on the posting: "Engineering", "Sales", "IT", "Marketing", "Data" and so on. A tag has to match whole, case-insensitive, so "IT" does not catch "Security", and "Engineering" does not catch "Software Engineering" unless you list both. Arbeitnow's feed cannot filter on tags, so this runs on our side after the postings are read, and the run reads at most "How far back to read" pages. Postings without the tag are dropped and never charged, and a rare tag can come back with fewer postings than you asked for. | array |
postedWithin | Only postings Arbeitnow listed inside this window. Note this is the date the board picked the posting up, which is the only date available before the job page is read - turn on "Read each job page" below if you need the date the employer actually published it. The two can be weeks apart. | string |
maxPagesScanned | How many pages of the board to read through while looking for matches. Only applies when you have set a keyword, location, job type, remote or date filter - those are applied on our side, so a search that matches nothing would otherwise walk the whole board and still hand you nothing. The default of 10 pages covers the newest postings, which is plenty for any keyword people actually search for - "engineer" alone matches a good share of page one. Raise it when you are after something rare and want the actor to dig further back; the board tops out around 7,500 postings in total, which is about 72 pages. Pulls with no filters ignore this setting and simply read until they have the number you asked for. | integer |
includeDescription | Keep the full posting text, as HTML and as plain text. It arrives in the same request as everything else, so this costs nothing extra and changes nothing about the charge - it only makes the rows bigger. Turn it off if you are feeding a spreadsheet. | boolean |
includeJobDetails | Fetches each posting's own page for the things the feed leaves out: the date the employer published it, the date it expires, a normalised employment type, a postal code, and a salary where one is published. Be realistic about the salary part. On a random sample of 14 postings, 14 had a real publication date and an expiry, 4 had a postal code, and 1 published a salary. Most German employers do not print a number. This also adds one request per posting, so a large run takes noticeably longer. | boolean |
resolveApplyUrl | Every row already carries Arbeitnow's apply link. Turn this on and the actor follows it one hop to record where the application actually lands - the employer's own page on Greenhouse, Lever, Personio, Workday and so on - in employerApplyUrl, plus the system's name in atsProvider. It is one small request per posting and it is what you want if you are building an application pipeline rather than a job list. | boolean |
What you get
A structured dataset — each result includes fields like:
titlecompanyNamelocationcountryCodeisRemotevisaSponsorshipjobTypestagssalaryTextlistedAtpostedAtjobUrlapplyUrlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
Arbeitnow Jobs Scraper: jobs in Germany with the board's own visa-sponsorship flag
Give it keywords, a city or a date window, and it returns Arbeitnow job postings as rows, most of them in Germany. Each row carries the title, company, location, the board's own remote and visa-sponsorship flags, job types, tags and the full description, and two optional lookups add the employer's real publication date and their own application page. It is a board, not an archive: Arbeitnow holds roughly the last week of postings, about 7,500 when measured in September 2026, so last month's jobs are not there to pull.
| Input | Keywords, a location, job types or a date window, or just a number of postings |
| Output | One row per job posting |
| Ceiling | 10,000 per run, though the board itself holds about a week of postings |
| Account needed | None |
| Price | $1.90 per 1,000 jobs, flat on every plan |
🔍 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.
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 below was published on 21 August and listed on 19 September.
Pulling the newest 50 postings took about five seconds on a test run, and 2,000 took about five minutes.
📥 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. Called through the API with an empty input, it writes one free sample row and stops.
| 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 | What it is |
|---|---|
jobId, slug, jobUrl, companyUrl | The posting's slug, which doubles as its id, and its page and the company's page on Arbeitnow. |
title, companyName | As the employer wrote them. |
applyUrl, employerApplyUrl, atsProvider | Arbeitnow's apply link and, with resolveApplyUrl on, where it lands and which hiring system that is. |
location, city, region, countryCode, postalCode | The location as typed, split where the text allows and null where it does not. With includeJobDetails on, the address Arbeitnow publishes fills the gaps. |
isRemote, visaSponsorship | The board's own flags. |
jobTypes, employmentType, tags | The board's type labels, a normalised type from the job page, and the tags. |
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText | Only from the job page, and only when the employer published one. Null means not published, not zero. |
postedAt, validThrough, listedAt | The employer's publication date and the expiry, both from the job page, and when Arbeitnow listed it. |
descriptionHtml, descriptionText | The posting text, while includeDescription is on. |
searchQuery, page, position, scrapedAt | Which of your phrases matched, where the posting sat on the board, and when it was read. |
🧾 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. |
If the board stops answering partway through, you keep what already arrived and the status message names the code.
▶️ How to run it
1. Open Arbeitnow Jobs Scraper and click Try for free. 2. Set How many postings. 3. Add phrases under Keywords, or tick Only jobs that sponsor a visa or Only remote jobs. 4. For the employer's own date and application page, turn on Read each job page and Follow the apply link. 5. 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.
💰 How much does it cost?
$1.90 per 1,000 jobs, flat on every Apify plan. That is $0.0019 a posting.
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 people use it for
- Building a list of employers in Germany that sponsor visas right now, with their real application pages from
resolveApplyUrl.
- 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 German employers apply through, straight off
atsProvider.
🚧 What it does not do
- No archive. Roughly a week of postings, nothing older.
- 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, around 5 postings in 100, 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. Most sponsored roles are advertised in English, so
visaSponsorshipOnlygets
English speakers close.
- Mostly Germany. Austria, Switzerland and the Netherlands turn up, US jobs hardly at all.
🧭 Which jobs scraper do you need?
| If you want | Use |
|---|---|
| Jobs in Germany with the board's own visa-sponsorship flag | This one |
| XING jobs in Germany, Austria and Switzerland, marked remote, hybrid or on-site | XING Jobs Scraper |
| StepStone jobs in Germany, Austria, the UK, the Netherlands and Belgium | StepStone Jobs Scraper |
| Indeed jobs on its 11 country sites | Indeed Jobs Scraper |
| Public LinkedIn jobs by keyword and location | LinkedIn Jobs Scraper |
| Remote jobs, with the region you must live in | 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.
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.
Can I run it every morning? Yes. Schedule it with postedWithin: "day" and each run takes the last 24 hours and stops.
🆘 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.