# Platsbanken Scraper - Sweden Jobs, Salaries & Company Data (`esstech/platsbanken-scraper`) Actor

Scrape jobs from Platsbanken (Arbetsförmedlingen), Sweden's national job board. Search by keyword, location, and employer. Returns clean, structured data — titles, salaries, company details, and application links - ready for CSV or JSON export.

- **URL**: https://apify.com/esstech/platsbanken-scraper.md
- **Developed by:** [Vlad Vlad](https://apify.com/esstech) (community)
- **Categories:** Jobs, Lead generation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 job 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Platsbanken Scraper — Sweden Jobs, Salaries & Company Data (Arbetsförmedlingen)

Scrape live job listings from **Platsbanken**, the Swedish Public Employment
Service's (Arbetsförmedlingen) official job board — via their public,
official **JobSearch API**. No login, no cookies, no browser automation to
break: this pulls structured data directly from the source Platsbanken
itself publishes.

### What you get

One flat row per job ad, ready for CSV or JSON export:

- Job title, occupation, occupation group/field
- Employer name, Swedish organisation number, workplace
- Municipality, region, street address, postcode, GPS coordinates
- Employment type, working hours, contract duration, scope of work
- Salary type and description (where the employer discloses it)
- Number of vacancies, application deadline, publication date
- Application URL and the source Platsbanken ad URL

### Input

| Field | Type | Description |
|---|---|---|
| `keyword` | string | Free-text search (Swedish terms match best — ads are in Swedish). |
| `location` | string | A Swedish municipality or region name, e.g. `Stockholm` or `Skåne`. |
| `employer` | string | A Swedish organisation number for an exact match, or a name for a best-effort text match. |
| `maxItems` | integer | Max job ads to fetch (default 200, hard cap 2,100 — see Limits). |

Leave any field blank to skip that filter — an empty run returns the newest
ads across all of Sweden.

### Limits (from Arbetsförmedlingen's API, not this actor)

- A single query can reach at most **2,100 matching ads** (the API rejects
  `offset` above 2000). If your query matches more than that, narrow the
  keyword or location rather than raising `maxItems` further.
- No published rate limit was found in the API's own documentation as of
  this actor's build date; this actor is polite by default (small randomized
  delay between pages, exponential backoff on retryable errors) regardless.

### Data source & licence

Data comes from Arbetsförmedlingen's public **JobSearch API**
(`jobsearch.api.jobtechdev.se`), published under a **CC0** licence — public
domain, no attribution required, commercial reuse and redistribution
explicitly permitted. No API key is needed to use it, so there's nothing to
configure before running this actor.

### Notes

- Job ads are almost entirely in Swedish; `keyword` matches Swedish terms
  (e.g. `utvecklare`, not `developer`).
- `location` and `employer` are resolved against Arbetsförmedlingen's own
  taxonomy/registry, not fuzzy-matched — if a location can't be resolved,
  the actor logs a warning and falls back to including it as a free-text
  keyword instead of silently dropping it.

# Actor input Schema

## `keyword` (type: `string`):

Free-text search, e.g. a job title or skill. Swedish terms match best since ads are in Swedish (e.g. "utvecklare" not "developer").

## `location` (type: `string`):

A Swedish municipality or region name, e.g. "Stockholm" or "Skåne". Resolved automatically against Arbetsformedlingen's location taxonomy.

## `employer` (type: `string`):

A Swedish organisation number (e.g. 2021002114) for an exact match, or an employer name for a best-effort free-text match.

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

Maximum number of job ads to fetch. The API caps any single query at 2,100 reachable results — narrow your keyword or location if you need more than that.

## Actor input object example

```json
{
  "keyword": "utvecklare",
  "maxItems": 200
}
```

# Actor output Schema

## `overview` (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 = {
    "keyword": "utvecklare"
};

// Run the Actor and wait for it to finish
const run = await client.actor("esstech/platsbanken-scraper").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 = { "keyword": "utvecklare" }

# Run the Actor and wait for it to finish
run = client.actor("esstech/platsbanken-scraper").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 '{
  "keyword": "utvecklare"
}' |
apify call esstech/platsbanken-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/YkrZEehWUfdSSIzDc/builds/40evwT7znrjn4MoAR/openapi.json
