# USAJobs Jobs API

> USAJobs has the best-documented public job API of any source. JobsPipe normalizes it into the same shape as Workday, Greenhouse, Lever, and 30+ other ATSs.

**Canonical URL:** https://jobspipe.dev/sources/usajobs

## Coverage

- **Sources covered:** All public federal U.S. job postings on usajobs.gov
- **Freshness:** 24h refresh
- **History retention:** 12 months retention

## Why USAJobs jobs data is confusing

USAJobs is operated by the U.S. Office of Personnel Management (OPM), so its data structure and posting conventions follow federal hiring rules - grade levels (GS-9, GS-12), pay plans, security clearance fields - not commercial ATS conventions.

USAJobs salary fields use federal pay scales (GS, WG, SES) rather than free-form salary ranges. JobsPipe normalizes these to min/max/currency where pay is published.

Some USAJobs postings are open-to-public; others are restricted to current federal employees or veterans. JobsPipe surfaces the eligibility audience as a structured field.

## Workarounds

### Call developer.usajobs.gov directly

This actually works - USAJobs has a real, free public API. The catch: the response shape uses federal hiring terminology (PayPlan, GradeFrom, SecurityClearanceRequired) that doesn't match commercial ATS schemas, so you write a custom adapter.

### Scrape usajobs.gov

Pointless - the public API is better than scraping. Don't do this.

### Use JobsPipe

USAJobs normalized into the same flat JSON schema as Workday, Greenhouse, and 30+ commercial ATSs. Federal-specific fields (grade, clearance) surface as structured optional fields.

## Fields available on every record

- `id`
- `source`
- `tenant`
- `title`
- `company`
- `location`
- `salary`
- `employment_type`
- `remote`
- `posted_at`
- `expires_at`
- `apply_url`
- `description`

## Sample response

```json
{
  "id": "usajobs:nasa-langley-aerospace-engineer-789432",
  "source": "usajobs",
  "tenant": "nasa",
  "title": "Aerospace Engineer",
  "company": "National Aeronautics and Space Administration",
  "location": {
    "country": "US",
    "region": "VA",
    "city": "Hampton",
    "formatted": "Hampton, VA"
  },
  "salary": {
    "min": 99908,
    "max": 153354,
    "currency": "USD",
    "period": "yearly"
  },
  "employment_type": "full_time",
  "remote": "on_site",
  "department": "Langley Research Center",
  "posted_at": "2026-05-12T14:00:00Z",
  "expires_at": "2026-05-26T23:59:59Z",
  "apply_url": "https://www.usajobs.gov/job/789432",
  "description": "<p>NASA Langley Research Center seeks an Aerospace Engineer...</p>",
  "federal": {
    "grade": "GS-13",
    "pay_plan": "GS",
    "security_clearance": "Public Trust",
    "eligibility": "open_to_public"
  }
}
```

## FAQ

### Why use JobsPipe instead of the free USAJobs API?

If federal jobs are your only source, the USAJobs API is genuinely great - use it. JobsPipe is for when you want federal + commercial jobs in the same shape: one endpoint, one schema, USAJobs alongside Workday/Greenhouse/Lever.

### Does JobsPipe include the federal-specific fields (grade, pay plan, clearance)?

Yes. They surface as a federal object on the job record when present - structured, optional, and preserved exactly as USAJobs publishes them.

### Are veteran-only and federal-employee-only postings included?

Yes, but flagged via the federal.eligibility field. Filter ?audience=open_to_public if you only want positions open to civilians.

### How is USAJobs salary normalized?

USAJobs publishes min/max under federal pay scales. JobsPipe maps PayPlan + GradeFrom/GradeTo to a salary {min, max, currency: 'USD', period: 'yearly'} object when the posting has explicit pay.

## USAJobs API documentation

USAJobs developer documentation lives at developer.usajobs.gov and is the most permissive of any major job-data API in scope. The Search API covers active job announcements, the Code List API covers reference data (pay plans, hiring paths, security clearances), and the historic-data endpoints expose archived announcements. Authentication is via two headers (User-Agent and Authorization-Key) and the API is rate-limited per User-Agent string. JobsPipe's documentation at /docs covers the normalized JSON schema we return for USAJobs alongside 30+ commercial ATSs.

## USAJobs API key

USAJobs API keys are free and self-service: register at developer.usajobs.gov with an email address, pick a User-Agent string (typically your contact email), and you receive an Authorization-Key by email. There is no approval process, no tier-gating, and no usage fees. JobsPipe consumes USAJobs through this public API but exposes federal jobs in the same JSON schema as commercial sources, so you can query both with one JobsPipe key.

## USAJobs API integration

Direct USAJobs API integration works well if federal jobs are your only target - the docs are good and the free tier is generous. JobsPipe is the better path when you want federal and commercial jobs in one feed: USAJobs normalized into the same flat JSON as Workday, Greenhouse, Lever, and 30+ other ATSs, with federal-specific fields (grade, clearance, eligibility) preserved as optional structured fields.

## Related

- **Product:** https://jobspipe.dev/jobs-api
- **All sources:** https://jobspipe.dev/sources
- **Docs:** https://jobspipe.dev/docs
- **Sign up (free tier):** https://jobspipe.dev/signup

---
Generated from structured data. View the rendered page at https://jobspipe.dev/sources/usajobs.