# OSINT Jobs Scraper (`rl1987/osint-jobs-scraper`) Actor

Scrapes job listings (title, company, location, experience, salary, description) from osint-jobs.com.

- **URL**: https://apify.com/rl1987/osint-jobs-scraper.md
- **Developed by:** [R.L.](https://apify.com/rl1987) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / actor invocation

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

### What does OSINT Jobs Scraper do?

**OSINT Jobs Scraper** extracts job listings from [osint-jobs.com](https://www.osint-jobs.com/), the leading job board for open source intelligence, threat intelligence, and investigations careers. For each listing it pulls the **job title, company, location, remote status, occupation type, experience level, company type, salary, posting date, and full job description**. Just hit **Try for free**, leave the default settings, and get structured OSINT job data in seconds — no coding, no browser, no manual copy-pasting required.

Run it on the [Apify platform](https://apify.com) to get scheduled runs, instant API access, webhooks, and integrations with Make, Zapier, Google Sheets, and dozens of other apps — on top of automatic retries and reliable, ready-to-use output.

### Why use OSINT Jobs Scraper?

OSINT, threat intelligence, and investigations hiring moves fast and is scattered across a niche job board that most mainstream job aggregators miss entirely. This Actor turns that board into a clean, structured dataset you can act on:

- **Recruiters & talent teams** — build a live feed of open OSINT/threat-intel roles to benchmark your own openings, spot competitor hiring, or source candidates who are actively job-hunting in the space.
- **Job seekers & career sites** — mirror or aggregate current OSINT listings on your own site, newsletter, or Slack/Discord bot.
- **Market researchers & analysts** — track hiring trends in the OSINT industry: which companies are hiring, for what seniority, in which countries, and whether roles are remote.
- **Sales & business intelligence teams** — spot companies scaling up intelligence and security functions as a buying signal.

### How to use OSINT Jobs Scraper

1. Click **Try for free** on the Actor page.
2. (Optional) Set filters in the Input tab — location, occupation, experience, company type, remote-only, or a free-text search keyword — to match only the jobs you care about.
3. Click **Start** and let the Actor run.
4. Open the **Dataset** tab once the run finishes and view, filter, or download your results in JSON, CSV, Excel, HTML, or XML.

No proxy or advanced configuration is needed — the default settings work out of the box.

### Input

| Field | Type | Description |
|---|---|---|
| `startUrl` | String | Listing page to start from. Defaults to the OSINT Jobs homepage. |
| `maxJobs` | Integer | Maximum number of jobs to scrape. `0` = unlimited. |
| `fetchDetails` | Boolean | Visit each job's detail page for the full description, salary, remote flag, company type, and posting date. |
| `search` | String | Keep only jobs whose title, company, or description contains this text. |
| `location` | String | Keep only jobs whose location contains this text, e.g. `"United Kingdom"`. |
| `occupation` | String | `Full-time`, `Part-time`, `Freelance`, or `Internship`. |
| `experience` | String | `Entry level`, `Medior`, or `Senior`. |
| `companyType` | String | `Non-Profit`, `Public Sector`, `Other`, `Scale-up`, `Start-up`, `SMB`, `Corporate`, `Agency`, or `Consultancy`. |
| `remoteOnly` | Boolean | Keep only jobs marked as remote. |

See the **Input** tab in Apify Console for the full schema, defaults, and inline descriptions.

### Output

Each dataset item looks like this:

```json
{
    "url": "https://www.osint-jobs.com/job/senior-threat-intelligence-analyst",
    "title": "Senior Threat Intelligence Analyst",
    "company": "Booking.com",
    "occupation": "Full-time",
    "experience": "Senior",
    "location": "Netherlands",
    "remote": "No",
    "companyType": "Corporate",
    "salary": null,
    "postedOn": "July 7, 2026",
    "description": "About the role..."
}
```

You can download the dataset in JSON, CSV, Excel, HTML, XML, or RSS directly from the Apify Console or via the API.

### Data fields

| Field | Description |
|---|---|
| `url` | Direct link to the job posting |
| `title` | Job title |
| `company` | Hiring company name |
| `occupation` | Full-time, part-time, freelance, or internship |
| `experience` | Entry level, medior, or senior |
| `location` | Country (or countries) the role is based in |
| `remote` | Whether the role is remote (`Yes`/`No`) |
| `companyType` | Corporate, start-up, non-profit, agency, etc. |
| `salary` | Salary range, when disclosed |
| `postedOn` | Date the job was posted |
| `description` | Full job description as plain text |

### How much does it cost to scrape OSINT Jobs?

This Actor uses the Apify [Pay-Per-Result / platform usage pricing](https://apify.com/pricing) model — you only pay for the compute you use. Scraping the full OSINT Jobs board (a few dozen listings with full details) typically takes well under a minute of compute, so it comfortably fits within Apify's free tier for occasional runs. Set `maxJobs` to cap usage on larger or scheduled runs.

### Tips for getting the best results

- Leave `fetchDetails` on (default) if you need descriptions, salary, remote status, or company type — the listing page alone only exposes title, company, occupation, experience, and location.
- Combine filters (e.g. `location` + `remoteOnly` + `occupation`) to narrow results without extra post-processing.
- Schedule the Actor to run daily or weekly via [Apify Scheduler](https://docs.apify.com/platform/schedules) to build a running history of new postings, then pipe new items to Slack, email, or a spreadsheet with an [Apify integration](https://apify.com/integrations).

### FAQ

**Is this legal?** This Actor only collects publicly available job listing data, similar to what any visitor or search engine sees. You are responsible for using the scraped data in compliance with osint-jobs.com's terms of service and applicable data protection laws in your jurisdiction.

**Why is a field sometimes empty?** Some jobs don't disclose salary, or aren't marked remote — those fields will simply be `null` or `"No"`. Also, `companyType`, `remote`, `salary`, `postedOn`, and description fields are only populated when `fetchDetails` is enabled.

**Found a bug or missing field?** Open an issue on the Actor's **Issues** tab in Apify Console, or reach out for a custom scraping solution tailored to your workflow.

# Actor input Schema

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

Job board listing page to start from.

## `maxJobs` (type: `integer`):

Maximum number of jobs to scrape (0 = unlimited).

## `fetchDetails` (type: `boolean`):

Visit each job's detail page to also extract the full description, salary, remote flag, company type and posting date. Forced on automatically if `remoteOnly`, `companyType` or `search` is set, since those need detail-page data.

## `search` (type: `string`):

Only keep jobs whose title, company or description contains this text (case-insensitive). Mirrors the site's search box.

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

Only keep jobs whose location contains this text (case-insensitive), e.g. "United Kingdom" or "Remote". Mirrors the site's Location filter.

## `occupation` (type: `string`):

Only keep jobs matching this occupation. Mirrors the site's Occupation filter.

## `experience` (type: `string`):

Only keep jobs matching this experience level. Mirrors the site's Experience filter.

## `companyType` (type: `string`):

Only keep jobs matching this company type. Mirrors the site's Company Type filter. Requires visiting job detail pages.

## `remoteOnly` (type: `boolean`):

Only keep jobs marked as remote. Mirrors the site's "Remote only" checkbox. Requires visiting job detail pages.

## Actor input object example

```json
{
  "startUrl": "https://www.osint-jobs.com/",
  "maxJobs": 0,
  "fetchDetails": true,
  "remoteOnly": false
}
```

# Actor output Schema

## `results` (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.osint-jobs.com/"
};

// Run the Actor and wait for it to finish
const run = await client.actor("rl1987/osint-jobs-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.osint-jobs.com/" }

# Run the Actor and wait for it to finish
run = client.actor("rl1987/osint-jobs-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 '{
  "startUrl": "https://www.osint-jobs.com/"
}' |
apify call rl1987/osint-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/fUfFGUEwSdhHSaZcr/builds/s8Pranqm7OEhjk3sc/openapi.json
