# USAJobs Scraper - Federal Government Jobs Data (`logiover/usajobs-scraper`) Actor

Scrape USAJobs.gov federal job listings without an API key. Export to CSV/JSON - a USAJobs API alternative & federal jobs data extraction tool.

- **URL**: https://apify.com/logiover/usajobs-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 39 total users, 6 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

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

## USAJobs Scraper — US Federal Government Jobs, Salaries & Hiring Data (No API Key)

![USAJobs Federal Jobs Scraper](https://img.shields.io/badge/Apify-Actor-00A67E?logo=apify\&logoColor=white) ![No API key](https://img.shields.io/badge/No%20API%20key-required-2ea44f) ![Pay per result](https://img.shields.io/badge/Pricing-Pay%20per%20result-1C7ED6) ![Jobs](https://img.shields.io/badge/Category-Jobs-8B5CF6) ![Export](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-F59E0B)

Scrape **US federal government job announcements** straight from the official **USAJobs.gov API** — no login, no API key to register, no blocking. This federal-jobs scraper pulls every public-sector posting with full hiring details: **salary range, GS grade, agency, work schedule, security clearance, telework eligibility, hiring paths, occupational series and location**. One run can return **tens of thousands of job announcements** as clean, structured records you can export to CSV, JSON or Excel.

> ### 🏆 Why this USAJobs scraper?
>
> **30+ fields per announcement** · **tens of thousands of jobs per run** · official USAJobs.gov data (no key to register) · salary, GS grade, clearance & telework flags · no proxy needed · export to JSON / CSV / Excel. The unofficial **USAJobs API alternative** for labor-market research, recruitment intelligence and federal-jobs boards.

***

### ✨ What this Actor does / Key features

- 🏛️ **Full federal coverage** — every public job announcement on USAJobs.gov, across all departments and agencies.
- 💵 **Salary & grade data** — minimum/maximum salary, pay scale (e.g. GS), salary type, minimum/maximum grade and promotion potential.
- 🎖️ **Role attributes** — supervisory status, security clearance, travel requirement, service type and appointment type.
- ✅ **Eligibility flags** — telework eligible, relocation reimbursed, drug-test required, who-may-apply and hiring paths.
- 🗂️ **Occupational series & locations** — job category series and the full list of work locations per announcement.
- 📅 **Date-range targeting** — scrape announcements opened within any window (empty = last 30 days).
- 🔎 **Combinable filters** — keyword on the title, federal department codes and occupational-series codes, in any combination.
- 🔗 **Direct API extraction** — wraps the official USAJobs.gov API; no browser, no proxy, no rate-limit juggling.
- 📤 **Scale-ready** — set `maxJobs` to `0` to capture everything matching your filters (can be tens of thousands).

### 🚀 Quick start (3 steps)

1. **Configure** — set a date range and add optional filters (keyword, department codes, occupational series).
2. **Run** — click **Start**. The Actor paginates the USAJobs API and streams announcements into your dataset.
3. **Get your data** — open the **Output / Dataset** tab and export to **JSON, CSV, Excel, HTML or JSON Lines**, or pull it via the Apify API.

### 📥 Input

Every field is optional — leave them all empty to get the last 30 days of federal jobs.

#### Example — federal IT engineering roles at Air Force & VA

```json
{
  "startDate": "2026-06-01",
  "endDate": "2026-06-30",
  "keyword": "engineer",
  "hiringDepartmentCodes": ["AF", "VA"],
  "positionSeries": ["2210"],
  "maxJobs": 5000
}
```

#### Example — all nursing announcements government-wide

```json
{
  "keyword": "nurse",
  "positionSeries": ["0610"],
  "maxJobs": 0
}
```

#### Example — rolling last-30-days full federal dataset

```json
{
  "startDate": "",
  "endDate": "",
  "maxJobs": 0
}
```

| Field | Type | Description |
|-------|------|-------------|
| `startDate` / `endDate` | string | Position open-date window (`YYYY-MM-DD`). Empty = last 30 days / today. |
| `keyword` | string | Free-text match on the position title (e.g. `engineer`, `nurse`, `analyst`). Empty = all jobs. |
| `hiringDepartmentCodes` | array | Federal department codes, e.g. `AF` (Air Force), `VA` (Veterans Affairs), `TR` (Treasury). Empty = all departments. |
| `positionSeries` | array | Occupational series codes, e.g. `2210` (IT), `0610` (Nurse), `1102` (Contracting). Empty = all series. |
| `maxJobs` | integer | Max announcements to save. `0` = all matching (can be tens of thousands). |

> **Finding codes:** department codes are short agency abbreviations (`AF`, `VA`, `TR`, `IN`…) and occupational-series codes are the 4-digit OPM series (`2210` IT, `0610` Nurse, `1102` Contracting, `0343` Management Analyst). Combine a date window with a series and department to narrow to exactly the roles you want.

### 📤 Output

One dataset record per federal job announcement, exportable to JSON, CSV, Excel, HTML or JSON Lines. Here is a trimmed sample record:

```json
{
  "controlNumber": 812345600,
  "announcementNumber": "AFPC-12345678-901234-EM",
  "positionTitle": "IT Specialist (INFOSEC)",
  "hiringDepartmentName": "Department of the Air Force",
  "hiringAgencyName": "Air Force Materiel Command",
  "hiringSubelementName": "Air Force Materiel Command",
  "appointmentType": "Permanent",
  "serviceType": "Competitive",
  "workSchedule": "Full-Time",
  "payScale": "GS",
  "salaryType": "Per Year",
  "minimumSalary": "86962",
  "maximumSalary": "113047",
  "minimumGrade": "12",
  "maximumGrade": "12",
  "promotionPotential": "12",
  "supervisoryStatus": "No",
  "securityClearance": "Secret",
  "travelRequirement": "Occasional Travel",
  "teleworkEligible": "Yes",
  "relocationExpensesReimbursed": "No",
  "drugTestRequired": "Yes",
  "whoMayApply": "Federal employees - Competitive service",
  "hiringPaths": ["Federal employees", "Veterans"],
  "jobCategorySeries": ["2210"],
  "locations": ["Wright-Patterson AFB, Ohio"],
  "positionOpenDate": "2026-06-14",
  "positionCloseDate": "2026-06-28",
  "positionOpeningStatus": "Open",
  "url": "https://www.usajobs.gov/job/812345600",
  "scrapedAt": "2026-07-06T12:00:00Z"
}
```

<details>
<summary><b>📋 Full field reference (click to expand)</b></summary>

| Field | Description |
|-------|-------------|
| `controlNumber` / `announcementNumber` | Unique internal and public announcement identifiers |
| `positionTitle` | Job title |
| `hiringDepartmentName` / `hiringAgencyName` / `hiringSubelementName` | Hiring organisation hierarchy |
| `appointmentType` / `serviceType` | Permanent/term, competitive/excepted service |
| `workSchedule` | Full-time, part-time, etc. |
| `payScale` / `salaryType` | Pay system (e.g. GS) and salary basis |
| `minimumSalary` / `maximumSalary` | Salary range |
| `minimumGrade` / `maximumGrade` / `promotionPotential` | Grade range and promotion potential |
| `supervisoryStatus` / `securityClearance` / `travelRequirement` | Role attributes |
| `teleworkEligible` / `relocationExpensesReimbursed` / `drugTestRequired` | Eligibility flags |
| `whoMayApply` / `hiringPaths` | Eligibility group and hiring paths |
| `jobCategorySeries` / `locations` | Occupational series and work locations |
| `positionOpenDate` / `positionCloseDate` / `positionOpeningStatus` | Announcement dates and status |
| `url` | Direct link to the announcement on USAJobs.gov |
| `scrapedAt` | Scrape timestamp (ISO 8601) |

</details>

### 💡 Use cases

- **Labor-market research** — analyse federal hiring trends by agency, salary, location and occupational series.
- **Recruitment intelligence** — track who the government is hiring, for what roles and at what pay grades.
- **Job boards & aggregators** — feed a federal-jobs section with always-fresh, structured data.
- **Economists & journalists** — monitor public-sector employment and hiring volume at scale.
- **Career coaches & staffing firms** — surface relevant federal openings filtered by clearance, series or department.
- **Salary benchmarking** — build GS-grade and pay-range datasets across agencies and locations.

### 👥 Who uses it

Labor economists & policy researchers · staffing firms and federal recruiters · job-board and aggregator operators · data journalists · career coaches and resume writers · HR analysts benchmarking public-sector pay.

### 💰 Pricing

This Actor runs on a simple **pay-per-result** model — you pay for the announcements you extract, with no separate Apify platform fees to calculate. Try it on the **free tier** first, then scale up. See the **Pricing** tab on this page for the current rate.

### ❓ Frequently Asked Questions

**Is it legal to scrape USAJobs.gov?**
USAJobs.gov is an official US government site and its job data is public. The Actor reads the official public API; you are responsible for using the data in compliance with the site's terms and applicable laws.

**Does USAJobs have a public API, and is this a USAJobs API alternative?**
USAJobs has an official API, but it requires key registration, pagination and parsing. This Actor wraps that API and turns it into clean, ready-to-use records — so it works as a **USAJobs API alternative** when you just want the structured job data without the setup.

**Do I need an API key, login or proxy?**
No. The Actor handles everything — you only need an Apify account. There is no USAJobs API key to register, no login and no proxy required.

**How much data can I get in one run?**
A single run can return tens of thousands of job announcements. Set `maxJobs` to `0` to capture everything matching your date range and filters, or cap it for smaller, faster runs.

**How fresh is the data?**
It reflects what is currently published on USAJobs.gov. Schedule the Actor daily or weekly with a rolling date range to keep a continuously updated dataset.

**Can I scrape USAJobs.gov without an API key?**
Yes. There is no USAJobs API key to register and no login or proxy required — the Actor handles federal government jobs data extraction end to end.

**How do I scrape federal IT jobs by occupational series?**
Set `positionSeries` to `2210` for information-technology roles and optionally add a keyword, then run — each announcement returns the salary range, GS grade, agency and location.

**How do I get federal jobs for a specific agency like the VA?**
Add the department code (for example `VA` for Veterans Affairs) to `hiringDepartmentCodes` and the Actor returns only that agency's announcements with full hiring details.

**How do I export USAJobs data to CSV or JSON?**
Run the Actor, then download the dataset as CSV, JSON, Excel, HTML or JSON Lines from the Apify console or via the API. Schedule a rolling date range to keep a self-updating federal-jobs dataset.

### 🔗 More job scrapers by logiover

Building a broader jobs dataset? Pair USAJobs with the rest of the logiover jobs suite:

| Source | Actor |
|---|---|
| 🌐 Indeed | [Indeed Jobs Scraper](https://apify.com/logiover/indeed-jobs-scraper) |
| 🇦🇺 Seek | [Seek Jobs Scraper](https://apify.com/logiover/seek-jobs-scraper) |
| 🇩🇪 StepStone | [StepStone Jobs Scraper](https://apify.com/logiover/stepstone-de-jobs-scraper) |
| 🌱 Greenhouse | [Greenhouse Job Board Scraper](https://apify.com/logiover/greenhouse-job-board-scraper) |
| 🎚️ Lever | [Lever Postings Scraper](https://apify.com/logiover/lever-postings-scraper) |
| 🏡 Remote | [RemoteOK Jobs Scraper](https://apify.com/logiover/remoteok-remote-jobs-scraper) · [Remotive Jobs Scraper](https://apify.com/logiover/remotive-remote-jobs-scraper) |
| 🏔️ Himalayas | [Himalayas Remote Jobs Scraper](https://apify.com/logiover/himalayas-remote-jobs-scraper) |
| 🧑‍💻 Tech | [Built In Tech Jobs Scraper](https://apify.com/logiover/built-in-tech-jobs-scraper) |
| 🍸 WTTJ | [Welcome to the Jungle Jobs Scraper](https://apify.com/logiover/welcome-to-the-jungle-jobs-scraper) |
| 📰 HN | [Hacker News Who Is Hiring Scraper](https://apify.com/logiover/hacker-news-who-is-hiring-scraper) |
| 🇮🇳 Naukri | [Naukri Job Scraper](https://apify.com/logiover/naukri-job-scraper) |

👉 Browse all **[logiover scrapers on Apify Store](https://apify.com/logiover)** — 180+ actors across real estate, jobs, crypto, social media & B2B data.

### ⏰ Scheduling & integration

Schedule this Actor on Apify to keep a self-updating federal-jobs dataset with a rolling date range. Export results to JSON, CSV or Excel, sync to Google Sheets, or push to your database, BI tools and webhooks through the Apify API. Connect it to **Make, n8n or Zapier** to build automated recruitment and research pipelines.

### ⭐ Support & feedback

Found a bug or need an extra field? Open an issue on the **Issues** tab — response is usually fast. If this Actor saves you time, a **★★★★★ review** on the Store page genuinely helps and is hugely appreciated. 🙏

### ⚖️ Legal

This Actor extracts only publicly available government data and is intended for legitimate research, analytics and recruitment use. You are responsible for complying with USAJobs.gov terms and any applicable local laws.

***

### 📝 Changelog

#### 2026-08-01

- Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
- Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.

#### 2026-07-06

- ✨ README overhaul: shields.io badges, richer output sample with full field reference, ready-to-run example scenarios, jobs suite cross-links, expanded keyword-gap FAQ and clearer quick-start.

#### 2026-07-01

- Maintenance pass: re-verified end-to-end on live data and confirmed successful runs within the 5-minute quality window on the default input.
- Sharpened Store metadata (SEO title & description) and expanded the FAQ with high-intent, long-tail questions for easier discovery in Google and Apify Store search.
- Added ready-to-run example tasks that cover common real-world use cases.

#### 2026-06-15

- Reliability pass: re-verified end-to-end on live data with real-world inputs. Routine maintenance build.

#### 2026-06-07

- Docs: added coverage for USAJobs API alternative usage, exporting federal jobs data to CSV/JSON, and scraping USAJobs.gov without an API key.

#### 2026-06-05

- 🛡️ Reliability fix: results are no longer dropped by strict output validation — runs now complete cleanly even at high volume (thousands of results).
- ⚡ Stability & performance hardening; fresh rebuild.

#### 2026-06-04

- Verified live & refreshed build — reliability/maintenance pass.

***

\*Maintained: last verified 2026-09-01 — checked end-to-end against live run history (reliability, output fields and types, and time/memory budgets).

# Actor input Schema

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

Free-text keyword matched against the position title, e.g. 'engineer', 'nurse', 'analyst', 'cyber'. Leave empty to return every job announcement in the date range.

## `hiringDepartmentCodes` (type: `array`):

Filter by one or more federal departments. Applied server-side by the USAJobs API. Leave empty for all departments.

## `positionSeries` (type: `array`):

Filter by one or more occupational (job) series. Applied server-side by the USAJobs API. Leave empty for all series.

## `payScale` (type: `array`):

Keep only jobs on the selected pay plan(s) (applied to results after download). Leave empty for all pay plans. GS = General Schedule (white-collar), WG = Wage Grade (blue-collar), SES/ES = Senior Executive.

## `serviceType` (type: `array`):

Keep only jobs of the selected federal service type(s) (applied to results after download). Leave empty for all.

## `workSchedule` (type: `array`):

Keep only jobs with the selected work schedule(s) (applied to results after download). Leave empty for all.

## `appointmentType` (type: `array`):

Keep only jobs with the selected appointment type(s) (applied to results after download). Leave empty for all.

## `securityClearance` (type: `array`):

Keep only jobs requiring the selected security clearance level(s) (applied to results after download). Leave empty for all.

## `supervisoryStatusOnly` (type: `boolean`):

When enabled, keep only supervisory / management positions. Leave off to include all.

## `teleworkEligibleOnly` (type: `boolean`):

When enabled, keep only telework-eligible positions. Leave off to include all.

## `startDate` (type: `string`):

Earliest position open date (YYYY-MM-DD). Leave empty for the last 30 days.

## `endDate` (type: `string`):

Latest position open date (YYYY-MM-DD). Leave empty for today.

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

Maximum job announcements to save. 0 = all matching the date range (can be tens of thousands). Empty input returns the most recent federal job announcements.

## Actor input object example

```json
{
  "keyword": "",
  "hiringDepartmentCodes": [],
  "positionSeries": [],
  "payScale": [],
  "serviceType": [],
  "workSchedule": [],
  "appointmentType": [],
  "securityClearance": [],
  "supervisoryStatusOnly": false,
  "teleworkEligibleOnly": false,
  "startDate": "",
  "endDate": "",
  "maxJobs": 100
}
```

# Actor output Schema

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

All records extracted by this run. Open the Dataset tab to browse, filter, and export as CSV, JSON, or Excel.

# 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 = {
    "maxJobs": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/usajobs-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 = { "maxJobs": 100 }

# Run the Actor and wait for it to finish
run = client.actor("logiover/usajobs-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 '{
  "maxJobs": 100
}' |
apify call logiover/usajobs-scraper --silent --output-dataset

```

## MCP server setup

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