# Platsbanken Sweden Jobs Scraper - All Swedish Job Ads (`martin10291/platsbanken-sweden-jobs`) Actor

All job ads from Platsbanken (Arbetsförmedlingen, Sweden's public job board) via the official open API: employer, org number, city, occupation, employment type, deadline, apply link and full text. Only-new mode for alerts.

- **URL**: https://apify.com/martin10291/platsbanken-sweden-jobs.md
- **Developed by:** [Martin Petrov](https://apify.com/martin10291) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Sweden Jobs Scraper - All Swedish Job Ads

Get job ads from **Platsbanken**, the national job board of **Arbetsförmedlingen** (Swedish Public Employment Service), in one clean dataset. The actor uses the **official open JobSearch API** by JobTech Development, so it is fast and stable: no login, no API key, no browser, no blocking.

Search in English or Swedish, filter by city or region, date, remote work and employment type, and get the employer, organisation number, occupation, deadline, apply link and full description for every ad.

### What you get

- **All of Sweden's public job ads**: Platsbanken lists tens of thousands of open positions at any time.
- **Employer data**: company name, workplace, **organisation number** (organisationsnummer) and website when published.
- **Location**: city, municipality, region, street address, postcode and coordinates.
- **Job details**: occupation, occupation group and field, employment type, working hours, scope of work, duration, workplace model (on-site, hybrid, remote), salary type, number of vacancies.
- **Requirements**: required skills and languages, experience, driving licence, own car.
- **Dates and links**: published date, **application deadline**, apply link or email, Platsbanken URL and logo.
- **English labels**: employment type, working hours and workplace model are translated to English (the original Swedish label is kept too).
- **Only-new mode** for daily job alerts.

### Use cases

- **Recruiting and staffing agencies**: find companies that are hiring right now in your niche and region.
- **B2B lead generation**: hiring companies with organisation numbers are warm leads for HR, recruiting, IT and consulting services.
- **Job search alerts**: get new ads for your profession every morning in Slack, email or Google Sheets.
- **Labour market research**: demand by occupation, region and employment type over time.
- **Job boards and newsletters**: fresh Swedish job listings with full text.

### How to scrape Platsbanken (step by step)

1. Click **Try for free** (or **Start**) on this page.
2. Type a job title or skill in **Search queries**, e.g. `developer`, `sjuksköterska`, `truck driver`.
3. Optional: add **Locations in Sweden** such as `Stockholm`, `Göteborg` or `Skåne`.
4. Optional: set **Posted within (days)**, **Remote jobs only** or **Employment types**.
5. Click **Start** and download the results as **Excel, CSV, JSON or HTML**, or send them to Google Sheets.

### Get daily job alerts

1. Turn on **Only new jobs since last run** and give the search a **Monitor ID** (e.g. `developers-stockholm`).
2. Create a **Schedule** in Apify Console that runs the actor every morning.
3. Add an integration: **Slack, email, Google Sheets, Zapier, Make or a webhook**.

You get, and pay for, only ads that are new since the last run.

### Input

| Field | Type | Description |
|---|---|---|
| `searchQueries` | array | Job titles, skills or keywords in English or Swedish. Empty = all jobs. |
| `locations` | array | Cities, municipalities or regions in Sweden. Empty = all of Sweden. |
| `postedWithinDays` | integer | Only ads published in the last N days. |
| `remoteOnly` | boolean | Only ads that allow remote work. |
| `employmentTypes` | array | `permanent`, `temporary`, `full-time`, `part-time`, `summer job`, `seasonal`, `on-call`, `freelance`. |
| `englishAdsOnly` | boolean | Only ads written in English. |
| `includeDescription` | boolean | Include the full plain-text description. Default `true`. |
| `onlyNewJobs` | boolean | Only ads not seen in earlier runs. |
| `monitorId` | string | Separate memory for different searches in `onlyNewJobs` mode. |
| `maxItems` | integer | Hard limit on jobs saved (and paid for). |

#### Example input

```json
{
  "searchQueries": ["python developer", "data engineer"],
  "locations": ["Stockholm", "Göteborg"],
  "postedWithinDays": 7,
  "maxItems": 200
}
```

### Output

```json
{
  "jobId": "31614461",
  "title": "AI Engineer with Python",
  "employer": "Example AB",
  "employerOrgNumber": "5560000000",
  "city": "Stockholm",
  "municipality": "Stockholm",
  "region": "Stockholms län",
  "country": "Sverige",
  "occupation": "Systemutvecklare/Programmerare",
  "occupationField": "Data/IT",
  "employmentType": "temporary",
  "employmentTypeSv": "Tidsbegränsad anställning",
  "workingHours": "full-time",
  "workplaceModel": "hybrid",
  "numberOfVacancies": 1,
  "experienceRequired": true,
  "requiredSkills": [],
  "publishedAt": "2026-10-19T14:07:00",
  "applicationDeadline": "2026-11-18T23:59:59",
  "applyUrl": null,
  "url": "https://arbetsformedlingen.se/platsbanken/annonser/31614461",
  "source": "Platsbanken",
  "description": "Type of employment: Contract ...",
  "scrapedAt": "2026-10-30T20:00:00Z"
}
```

*Values above are illustrative.* The `RUN_SUMMARY` record shows how many ads matched and were saved for every query.

### Use it from your code (API)

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("martin10291/platsbanken-sweden-jobs").call(run_input={
    "searchQueries": ["sjuksköterska"],
    "locations": ["Malmö"],
    "postedWithinDays": 3,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["title"], job["employer"], job["applicationDeadline"])
```

### Pricing

Pay per job saved, no start fee. Ads removed by your filters are free, and **Max jobs in total** caps the cost of every run.

### FAQ

**Is this the official data?**
Yes. Platsbanken ads come from Arbetsförmedlingen and are published through the open JobSearch API (JobTech Development). The actor only reads that public API.

**Can I search in English?**
Yes. Many ads are written in English, and search works for both languages. Turn on **English-language ads only** to skip ads in Swedish.

**How many ads can I get?**
The API returns up to about 2,000 ads per search query. For more, split the search by location or keyword.

**Something is missing?**
Open an issue on the **Issues** tab with an example input. New fields and filters are added on request.

### More Actors by Martin Petrov

- **[Remote Jobs Scraper (8 boards)](https://apify.com/martin10291/remote-jobs-aggregator-pro)**: RemoteOK, Remotive, Himalayas, We Work Remotely, HN Who is Hiring and more in one deduplicated dataset.
- **[ATS Jobs Scraper (Workday, Greenhouse, Lever, Ashby)](https://apify.com/martin10291/ats-jobs-aggregator)**: Jobs straight from company career pages.
- **[UK Visa Sponsor Register API](https://apify.com/martin10291/uk-visa-sponsors-register)**: Every UK company licensed to sponsor work visas.
- **[Local Business Leads Scraper](https://apify.com/martin10291/local-business-leads-osm)**: Local businesses with emails, phones and websites.

### Legal

The actor reads the public JobSearch API of JobTech Development (Arbetsförmedlingen). Job ads may contain names and contact details of recruiters: use them only for the job application or recruiting purpose they were published for, and follow GDPR.

*Last updated: October 30, 2026.*

# Actor input Schema

## `searchQueries` (type: `array`):

Job titles, skills or keywords in English or Swedish, e.g. 'python developer', 'sjuksköterska', 'truck driver'. Empty = all jobs.

## `locations` (type: `array`):

Cities, municipalities or regions, e.g. Stockholm, Göteborg, Malmö, Skåne. Empty = all of Sweden.

## `postedWithinDays` (type: `integer`):

Only ads published in the last N days. 0 = any date.

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

Only ads that say the work can be done remotely.

## `employmentTypes` (type: `array`):

Keep only these types. Empty = all.

## `englishAdsOnly` (type: `boolean`):

Keep only ads written in English (useful for international candidates).

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

Add the full plain-text job description.

## `onlyNewJobs` (type: `boolean`):

Return only ads not seen in previous runs with the same monitor ID. Ideal for daily alerts.

## `monitorId` (type: `string`):

Name of the monitor for 'only new jobs' (use different IDs for different searches).

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

Hard limit on jobs saved (and paid for).

## Actor input object example

```json
{
  "searchQueries": [
    "developer"
  ],
  "locations": [
    "Stockholm"
  ],
  "postedWithinDays": 14,
  "remoteOnly": false,
  "englishAdsOnly": false,
  "includeDescription": true,
  "onlyNewJobs": false,
  "monitorId": "default",
  "maxItems": 100
}
```

# Actor output Schema

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

Items extracted by the Actor.

# 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 = {
    "searchQueries": [
        "developer"
    ],
    "locations": [
        "Stockholm"
    ],
    "postedWithinDays": 14,
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("martin10291/platsbanken-sweden-jobs").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 = {
    "searchQueries": ["developer"],
    "locations": ["Stockholm"],
    "postedWithinDays": 14,
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("martin10291/platsbanken-sweden-jobs").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 '{
  "searchQueries": [
    "developer"
  ],
  "locations": [
    "Stockholm"
  ],
  "postedWithinDays": 14,
  "maxItems": 100
}' |
apify call martin10291/platsbanken-sweden-jobs --silent --output-dataset

```

## MCP server setup

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

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/j3Znas6HaydYjw6Mi/builds/hMh6TDfJ2oldHNt00/openapi.json
