# Jobindex.dk Danish Jobs Scraper (`loudtzu/jobindex-dk-scraper`) Actor

Scrape Danish job ads from Jobindex.dk search results: title, employer, area, workplace, dates, salary and ad summary. Contact names, phones and emails are removed.

- **URL**: https://apify.com/loudtzu/jobindex-dk-scraper.md
- **Developed by:** [LOUDTZU TZULOUD](https://apify.com/loudtzu) (community)
- **Categories:** Jobs
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 71.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 1,000 jobs

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/actors/running/actors-in-store.md#pay-per-event

## 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

## Jobindex.dk Danish Jobs Scraper

Scrape job ads from **Jobindex.dk**, Denmark's largest job site, into JSON, CSV or Excel. Search by keyword and town (with radius) or paste your own Jobindex search URLs.

**Price: $0.10 per 1,000 jobs + $0.001 per run.** The run fee is charged only after the first job is saved, so a failed or empty run costs $0.

### What you get

| Field | Example |
|---|---|
| title | Sygeplejerske til udekørende nattevagt |
| company | Faxe Kommune |
| area | Nivå |
| workplaces | city, postcode, street (house number → `[nr]`), lat/lon rounded to ~1 km |
| firstDate / applyDeadline | 2026-10-20 / 2026-11-17 |
| salary | if the employer gave one |
| snippet | ad summary shown in the search results |
| url / applyUrl | Jobindex job page / full ad |
| companyProfileUrl, companyHomepage, homeWorkplace, paidAd, applyAsap, id, searchLabel, scrapedAt | |

The data comes from the search result pages only (no logins, no hidden APIs, robots.txt respected). The full ad text is not included; use `applyUrl` to open it.

### Input

- **Search terms** – e.g. `sygeplejerske`, `bogholder`. Each is searched separately.
- **Locations** – e.g. `8000 Aarhus C`, `Odense`. Combined with every term. **Radius (km)** optional.
- **Search URLs** – any `jobindex.dk/jobsoegning…` URL.
- **Max jobs** – up to 50,000 per run. Jobindex.dk shows at most 50 pages (1,000 jobs) per search, so split big searches by town or keyword.

Duplicates across searches are removed.

### Privacy

Recruiter and contact person names, phone numbers and e-mail addresses in titles, summaries and addresses are replaced by `[name]`, `[phone]` and `[email]`. House numbers become `[nr]` and coordinates are rounded to 2 decimals. Employer names are kept. Masking uses Danish name lists and contact cues (Kontaktperson, Kontakt os, Yderligere oplysninger, Med venlig hilsen, Your contact person is, …), and also catches a name followed by "glæder sig", "kan kontaktes", a job title in brackets or on the next line, and Danish -sen/-søn surnames. A final pass over every text field masks phone numbers from any country and in any format (incl. 12.34.56.78) and disguised e-mails. Labelled numbers (CVR, Ref.nr., Sagsnr., EAN) are kept. Links, image URLs and ids are never changed.

**Known limits:** a lone surname that is also an ordinary Danish word or place (e.g. "Lund", "Holm") standing alone on a line without a first name or contact cue may be kept; employer names that are a person's name (e.g. "Johannes Testhages Hus") are kept as the employer; a company name of two capitalised words in a contact sentence (e.g. "Du kan kontakte Jobcenter Aarhus", "Mærsk Line glæder sig") may be masked as a name.

### Price compared with other Jobindex scrapers

Prices from the Apify Store, October 2026, per 1,000 jobs (free plan / paid plans), plus each run's start fee.

| Actor | Users | Per 1,000 jobs | Start fee | 1 run of 100 jobs | 1 run of 1,000 jobs | We're cheaper from (break-even) |
|---|---|---|---|---|---|---|
| **This Actor** | new | **$0.10** | $0.001 (after 1st job) | **$0.011** | **$0.101** | – |
| blackfalcondata/jobindex-scraper | 105 | $2.00 | $0.01 | $0.21 | $2.01 | job 1 |
| lexis-solutions/jobindex-dk-scraper | 40 | $2.03 / $1.70 / $1.62 / $1.35 | $0.0025 | $0.20 / $0.17 / $0.16 / $0.14 | $2.03 / $1.70 / $1.62 / $1.35 | job 1 |
| shahidirfan/jobindex-dk-scraper | 19 | $0.99 / $0.93 / $0.86 / $0.80 | $0.0005 | $0.10 / $0.09 / $0.09 / $0.08 | $0.99 / $0.93 / $0.86 / $0.80 | job 1 |
| memo23/jobindex-scraper | 19 | $1.50 | $0.0005 | $0.15 | $1.50 | job 1 |
| santamaria-automations/jobindex-dk-scraper | 9 | $3.00 (list) / $5.00 (detail) | $0.001 | $0.30 | $3.00 | job 1 |
| trev0n/jobindex-scraper | 5 | $1.50 | $0.005 | $0.16 | $1.51 | job 1 |
| parsebird/jobindex-dk-scraper | 2 | $0.90 | $0.00005 | $0.09 | $0.90 | job 2 (1 job: $0.00095 vs our $0.0011) |
| scrapersdelight/jobindex-jobs-scraper | 2 | $0.50 | none | $0.05 | $0.50 | job 3 (2 jobs: $0.0010 vs our $0.0012; equal at 2.5) |
| corvuslab/jobindex-scraper | 3 | $1.99 | $0.01 | $0.21 | $2.00 | job 1 |
| delectable_incubator/…-lavpris-low-cost | 3 | $1.48 / $1.48 / $1.38 / $1.28 | $0.00005 | $0.15 / $0.15 / $0.14 / $0.13 | $1.48 / $1.48 / $1.38 / $1.28 | job 1 |

Plans: free / Bronze (Starter) / Silver (Scale) / Gold+ (Business). Break-even: with our $0.001 start fee and $0.0001 per job against scrapersdelight ($0.50/1k, no start fee) we cost less from job 3, and against parsebird ($0.00005 start + $0.90/1k) from job 2; against every other listed rival from job 1. Some rivals open every job page and return the full ad text; this Actor returns the search-result data only.

### Tips

- Use 256 MB memory (default). Datacenter proxy is enough.
- A search with 0 results fails the run with a clear message and nothing is charged.

Not affiliated with Jobindex A/S.

### Data sources

Name lists used for masking: Wikidata given/family names (CC0, `src/data/wd_*.txt.xz`), plus the lists in `LICENSES/` (ONS OGL, SCOWL, Wikidata CC0). No GPL or LDC data.

### Example output

One item from a test run on Nov 2, 2026 (long text shortened):

```json
{
  "id": "h1691421",
  "url": "https://www.jobindex.dk/vis-job/h1691421",
  "applyUrl": "https://www.jobindex.dk/jobannonce/h1691421/sygepleje-med-naervaer-bliv-en-del-af-et-fast-team-i-private-hjem",
  "title": "Sygepleje med nærvær – bliv en del af et fast team i private hjem",
  "company": "Privat Sygeplejerske ApS",
  "companyProfileUrl": "https://www.jobindex.dk/virksomhed/68534/privat-sygeplejerske-aps",
  "companyHomepage": "https://www.privatsygeplejerske.dk/",
  "area": "Sjælland, Fyn, Sydjylland og Nordjylland",
  "workplaces": [],
  "homeWorkplace": false,
  "salary": null,
  "firstDate": "2026-10-22",
  "applyDeadline": "2026-11-13",
  "applyAsap": true,
  "paidAd": true,
  "snippet": "Vil du have mulighed for at lære patienten at kende, bruge din faglighed grundigt og skabe tryghed for både patienten og de pårørende?\nDu bliver en del af et lille, fast team omkring den enkelte patient. Det giver dig mulighed for at opb...",
  "searchLabel": "sygeplejerske",
  "scrapedAt": "2026-11-02T16:42:28+00:00"
}
```

### FAQ

#### How much does a run cost?

This Actor uses pay-per-event pricing. You pay only for these events:

- **Run start**: $0.001 per run – Charged once per run, only after the first job has been saved. Failed runs and runs with 0 jobs are not charged.
- **Job**: $0.0001 each ($0.1 per 1,000) – One unique Jobindex.dk job ad saved to the dataset.
  Set `maxItems` to cap the cost of a run.

#### How many results can one run return?

Up to `maxItems` (default 100, maximum 50,000).

#### How do I export or automate the results?

Results are saved to the run's dataset. Download them as JSON, CSV, Excel or HTML, read them through the Apify API, or run the Actor on a schedule and send the results to Google Sheets, Slack, Zapier, Make or a webhook.

#### Is this an official Jobindex tool?

No. It is an independent tool and is not affiliated with or endorsed by Jobindex. It reads only publicly available data.

# Actor input Schema

## `searchTerms` (type: `array`):

Job titles or keywords, e.g. 'sygeplejerske', 'bogholder'. Each term is searched separately.

## `locations` (type: `array`):

Danish towns or postcodes, e.g. '8000 Aarhus C', 'Odense'. Leave empty for all of Denmark.

## `radiusKm` (type: `integer`):

Search radius around each location.

## `startUrls` (type: `array`):

Optional jobindex.dk/jobsoegning URLs (copy from the browser after setting filters).

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

Stop after this many jobs (all searches together). Jobindex.dk shows at most 1,000 jobs per search.

## `proxyConfiguration` (type: `object`):

Datacenter proxy (default). Residential is not needed and is refused.

## Actor input object example

```json
{
  "searchTerms": [
    "sygeplejerske"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `jobs` (type: `string`):

No description

## `jobsAll` (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 = {
    "searchTerms": [
        "sygeplejerske"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("loudtzu/jobindex-dk-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 = { "searchTerms": ["sygeplejerske"] }

# Run the Actor and wait for it to finish
run = client.actor("loudtzu/jobindex-dk-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 '{
  "searchTerms": [
    "sygeplejerske"
  ]
}' |
apify call loudtzu/jobindex-dk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,loudtzu/jobindex-dk-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/f3PeIL9CW08Yl2YD8/builds/MNZrqrRlOuDvhWjX3/openapi.json
