# USAJOBS Scraper - US Federal Government Jobs (usajobs.gov) (`asiajobs/usajobs-scraper`) Actor

Extract US federal government job postings from USAJOBS (usajobs.gov) without an API key. Filter by keyword, location, radius, remote, GS grade, series, hiring path (public, veterans, students), agency and date, and get salary, grade, duties, qualifications, security clearance and apply URL as clea…

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

## Pricing

from $3.00 / 1,000 jobs

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

## USAJOBS Scraper: US Federal Government Jobs (usajobs.gov)

Extract job postings from **[USAJOBS](https://www.usajobs.gov)**, the official job board of the United States federal government, with **no API key**. You get clean, structured JSON with the salary range, GS grade, hiring paths, security clearance, telework/remote status, duties and qualifications, including fields that the search page only shows inside each announcement.

### What you get

For every job announcement:

| Field | Example |
|---|---|
| `controlNumber` (`id`), `announcementNumber`, `url` | 889385600, CEDA-26-13094378-MP |
| `title` | Program Analyst (Data Quality Analytics & Visualization) |
| `agency`, `subAgency`, `department` | U.S. Army Corps of Engineers, Department of the Army |
| `location`, `locations`, `locationCount` | Denver, Colorado + 21 location(s); full list of duty stations |
| `salaryMin`, `salaryMax`, `salaryInterval`, `salaryText` | 90925, 118204, Year, $90,925 - $118,204 per year |
| `payPlan`, `gradeLow`, `gradeHigh`, `grade`, `promotionPotential` | GS, 13, 13, GS 13, None |
| `series` | `[{ "code": "0343", "name": "Management And Program Analysis" }]` |
| `workSchedule`, `appointmentType`, `serviceType` | Full-time, Permanent, Competitive Service |
| `openDate`, `closeDate`, `status` | 2026-10-20, 2026-11-04, Accepting applications |
| `hiringPaths`, `hiringPathCodes` | Open to the public, Veterans, Military spouses / public, vet, mspouse |
| `remote`, `teleworkEligible`, `relocationPaid`, `travelRequired` | false, true, true, 25% or less |
| `securityClearance`, `positionSensitivity`, `drugTest`, `supervisory` | Secret, Noncritical-Sensitive, false, false |
| `vacancies` | 1, Few, Many |
| `summary`, `duties`, `qualifications`, `education`, `conditionsOfEmployment`, `additionalInformation`, `howYouWillBeEvaluated` | full text sections |
| `applyUrl`, `scrapedAt` | |

### Use cases

- **Job seekers & career coaches**: track new federal openings for a series, grade or location every day.
- **Veteran & military-spouse programs**: list jobs open to veterans (`vet`), military spouses (`mspouse`) or National Guard (`nguard`).
- **Universities & student programs**: Pathways jobs for students and recent graduates.
- **Labor-market & salary research**: pay ranges by GS grade, agency, occupation and city.
- **Government contractors & recruiters**: see which agencies are hiring, for which skills, clearances and locations.
- **Job aggregators & AI job agents**: feed fresh US government jobs into your own product.

### How to use

1. **Search**: set `keyword` (title, skill or announcement number), e.g. `analyst`, `nurse`, `IT specialist`. Leave it empty to list all open jobs.
2. **Filter** (all optional):
   - `location` as USAJOBS writes it, e.g. `Denver, Colorado`, `Washington, District of Columbia`, `Texas`, `Germany`, plus `radius` in miles.
   - `remoteOnly` for fully remote jobs.
   - `gradeMin` / `gradeMax` for a pay grade range, e.g. 9 to 12 for GS-9 to GS-12. `minSalary` sets a yearly salary floor.
   - `series`: 4-digit occupational series codes, e.g. `2210` (IT), `0343` (Program Analysis), `0610` (Nurse), `1102` (Contracting).
   - `hiringPaths`: who can apply, e.g. public, veterans, students, recent graduates, federal employees, individuals with disabilities.
   - `agency` / `department` codes, the `a=` / `d=` values in a usajobs.gov search URL, e.g. `VATA` (Veterans Health Administration) or `VA`, `AR`, `AF`, `DD`, `HS`.
   - `postedWithinDays`: only jobs opened in the last N days.
3. Set `maxItems` and run. Results appear in the dataset. Export as JSON, CSV or Excel, or use the API.

Turn off `includeDetails` for a faster, cheaper list. You still get title, agency, location, starting salary, grade, dates and hiring paths, but not the salary maximum, duties, qualifications, clearance or telework fields.

#### Example input

```json
{
  "keyword": "data scientist",
  "location": "Washington, District of Columbia",
  "radius": 50,
  "gradeMin": 12,
  "gradeMax": 14,
  "hiringPaths": ["public", "vet"],
  "postedWithinDays": 7,
  "maxItems": 200,
  "includeDetails": true
}
```

### Pricing

**$3 per 1,000 jobs** ($0.003 per job saved to the dataset), plus a tiny $0.00005 start fee per run. Platform usage (compute, proxy, storage) is included, so there are no surprise costs, and failed requests or empty searches cost only the start fee. Examples: 100 jobs cost $0.30, 10,000 jobs cost $30. The Apify free plan's $5 monthly credit covers about 1,600 jobs.

### Tips

- Run it on a schedule (daily, with `postedWithinDays: 1` or `2`) and compare `controlNumber`s to get only **new** announcements.
- `salaryMin` without `includeDetails` is the "Starting at" salary. Turn details on to also get `salaryMax`.
- Use the Apify API or integrations (Google Sheets, Slack, Make, Zapier, n8n) to send new jobs anywhere.
- No API key or USAJOBS account is needed. The actor reads the same public search the usajobs.gov website uses.

### Notes

This actor reads publicly available job announcements only. It does not log in, and it does not collect personal data: agency HR contact names, emails and phone numbers are intentionally left out. USAJOBS content is US government public information. Please use it in line with applicable laws and the USAJOBS terms.

Questions or a field you need? Open an issue on the actor page. Fixes usually ship within a day.

# Actor input Schema

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

Search federal jobs by keyword, job title or announcement number, e.g. 'analyst', 'nurse', 'IT specialist'. Leave empty to list all open jobs.

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

City and state as USAJOBS writes it, e.g. 'Denver, Colorado' or 'Washington, District of Columbia'. A state alone ('Texas') or a country ('Germany') also works.

## `radius` (type: `integer`):

Search radius around the location in miles (e.g. 25, 50, 100). Only used with a city location.

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

Return only fully remote jobs ("Anywhere in the U.S.").

## `gradeMin` (type: `integer`):

Lowest pay grade (1-15), e.g. 9 for GS-9. Matches the site's Pay or Experience filter.

## `gradeMax` (type: `integer`):

Highest pay grade (1-15), e.g. 13 for GS-13.

## `minSalary` (type: `integer`):

Only jobs whose salary range reaches at least this amount per year.

## `series` (type: `array`):

4-digit occupation/series codes, e.g. 2210 (IT Management), 0343 (Management and Program Analysis), 0610 (Nurse), 1102 (Contracting).

## `hiringPaths` (type: `array`):

Only jobs open to these groups. Leave empty for all.

## `agency` (type: `array`):

USAJOBS agency codes (the a= value in a usajobs.gov search URL), e.g. VATA (Veterans Health Administration), ARCE (Army Corps of Engineers), HSBD (Customs and Border Protection).

## `department` (type: `array`):

USAJOBS department codes (the d= value in a search URL), e.g. VA (Veterans Affairs), AR (Army), AF (Air Force), DD (Defense), HS (Homeland Security), TR (Treasury).

## `postedWithinDays` (type: `integer`):

Only jobs that opened in the last N days (results are then sorted newest first).

## `sort` (type: `string`):

Sort order of the results.

## `includeDetails` (type: `boolean`):

Open each job announcement for the full salary range, duties, qualifications, education, security clearance, telework/remote, all locations and more. Turn off for a faster, lighter list.

## `maxItems` (type: `integer`):

Maximum number of jobs to return.

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

Proxy settings. USAJOBS works best WITHOUT a proxy (the default); only enable one if you see blocked (403) requests.

## Actor input object example

```json
{
  "keyword": "analyst",
  "remoteOnly": false,
  "series": [],
  "hiringPaths": [],
  "agency": [],
  "department": [],
  "sort": "",
  "includeDetails": true,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped job postings (dataset items).

# 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": "analyst"
};

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

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

```

## MCP server setup

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