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

Scrape job listings from Jobindex.dk, Denmark's largest job board: titles, companies, locations, salaries, deadlines, and full descriptions. Search by keyword, location, or a direct search URL.

- **URL**: https://apify.com/parsebird/jobindex-dk-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:** Jobs, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 job scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Jobindex.dk Jobs Scraper

Extract job listings from [Jobindex.dk](https://www.jobindex.dk), Denmark's largest job board, without writing a single line of scraping code. The **Jobindex.dk Jobs Scraper** searches by keyword, geo area, or a pasted Jobindex search URL, and returns clean, structured job data — titles, companies, locations, dates, application links, and full descriptions — ready for analysis, monitoring, or integration into your own job board, ATS, or dashboard.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search by keyword and geo area, pull the full HTML/text job description plus direct application and Jobindex-tracking links, and get company logo, profile, and rating data for every listing — 37 structured fields per job.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Apify Actor: parsebird/jobindex-dk-scraper. Scrapes job listings from Jobindex.dk (Denmark's largest job board). Call via ApifyClient: client.actor("parsebird/jobindex-dk-scraper").call(run_input={"keyword": "software", "results_wanted": 20, "max_pages": 3}). Also accepts startUrl (paste a jobindex.dk /jobsoegning search URL directly — its query params override keyword/location), location (a Jobindex geoareaid for filtering by area), and proxyConfiguration. Returns per job: job_id, title, company, location, posted_date, expires_date, apply_deadline, apply_deadline_asap, description_html, description_text, detail_url, application_url, application_tracking_url, company_profile_url, company_logo_url, is_archived, is_local, home_workplace, has_spo, quickapply_clientid, rating_score, rating_count, address, city, postal_code, latitude, longitude, geoareaids, source, video_url, video_thumbnail_url, top_logo_url, bottom_logo_url, search_keyword, search_page, search_url, scraped_at. Full API spec: https://apify.com/parsebird/jobindex-dk-scraper/api. Get your token: https://console.apify.com/settings/integrations.
```

### What does Jobindex.dk Jobs Scraper do?

This actor queries Jobindex.dk's own search-results page directly and parses its embedded job data — no browser rendering, no fragile CSS selectors on the search page. You give it a keyword, a geo area ID, or a Jobindex search URL, and it returns every matching job with company details, dates, application links, and the full job description.

- 🔍 **Keyword and location search** — search by job title or free text, and narrow to a Danish geo area using Jobindex's own `geoareaid` filter.
- 🔗 **Paste-a-URL mode** — copy a search URL straight from your browser (with filters already applied) and the actor uses its `q` and `geoareaid` query parameters directly.
- 📝 **Full descriptions, not teasers** — for jobs hosted directly on Jobindex.dk, the actor fetches the canonical job-ad page and returns the complete description as cleaned HTML and plain text, not just the short search-result snippet.
- 🔗 **Direct + tracking application links** — captures both the direct external application URL (when Jobindex exposes one) and the Jobindex tracking-redirect link for every listing.
- 🏢 **Company data** — logo, profile URL, and Jobindex satisfaction rating (score + review count) when available.
- 📄 **Safety-capped pagination** — set a max page count so a broad keyword search never runs away with your budget.

### What data can you extract from Jobindex.dk?

| Field | Description |
|-------|-------------|
| `title` / `company` / `location` | Job title, hiring company, and location text |
| `posted_date` / `expires_date` | Publish date and listing expiry date |
| `apply_deadline` / `apply_deadline_asap` | Application deadline, or whether the role accepts applications on a rolling/ASAP basis |
| `description_html` / `description_text` | Full job description as cleaned HTML (content tags only) and plain text |
| `application_url` / `application_tracking_url` | Direct external apply link (when exposed) and the Jobindex click-tracking link |
| `company_profile_url` / `company_logo_url` / `rating_score` / `rating_count` | Company profile, logo, and Jobindex satisfaction rating |
| `address` / `city` / `postal_code` / `latitude` / `longitude` / `geoareaids` | Structured address and Jobindex geo area IDs |
| `is_local` / `home_workplace` / `has_spo` | Local-listing, home-office, and sponsored-ad flags |

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrl` | string | No | — | Optional Jobindex search URL, e.g. `https://www.jobindex.dk/jobsoegning?q=software`. Query parameters found in this URL (`q`, `geoareaid`, etc.) override `keyword` and `location` |
| `keyword` | string | No | `software` | Search keyword for job listings |
| `location` | string | No | — | Jobindex geo area ID for location filtering, e.g. `1221` |
| `results_wanted` | integer | No | `20` | Maximum number of jobs to save to the dataset |
| `max_pages` | integer | No | `5` | Safety cap on the number of search-result pages to process (20 jobs per page) |
| `proxyConfiguration` | object | No | `{ "useApifyProxy": false }` | Optional Apify Proxy configuration |

### Output example

```json
{
  "job_id": "h1651267",
  "title": "Payroll Coordinator",
  "company": "Kamstrup A/S",
  "location": "Skanderborg",
  "posted_date": "2026-03-26",
  "expires_date": "2026-04-23",
  "description_html": "<p>Are you energized by having ownership of critical payroll processes?</p><p>You will join a payroll team with close collaboration across HR and finance.</p><ul><li>Run payroll operations</li><li>Support compliance tasks</li></ul>",
  "description_text": "Are you energized by having ownership of critical payroll processes?\n\nYou will join a payroll team with close collaboration across HR and finance.\n\nRun payroll operations\n\nSupport compliance tasks",
  "detail_url": "https://www.jobindex.dk/vis-job/h1651267",
  "application_url": "https://jobs.example.com/payroll-coordinator",
  "application_tracking_url": "https://www.jobindex.dk/c?t=h1651267&ctx=w&jobsearch_position=1",
  "apply_deadline_asap": false,
  "has_spo": true,
  "rating_score": 4.2,
  "rating_count": 15,
  "search_page": 1,
  "search_url": "https://www.jobindex.dk/jobsoegning?q=software&sort=score&page=1",
  "scraped_at": "2026-03-26T06:53:38.762Z"
}
```

Download results as **JSON, CSV, Excel, HTML, or XML** directly from the Apify Console, or fetch them via the [Apify API](https://docs.apify.com/api/v2) / [dataset endpoint](https://apify.com/parsebird/jobindex-dk-scraper/api).

### Use cases

- **Job board aggregation** — feed a niche job board, newsletter, or internal dashboard with fresh Danish listings filtered by keyword and area.
- **Recruitment market research** — track which companies are hiring in Denmark, where, and how listing volume shifts over time for a given keyword or region.
- **Talent sourcing pipelines** — pull structured job data into your ATS or CRM via the [Apify API](https://docs.apify.com/api/v2) or a [scheduled run](https://docs.apify.com/platform/schedules).
- **Company research** — combine `company_profile_url`, `rating_score`, and `rating_count` to benchmark employer reputation alongside open roles.

### How to scrape Jobindex.dk jobs

1. **Set your search** — enter a Keyword, a Location (geo area ID), or paste a Jobindex.dk search URL into Start URL.
2. **Set your limits** — choose Max Results and a Max Pages safety cap.
3. **(Optional) add a proxy** — enable Apify Proxy under Proxy Configuration for higher-volume runs.
4. **Run the actor** — click **Start** in the Apify Console, or trigger it via the [API](https://docs.apify.com/api/v2) or on a [schedule](https://docs.apify.com/platform/schedules).
5. **Get your data** — download the dataset as JSON/CSV/Excel, or pull it via the API.

### How much does it cost to scrape Jobindex.dk?

This actor uses [Pay-Per-Event (PPE)](https://docs.apify.com/platform/actors/publishing/monetize#pay-per-event-pricing) pricing — you're charged per job listing extracted, not per compute unit.

| Event | Price per event | Price per 1,000 |
|-------|----------------|-----------------|
| `job-scraped` (Free / Bronze / Silver plans) | $0.0009 | **$0.90** |
| `job-scraped` (Gold plan) | $0.0008 | **$0.80** |

A run collecting 500 jobs costs roughly $0.40–$0.45 depending on your Apify plan. All Apify accounts include a [free trial](https://apify.com/pricing) with credits to try the actor before committing to a paid plan.

### FAQ

**Why is `description_html` sometimes short?**
Some Jobindex listings only link out to the employer's own careers site rather than hosting the full ad text on Jobindex.dk. For those, the search-result teaser (2–3 paragraphs) is the most Jobindex.dk itself ever shows, so that's what gets returned.

**Why is `application_url` sometimes empty?**
Not every Jobindex listing exposes a direct external apply link in its data — many route applicants through the Jobindex click-tracking URL (`application_tracking_url`) instead, which still lands on the real application page in a browser.

**Where do I find a `geoareaid` for the Location input?**
Pick a location filter on [jobindex.dk](https://www.jobindex.dk/jobsoegning) in your browser and read the `geoareaid` value out of the resulting URL, or paste that URL directly into Start URL.

**Does this actor support scheduling and integrations?**
Yes. Use [Apify Schedules](https://docs.apify.com/platform/schedules) to run it daily or weekly, connect it to [Zapier, Make, or Slack](https://apify.com/integrations), or call it through the [Apify API](https://docs.apify.com/api/v2) from your own backend.

**What are the limitations of this actor?**
⚠️

- `max_pages` caps how many search-result pages (20 jobs each) a single run will process
- Results reflect Jobindex.dk's public listings only

### Is it legal to scrape Jobindex.dk?

Yes. This actor only accesses publicly available job listings that Jobindex.dk and its customers have made visible for the purpose of recruitment. It does not bypass login walls, access private accounts, or collect personal data about individuals. Scraping publicly available data is generally considered legal — see [Apify's overview of web scraping legality](https://www.apify.com/is-web-scraping-legal) for more detail. Users are responsible for ensuring their use of the collected data complies with applicable laws and Jobindex.dk's terms of service.

### Python and JavaScript usage

**Python** ([apify-client](https://docs.apify.com/api/client/python/)):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run_input = {
    "keyword": "software",
    "results_wanted": 20,
    "max_pages": 3,
}

run = client.actor("parsebird/jobindex-dk-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["company"])
```

**JavaScript** ([apify-client](https://docs.apify.com/api/client/js/)):

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const input = {
    keyword: 'software',
    results_wanted: 20,
    max_pages: 3,
};

const run = await client.actor('parsebird/jobindex-dk-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Related Actors

- [Platsbanken Jobs Scraper](https://apify.com/parsebird/platsbanken-jobs-scraper) — listings from Sweden's official public job bank
- [Karriere.at Austrian Jobs Scraper](https://apify.com/parsebird/karriere-at-jobs-scraper) — jobs from karriere.at, Austria's largest job platform
- [Himalayas Remote Jobs Scraper](https://apify.com/parsebird/himalayas-remote-jobs-scraper) — worldwide remote-only job listings

Browse the full catalog on the [ParseBird Apify Store page](https://apify.com/parsebird).

# Actor input Schema

## `startUrl` (type: `string`):

Optional Jobindex.dk search URL, e.g. https://www.jobindex.dk/jobsoegning?q=data\&geoareaid=1221. Query parameters found in this URL (q, geoareaid, etc.) override the Keyword and Location fields below.

## `keyword` (type: `string`):

Search keyword for job listings, e.g. 'software', 'sygeplejerske', 'marketing'. Ignored when Start URL already contains a q parameter.

## `location` (type: `string`):

Optional Jobindex geo area ID to filter by location, e.g. 1221 for Copenhagen. Find area IDs by picking a location on jobindex.dk and reading the geoareaid value from the resulting URL. Ignored when Start URL already contains a geoareaid parameter.

## `results_wanted` (type: `integer`):

Maximum number of jobs to save to the dataset.

## `max_pages` (type: `integer`):

Safety cap on the number of Jobindex search-result pages to process (20 jobs per page).

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

Optional Apify proxy configuration. Jobindex.dk does not require a proxy for normal-volume runs — enable Apify Proxy if you scrape at high volume or see blocked requests.

## Actor input object example

```json
{
  "startUrl": "https://www.jobindex.dk/jobsoegning?q=software",
  "keyword": "software",
  "results_wanted": 20,
  "max_pages": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "startUrl": "https://www.jobindex.dk/jobsoegning?q=software",
    "keyword": "software",
    "results_wanted": 20,
    "max_pages": 5,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/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 = {
    "startUrl": "https://www.jobindex.dk/jobsoegning?q=software",
    "keyword": "software",
    "results_wanted": 20,
    "max_pages": 5,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/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 '{
  "startUrl": "https://www.jobindex.dk/jobsoegning?q=software",
  "keyword": "software",
  "results_wanted": 20,
  "max_pages": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call parsebird/jobindex-dk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/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/2nOdlW2iMoSQXJxtg/builds/jHmuGf1YFzDoi90Fb/openapi.json
