curl --request POST \
--url https://api.automindz.co/v1/scrape-arbeitsagentur-jobs/async \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Maler",
"location": "Berlin",
"radius": 25,
"job_type": "full-time",
"max_pages": 1,
"include_recruiter_details": true
}
'import requests
url = "https://api.automindz.co/v1/scrape-arbeitsagentur-jobs/async"
payload = {
"title": "Maler",
"location": "Berlin",
"radius": 25,
"job_type": "full-time",
"max_pages": 1,
"include_recruiter_details": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Maler',
location: 'Berlin',
radius: 25,
job_type: 'full-time',
max_pages: 1,
include_recruiter_details: true
})
};
fetch('https://api.automindz.co/v1/scrape-arbeitsagentur-jobs/async', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.automindz.co/v1/scrape-arbeitsagentur-jobs/async",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Maler',
'location' => 'Berlin',
'radius' => 25,
'job_type' => 'full-time',
'max_pages' => 1,
'include_recruiter_details' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.automindz.co/v1/scrape-arbeitsagentur-jobs/async"
payload := strings.NewReader("{\n \"title\": \"Maler\",\n \"location\": \"Berlin\",\n \"radius\": 25,\n \"job_type\": \"full-time\",\n \"max_pages\": 1,\n \"include_recruiter_details\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.automindz.co/v1/scrape-arbeitsagentur-jobs/async")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Maler\",\n \"location\": \"Berlin\",\n \"radius\": 25,\n \"job_type\": \"full-time\",\n \"max_pages\": 1,\n \"include_recruiter_details\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.automindz.co/v1/scrape-arbeitsagentur-jobs/async")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Maler\",\n \"location\": \"Berlin\",\n \"radius\": 25,\n \"job_type\": \"full-time\",\n \"max_pages\": 1,\n \"include_recruiter_details\": true\n}"
response = http.request(request)
puts response.read_body{
"request_id": "run_ba_abc123",
"status": "QUEUED"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Scrape Arbeitsagentur jobs
Search the Bundesagentur für Arbeit job board and extract structured listings, optionally with recruiter contacts
curl --request POST \
--url https://api.automindz.co/v1/scrape-arbeitsagentur-jobs/async \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Maler",
"location": "Berlin",
"radius": 25,
"job_type": "full-time",
"max_pages": 1,
"include_recruiter_details": true
}
'import requests
url = "https://api.automindz.co/v1/scrape-arbeitsagentur-jobs/async"
payload = {
"title": "Maler",
"location": "Berlin",
"radius": 25,
"job_type": "full-time",
"max_pages": 1,
"include_recruiter_details": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Maler',
location: 'Berlin',
radius: 25,
job_type: 'full-time',
max_pages: 1,
include_recruiter_details: true
})
};
fetch('https://api.automindz.co/v1/scrape-arbeitsagentur-jobs/async', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.automindz.co/v1/scrape-arbeitsagentur-jobs/async",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Maler',
'location' => 'Berlin',
'radius' => 25,
'job_type' => 'full-time',
'max_pages' => 1,
'include_recruiter_details' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.automindz.co/v1/scrape-arbeitsagentur-jobs/async"
payload := strings.NewReader("{\n \"title\": \"Maler\",\n \"location\": \"Berlin\",\n \"radius\": 25,\n \"job_type\": \"full-time\",\n \"max_pages\": 1,\n \"include_recruiter_details\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.automindz.co/v1/scrape-arbeitsagentur-jobs/async")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Maler\",\n \"location\": \"Berlin\",\n \"radius\": 25,\n \"job_type\": \"full-time\",\n \"max_pages\": 1,\n \"include_recruiter_details\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.automindz.co/v1/scrape-arbeitsagentur-jobs/async")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Maler\",\n \"location\": \"Berlin\",\n \"radius\": 25,\n \"job_type\": \"full-time\",\n \"max_pages\": 1,\n \"include_recruiter_details\": true\n}"
response = http.request(request)
puts response.read_body{
"request_id": "run_ba_abc123",
"status": "QUEUED"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}include_recruiter_details to add recruiter contact details (email / phone / name) to each job where the board has them. Each returned job carries a recruiter_details_included flag: true only when include_recruiter_details added recruiter details (email, phone or name) to that job that it did not already have, false otherwise.
The pipeline runs asynchronously. Use the returned request_id to poll for results.
include_recruiter_details enabled, expect a few extra seconds per job. Poll every 15–30 seconds.How it works
- Builds the Arbeitsagentur search from
title(was),location(wo),radius(umkreis), and optionaljob_type - Pages through the official search API up to
max_pages, de-duplicating by reference number - Optionally fetches each job’s detail page for the full description (
include_details) - When
include_recruiter_detailsis true, looks up the recruiter details per job and fillshiring_manager_email/hiring_manager_phone/hiring_manager_name - Returns structured job listings (company, search URLs, totals, and the jobs array)
title or location. radius only applies when a location is set.Response
The request is accepted immediately and returns arequest_id — no jobs are returned here. Poll Get Arbeitsagentur job scrape status with that id to retrieve the results.
{
"request_id": "run_ba_abc123",
"status": "QUEUED"
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Job title / keyword to search (BA was). At least one of title or location is required.
City or place to search around (BA wo). At least one of title or location is required.
Search radius in km around location (BA umkreis). Ignored when no location.
x >= 0Working-time filter, mapped to BA arbeitszeit (full-time→vz, part-time→tz, mini-job→mj, home-office→ho).
full-time, part-time, mini-job, home-office Number of search result pages to fetch.
1 <= x <= 20Results per page.
1 <= x <= 100Fetch each job's detail page for the full description (slower).
When true, add recruiter details (email/phone/name) to each job where the board has them. Slower. Off by default.