Swedish and Norwegian jobs from Platsbanken (Arbetsförmedlingen) and NAV Arbeidsplassen open-data APIs: English-normalized schema, monitor mode, no recruiter contacts. Sweden needs no key; Norway uses your own NAV token. Not affiliated with, endorsed by or sponsored by Arbetsförmedlingen or NAV.
All notable changes to this Actor are documented here.
2026-11-02: Pricing notes
README: the automatic Actor start fee ($0.00005 per GB of run memory, once per run) is listed in the cost table.
2026-11-01
Store title is now Sweden & Norway Jobs Scraper (Platsbanken, NAV), so the Store page says which countries and sources it covers. No input field, output field, price or behaviour changed.
2026-10-17: Compliance update
No input field, output field or price-event key was removed or renamed. Prices and the Sweden-only default input (no token needed) are unchanged.
Added
REMOVED_ADS in the run's key-value store, written on every run and never charged: the Norwegian ads you received that NAV now reports as inactive, deleted or expired (id, source, reason, inactiveSince, detectedAt). In monitor mode it covers ads from earlier runs, each listed once; in any mode it covers ads delivered earlier in the same run. A status message tells you to remove them, as NAV's API terms require. The output schema links the record and RUN_SUMMARY counts it (removedAds).
Limited permissions: when the monitor store can't be opened (HTTP 401/403, for example because an older version created it with full permissions), monitor mode switches to <name>-v2 and says so in the status message. That first run delivers all matching postings free of charge (some may repeat earlier ones) and records them; later runs work as before. RUN_SUMMARY adds monitorStore, monitorStoreFallbackFrom and freeAfterStoreSwitch.
LICENSE with an all-rights-reserved notice.
Changed
The NAV token stays with NAV. It is only sent to https://pam-stilling-feed.nav.no. Feed links (next_url, ad links) and redirects that point to another host, or don't use https, are not followed; the run says so in its status message and continues with what it could fetch from NAV.
Expired Norwegian ads (expires in the past) and ads whose details are no longer ACTIVE are treated like inactive ads: never delivered or charged.
companyOrgId is null for Swedish sole traders, whose organisation number is the owner's personal identity number (third digit 0 or 1; with or without hyphen, 16 prefix or century).
package.json: "license": "UNLICENSED" (was ISC) and "private": true. The unused @crawlee/cheerio dependency is removed; the lockfile loses its 7 packages.
RUN_SUMMARY.perSource lists warnings a source worked around.
Docs
README: data sources and their terms in plain text (JobTech ads are CC0; NAV's API terms), "Not affiliated with, endorsed by or sponsored by Arbetsförmedlingen or NAV.", NAV token steps without outside links, your duties for Norwegian ads with a REMOVED_ADS example, the -v2 store, an updated legal FAQ, wrong-charge and data-protection answers. The other AIDevs Actors are listed under their current Store titles.
Input descriptions and the Store and Actor descriptions contain no outside links; the descriptions add the not-affiliated sentence and no longer say "official".
[0.2.0] — 2026-10-10
Store title is now Nordic Jobs Scraper. No input field, output field or price-event key was removed or renamed.
Fixed
Every scrape-mode push was rejected. The dataset schema declared isNewSinceLastRun as boolean, but scrape mode (the default) outputs null, and Apify discards any push that doesn't match the schema. Because records were charged before being pushed, the first record of each source was charged without being delivered. The field now allows null.
Charging now happens after a successful push. Nothing is pushed once the maximum total charge can't cover another posting, or once Actor.charge() reports the limit; before, the next charge overshot by one and the platform ended the run.
Monitor mode only remembers postings that were actually delivered. A posting stopped by the cost limit used to be marked as seen and was never delivered.
The PII scrubber no longer redacts dates (31.10.2026), working hours (08.00-16.00) or salary ranges (45000-55000); real phone numbers and personal emails are still redacted. HTML entities such as ø are decoded.
HTTP 429 back-off is capped (5 pauses) for both APIs instead of retrying forever. JobTech's published-after uses the documented YYYY-MM-DDTHH:MM:SS format.
Changed
Default input covers Sweden only (sources: ["platsbanken"]; no key needed). Norway is opt-in with your own NAV token.
Norway selected without a token, or with a token NAV rejects, is skipped with a clear status message instead of an error. The run doesn't fail for it.
The same posting is delivered (and charged) once per run; postings flagged with duplicateOf are delivered free.
A run fails (with a clear message) only when every source it tried failed and nothing was delivered.
The NAV token field moved next to Sources and explains how to get a token and NAV's terms.
Added
RUN_SUMMARY lists per-source status, the charged count and the final status message; the output schema links it. New dataset views (overview with location columns, details).
.actor/store-listing.json with two Sweden-only tasks, an original icon (.actor/icon.svg, .actor/icon.png), memory limits and a prefill for Apify's daily test (20 postings).
Real tests (mocked HTTP, synthetic JobTech and NAV fixtures) replace the placeholder test. CI runs build, tests and the schema check.
Docs
README rewritten: quick start, sample output, prices ($0.001 per posting, down to $0.0007 with plan discounts), step-by-step NAV token guide, NAV terms (you are the data controller and must remove inactive ads), FAQ and limitations.