# ClearanceJobs Security Clearance Jobs Scraper (`bovi/clearancejobs-scraper`) Actor

Scrape security-cleared job listings from ClearanceJobs.com by keyword, city, company, clearance level, polygraph, job type, experience and remote option. Returns title, company, locations, clearance, polygraph, salary and the full description.

- **URL**: https://apify.com/bovi/clearancejobs-scraper.md
- **Developed by:** [Vitalii Bondarev](https://apify.com/bovi) (community)
- **Categories:** Jobs, Lead generation, Business
- **Features:** Limited permissions
- **Stats:** 2 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 clearancejobs security clearance jobs scrapers

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

## ClearanceJobs Security Clearance Jobs Scraper

Scrape security-cleared job listings from [ClearanceJobs.com](https://www.clearancejobs.com), the largest job board for defense and intelligence roles. Search by keyword and narrow the results by city, company, clearance level (Secret, Top Secret, TS/SCI, DoE Q/L and more), polygraph requirement, job type, experience level, posting date and remote option. No login and no API key are needed.

### What it collects

For every job the actor returns one flat record:

- **Job**: id, url, title, job category, job type, job code, career level, travel
- **Company**: name, ClearanceJobs profile URL, logo URL
- **Where**: primary location, all locations, workplace types, remote/hybrid flag
- **Clearance**: required clearance level and polygraph requirement
- **Pay**: salary minimum and maximum (only when the employer publishes them)
- **Dates and activity**: posted date, last update, application count
- **Text**: short preview and the full job description as plain text

### Input

| Field | Description |
| --- | --- |
| `keyword` | Job title or keyword, supports AND / OR / NOT. Empty lists all jobs. |
| `maxResults` | Maximum number of records (default 50). The actor stops exactly at this number. |
| `location` | City in the exact "City, ST" format, e.g. `Reston, VA`. |
| `companyName` | Exact employer name, e.g. `Amazon`. |
| `clearanceLevel` | Public Trust, Confidential, Secret, Top Secret, TS/SCI, DoE Q or L, DHS, Intel Agency. |
| `polygraph` | None, Polygraph, CI Polygraph, Full Scope Polygraph. |
| `jobType` | Employee, Contractor/Consultant, Seasonal, Intern/Entry Level. |
| `experienceLevel` | From Student up to President/CEO. |
| `postedWithin` | Last 3 days up to within 12 months. |
| `remoteOnly` | Only remote or hybrid positions. |
| `fetchDetails` | Open each job page for the full description (default on). Turn off for faster listing-only runs. |
| `proxyConfiguration` | Optional. The site is reachable without a proxy; enable Apify Proxy for large runs. |

Example input:

```json
{
  "keyword": "software engineer",
  "maxResults": 10,
  "clearanceLevel": "top-secret-sci"
}
```

### Example output

```json
{
  "id": "9123451",
  "url": "https://www.clearancejobs.com/jobs/9123451/software-engineer",
  "title": "Software Engineer",
  "company_name": "Software Engineering Institute",
  "location": "Pittsburgh, PA",
  "locations": ["Pittsburgh, PA"],
  "workplace_types": ["On-Site/Office"],
  "remote": false,
  "clearance": "TS/SCI",
  "polygraph": "Not Specified",
  "job_type": "Employee",
  "job_category": "IT - Software",
  "job_code": "2025049",
  "posted_at": "2026-08-27T11:04:09-05:00",
  "application_count": 11,
  "description": "What We Do\n\nThe Software Engineering Institute (SEI) advances the state of the art..."
}
```

### Pricing

Pay per result: you are billed for every job record written to the dataset, nothing else. Run it with a small `maxResults` first to check the data, then scale up.

### Notes

- Not every listing publishes salary, career level or travel; unavailable fields are omitted from that record.
- The site returns up to 100 jobs per search page; the actor pages through results automatically until `maxResults` is reached or the search is exhausted.
- Export the dataset as JSON, CSV, Excel or XML, or read it through the Apify API.

# Actor input Schema

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

Search term, e.g. "software engineer", "cyber security", "intelligence analyst". Supports AND, OR and NOT operators. Leave empty to list all jobs.

## `maxResults` (type: `integer`):

Maximum number of job records to collect.

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

City filter in the exact "City, ST" format used by ClearanceJobs, e.g. "Reston, VA", "San Diego, CA", "Washington, DC".

## `companyName` (type: `string`):

Exact employer name as shown on ClearanceJobs, e.g. "Amazon", "Booz Allen Hamilton".

## `clearanceLevel` (type: `string`):

Required security clearance.

## `polygraph` (type: `string`):

Polygraph requirement.

## `jobType` (type: `string`):

Type of employment.

## `experienceLevel` (type: `string`):

Experience bracket.

## `postedWithin` (type: `string`):

Only jobs posted in this period.

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

Only remote/hybrid positions.

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

Open each job page to add the full description, job category, job type, job code and travel. Disable for faster runs with listing-level fields only.

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

Optional. The site is reachable without a proxy; enable Apify Proxy if you get blocked on large runs.

## Actor input object example

```json
{
  "keyword": "software engineer",
  "maxResults": 50,
  "clearanceLevel": "",
  "polygraph": "",
  "jobType": "",
  "experienceLevel": "",
  "postedWithin": "",
  "remoteOnly": false,
  "fetchDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset with the scraped records.

# 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 = {
    "keyword": "software engineer",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("bovi/clearancejobs-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 = {
    "keyword": "software engineer",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("bovi/clearancejobs-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 '{
  "keyword": "software engineer",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call bovi/clearancejobs-scraper --silent --output-dataset

```

## MCP server setup

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