# Platsbanken Scraper: Sweden Jobs & Hiring Companies (`responsible_front_evw/sweden-jobs-platsbanken`) Actor

Swedish job ads from Platsbanken (Arbetsförmedlingen), via the open JobTech API, CC0: about 40,000 live ads. Filter by keyword, occupation, county, employer, remote. No 2,000 limit. Hiring-companies mode: one row per employer. No repeats between runs. Contact persons, emails and phones removed.

- **URL**: https://apify.com/responsible_front_evw/sweden-jobs-platsbanken.md
- **Developed by:** [Open Data Tools](https://apify.com/responsible_front_evw) (community)
- **Categories:** Jobs, Lead generation, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Platsbanken Scraper: Sweden Jobs & Hiring Companies

Get every open job ad in Sweden from **Platsbanken**, the official job board of the Swedish Public Employment Service (Arbetsförmedlingen), through its **open JobSearch API**. About 40,000 live ads at any time, from public employers, staffing agencies and private companies, in one clean row per ad with English labels.

**No personal data.** Contact persons, recruiter names, emails and phone numbers are never returned, also when they are written inside the ad text. Sole traders (enskild firma), whose organisation number is the owner's personal ID number, are anonymised: no name, number, street address or logo, and the location is rounded to about 1 km. Safer for GDPR when you store, enrich or resell the data.

### What you can do

- **Job feeds by place and field:** all IT jobs in Västra Götaland, all nursing jobs in Uppsala, every warehouse job in Göteborg published in the last 7 days.
- **Hiring companies (B2B leads):** switch *Output* to *Hiring companies* and get one row per employer that is hiring right now: organisation number, website, number of open ads and vacancies, occupations, municipalities and latest ad. Perfect for staffing agencies, recruitment software, HR and benefits sales.
- **No 2,000 cap:** the official API stops at 2,000 results per search. This Actor goes on automatically by splitting the search by publication date, so you can export all 40,000 ads.
- **English labels:** occupation field, county, employment type, duration, working hours and salary type in English, next to the original Swedish.
- **Alerts:** *Only new since the last run* remembers what you already received for the same search. Schedule it daily and you never pay twice for the same ad or company.
- **Filters:** search text, occupation field, occupation group or name (taxonomy IDs), county, municipality, employer organisation number, remote-friendly, no experience required, published in the last N days.

### Input example

```json
{
  "occupationFields": ["3"],
  "regions": ["14"],
  "publishedWithinDays": 7,
  "maxItems": 100
}
```

Leave every filter empty to get the newest ads in all of Sweden. County codes: 01 Stockholm, 12 Skåne, 14 Västra Götaland (full list in the input form).

### Output example (shortened)

```json
{
  "id": "31658258",
  "url": "https://arbetsformedlingen.se/platsbanken/annonser/31658258",
  "title": "Frontend Developer",
  "employerName": "Techrytera AB",
  "employerOrgNumber": "5595683623",
  "employerWebsite": "https://www.techrytera.se",
  "isSoleTrader": false,
  "occupation": "Frontend-utvecklare",
  "occupationFieldEn": "IT",
  "occupationConceptId": "GDHs_eoz_uKx",
  "regionEn": "Vastra Gotaland County",
  "municipality": "Göteborg",
  "postcode": "41103",
  "latitude": 57.70919,
  "longitude": 11.97594,
  "employmentTypeEn": "Regular employment",
  "durationEn": "Permanent",
  "workingHoursEn": "Full-time",
  "salaryTypeEn": "Fixed monthly, weekly or hourly pay",
  "vacancies": 1,
  "experienceRequired": true,
  "publishedAt": "2026-10-28T21:34:21",
  "applicationDeadline": "2027-04-26T23:59:59",
  "applyUrl": "https://www.techrytera.se/jobs/8632966-frontend-developer/applications/new",
  "description": "About us At Techrytera AB, recruitment starts with you...",
  "personalDataRemoved": false,
  "source": "Arbetsformedlingen (Swedish Public Employment Service), JobSearch API by JobTech, ads licensed CC0"
}
```

Hiring companies output:

```json
{
  "employerOrgNumber": "5565545828",
  "employerName": "RA Hospitality i Norden AB",
  "employerWebsite": "https://jobb.rahospitality.se",
  "openAds": 6,
  "vacancies": 6,
  "occupations": ["Kock à la carte", "Servitör/Servitris", "Köksbiträde", "Diskare"],
  "municipalities": ["Malmö", "Lund"],
  "latestPublishedAt": "2026-10-29T08:43:13",
  "platsbankenSearchUrl": "https://arbetsformedlingen.se/platsbanken/annonser?q=5565545828"
}
```

### Fields

Ad ID and link, title, employer name, workplace, organisation number and website, sole trader flag, occupation, group and field (with English field), taxonomy ID, county, municipality, city, postcode, street, coordinates, workplace model, employment type, duration, working hours, scope (%), salary type and description, vacancies, experience, driving licence, own car, required and preferred skills and languages, education, publication date, deadline, apply link and reference, ad text, personal data flag and source.

`personalDataRemoved` is `true` when the Actor removed something personal from that ad (most often the contact persons).

### Pricing

Pay per result: you pay for each ad (or company) delivered, nothing for ads already seen in alert mode.

| Event | Price |
|---|---|
| Actor start | $0.00005 |
| Each ad or company returned | $0.002 ($2 per 1,000) |

### Limits

- Only ads that are open right now: closed ads leave the API.
- Names inside the ad text are removed with rules (known contact persons, "contact X", "X, 070..."). The rules are strict, but free text can always contain a case they miss.
- Sole traders without an organisation number are detected by their name format; a few may remain as plain company names.
- The *Hiring companies* list is built from the ads read (up to *Maximum ads scanned*).

### Source and licence

Data from Arbetsförmedlingen (the Swedish Public Employment Service) through the JobTech JobSearch API. The ads are published under **CC0** (public domain): you can reuse them, also commercially. This Actor is not affiliated with or endorsed by Arbetsförmedlingen or JobTech.

### FAQ

#### Is there a Platsbanken API?

Yes, Arbetsförmedlingen (Arbetsformedlingen) publishes the open JobSearch API. This Actor uses it for you: English labels, no 2,000-result cap, exports to Excel, CSV or JSON.

#### Can I get a list of companies that are hiring in Sweden?

Yes. The **Hiring companies** mode returns one row per employer with organisation number, website, number of ads and vacancies, occupations and municipalities. Good for B2B leads and staffing agencies.

#### How much does it cost?

$2 per 1,000 ads or companies. Ads already seen in alert mode are not charged.

#### Does it collect personal data?

No. Contact persons, emails and phone numbers are removed, also from the ad text, and sole traders are anonymised.

### Questions or a missing field?

Open an issue in the **Issues** tab. Feature requests are welcome.

# Actor input Schema

## `query` (type: `string`):

Optional words in the ad title, text or employer name, in Swedish or English, for example: utvecklare, sjuksköterska, lager, python. Supports "phrases" and wildcards (muse\*).

## `occupationFields` (type: `array`):

Codes: 1 Administration, finance, law · 2 Construction · 3 IT · 4 Personal and beauty care · 5 Sales, purchasing, marketing · 6 Crafts · 7 Hotel, restaurant, catering · 8 Health and medical care · 9 Manufacturing · 10 Installation, operation, maintenance · 11 Culture, media, design · 12 Cleaning · 13 Agriculture, forestry, animals · 14 Natural sciences · 15 Managers · 16 Social work · 17 Security · 18 Technical occupations · 19 Transport, warehouse · 22 Military. Taxonomy concept IDs also work.

## `regions` (type: `array`):

Two-digit county codes: 01 Stockholm, 03 Uppsala, 04 Södermanland, 05 Östergötland, 06 Jönköping, 07 Kronoberg, 08 Kalmar, 09 Gotland, 10 Blekinge, 12 Skåne, 13 Halland, 14 Västra Götaland, 17 Värmland, 18 Örebro, 19 Västmanland, 20 Dalarna, 21 Gävleborg, 22 Västernorrland, 23 Jämtland, 24 Västerbotten, 25 Norrbotten.

## `municipalities` (type: `array`):

Four-digit municipality codes, for example 0180 (Stockholm), 1480 (Göteborg), 1280 (Malmö), 0380 (Uppsala), 0580 (Linköping), 1281 (Lund), 2480 (Umeå).

## `occupationGroups` (type: `array`):

Optional, advanced: JobTech taxonomy concept IDs of occupation groups, for example DJh5_yyF_hEM (software and system developers). Find them at atlas.jobtechdev.se.

## `occupations` (type: `array`):

Optional, advanced: JobTech taxonomy concept IDs of occupation names, for example fg7B_yov_smw (software developer / programmer). Every result includes its occupationConceptId, so you can reuse them.

## `employerOrgNumbers` (type: `array`):

Optional: only ads from these employers (10 digits, dashes allowed), for example 202100-5448.

## `remoteOnly` (type: `boolean`):

Ads that are likely to allow remote work (detected by the official API from the ad text).

## `noExperienceRequired` (type: `boolean`):

Only jobs that require no experience.

## `publishedWithinDays` (type: `integer`):

Optional. For example 1 for a daily feed, 7 for a weekly one.

## `outputMode` (type: `string`):

'Job ads': one row per ad. 'Hiring companies': one row per employer with open ads matching your filters (number of ads and vacancies, occupations, places, latest ad) for B2B prospecting. Sole traders are never listed as companies.

## `includeDescription` (type: `boolean`):

Full ad text, with emails, phone numbers, personal ID numbers and contact names removed. Turn off for smaller, faster exports.

## `onlyNewSinceLastRun` (type: `boolean`):

Remembers the ads (or companies) already delivered for this same search and skips them, so you never pay twice. Use it with a schedule.

## `maxItems` (type: `integer`):

Stop after this many ads (or companies). The official API stops at 2,000 per search; this Actor goes past it automatically by splitting by publication date.

## `maxScannedAds` (type: `integer`):

Only used for 'Hiring companies' and alerts: how many ads to read to build the list. You only pay for the rows delivered.

## `requestDelaySecs` (type: `integer`):

Minimum 1, to be gentle with the public API. Each request returns up to 100 ads.

## Actor input object example

```json
{
  "query": "utvecklare",
  "regions": [
    "14"
  ],
  "remoteOnly": false,
  "noExperienceRequired": false,
  "outputMode": "ads",
  "includeDescription": true,
  "onlyNewSinceLastRun": false,
  "maxItems": 100,
  "maxScannedAds": 2000,
  "requestDelaySecs": 2
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "query": "utvecklare",
    "regions": [
        "14"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("responsible_front_evw/sweden-jobs-platsbanken").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "query": "utvecklare",
    "regions": ["14"],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("responsible_front_evw/sweden-jobs-platsbanken").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "query": "utvecklare",
  "regions": [
    "14"
  ],
  "maxItems": 100
}' |
apify call responsible_front_evw/sweden-jobs-platsbanken --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,responsible_front_evw/sweden-jobs-platsbanken"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/izkuDTryyHlNkcu7e/builds/8HVMVwaM6lv2Gw9eL/openapi.json
