# Djinni Jobs Search Scraper (`alexist/djinni-jobs-search-scraper`) Actor

Scrape job listings from Djinni.co search results effortlessly. This scraper collects job titles, descriptions, salaries, employment types, hiring organizations, and 13+ structured fields — perfect for recruiters, job aggregators, and tech talent researchers tracking European remote opportunities.

- **URL**: https://apify.com/alexist/djinni-jobs-search-scraper.md
- **Developed by:** [Alex](https://apify.com/alexist) (community)
- **Categories:** Automation, Developer tools, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## Djinni Jobs Search Scraper: Extract Tech Job Data from Europe's Top Platform

**Excerpt:** Scrape job listings from Djinni.co search results effortlessly. This scraper collects job titles, descriptions, salaries, employment types, hiring organizations, and 13+ structured fields — perfect for recruiters, job aggregators, and tech talent researchers tracking European remote opportunities.

---

### What Is Djinni.co?

Djinni.co is a premier Ukrainian tech job platform specializing in remote and on-site positions across Europe. It connects thousands of tech professionals — developers, designers, product managers, and engineers — with employers from established companies to innovative startups. The platform has become a go-to resource for European tech talent, particularly those seeking remote work arrangements. However, manually browsing job listings and collecting data is tedious and error-prone. The **Djinni Jobs Search Scraper** automates this workflow, extracting comprehensive job records from search result pages in seconds.

---

### Overview

The **Djinni Jobs Search Scraper** is designed to efficiently harvest job listings from Djinni.co's search results pages. Rather than scraping individual job detail pages, it works on search result pages (e.g., "Europe Remote" or filtered lists), making it ideal for bulk data collection.

**Primary users include:**

- **Recruiters & talent scouts** monitoring tech hiring trends across Europe
- **Job aggregators** feeding data into multi-source job boards
- **Market researchers** analyzing tech compensation, hiring patterns, and employment types
- **Career analysts** studying remote work availability in the tech sector

**Key advantages:**
- Extracts 13 data fields per job in a single pass
- Handles paginated results seamlessly
- Lightweight configuration with minimal setup
- Robust error handling via `ignore_url_failures`

---

### Input Format

The scraper accepts a simple JSON configuration:

```json
{
  "urls": [
    "https://djinni.co/jobs/europe-remote/?page=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
````

#### Input Parameters Explained

| Field | Type | Description | Example |
|---|---|---|---|
| `urls` | Array | Links to Djinni job search result pages. Include the full URL with filters (country, remote, etc.) and pagination parameters. | `["https://djinni.co/jobs/europe-remote/?page=1"]` |
| `ignore_url_failures` | Boolean | If `true`, the scraper continues even if a URL fails to load. Useful for bulk runs where one page might be unavailable. | `true` or `false` |
| `max_items_per_url` | Integer | Maximum number of job listings to extract from each page. Prevents excessive data collection and controls API usage. | `20` (default), `50`, `100` |

**Tips:**

- Use full Djinni URLs with all desired filters already applied (e.g., `europe-remote`, `ukraine`, `senior`)
- Set `max_items_per_url` to `20` for typical search pages, higher for bulk research projects
- Include multiple page URLs to scrape sequential results: `page=1`, `page=2`, `page=3`, etc.

***

### Output Format

**Sample output**

```json
{
  "base_salary": {
    "@type": "MonetaryAmount",
    "currency": "USD",
    "value": {
      "@type": "QuantitativeValue",
      "max_value": 700,
      "min_value": 500,
      "unit_text": "MONTH",
      "valid_from": "2026-07-16T08:23:43.270059",
      "valid_through": "2026-08-15T08:23:43.270059"
    }
  },
  "category": "Other",
  "date_posted": "2026-07-16T08:23:43.270059",
  "description": "We're a growing software company, and honestly, the day-to-day operational stuff has gotten to be a lot. We're looking for someone sharp and organized to take it off our plate — documentation, credentials, subscriptions, salary tracking, and whatever else comes up. No two days look the same, so we need someone who's genuinely comfortable with variety and can just... figure things out.\n \nThis is a high-trust role. You'll have access to sensitive information (passwords, financial details), so we're looking for someone who takes that seriously, not just someone who's \"organized.\"\n \nWhat You'll Do\nKeep our documentation and internal knowledge organized and up to date\nManage passwords and account access with real discretion\nHelp track salaries and payments\nOwn our subscription stack — know what we're paying for, cancel what we don't need, catch billing issues\nHandle general admin and operational tasks\nJump on ad-hoc projects as priorities shift (they will)\nWhat We're Looking For\nExcellent written and spoken English\nReal experience in operations, admin, or executive/personal assistant work\nSomeone detail-oriented who doesn't let things slip\nTrustworthy — this matters more than almost anything else on this list\nSolid overlap with EST hours\nComfortable with ambiguity and a task list that changes daily\nAvailable part-time to start, open to full-time down the line\nWhat We Offer\nFully remote, flexible schedule\nA real path to full-time as the role grows\nDirect access to leadership — you won't be buried in layers of process\nIf this sounds like you, we'd love to hear from you.\nPlease apply with a short note on your relevant experience and availability.\n",
  "direct_apply": true,
  "employment_type": "PART_TIME",
  "hiring_organization": {
    "@type": "Organization",
    "name": "cxc.ai",
    "same_as": "https://cxc.ai"
  },
  "identifier": 837552,
  "industry": "other",
  "job_location_type": "TELECOMMUTE",
  "title": "Operations, Administrative Coordinator",
  "url": "https://djinni.co/jobs/837552-operations-administrative-coordinator/",
  "valid_through": "2026-08-15T08:23:43.270059",
  "from_url": "https://djinni.co/jobs/europe-remote/?page=2"
}
```

Each job listing returns a structured record with 13 key fields:

#### Job Identity & Location

| Field | Meaning | Example |
|---|---|---|
| `Identifier` | Unique Djinni ID for the job posting | `12345678` |
| `Title` | Job title as displayed | `Senior React Developer` |
| `URL` | Direct link to the full job posting | `https://djinni.co/jobs/12345678/` |
| `Job Location Type` | Work arrangement type | `Remote`, `On-site`, `Hybrid` |

#### Compensation & Employment

| Field | Meaning | Example |
|---|---|---|
| `Base Salary` | Salary range or fixed amount (typically in USD or EUR) | `$3000 - $5000 / month` |
| `Employment Type` | Contract classification | `Full-time`, `Part-time`, `Contract`, `Freelance` |
| `Category` | Job category within tech | `Backend`, `Frontend`, `DevOps`, `QA` |
| `Industry` | Sector or vertical (if specified) | `FinTech`, `SaaS`, `E-commerce` |

#### Job Content & Metadata

| Field | Meaning | Example |
|---|---|---|
| `Description` | Full job description text (HTML or plain text) | `"We're looking for a React developer with 3+ years experience..."` |
| `Date Posted` | When the listing was published on Djinni | `2024-01-15` |
| `Valid Through` | Listing expiration date (if applicable) | `2024-02-15` |
| `Direct Apply` | Whether direct application via Djinni is available | `true` or `false` |

#### Company Information

| Field | Meaning | Example |
|---|---|---|
| `Hiring Organization` | Company name or employer | `TechCorp Ukraine` |

***

### How to Use

1. **Build your search URL** — Navigate to Djinni.co and apply filters (country, remote/on-site, category, salary range, etc.). Copy the resulting URL from your browser's address bar.

2. **Add pagination** — If scraping multiple pages, append `?page=1`, `?page=2`, etc. For example:
   ```
   https://djinni.co/jobs/europe-remote/?page=1
   https://djinni.co/jobs/europe-remote/?page=2
   ```

3. **Configure the input** — Paste your URLs into the `urls` array:
   ```json
   {
     "urls": [
       "https://djinni.co/jobs/europe-remote/?page=1",
       "https://djinni.co/jobs/europe-remote/?page=2"
     ],
     "ignore_url_failures": true,
     "max_items_per_url": 20
   }
   ```

4. **Launch the scraper** — Start the run and monitor progress in the logs.

5. **Export results** — Download your data as JSON, CSV, or Excel once complete.

**Best practices:**

- Test with a single page URL first to verify the output before scaling to multiple pages
- Set `ignore_url_failures: true` for production runs to handle transient network issues
- Adjust `max_items_per_url` based on your needs; lower values complete faster, higher values collect more data

***

### Use Cases & Business Value

**Talent Acquisition:**

- Build pipelines by tracking newly posted roles matching your hiring criteria
- Monitor competitor hiring activity and salary trends

**Job Board Integration:**

- Feed Djinni listings into multi-source job aggregators
- Maintain freshness with periodic scraping of popular search queries

**Market Research:**

- Analyze tech employment trends: which categories are most in-demand, salary distributions by role and location
- Identify emerging skills requirements and hiring patterns across European tech hubs

**Career Planning:**

- Research salary benchmarks for your role and experience level
- Discover companies actively hiring in your specialization

By automating data collection from Djinni, recruiters and researchers save hours previously spent copying job titles, salaries, and descriptions manually. The structured output integrates seamlessly into spreadsheets, databases, or analytics platforms.

***

### Conclusion

The **Djinni Jobs Search Scraper** is an efficient, no-frills solution for extracting job data from Europe's leading tech job board. With straightforward configuration and 13 actionable output fields, it enables recruiters, aggregators, and researchers to stay ahead of the European tech hiring curve. Start scraping today and unlock the insights hidden in Djinni's vast job listings.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the Jobs list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://djinni.co/jobs/europe-remote/?page=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://djinni.co/jobs/europe-remote/?page=2"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("alexist/djinni-jobs-search-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 = {
    "urls": ["https://djinni.co/jobs/europe-remote/?page=2"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("alexist/djinni-jobs-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://djinni.co/jobs/europe-remote/?page=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call alexist/djinni-jobs-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=alexist/djinni-jobs-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Djinni Jobs Search Scraper",
        "description": "Scrape job listings from Djinni.co search results effortlessly. This scraper collects job titles, descriptions, salaries, employment types, hiring organizations, and 13+ structured fields — perfect for recruiters, job aggregators, and tech talent researchers tracking European remote opportunities.",
        "version": "0.0",
        "x-build-id": "zqDXFXJj6bE41zKBc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/alexist~djinni-jobs-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-alexist-djinni-jobs-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/alexist~djinni-jobs-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-alexist-djinni-jobs-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/alexist~djinni-jobs-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-alexist-djinni-jobs-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the Jobs list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the Jobs list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
