USAJobs Jobs Search Scraper avatar

USAJobs Jobs Search Scraper

Pricing

from $2.99 / 1,000 usajobs vacancies

Go to Apify Store
USAJobs Jobs Search Scraper

USAJobs Jobs Search Scraper

Scrape rich, identity-verified federal job announcements from USAJOBS.

Pricing

from $2.99 / 1,000 usajobs vacancies

Rating

0.0

(0)

Developer

Jobs API

Jobs API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Share

What does USAJOBS Jobs Search Scraper do?

USAJOBS Jobs Search Scraper extracts identity-verified federal job announcements from USAJOBS. It combines the public first-party search endpoint with each public announcement page to produce rich records without an applicant account or API credential.

Every emitted record verifies the numeric control number, title, agency, canonical URL, and substantial announcement sections. Search mode supports keyword/location pagination; single and multiple modes enrich known public announcement URLs.

Why use USAJOBS Jobs Search Scraper?

  • Build rich federal vacancy feeds with summary, duties, requirements, qualifications, evaluation, documents, and application instructions.
  • Track agencies, departments, locations, pay, schedules, appointment types, closing dates, and hiring paths.
  • Resolve known USAJOBS control numbers into canonical, source-verified records.
  • Schedule runs, use the Apify API, connect datasets to integrations, and monitor machine-readable diagnostics.
  • Preserve valid partial results when one detail fails or a bounded search exposes fewer jobs than requested.

The Actor uses ordinary direct public HTTPS only, with one attempt per request and no custom user-agent, proxy, cookies, fingerprint, or identity changes. It does not use authenticated pages, private applicant data, browser automation, or private API credentials. A source HTTP 401, 403, 429, or 451 response, or a visible source-authored access challenge, stops requests, discards buffered records, and records platform status: SUCCEEDED with resultStatus: SKIPPED. A fatal generic network or unverified HTTP failure with no stored rows records platform status: FAILED, resultStatus: FAILED, and accessStatus: DEFERRED.

What data can USAJOBS Jobs Search Scraper extract?

FieldTypeDescription
jobId, controlNumber, announcementNumberstringOfficial announcement identity.
title, agency, departmentstringVerified position and organisation.
location, locationsstring/arrayPublic duty locations.
summary, duties, requirementsstringRich announcement sections.
qualifications, evaluation, requiredDocumentsstringEligibility and selection content.
salaryMin, salaryMax, payScaleGradenumber/stringPublished pay data.
datePosted, validThroughdatePublished announcement opening and closing dates.
hiringPaths, jobSeriesarrayPublic applicant paths and categories.
applicationUrl, applicationMethodsstring/arrayUSAJOBS or employer application destinations published with the announcement.
detailVerified, verificationEvidenceboolean/objectIdentity, canonical, and richness checks.
fieldCoverage.meaningfulFieldCountintegerCount of populated source facts; each emitted record requires at least 21.

The public announcement URL is jobUrl; it is never reused as an application URL. Empty optional fields are omitted.

How to scrape USAJOBS announcements

  1. Open the Actor input tab in Apify Console.
  2. Select search, single, or multiple.
  3. For search mode, enter keywords and an optional location.
  4. For direct modes, provide official usajobs.gov/job/<control-number> URLs.
  5. Set maxPages, maxItems, pageSize, and maxRequests to bounded values.
  6. Start the run and inspect the dataset, RUN_SUMMARY, and RUN_DIAGNOSTICS.
  7. Export results or connect the dataset to an Apify integration.

One search page consumes one request and each inspected announcement consumes one request. The Actor stops at maxRequests.

How much will it cost to scrape USAJOBS?

Native HTTPS is efficient compared with browser automation. Actual cost depends on your Apify plan, memory, page count, detail count, response latency, and current platform pricing. Start with one page and five items, then use the run estimate in Apify Console before scaling. A practical request budget is maxPages + maxItems plus a small margin for rejected candidates.

Input

See the input tab for full configuration options.

{
"mode": "search",
"query": "software engineer",
"location": "",
"maxPages": 1,
"maxItems": 5,
"pageSize": 25,
"maxRequests": 12,
"requestDelayMs": 100,
"requestTimeoutSecs": 30
}

Direct URLs must use the USAJOBS host and contain a numeric control number. Duplicate URLs are removed. requestDelayMs applies between detail requests.

Output

You can download the dataset in formats such as JSON, HTML, CSV, or Excel. The checked-in examples/record.json is copied directly from a locally emitted dataset row. RUN_SUMMARY separates Apify process status: SUCCEEDED|FAILED from dataset resultStatus: COMPLETE|LIMITED|SKIPPED|NO_DATA|FAILED and accessStatus, alongside page, candidate, request, rejection, runtime, and completion details. RUN_DIAGNOSTICS explains search, detail, policy, dataset-write, or validation outcomes. REQUEST_RECEIPTS keeps one receipt for each request attempt, including status, destination, duration, and access-policy result. These records are stored outside the job dataset.

Tips and advanced options

  • Use single mode for the cheapest rich lookup.
  • Keep pageSize high enough to find maxItems within few pages.
  • Raise maxRequests when increasing pages or direct URLs.
  • resultStatus: LIMITED means real records were stored but the requested set was incomplete or a later non-block error occurred. A handled source barrier is SUCCEEDED/SKIPPED; a clean empty search is SUCCEEDED/NO_DATA; a fatal zero-row failure is FAILED/FAILED with accessStatus: DEFERRED when source access could not be verified.
  • Verify consequential hiring decisions against the canonical announcement.
  • Avoid collecting or retaining public contact details unless they are necessary for your lawful use.

Local development

npm ci --no-audit --no-fund
npm run check
npm test
apify validate-schema

Before an apify run, inspect apify run --help and the Actor's local and legacy storage paths. Choose a new actor-relative APIFY_LOCAL_STORAGE_DIR, confirm it does not exist, and use --resurrect; never use --purge or reuse a dataset directory. For PowerShell:

Test-Path -LiteralPath storage/validation-01
$env:APIFY_LOCAL_STORAGE_DIR = 'storage/validation-01'
apify run --resurrect --input-file INPUT.json
npm run validate -- storage/validation-01

Preserve any existing apify_storage directory before running. Local data remains under the selected storage/ path and is not uploaded to Apify Console.

FAQ, disclaimers, and support

Why did I receive fewer records than maxItems?

The query may expose fewer matching announcements, a detail page may fail strict verification, or the request budget may be reached. Valid records are retained for ordinary non-barrier limitations; explicit source access barriers stop requests and discard buffered records. Inspect diagnostics and request receipts before changing bounds.

Does the Actor submit applications?

No. It extracts public announcement data only and does not log in or submit forms.

Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

Respect USAJOBS terms, robots guidance, rate limits, and applicable law. Use the Actor API tab for programmatic access. Report issues with a redacted input and run ID in the Issues tab.