Duunitori Jobs Scraper
Pricing
Pay per event
Duunitori Jobs Scraper
Scrape Duunitori.fi jobs by keyword, city, or URL. Export company, location, salary, descriptions, dates, and application links.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape Duunitori.fi job listings for Finnish recruiting, HR analytics, labor-market research, and job aggregation workflows.
What does Duunitori Jobs Scraper do?
Duunitori Jobs Scraper extracts public Finnish job listings from Duunitori.fi. It can run a keyword search, filter by location, process a copied Duunitori search URL, or enrich a specific job detail URL. The output is a normalized Apify dataset that is ready for CSV, JSON, Excel, API, Google Sheets, BigQuery, or recruiting automation workflows.
Who is it for?
Recruiters can monitor competitor hiring and new role openings in Finland. HR technology teams can feed Finnish job-board data into matching, analytics, or alerting products. Labor-market analysts can track hiring demand by city, category, employer, role family, and salary signal. Job aggregators can collect public Duunitori listings without building their own scraper.
Why use this Duunitori scraper?
Duunitori pages expose job cards in server-rendered HTML and detail data in Schema.org JobPosting JSON-LD. This actor uses that public structure directly instead of a browser, making runs lightweight, fast, and cost-conscious. Detail-page enrichment is optional so you can choose between quick discovery runs and richer records with descriptions and application URLs.
What data can you extract?
The dataset includes job title, company, location, salary text when visible, employment type, posting date, deadline, description, tags, category, application URL, Duunitori source URL, job ID, and scrape timestamp. Some fields depend on what the employer provided in the listing.
How much does it cost to scrape Duunitori jobs?
This actor uses pay-per-event pricing: a $0.005 run-start event plus one item event for each saved Duunitori listing. The current item event is tiered by Apify plan:
| Plan | Price per saved job | Example: 100 jobs | Example: 1,000 jobs |
|---|---|---|---|
| FREE | $0.00018316 | about $0.023 | about $0.188 |
| BRONZE | $0.00015927 | about $0.021 | about $0.164 |
| SILVER | $0.00012423 | about $0.017 | about $0.129 |
| GOLD | $0.00009556 | about $0.015 | about $0.101 |
| PLATINUM | $0.00006371 | about $0.011 | about $0.069 |
| DIAMOND | $0.00004460 | about $0.009 | about $0.050 |
For example, a FREE-plan user saving 100 jobs pays roughly $0.005 + 100 × $0.00018316 = $0.0233 before any separate Apify platform usage. With a $5 monthly Apify free credit, that is roughly 27,000 saved jobs at the FREE item tier if the credit were spent only on this actor's charge events. Start with the prefilled 20-job input to check the shape of the data, then increase maxItems for scheduled monitoring or larger exports.
Quick start
- Enter a keyword such as
developer,data engineer,sales, orsairaanhoitaja. - Optionally enter a city or area such as
Helsinki,Espoo,Tampere, orTurku. - Set
maxItemsto the maximum number of jobs you want. - Keep
includeDetailsenabled if you need descriptions, deadlines, employment type, and application links. - Run the actor and export the dataset.
Input fields
keywords is the Duunitori search phrase. location is an optional city or area. startUrls accepts Duunitori search-result URLs and individual job URLs; when provided, those URLs are used instead of keyword/location search. maxItems limits saved records. includeDetails controls whether the actor follows job detail pages for richer fields.
Input example
{"keywords": "developer","location": "Helsinki","maxItems": 50,"includeDetails": true}
Direct URL example
{"startUrls": [{ "url": "https://duunitori.fi/tyopaikat?haku=data%20engineer&alue=Espoo" }],"maxItems": 40,"includeDetails": true}
Output fields
| Field | Description |
|---|---|
title | Job title from the search card |
company | Hiring company |
location | City or location text |
salary | Salary text or structured salary when present |
employmentType | Schema.org employment type, when available |
postedDate | Posting date from the card or detail page |
validThrough | Application deadline from JobPosting JSON-LD |
description | Job description from detail-page structured data |
tags | Duunitori labels such as easy apply or salary badge |
category | Duunitori job category |
applicationUrl | Apply button URL, often an external ATS link |
sourceUrl | Duunitori job URL |
jobId | Duunitori job identifier |
scrapedAt | ISO timestamp when the row was saved |
Output example
{"title": "Business Developer (Product Owner), Pohjola Vakuutus, Helsinki","company": "OP Pohjola","location": "Helsinki","employmentType": "FULL_TIME","applicationUrl": "https://op-careers.fi/...","sourceUrl": "https://duunitori.fi/tyopaikat/tyo/...","jobId": "20335300"}
Search tips
Use both Finnish and English terms when monitoring bilingual roles. Leave location empty for nationwide exports. Use direct Duunitori URLs when you already have a carefully tuned search in the website UI. Disable detail enrichment for a very fast first pass, then enable it for final records.
Scheduling and monitoring
Create an Apify task with your preferred keyword, location, and item limit. Schedule it daily or weekly to track new Finnish jobs. Send dataset output to Slack, email, Google Sheets, or a data warehouse using Apify integrations and webhooks.
Integrations
Recruiting teams can send new records to Airtable, Google Sheets, or a CRM. Analysts can load CSV or JSON into BigQuery, Snowflake, or a BI dashboard. Product teams can call the actor from an application backend and use the dataset API as a normalized job feed.
Node.js API usage
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/duunitori-jobs-scraper').call({keywords: 'developer',location: 'Helsinki',maxItems: 50,includeDetails: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python API usage
from apify_client import ApifyClientclient = ApifyClient('MY-APIFY-TOKEN')run = client.actor('automation-lab/duunitori-jobs-scraper').call(run_input={'keywords': 'sairaanhoitaja','maxItems': 100,'includeDetails': True,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item['title'], item.get('company'))
cURL API usage
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~duunitori-jobs-scraper/runs?token=$APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"keywords":"developer","location":"Helsinki","maxItems":50,"includeDetails":true}'
MCP usage
Use the Apify MCP server to call this actor from Claude, Cursor, VS Code, OpenAI Agents SDK, or another MCP client. To expose only this scraper, configure the server URL with the actor tool filter:
https://mcp.apify.com?tools=automation-lab/duunitori-jobs-scraper
Authentication is required. Clients with OAuth support can connect to https://mcp.apify.com and sign in to Apify in the browser. Clients that use static configuration should send your Apify API token as an authorization header.
Claude Code CLI setup:
$claude mcp add --transport http apify-duunitori "https://mcp.apify.com?tools=automation-lab/duunitori-jobs-scraper"
If your CLI supports headers, add Authorization: Bearer <APIFY_TOKEN> through the client's header option or environment-backed config. Otherwise use OAuth in a supported client or generate a compatible setup at https://mcp.apify.com/.
Claude Desktop / Cursor-style JSON config:
{"mcpServers": {"apify-duunitori": {"url": "https://mcp.apify.com?tools=automation-lab/duunitori-jobs-scraper","headers": {"Authorization": "Bearer <APIFY_TOKEN>"}}}}
Replace <APIFY_TOKEN> with a token from Apify Console → Settings → API & Integrations. Do not paste the token into prompts or shared project files. If your MCP client does not support HTTP headers, use the Apify MCP configurator at https://mcp.apify.com/ to generate a compatible setup for that client.
Example prompts: “Find recent developer jobs in Helsinki and summarize hiring companies,” “Export salary-bearing Duunitori jobs for Tampere,” or “Monitor Finnish nursing jobs weekly and flag new employers.”
Common workflows
- Competitor hiring monitoring for recruiters.
- Finnish labor-market dashboards for analysts.
- Job aggregator feed collection.
- Salary-signal extraction for compensation research.
- Weekly hiring alerts by city or keyword.
- Enrichment of internal employer lists with active job postings.
Performance notes
The actor uses HTTP requests and Cheerio parsing, not a browser. Detail enrichment requires one extra page request per job, so disabling includeDetails is faster. The default memory is 256 MB, which is appropriate for this lightweight actor.
Troubleshooting
If no results appear, broaden the keyword or remove the location filter. If descriptions or application links are missing, make sure includeDetails is enabled. If a direct URL fails, confirm it is a public Duunitori search or /tyopaikat/tyo/ detail URL. If salary is empty, the employer likely did not publish salary information.
Legality and responsible use
This actor extracts public job-listing pages. You are responsible for using the data lawfully, respecting Duunitori terms, and complying with privacy, database, and employment-data rules that apply to your use case. Avoid excessive scheduling and do not use the data for spam or unlawful profiling.
Related scrapers
This actor belongs with Finland and European recruitment-data workflows. After publication, cross-link it with other automation-lab job-board scrapers, company scrapers, lead-generation actors, and market-intelligence tools on Apify.
FAQ
Does it require a Duunitori account? No. It reads public pages.
Can it scrape external ATS pages? No. It records application URLs but does not crawl external application systems.
Can I monitor jobs every day? Yes. Use Apify tasks and schedules.
Can I scrape exact Duunitori URLs? Yes. Put them in startUrls.
Why is salary sometimes empty? Salary is only available when Duunitori or the employer publishes it.
Field notes
- Title and company come from search cards first, preserving the wording users see in Duunitori search results.
- Detail pages are used for JobPosting JSON-LD when
includeDetailsis enabled. - Application URLs may point to Duunitori or to an external employer ATS.
- Category values are Duunitori category labels and may be Finnish.
- Tags are user-visible badges from the search result card.
- Posting dates can be localized card text or ISO dates from JSON-LD when details are enabled.
validThroughis usually an ISO deadline from Schema.org data.scrapedAthelps scheduled users identify which run produced a record.- If a card and detail page disagree, the detail page is preferred for structured dates, application links, and employment type.
- Runs are best compared by
sourceUrlorjobIdwhen building deduplication logic for recurring monitoring.