# Platsbanken Jobs API: Sweden Arbetsförmedlingen (`adamhaleworks/platsbanken-jobs-api-sweden`) Actor

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.

- **URL**: https://apify.com/adamhaleworks/platsbanken-jobs-api-sweden.md
- **Developed by:** [Adam Hale](https://apify.com/adamhaleworks) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 Jobs API: Sweden Arbetsförmedlingen job ads with employer, org number, salary, skills and deadline

Get **Swedish job ads from Platsbanken**, the national job board of Arbetsförmedlingen (the Swedish Public Employment Service), through its official **JobTech JobSearch API**. Each ad becomes one clean row:

- **Headline, link to the ad** on Platsbanken and the employer's **application link**
- **Employer name and Swedish organisation number** (organisationsnummer), workplace name and website
- **Occupation, occupation group (SSYK) and occupation field** from Arbetsförmedlingen's taxonomy, with concept ids
- **Municipality, county (län)**, postcode, city and coordinates of the workplace
- **Employment type, working hours, scope of work (%), duration, salary type and salary text**, number of vacancies
- **Published date, application deadline** with days left, last publication date
- **Must-have and nice-to-have skills, languages, experience and education**, experience required, driving licence
- **Remote flag**, workplace model (remote, hybrid, on site), labels such as nystartsjobb
- **Full ad text**, with e-mail addresses and phone numbers removed

Filter by **keyword, occupation, county, municipality, remote, employment type, working hours, experience, driving licence, employer and publication date**. Turn on **Only new ads since the last run** and schedule a daily run to get your own **job alert**.

It reads Arbetsförmedlingen's official open-data API, so there is no scraping, no browser and no proxy. **Free while in launch; planned price $1 per 1,000 job ads.**

### What can I use it for?

- **Job alerts.** New ads for your job title, county and terms, every morning, by email, Slack, Google Sheets or webhook.
- **Recruitment and staffing leads.** Which companies hire which roles where, with organisation numbers you can match against company registers or your CRM.
- **Labour-market analysis.** Demand by occupation, county, employment type, required skills and languages over time.
- **Job boards and apps.** Feed Swedish vacancies with structured fields and taxonomy ids into your own product.
- **Research and journalism.** Hiring trends in the public sector (organisation numbers starting with 2), remote work, entry-level jobs.

### What data does it return?

| Field | Example |
|---|---|
| `id`, `url`, `apiUrl` | `31580471`, `https://arbetsformedlingen.se/platsbanken/annonser/31580471` |
| `headline`, `description`, `conditions` | `Junior Baseband Software Developer` |
| `employerName`, `employerOrgNumber`, `employerWebsite`, `workplaceName`, `logoUrl` | `Ericsson AB`, `5560566258`, `www.ericsson.com` |
| `employerWithheld`, `employerWithheldReason` | `false` (see "Personal data" below) |
| `occupation`, `occupationGroup`, `occupationGroupSsyk`, `occupationField` (+ `…Id`) | `Systemutvecklare/Programmerare`, `Mjukvaru- och systemutvecklare m.fl.`, `2512`, `Data/IT` |
| `municipality`, `municipalityCode`, `region`, `regionCode`, `country`, `city`, `postcode`, `latitude`, `longitude`, `otherLocations` | `Stockholm`, `0180`, `Stockholms län`, `01`, `Sverige` |
| `employmentType`, `workingHoursType`, `scopeOfWorkMin`, `scopeOfWorkMax`, `duration` | `Vanlig anställning`, `Heltid`, `100`, `100`, `Tills vidare` |
| `salaryType`, `salaryDescription`, `numberOfVacancies` | `Fast månads- vecko- eller timlön` |
| `publishedAt`, `publishedDate`, `applicationDeadline`, `daysUntilDeadline`, `lastPublicationDate` | `2026-10-10T14:25:01+02:00`, `2026-10-24T23:59:59+02:00`, `12` |
| `remote`, `workplaceModel` | `true` / `false`, `Hybridarbete` |
| `experienceRequired`, `drivingLicenceRequired`, `drivingLicences`, `accessToOwnCar` | `true`, `false` |
| `mustHaveSkills`, `mustHaveLanguages`, `mustHaveExperience`, `mustHaveEducation`, `niceToHave…` | `["Engelska"]`, `["Svenska"]` |
| `applicationUrl`, `applyViaPlatsbanken`, `applyByEmail`, `applicationReference`, `applicationInformation` | link to the employer's application form |
| `labels`, `startInfo`, `sourceType`, `fetchedAt` | `["nystartsjobb"]` |

Labels (employment type, occupation, salary type and so on) are Arbetsförmedlingen's Swedish taxonomy labels; the `…Id` fields are the stable taxonomy concept ids. Dates are Swedish time with the UTC offset.

#### Example output

An ad from a real run on 2026-10-12 (shortened):

```json
{
  "id": "31580471",
  "url": "https://arbetsformedlingen.se/platsbanken/annonser/31580471",
  "headline": "Junior Baseband Software Developer",
  "employerName": "Ericsson AB",
  "employerOrgNumber": "5560566258",
  "employerWithheld": false,
  "occupation": "Systemutvecklare/Programmerare",
  "occupationGroup": "Mjukvaru- och systemutvecklare m.fl.",
  "occupationGroupSsyk": "2512",
  "occupationField": "Data/IT",
  "municipality": "Stockholm",
  "region": "Stockholms län",
  "postcode": "16483",
  "latitude": 59.4123492,
  "longitude": 17.8268461,
  "employmentType": "Vanlig anställning",
  "workingHoursType": "Heltid",
  "scopeOfWorkMin": 100,
  "duration": "Tills vidare",
  "remote": false,
  "salaryType": "Fast månads- vecko- eller timlön",
  "publishedAt": "2026-10-10T14:25:01+02:00",
  "applicationDeadline": "2026-10-24T23:59:59+02:00",
  "daysUntilDeadline": 12,
  "experienceRequired": true,
  "drivingLicenceRequired": false,
  "applicationUrl": "https://ericsson-ab.contactrh.com/jobs/9669/44499418",
  "applyViaPlatsbanken": false,
  "description": "Company description:\nEricsson AB\nJob description: Join our Team About this opportunity: …"
}
```

The Output tab has two ready-made views, **Job ads** and **Requirements**. Export as CSV, Excel or JSON, or fetch the results through the API. A `SUMMARY` record in the key-value store shows how many ads matched, were scanned and were output, the exact query sent to the API and why the run stopped.

### How much does it cost?

**Free while in launch; planned price $1 per 1,000 job ads.** During launch you pay only Apify's normal platform usage. Once pricing starts (announced in advance on this page and by Apify), it will be:

| Event | Planned price |
|---|---|
| Job ad output | **$0.001** (= $1 per 1,000 job ads) |

- No start fee. Ads removed by your exclude words and ads already delivered in earlier runs ("Only new" mode) will **not be charged**.
- **Examples at the planned price, from our test runs:** developer ads in Stockholm county from the last 7 days, capped at 50: $0.05. IT jobs in Göteborg, permanent, full time, 7 days: 41 ads, $0.041. Daily alert for healthcare jobs in Skåne: 62 ads on the first run ($0.062), 0 on the next run ($0.00), 3 after three new ads appeared ($0.003).
- **Cost cap:** once pricing starts, set **Maximum cost per run** and the actor stops cleanly when it reaches it (in a test with a $0.005 cap it output exactly 5 ads).

For comparison (Apify Store, checked 2026-10-12): other Platsbanken and Arbetsförmedlingen actors charge $3–5 per 1,000 ads, and some add a start fee per run or charge more for detail pages.

### How to use it

1. Set your filters: keywords, counties, municipalities, occupations, employment type, working hours, remote, experience or employers. All filters are optional. Different filters are combined with AND. Several values inside one filter (two counties, two occupations, two keywords) are combined with OR, like on Platsbanken.
2. Choose the period: **Published in the last N days**, or **Published after** a date. Leave both empty for all currently published ads.
3. Click **Start**. Results are sorted newest first.

#### Daily job alert

```json
{
  "keywords": ["utvecklare", "developer"],
  "regions": ["Stockholm", "Uppsala"],
  "employmentTypes": ["permanent"],
  "publishedWithinDays": 2,
  "onlyNew": true
}
```

Create a schedule (for example every day at 07:00) with this input and connect an integration (email, Slack, Google Sheets, webhook) to the run's dataset. Each run returns only ads you haven't received before. The 2-day window means a missed run never loses ads.

#### Entry-level part-time jobs without a driving licence

```json
{
  "keywords": ["lager"],
  "experience": "notRequired",
  "drivingLicence": "notRequired",
  "workingHours": ["partTime"]
}
```

#### All IT jobs in Göteborg, using the occupation taxonomy

```json
{
  "occupations": ["Data/IT"],
  "municipalities": ["Göteborg"],
  "excludeKeywords": ["senior"],
  "publishedWithinDays": 7
}
```

#### All ads from one employer, or the whole public sector

```json
{ "employers": ["2021002114"] }
```

Organisation numbers match as a prefix: `"employers": ["2"]` returns all ads from the state, regions and municipalities.

#### API example

```bash
curl -X POST "https://api.apify.com/v2/acts/adamhaleworks~platsbanken-jobs-api-sweden/run-sync-get-dataset-items?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["python"], "regions": ["Stockholm"], "publishedWithinDays": 3}'
```

#### Places and occupations

- **Counties (län):** names such as `Stockholm`, `Västra Götaland`, `Skåne`, `Uppsala`, `Östergötland`, `Jönköping`, `Halland`, `Norrbotten` (with or without "län"), or two-digit codes (`01` Stockholm, `14` Västra Götaland, `12` Skåne).
- **Municipalities (kommun):** all 290, by name (`Göteborg` or `Gothenburg`, `Malmö`, `Linköping`, `Umeå`; Swedish letters are optional when the name is unique) or four-digit code (`0180` Stockholm, `1480` Göteborg, `1280` Malmö).
- **Occupations:** Arbetsförmedlingen's Swedish taxonomy names. The 21 occupation fields are Administration, ekonomi, juridik · Bygg och anläggning · Chefer och verksamhetsledare · Data/IT · Försäljning, inköp, marknadsföring · Hantverk · Hotell, restaurang, storhushåll · Hälso- och sjukvård · Industriell tillverkning · Installation, drift, underhåll · Kropps- och skönhetsvård · Kultur, media, design · Militära yrken · Naturbruk · Naturvetenskap · Pedagogik · Sanering och renhållning · Säkerhet och bevakning · Transport, distribution, lager · Yrken med social inriktning · Yrken med teknisk inriktning. You can also use any of the 400 occupation groups, 2,100 occupations, a four-digit SSYK code (`2512` software developers) or a concept id. An unknown name stops the run with suggestions. For English job titles, use Keywords.

### How it works

- **Data source.** The official [JobTech JobSearch API](https://jobsearch.api.jobtechdev.se) (version 1.37.0) by Arbetsförmedlingen, the same search engine behind Platsbanken. No key is needed. Places and occupations are matched against a built-in copy of the [JobTech Taxonomy](https://taxonomy.api.jobtechdev.se) (21 counties, 290 municipalities, 21 occupation fields, 400 groups and 2,105 occupations, fetched 2026-10-12).
- **Large searches.** The API returns at most 2,100 ads per search (offset up to 2,000, 100 ads per page). When a search matches more, the actor splits it into publication-date windows until each part fits, so newest-first results stay in order and nothing is skipped. In our test, a search for all ads from the last 10 days (13,933 matches) was split into date windows and its first 2,200 ads came out newest first with no duplicates. Sorting by relevance or deadline cannot be split and returns at most 2,100 ads.
- **Politeness.** The API publishes no numeric rate limit for JobSearch (only "429 Rate limit exceeded" as a possible answer), so the actor sends one request at a time, at most one per second, with an honest User-Agent naming the actor. On HTTP 429 it waits as long as the API asks (`Retry-After`, or 60 seconds) and slows down; on server errors it retries with backoff. `robots.txt` on the API host returns 404 (checked 2026-10-12). Arbetsförmedlingen asks that full copies of all ads use its JobStream API instead of search, so this actor is built for searches and alerts and stops at 50,000 ads per run.
- **Only new.** The ad ids already delivered for a search are stored in a named key-value store in your account until the ad's last publication date. A different search keeps a separate memory.
- **Reliability.** A migrated run continues without delivering or charging ads twice. If the API fails midway, the ads read so far are kept and the status message says the run is incomplete.

### Personal data

The actor outputs jobs and organisations, not people:

- **Contact persons are never included.** The API's `application_contacts` (recruiters' and union representatives' names, e-mail addresses and phone numbers) are dropped entirely, as are the employer's e-mail and phone fields and the e-mail address for applications (`applyByEmail: true` tells you that applying by e-mail is possible; the ad on Platsbanken shows how). Street addresses are not included.
- **E-mail addresses, phone numbers and Swedish personal identity numbers are removed** from the ad text, salary text and application information. Names written inside the ad text (for example "contact the recruiting manager Anna …") are part of the employer's published ad and are not removed.
- **Sole traders.** A Swedish sole trader (enskild firma) is a natural person: the business has no organisation number of its own, and its identity number is the owner's personal identity number. The actor withholds the employer when either (a) the organisation number looks like a personal identity number (the third digit of a legal entity's number is 2 or higher; a personal number has a month there, so 0 or 1), or (b) there is no organisation number and the employer name has the "Surname, Firstname" form Arbetsförmedlingen uses for sole traders without a business name. Withheld rows keep the job (headline, occupation, municipality, county, terms, ad text) but set `employerWithheld: true`, remove the employer name, organisation number, website, logo, postcode, city and coordinates, keep the workplace name only when it is a company (AB, HB, kommun, …), and replace the owner's name in the ad text with "\[employer withheld]". These rows are still charged, because the job ad itself is delivered. In our tests 3 of 2,200 ads (0.14%) were withheld. Employers without an organisation number but with a business name (for example a café or a taxi firm) keep that name.

### Is it legal?

The job ads are published by Arbetsförmedlingen as open data under [CC0](https://creativecommons.org/publicdomain/zero/1.0/) ("Ads are licensed under CC0", JobSearch API). Source: Arbetsförmedlingen, JobTech JobSearch API, [data.arbetsformedlingen.se](https://data.arbetsformedlingen.se/). This actor is not affiliated with Arbetsförmedlingen or JobTech Dev. Personal data is handled as described above. You are responsible for using the data in line with the laws that apply to you, including the GDPR if you contact employers.

### FAQ

**Why do I get fewer ads than on Platsbanken?** Platsbanken shows all currently published ads by default. Check "Published in the last N days" (0 = all) and your other filters. The free-text search is Arbetsförmedlingen's own: a place name in a keyword (for example "utvecklare stockholm") narrows the results to that place.

**What is the difference between Keywords and Occupations?** Keywords search the ad text, headline and employer name, like the Platsbanken search box, and understand job titles in Swedish and English. Occupations use the occupation the employer chose when publishing, which is stricter but misses ads with an unusual occupation code.

**Why is "remote" true for an on-site job?** `remote` is true when the employer set the workplace model to remote or hybrid, or when the ad text mentions remote work (the same phrases Platsbanken's remote filter uses, such as "delvis på distans"). `workplaceModel` shows exactly what the employer chose; most employers leave it empty.

**Why is the employer missing?** See "Sole traders" above: the employer is a natural person, so the name and number are withheld.

**Are the organisation numbers reliable?** They come from the ad as registered with Arbetsförmedlingen. Some staffing and recruitment companies publish ads on behalf of their clients, so the organisation number is the recruiter's.

**Something is wrong or missing?** Open an issue on the actor's Issues tab and include the ad id.

### Limitations

- Only currently published ads are available; expired ads disappear from the API. Arbetsförmedlingen's historical ads are not included.
- Many fields are optional for employers: salary text, skills, workplace model, coordinates and postcode are often empty.
- Relevance and deadline sorting return at most 2,100 ads per run.
- The built-in place and occupation lists are a snapshot of the taxonomy (2026-10-12). New occupations can still be used by concept id.

***

Not affiliated with Arbetsförmedlingen or JobTech Dev.

Author: Adam Hale

# Actor input Schema

## `keywords` (type: `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.

## `regions` (type: `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` (type: `array`):

Swedish municipalities by name (Göteborg or Gothenburg, Malmö, Uppsala, Linköping, …) or four-digit code (0180 = Stockholm, 1480 = Göteborg, 1280 = Malmö).

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

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".

## `occupations` (type: `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.

## `excludeKeywords` (type: `array`):

Drop ads that contain any of these words or phrases in the headline, ad text or employer name (for example senior, konsult).

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

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.

## `workplaceModels` (type: `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".

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

Permanent includes ads marked as regular employment (vanlig anställning). Empty = all.

## `workingHours` (type: `array`):

Full time (heltid) or part time (deltid). Empty = both.

## `experience` (type: `string`):

"Not required" keeps ads where the employer ticked that no experience is needed (good for juniors and students).

## `drivingLicence` (type: `string`):

Whether the ad requires a driving licence.

## `employers` (type: `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).

## `publishedAfter` (type: `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` (type: `string`):

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.

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

Stop after this many ads. 0 = up to 50,000.

## `onlyNew` (type: `boolean`):

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.

## `stateStoreName` (type: `string`):

Named key-value store that remembers output ads for "Only new" mode. Each different search keeps its own memory inside it.

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

Add the full ad text (description) and conditions. E-mail addresses, phone numbers and personal identity numbers are removed.

## `descriptionMaxLength` (type: `integer`):

Cut the ad text after this many characters. 0 = full text.

## `requestTimeoutSecs` (type: `integer`):

Timeout for one API request.

## `maxRetries` (type: `integer`):

Retries for network errors, rate limits (HTTP 429, waiting as long as the API asks) and server errors.

## Actor input object example

```json
{
  "keywords": [
    "utvecklare",
    "python",
    "data engineer"
  ],
  "regions": [
    "Stockholm",
    "Skåne"
  ],
  "municipalities": [
    "Göteborg",
    "Malmö"
  ],
  "publishedWithinDays": 7,
  "occupations": [
    "Data/IT",
    "2512"
  ],
  "remoteOnly": false,
  "experience": "any",
  "drivingLicence": "any",
  "employers": [
    "2021002114",
    "Ericsson"
  ],
  "sort": "newest",
  "maxItems": 50,
  "onlyNew": false,
  "stateStoreName": "platsbanken-jobs-state",
  "includeDescription": true,
  "descriptionMaxLength": 0,
  "requestTimeoutSecs": 60,
  "maxRetries": 4
}
```

# Actor output Schema

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

Dataset items, one per job ad. Views: job ads, requirements.

## `summary` (type: `string`):

SUMMARY record in the default key-value store: ads matching, scanned and output, query sent to the API, date window, only-new state, employers withheld, stop reason, requests and rate limiting.

# 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 = {
    "keywords": [
        "utvecklare"
    ],
    "regions": [
        "Stockholm"
    ],
    "publishedWithinDays": 7,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("adamhaleworks/platsbanken-jobs-api-sweden").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 = {
    "keywords": ["utvecklare"],
    "regions": ["Stockholm"],
    "publishedWithinDays": 7,
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("adamhaleworks/platsbanken-jobs-api-sweden").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 '{
  "keywords": [
    "utvecklare"
  ],
  "regions": [
    "Stockholm"
  ],
  "publishedWithinDays": 7,
  "maxItems": 50
}' |
apify call adamhaleworks/platsbanken-jobs-api-sweden --silent --output-dataset

```

## MCP server setup

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

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/uMIEGMtCgvYPSMtxb/builds/4yuUyCR8jBtas5Bt2/openapi.json
