Platsbanken API: get Swedish job ads from Arbetsförmedlingen as data
Platsbanken, the job board of Arbetsförmedlingen (the Swedish Public Employment Service), carries most Swedish vacancies, and every ad is open data under CC0 through the JobTech JobSearch API. This guide shows how to query it with curl, where it stops (2,100 ads per search, taxonomy ids instead of names), and Platsbanken Jobs API: Sweden Arbetsförmedlingen, an Apify actor that returns clean rows with employer, organisation number, terms, skills and deadline, and can send you only new ads every morning.
Run it on Apify Opens the actor's page on apify.com. A free Apify account is needed to run it.
The data source
- The JobTech JobSearch API is the search engine behind Platsbanken. It needs no key and returns JSON.
- The ads are licensed CC0, so they can be reused commercially without conditions.
- Places and occupations use the JobTech Taxonomy: 21 counties (län), 290 municipalities and 2,100 occupations, each with a concept id such as
CifL_Rzy_Mkufor Stockholm county. - For a full copy of all ads Arbetsförmedlingen offers a separate JobStream API; JobSearch is meant for searches.
Query JobSearch with curl
Developer ads (utvecklare) in Stockholm county from the last 7 days (published-after takes minutes), tested on 2026-10-12:
curl -s "https://jobsearch.api.jobtechdev.se/search?q=utvecklare®ion=CifL_Rzy_Mku&published-after=10080&limit=3" \
| jq -c '.total.value, (.hits[] | [.id, .headline, .employer.name, .employer.organization_number, .workplace_address.municipality])'
80
["31578168","Frontend Utvecklare","Techrytera AB","5595683623","Stockholm"]
["31573965","Utvecklare Java","Deploja AB","5569328155","Stockholm"]
["31575626","ServiceNow plattforms utvecklare","NXT Interim Stockholm AB","5592774078","Stockholm"]
That gets you far for one search. What you have to handle yourself:
- Concept ids.
region,municipalityandoccupation-fieldwant taxonomy ids, so you need a lookup table (or the Taxonomy API) to turn "Göteborg" or "Data/IT" into ids. - 2,100 ads per search.
offsetstops at 2,000 with at most 100 per page. Bigger searches must be split, for example into publication-date windows. - Personal data. Each hit has
application_contactswith recruiters' names, e-mails and phone numbers (the third ad above has one), and sole traders appear under the owner's name and personal identity number. Strip them before storing. - Memory for alerts. To get only new ads you have to remember which ids you have already seen.
Export ads without code
- Open Platsbanken Jobs API: Sweden Arbetsförmedlingen on Apify.
- Enter keywords (Swedish or English job titles), counties or municipalities by name (
GöteborgorGothenburg), occupations by name or SSYK code, and optional terms: remote, employment type, working hours, experience, driving licence, employer org number. - Choose Published in the last N days or a start date, and click Start.
- Export the Job ads or Requirements view as CSV or Excel.
Names are translated to concept ids from a built-in taxonomy copy, searches above 2,100 ads are split into date windows, recruiter contacts are dropped, and e-mails, phone numbers and personal identity numbers are scrubbed from the ad text. A row from a real run on 2026-10-12, shortened:
{
"id": "31580471",
"url": "https://arbetsformedlingen.se/platsbanken/annonser/31580471",
"headline": "Junior Baseband Software Developer",
"employerName": "Ericsson AB",
"employerOrgNumber": "5560566258",
"occupation": "Systemutvecklare/Programmerare",
"occupationGroupSsyk": "2512",
"occupationField": "Data/IT",
"municipality": "Stockholm",
"region": "Stockholms län",
"employmentType": "Vanlig anställning",
"workingHoursType": "Heltid",
"publishedAt": "2026-10-10T14:25:01+02:00",
"applicationDeadline": "2026-10-24T23:59:59+02:00",
"daysUntilDeadline": 12,
"remote": false,
"applicationUrl": "https://ericsson-ab.contactrh.com/jobs/9669/44499418"
}A daily job alert
Turn on Only new ads since the last run, schedule the actor every morning and connect email, Slack, Google Sheets or a webhook to the run's dataset:
{
"keywords": [
"utvecklare",
"developer"
],
"regions": [
"Stockholm",
"Uppsala"
],
"employmentTypes": [
"permanent"
],
"publishedWithinDays": 2,
"onlyNew": true
}
The 2-day window means a missed run loses nothing; ads already delivered for this search are skipped and not charged.
Worked examples from our test runs
| Search (2026-10-12) | Result |
|---|---|
utvecklare in Stockholm county, last 7 days, capped at 50 | 50 ads; one consultancy (Deploja AB) posted 11 of them, the next 5 and 4 |
| Data/IT jobs in Göteborg, permanent, full time, last 7 days | 41 ads; the top occupations were Mjukvaruutvecklare (9) and Systemutvecklare/Programmerare (7); all 41 had a deadline, none a salary text |
| Healthcare jobs in Skåne as a daily alert | 62 ads on the first run, 0 on the next, then exactly 3 after three new ads appeared |
| All ads from the last 10 days | 13,924 matches; split into date windows, the first 2,200 came out newest first with no duplicates (27 requests, 37 seconds); 3 employers were withheld as sole traders |
The Göteborg run shows a common gap: employers rarely fill in salary text or skills, so filter on occupation, terms and place rather than on those fields.
What each row contains
| Field | What it holds |
|---|---|
id, url, headline, description | The ad, its Platsbanken link and text (contacts scrubbed) |
employerName, employerOrgNumber, employerWebsite, employerWithheld | Employer and Swedish organisation number; withheld for sole traders |
occupation, occupationGroupSsyk, occupationField (+ ids) | Taxonomy labels and concept ids |
municipality, region, latitude, longitude | Workplace location |
employmentType, workingHoursType, scopeOfWorkMin/Max, duration, salaryType, salaryDescription | Terms |
publishedAt, applicationDeadline, daysUntilDeadline | Dates in Swedish time |
mustHaveSkills, mustHaveLanguages, experienceRequired, drivingLicenceRequired | Requirements |
remote, workplaceModel, applicationUrl, labels | Remote flag, how to apply, labels such as nystartsjobb |
Honest limits
- Current ads only. Expired ads disappear from the API; there is no history.
- Optional fields are often empty: salary text, skills, workplace model and coordinates.
remoteis generous. It is also true when the ad text uses Platsbanken's remote phrases, so some on-site ads show it;workplaceModelis what the employer chose.- Names inside ad text stay. E-mails, phone numbers and personal identity numbers are removed, but a recruiter named in the text is part of the published ad.
- Recruiters post for clients, so the organisation number can be the staffing company's. Relevance and deadline sorting return at most 2,100 ads.
All input fields
Generated from the actor's live input schema (build 1.0.1).
| Field | Type | Default | What it does |
|---|---|---|---|
Keywordskeywords | array | Free-text search, the same as the Platsbanken search box: headline, ad text and employer name. Several keywords widen the search (any of them), and Swedish or English job titles work (utvecklare, developer, sjuksköterska). A place name in a keyword narrows the search to that place. Multi-word entries are searched as phrases; a trailing * matches word endings (muse*). Empty = all ads. | |
Counties (län)regions | array | Swedish counties by name (Stockholm, Västra Götaland, Skåne, Uppsala, Östergötland, Norrbotten, …) or two-digit code (01 = Stockholm, 14 = Västra Götaland, 12 = Skåne). Counties and municipalities together are combined with OR. | |
Municipalities (kommun)municipalities | array | Swedish municipalities by name (Göteborg or Gothenburg, Malmö, Uppsala, Linköping, …) or four-digit code (0180 = Stockholm, 1480 = Göteborg, 1280 = Malmö). | |
Published in the last N dayspublishedWithinDays | integer | 0 | Only ads published in the last N days. 0 = all currently published ads. Ignored when "Published after" is set. For daily alerts use 2 together with "Only new ads". |
| More filters | |||
Occupationsoccupations | array | Arbetsförmedlingen's occupation taxonomy (Swedish names): an occupation field (Data/IT, Hälso- och sjukvård, Pedagogik, Bygg och anläggning), an occupation group (Mjukvaru- och systemutvecklare m.fl.), an occupation (Systemutvecklare/Programmerare), a four-digit SSYK code (2512) or a concept id. Matching is stricter than keywords because it uses the occupation the employer chose. Several values = any of them. | |
Exclude keywordsexcludeKeywords | array | Drop ads that contain any of these words or phrases in the headline, ad text or employer name (for example senior, konsult). | |
Only remote-friendly adsremoteOnly | boolean | false | Arbetsförmedlingen's remote filter: ads that mention working remotely or from home (arbeta på distans, jobba hemifrån, remote work, delvis på distans, …). It is phrase-based, so it also includes partly remote jobs. |
Workplace modelworkplaceModels | array | The workplace model set by the employer: remote, hybrid or on site. Few ads set it (about 6% in our checks), so this filter returns far fewer ads than "Only remote-friendly ads". Options: remote, hybrid, onSite | |
Employment typeemploymentTypes | array | Permanent includes ads marked as regular employment (vanlig anställning). Empty = all. Options: permanent, temporary, substitute, onCall, seasonal, summerJob | |
Working hoursworkingHours | array | Full time (heltid) or part time (deltid). Empty = both. Options: fullTime, partTime | |
Experienceexperience | string | any | "Not required" keeps ads where the employer ticked that no experience is needed (good for juniors and students). Options: any, required, notRequired |
Driving licencedrivingLicence | string | any | Whether the ad requires a driving licence. Options: any, required, notRequired |
Employers (organisation number or name)employers | array | Swedish organisation numbers (556036-0793 or 5560360793) or employer names. Numbers match as a prefix, so 2 = all public-sector employers (state, regions and municipalities). | |
Published after (date)publishedAfter | string | Only ads published after this date or time, for example 2026-10-01 or 2026-10-01T08:00 (Swedish time). Overrides "Published in the last N days". | |
Sort bysort | string | newest | Newest first is the default. Relevance and deadline sorting reach at most 2,100 ads per search (an API limit); newest and oldest have no such limit. Options: newest, oldest, relevance, deadlineSoonest, deadlineLatest |
Max job adsmaxItems | integer | 1000 | Stop after this many ads. 0 = up to 50,000. |
| Alerts and output | |||
Only new ads since the last run (job alerts)onlyNew | boolean | false | Remember which ads were already output for this search and skip them next time. Schedule the actor daily with "Published in the last N days" = 2 to get a job alert. The first run outputs all matches. |
Alert memory store namestateStoreName | string | platsbanken-jobs-state | Named key-value store that remembers output ads for "Only new" mode. Each different search keeps its own memory inside it. |
Include ad textincludeDescription | boolean | true | Add the full ad text (description) and conditions. E-mail addresses, phone numbers and personal identity numbers are removed. |
Max ad text length (characters)descriptionMaxLength | integer | 0 | Cut the ad text after this many characters. 0 = full text. |
| Advanced | |||
Request timeout (seconds)requestTimeoutSecs | integer | 60 | Timeout for one API request. |
Max retriesmaxRetries | integer | 4 | Retries for network errors, rate limits (HTTP 429, waiting as long as the API asks) and server errors. |
Call it from code
Start a run and get the results in one HTTP request with the Apify API (your token is under Console, Settings, API & Integrations):
curl -X POST "https://api.apify.com/v2/acts/adamhaleworks~platsbanken-jobs-api-sweden/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords":["python"],"regions":["Stockholm"],"publishedWithinDays":3}'The run's Output tab offers 2 ready-made views; every view exports to CSV, Excel, JSON or XML:
- Job ads:
publishedDate,headline,employerName,occupation,municipality,region,employmentType,workingHoursType,remote,applicationDeadline,salaryType,url - Requirements:
headline,employerName,employerOrgNumber,occupationGroup,experienceRequired,drivingLicenceRequired,mustHaveSkills,mustHaveLanguages,niceToHaveSkills,scopeOfWorkMin,scopeOfWorkMax,applicationUrl,url
What it costs
Free to run right now. The actor charges no fee of its own today. Apify bills only the compute a run uses against your account's platform credit, and the free Apify plan includes $5 of usage every month. For scale: building all five of our actors and test-running each once on its default input used $0.03 of credit in total (2026-10-12).
Planned: pay-per-event pricing of $0.001 per job ad in the output ($1 per 1,000) once the account's payout setup is finished. This page and the Apify page will show the change, and Apify notifies existing users before a price change takes effect.
At the planned price the Skåne alert would cost $0.062 on the first day and a few tenths of a cent on later days, because only new ads are output. There is no start fee.
FAQ
Does Platsbanken have an API?
Yes. Arbetsförmedlingen's JobTech JobSearch API (jobsearch.api.jobtechdev.se) is the search behind Platsbanken. It is free, needs no key, and the ads are CC0 open data.
Why do I only get 2,100 ads?
One JobSearch query can page to offset 2,000 with 100 ads per page. The actor splits larger searches into publication-date windows so newest-first exports go past that.
Can I search by English job titles?
Yes, with keywords: the API's free-text search understands Swedish and English titles. The occupation filter uses Arbetsförmedlingen's Swedish taxonomy names or SSYK codes.
Are recruiter contact details included?
No. Contact persons, their e-mails and phone numbers are dropped, and e-mails, phone numbers and personal identity numbers are removed from the ad text.
How do I get a daily job alert?
Turn on Only new ads, set Published in the last 2 days, schedule the actor every morning and connect an email, Slack or Google Sheets integration.
Try it on your own data
Swedish job ads from Platsbanken via Arbetsformedlingen's official JobTech API. Filter by keyword, occupation, county, municipality, remote, employment type and date. Employer, org number, salary, deadline, skills, apply link and full ad text. Only-new mode for daily job alerts.
Open Platsbanken Jobs API: Sweden Arbetsförmedlingen Opens the actor's page on apify.com. A free Apify account is needed to run it.