Platsbanken Jobs Scraper
Pricing
from $1.20 / 1,000 job extracteds
Platsbanken Jobs Scraper
Search and export public Platsbanken jobs with employers, locations, salary type, working terms, dates, and application links for recruiting and labor-market analysis.
Pricing
from $1.20 / 1,000 job extracteds
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Search and export Platsbanken jobs from Sweden's public JobTech vacancy feed. Get structured employer, location, salary type, working terms, publication dates, deadlines, descriptions, and application links without operating a browser.
Use the Actor for recurring recruiting research, named-employer hiring signals, job-feed ingestion, and Swedish labor-market analysis.
What does Platsbanken Jobs Scraper do?
The Actor searches the official public data feed behind Arbetsförmedlingen's Platsbanken service. It turns each matching vacancy into one normalized dataset row.
You can:
- search by role, skill, employer, or phrase;
- filter by Swedish municipality or region;
- target official JobTech occupation fields and groups;
- restrict results by publication date;
- monitor one employer by name or organization number;
- export up to 10,000 matching jobs per run;
- include plain-text or formatted descriptions;
- download results as JSON, CSV, Excel, XML, RSS, or HTML.
The default dataset contains complete job records. There is no separate detail record or detail charge.
Who is this Actor for?
Recruiters and staffing teams
Build current candidate-sourcing lists by role and city. Keep the employer, workplace, deadline, and apply URL beside every opening.
Sales and account intelligence teams
Monitor named employers for new hiring activity. Swedish organization numbers help match vacancy records to CRM accounts when the source publishes them.
Job boards and aggregators
Collect stable JobTech vacancy IDs, canonical Platsbanken URLs, descriptions, and external application links for a downstream feed.
Labor-market analysts
Repeat the same region and occupation-taxonomy query on a schedule. Compare employer, occupation, vacancy-count, and work-term distributions over time.
Data and automation teams
Send typed records to Google Sheets, a warehouse, Make, Zapier, or an internal API without maintaining a scraper or browser fleet.
Why use the official JobTech data route?
The Actor uses the public JSON API that serves Platsbanken vacancy data. That route is faster and less fragile than parsing rendered pages.
Benefits include:
- no login or API key for the source;
- no browser or proxy configuration;
- stable source IDs for deduplication;
- source-side pagination and taxonomy filters;
- lower memory and transfer use than browser scraping;
- bounded retries for temporary API or network failures.
The Actor does not claim historical vacancies. It exports records available from the source at run time and matching your input.
What Platsbanken job data can I extract?
| Group | Included fields |
|---|---|
| Identity | JobTech ID, external ID, headline, canonical listing URL |
| Employer | Name, workplace, organization number, website |
| Location | Municipality, region, codes, city, postcode, street, coordinates, workplace model |
| Occupation | Occupation, concept ID, occupation group, occupation field |
| Working terms | Employment type, duration, working-hours type, scope percentage |
| Salary | Salary type and source-provided salary description |
| Dates | Publication date, last publication date, application deadline |
| Application | Application URL, public application email, reference |
| Description | Plain text and optional formatted HTML |
| Skills | Required and preferred JobTech taxonomy labels |
| Context | Vacancy count, source type, query, source total, scrape timestamp |
Fields remain null when the employer or source does not publish a value.
Empty skill lists are returned as arrays.
How to scrape Platsbanken jobs
- Open the Actor input in Apify Console.
- Enter a keyword such as
developer,sjuksköterska, orVolvo. - Optionally add municipality names, municipality codes, or region codes.
- Add an employer or JobTech occupation taxonomy filter if needed.
- Choose the maximum number of matching jobs.
- Run the Actor.
- Open the Dataset items output.
- Download or integrate the dataset in your preferred format.
For a quick evaluation, start with 10 records. For scheduled work, test your
exact filters before increasing maxItems.
Input parameters
| Input | Type | Default | Purpose |
|---|---|---|---|
query | string | developer | Role, skill, employer, or phrase; empty means newest jobs |
locations | string array | [] | Municipality/region names or official numeric codes |
employer | string | — | Employer name, workplace, or organization-number substring |
occupationFields | string array | [] | Official JobTech occupation-field concept IDs |
occupationGroups | string array | [] | Official JobTech occupation-group concept IDs |
publishedAfter | string | — | ISO date or timestamp lower bound |
publishedBefore | string | — | ISO date or timestamp upper bound |
maxItems | integer | 100 | Maximum saved jobs, from 1 to 10,000 |
includeDescriptionHtml | boolean | false | Add formatted HTML descriptions |
includeSearchTotal | boolean | true | Add the source match count to each row |
Date-only values such as 2026-08-01 are accepted. The Actor rejects invalid
dates and a lower bound later than the upper bound.
Two-digit location codes are sent as region filters. Four-digit location codes are sent as municipality filters. Other values are matched case-insensitively against returned municipality, region, city, and country names.
Example input: Stockholm developer jobs
{"query": "developer","locations": ["Stockholm"],"maxItems": 10,"includeDescriptionHtml": false,"includeSearchTotal": true}
A current local test of this input returned 10 matching records from a source result set of 648.
Example input: monitor a Swedish employer
{"query": "Volvo","employer": "Volvo","maxItems": 50,"includeDescriptionHtml": false,"includeSearchTotal": true}
Schedule this input daily or weekly and deduplicate downstream by jobId to
track current named-account hiring signals.
Example input: Data/IT labor-market analysis
{"query": "developer","locations": ["01"],"occupationFields": ["apaJ_2ja_LuF"],"maxItems": 200,"includeDescriptionHtml": false,"includeSearchTotal": true}
Region code 01 selects Stockholms län. apaJ_2ja_LuF is the JobTech Data/IT
occupation field used in this example.
Example output
This shortened record reflects the Actor's current output shape:
{"jobId": "31371444","headline": "Backend Developer","webpageUrl": "https://arbetsformedlingen.se/platsbanken/annonser/31371444","applicationUrl": "https://recruit.agile.nu/apply/jp-cec71f71f3e818e6?source=platsbanken","publicationDate": "2026-07-31T09:12:04","applicationDeadline": "2026-09-10T23:59:59","employerName": "Agile Resources AB","workplaceMunicipality": "Stockholm","workplaceRegion": "Stockholms län","employmentType": "Vanlig anställning","workingHoursType": "Heltid","salaryType": "Fast månads- vecko- eller timlön","searchQuery": "developer","searchTotal": 648,"scrapedAt": "2026-09-07T12:30:00.000Z"}
The actual dataset also includes occupation taxonomy, scope, description, skills, organization number, workplace address, and other documented fields.
How much does it cost to export Platsbanken jobs?
The Actor uses pay-per-event pricing:
- one
startevent per run; - one
jobevent for every complete vacancy saved.
At the BRONZE tier, the start event is $0.001 and each saved job is $0.002. For any run, multiply the number of saved jobs by the applicable per-job rate, then add the one-time start fee. For example, a 10-job run has 10 job events, a 100-job run has 100 job events, and a 1,000-job export has 1,000 job events.
Your Apify tier can use a different per-job rate. The Console shows the applicable price before the run. Filtered-out, duplicate, malformed, or failed records are not charged as jobs.
Pagination, limits, and filtering behavior
The Actor requests up to 100 source rows at a time. Official numeric location, occupation, query, and date filters are sent to JobTech before pagination. Textual location and employer filters are applied to typed source records.
maxItems controls matching rows saved, not raw source rows inspected. A narrow
employer or textual-location filter can therefore require more source pages than
a broad query.
Every stable jobId is emitted at most once per run. The Actor stops when it
reaches maxItems or the source reports no more results.
Reliability and failure behavior
Each source request has a 30-second timeout. Temporary network errors, HTTP 429, and server errors receive up to three attempts with backoff.
The Actor fails instead of returning a misleading empty success when the API returns malformed JSON, an unexpected content type, or a stable request error. A valid query with no current matches finishes successfully with an empty dataset.
No automatic residential proxy, browser, session, or paid source fallback is enabled.
Recurring monitoring workflow
- Choose a stable query and filters.
- Keep
includeSearchTotalenabled for market-size context. - Schedule the Actor at your desired interval.
- Store
jobId,publicationDate, andlastPublicationDatedownstream. - Compare each run with the prior snapshot.
- Route newly observed IDs to recruiters, alerts, or analytics.
The Actor itself does not maintain cross-run state or label records as new, changed, or removed. This keeps every run reproducible and lets your destination system define retention rules.
Export and integration options
Use Apify integrations to send the default dataset to:
- Google Sheets for recruiter review;
- Make or Zapier for workflow automation;
- Slack or email through your own alert scenario;
- BigQuery, Snowflake, PostgreSQL, or object storage;
- a webhook-backed internal job ingestion service.
CSV and Excel work well for ad hoc analysis. JSON preserves arrays and nullable fields for programmatic processing.
Run with the Apify API using cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~sweden-platsbanken-jobs-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"query":"developer","locations":["Stockholm"],"maxItems":10}'
Use the returned run's default dataset ID to fetch output after completion. Never commit your Apify token to source control.
Run with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/sweden-platsbanken-jobs-scraper').call({query: 'developer',locations: ['Stockholm'],maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Run with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("automation-lab/sweden-platsbanken-jobs-scraper").call(run_input={"query": "developer","locations": ["Stockholm"],"maxItems": 100,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Use Platsbanken Jobs Scraper with MCP
Add the Actor to Claude Code through Apify's MCP server:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/sweden-platsbanken-jobs-scraper"
For Claude Desktop, Cursor, or VS Code, use this MCP server configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/sweden-platsbanken-jobs-scraper"}}}
Example prompts showing MCP usage include:
- “Using MCP, find 25 Platsbanken developer jobs in Stockholm and group them by employer.”
- “Export current Volvo vacancies from Sweden with deadlines and apply URLs.”
- “Collect Data/IT vacancies in region 01 for my weekly hiring dashboard.”
Responsible use and legality
The Actor accesses public vacancy data and does not bypass authentication. You are responsible for your use of the output and for complying with applicable source terms, data-protection rules, marketing rules, and employment law.
Vacancies can contain public contact details supplied for recruitment. Use those details only for appropriate purposes. Avoid unsolicited bulk messaging, profiling individuals, or retaining personal data longer than necessary.
Do not present a vacancy as current without checking its deadline and latest source state.
Troubleshooting
Why did the run return fewer jobs than maxItems?
The source may have fewer matches, or your employer/text-location filter may
exclude source hits. Review searchTotal, loosen filters, and test a broader
query.
Why is a salary description null?
Many Swedish vacancies state only a salary type or omit compensation details. The Actor returns source values and does not estimate missing salaries.
Why did the run fail with an input error?
Check that maxItems is an integer from 1 to 10,000, arrays contain strings,
and date filters are valid ISO dates. publishedAfter cannot be later than
publishedBefore.
Why did the source request fail?
Inspect the run log for the final status. Temporary failures are retried three times. A persistent source outage or invalid API filter fails the run so you can retry later without treating missing data as a real empty market.
Limitations
- Results reflect the current public JobTech feed, not a historical archive.
- Completeness and field availability depend on source and employer data.
- Salary amount is often absent; the Actor never infers it.
- Free-text employer and location filters are substring matches.
- The Actor does not translate Swedish labels or descriptions.
- It does not send alerts or compare prior runs by itself.
- Upstream API changes or outages can interrupt runs.
Related Automation Lab Actors
- InfoJobs Spain Jobs Scraper for Spanish vacancy monitoring.
- Arbeitnow EU and DACH Jobs Scraper for European and DACH job feeds.
- Remote OK Jobs Feed Scraper for remote-first vacancies.
Choose this Actor when you need Sweden's official Platsbanken/JobTech data and Swedish location, occupation, and employer fields.
FAQ
Does the Actor require a Platsbanken account?
No. It uses the public JobTech vacancy API and requires no source login.
Does it require an Apify proxy?
No. The current implementation makes direct HTTPS requests to the public API.
Can I export every current job?
Leave query empty and raise maxItems. Large broad exports take more requests
and cost one job event per saved vacancy.
Can I search by organization number?
Yes. Put the public organization number in employer. It is matched against the
employer metadata returned by JobTech.
How should I identify duplicates across scheduled runs?
Use jobId as the stable source identifier. Keep publication timestamps and
application deadlines to interpret changes over time.
Are descriptions included?
Plain text is included by default. Enable includeDescriptionHtml when your
destination needs the source's formatted description.
Are filtered-out records charged?
No. The job event is emitted only for accepted records pushed to the default
dataset.