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_Mku for 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&region=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, municipality and occupation-field want 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. offset stops 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_contacts with 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

  1. Open Platsbanken Jobs API: Sweden Arbetsförmedlingen on Apify.
  2. Enter keywords (Swedish or English job titles), counties or municipalities by name (Göteborg or Gothenburg), occupations by name or SSYK code, and optional terms: remote, employment type, working hours, experience, driving licence, employer org number.
  3. Choose Published in the last N days or a start date, and click Start.
  4. 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 5050 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 days41 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 alert62 ads on the first run, 0 on the next, then exactly 3 after three new ads appeared
All ads from the last 10 days13,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

FieldWhat it holds
id, url, headline, descriptionThe ad, its Platsbanken link and text (contacts scrubbed)
employerName, employerOrgNumber, employerWebsite, employerWithheldEmployer and Swedish organisation number; withheld for sole traders
occupation, occupationGroupSsyk, occupationField (+ ids)Taxonomy labels and concept ids
municipality, region, latitude, longitudeWorkplace location
employmentType, workingHoursType, scopeOfWorkMin/Max, duration, salaryType, salaryDescriptionTerms
publishedAt, applicationDeadline, daysUntilDeadlineDates in Swedish time
mustHaveSkills, mustHaveLanguages, experienceRequired, drivingLicenceRequiredRequirements
remote, workplaceModel, applicationUrl, labelsRemote 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.
  • remote is generous. It is also true when the ad text uses Platsbanken's remote phrases, so some on-site ads show it; workplaceModel is 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).

FieldTypeDefaultWhat it does
Keywords
keywords
arrayFree-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
arraySwedish 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
arraySwedish 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 days
publishedWithinDays
integer0Only 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
Occupations
occupations
arrayArbetsfö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 keywords
excludeKeywords
arrayDrop ads that contain any of these words or phrases in the headline, ad text or employer name (for example senior, konsult).
Only remote-friendly ads
remoteOnly
booleanfalseArbetsfö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 model
workplaceModels
arrayThe 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 type
employmentTypes
arrayPermanent includes ads marked as regular employment (vanlig anställning). Empty = all.
Options: permanent, temporary, substitute, onCall, seasonal, summerJob
Working hours
workingHours
arrayFull time (heltid) or part time (deltid). Empty = both.
Options: fullTime, partTime
Experience
experience
stringany"Not required" keeps ads where the employer ticked that no experience is needed (good for juniors and students).
Options: any, required, notRequired
Driving licence
drivingLicence
stringanyWhether the ad requires a driving licence.
Options: any, required, notRequired
Employers (organisation number or name)
employers
arraySwedish 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
stringOnly 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 by
sort
stringnewestNewest 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 ads
maxItems
integer1000Stop after this many ads. 0 = up to 50,000.
Alerts and output
Only new ads since the last run (job alerts)
onlyNew
booleanfalseRemember 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 name
stateStoreName
stringplatsbanken-jobs-stateNamed key-value store that remembers output ads for "Only new" mode. Each different search keeps its own memory inside it.
Include ad text
includeDescription
booleantrueAdd the full ad text (description) and conditions. E-mail addresses, phone numbers and personal identity numbers are removed.
Max ad text length (characters)
descriptionMaxLength
integer0Cut the ad text after this many characters. 0 = full text.
Advanced
Request timeout (seconds)
requestTimeoutSecs
integer60Timeout for one API request.
Max retries
maxRetries
integer4Retries 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.