USAJOBS Scraper for Federal Job Announcement Data

USAJOBS data scraping, USAJOBS job search, USAJOBS data extraction, USAJOBS automation, website scraping, web scraping, job data, labor market data, employment data, recruiting, staffing

USAJOBS Scraper
Solutions

Delivery, scheduling and normalization

We build the collector, run it on your schedule and deliver clean files: CSV, JSON, XLSX or an endpoint you call. A daily refresh of open announcements plus a one-off backfill by series or agency is the usual first job.

Normalization is included, because raw codes are not analysis. We join agency sub-element codes to names, series codes to occupation titles, pay plan codes to descriptions and geographic location codes to places, then map each duty location to one of the 47 locality pay areas so a GS-13 in Washington and a GS-13 under Rest of U.S. can be compared honestly.

We monitor the runs. Field names and payload shapes move, and the pipeline should notice before your dashboard does.

What a USAJOBS scraper can extract per announcement

This is the shape of USAJOBS data, using the names the documentation uses, whether it reaches you through an endpoint or off the page.

  • Identifiers - control number and announcement number. The Search API returns them as MatchedObjectId and PositionID.
  • Organization - hiring department, hiring agency, sub-element and agency codes. The agency sub-element code list returned 1067 entries when we last pulled it.
  • Occupational series - the four digit code, for example 2210 for Information Technology Management or 0185 for Social Work. That list returned 822 entries.
  • Pay plan and grade - pay plan code such as GS, with minimum grade, maximum grade and promotion potential. The pay plan list returned 391 entries.
  • Salary - minimum and maximum with a rate interval such as Per Year.
  • Dates - position open date, position close date and position expire date.
  • Closing type - Closing Date, Open Continuous, Applicant Cut-Off or Closing Time.
  • Eligibility - hiring paths, who may apply, and federal service type, which is Competitive, Excepted or Senior Executive.
  • Conditions - telework eligibility, remote flag, security clearance level, drug test, relocation reimbursement, travel requirement, supervisory status, work schedule and appointment type.
  • Locations - an array, with city, state and country, plus latitude and longitude in the Search API.
  • Status - Accepting applications, Reviewing applications, Job closed, Job canceled or Hiring complete.

Two of those are arrays, and that decides the data model. One announcement can list many duty locations and can span a grade range, so minimum grade 12 with promotion potential 14 across six cities is an ordinary record. We deliver both shapes: one row per announcement, and an exploded table with one row per announcement and location, so a city count never inflates a job count.

What a USAJOBS scraper can extract per announcement
What USAJOBS scraping adds beyond the API

What USAJOBS scraping adds beyond the API

The announcement page holds fields the structured record does not. We read position sensitivity and risk, such as Non-sensitive (NS)/Low Risk, the background check type, whether financial disclosure is required, whether the position is represented by a union, and the vacancy count printed above each location. None of those appear in the documented Search or Historic JOA response schemas.

Long text is a separate question. The Announcement Text endpoint returns summary, duties, conditions of employment, qualifications, education, required documents, how to apply, next steps, evaluations, other information and a hiring path explanation, all without a key. The Search API returns comparable text only when you request Fields=Full; ask for Fields=Min and you get the summary alone. We extract from the endpoint where it is complete and from the page where it is thin.

Then there is the area of consideration. USAJOBS expresses it as hiring paths under the heading "This job is open to", plus free text headed "Clarification from the agency". That note is where an agency restricts an opening to current employees of one facility. It is prose, so we keep it verbatim and flag the recurring patterns beside it.

We do not collect applicant profiles, resumes or saved documents. Those sit behind a login, they are personal data, and they are out of scope.

What USAJOBS is, and what its API already gives you

USAJOBS is the official job board of the United States federal government, run by the Office of Personnel Management. Agencies post job opportunity announcements there. Each announcement carries a control number assigned by USAJOBS and an announcement number assigned by the agency talent acquisition system that filed it. The public page sits at usajobs.gov/job/ followed by the control number.

Start with the fact that decides your budget. USAJOBS runs a developer portal and publishes a real API. A key is free and is requested through an application form. Three endpoint families exist. The Search API returns currently open announcements and needs that key, sent as three headers: Host, a User-Agent set to the email you registered, and Authorization-Key. The Historic JOA endpoint and the Announcement Text endpoint cover current and past postings, and the documentation states that they require no authorization or authentication because the data is publicly consumable. The code list endpoints need no key either.

So a USAJOBS scraper has to earn its place here. This page is written on the assumption that you will read the developer documentation before you talk to us, and that you would rather be told where the free route already covers you.

Get a Quote
dev_w
25

Developers

customers
500+

Customers worldwide

pages
1 500 000 000+

Pages extracted

stime
15000+

Hours saved for our clients

Plans

Airplane

€199 / one-time

setup fee - included

Data limits100,000
Frequencyone-time
Run timeup to 5 days
Data storing7 days

Helicopter

€169 / mo

setup fee €499

Data limits250,000
Frequencymonthly
Run timeup to 5 days
Data storing14 days

Glasses

€229 / mo

setup fee €499

Data limits1,000,000
Frequencyweekly
Run timeup to 5 days
Data storing30 days

DNA

€549 / mo

setup fee €799

Data limits3,000,000
Frequency3 times daily
Run timesame day
Data storing90 days

Where the API stops and collection starts

The honest answer first. If you want open announcements filtered by series, agency or location, the Search API alone serves you and you do not need us. If you want a bulk pull of past postings by open date, the Historic JOA endpoint serves you too, with no key. We will tell you that on the call.

What buyers call us about is everything after that. The Search API is capped. The documentation states a maximum of 10,000 rows per query and a maximum of 500 rows per page, so a broad pull has to be sliced by agency, series or date and then de-duplicated on control number. It defaults to public announcements, and status announcements require separate authorization. Its DatePosted filter accepts 0 to 60 days, which makes it a window on the present rather than an archive. Salary filters snap to buckets. Grade filters run 01 to 15, which is the General Schedule range, not every pay plan. The Historic JOA endpoint pages with a continuation token, so a bulk pull means walking the cursor rather than requesting a page number.

The larger gap is time. Both endpoints give an open date and a close date. Neither records what changed in between: a closing date amended, an applicant cut-off pulled forward, a grade added, a location dropped, an announcement canceled rather than closed. Only repeated snapshots hold that, and a snapshot you did not take last month cannot be recovered.

Our Blog

Reads Our Latest News & Blog

Learn how to use web scraping to solve data problems for your organization

How Artificial Intelligence Is Used In Web Scraping

How Artificial Intelligence Is Used In Web Scraping

Leveraging advances in technology, the AI-powered web scraper has skyrocketed in demand and is helping to expand capabilities by automating tedious daily tasks and speeding up data collection from thousands of websites several times over.

What is Web Scraping and What is it Used For?

What is Web Scraping and What is it Used For?

Web scraping is a method of obtaining web data by extracting it from pages of web resources with the help of a program, that is, in automatic mode. It is used to syntactically convert web pages into more usable forms.

Web Scraping for Machine Learning

Web Scraping for Machine Learning

If you specialize in machine learning, you need to feed large amounts of data to the algorithms. Web scraping is the easiest and the most efficient method of collecting the data from all over the Internet.

scrapeit logo

Working with ScrapeIt

ScrapeIt is a managed web scraping agency. We build the USAJOBS scraper, run it, repair it when the source moves, and hand over USAJOBS data as files or an API. You maintain no code and no proxies.

Tell us the series, agencies and date range that matter, and whether you need USAJOBS jobs tracked week over week or a single historical extract. If the free public API covers it, we will say so. If it does not, we scope the work and quote it.

FAQ

Does USAJOBS have a public API?

Yes, and it is worth using. USAJOBS runs a developer portal with a free API key requested through an application form. The Search API covers currently open announcements and needs the key in three headers. The Historic JOA and Announcement Text endpoints cover current and past postings and, per the documentation, need no authorization or authentication at all. Code lists are open too. The real limits: the Search API allows a maximum of 10,000 rows per query and 500 rows per page, defaults to public announcements with status announcements requiring separate authorization, and its DatePosted filter only looks back 0 to 60 days. If those limits do not bite, use the API and keep your money.

Can I get closed and expired USAJOBS announcements?

Yes. Closed announcements stay addressable at usajobs.gov/job/ plus the control number, with a banner saying the announcement has closed and a status such as Hiring complete, and the older /GetJob/ViewDetails/ path redirects to the same page. The Historic JOA endpoint also returns past postings filtered by open or close date range, agency, department, series, announcement number or control number. What neither source gives you is the state of an announcement on a given day while it was open, which is why we keep snapshots.

How do you handle jobs with multiple locations and grades?

They are the normal case, not an edge case. Locations arrive as an array, and a single announcement can advertise a grade range with a separate promotion potential above it. We ship one row per announcement with locations and series collapsed into list columns, and a second exploded table with one row per announcement and location. Counting jobs from the exploded table overstates hiring, so we label both clearly and keep the control number as the join key.

Do you scrape applicant resumes or profiles from USAJOBS?

No. Applicant profiles, resumes and uploaded documents sit behind a sign-in and are personal data. We do not collect them, and we will not take that job. Our scraping covers published job opportunity announcements and the public code lists behind them. We also do not offer to get around bot protection: data.usajobs.gov sits behind an edge network that refuses requests sent with a default client user agent, and the documented endpoints are the correct way in.

Is USAJOBS data free to use in my own product?

The developer documentation states that the data returned by the Historic JOA and Announcement Text endpoints is publicly consumable, and those endpoints carry no authentication. The developer terms of use page is a system use notice about authorized access and monitoring rather than a license grant. The site robots.txt disallows only /Content/, /Scripts/, /foresee/ and /Service References/, and publishes a sitemap. We are a data supplier and not your lawyers, so confirm any republication plan with your own counsel.

How does it Work?

Step 1 - Make a Request

You share your needs, expectations, and desired timeframe. We’ll suggest the best solution based on your request and budget.

Step 2 - Configuring Custom Web Crawlers

Our specialists configure the crawlers and extract a sample dataset for your review before proceeding with the full-scale extraction.

Step 3 - Collect and Deliver

Once you approve the sample, we launch the project and start full data collection. We gather, filter, and structure the data for easy use, delivering it on time in your preferred format.

Step 4 - Maintain and Support

Our team manages ongoing processes, monitors website changes, and supports all data extraction cycles. We can also help integrate data into your systems or create dashboards to simplify analysis.

Request a Quote

Tell us more about you and your project information.
Which sites, which fields, how often. A couple of lines is enough.

We reply within 1 business day. No obligation.

scrapiet

Scrapeit Sp. z o.o.
10/208 Legionowa str., 15-099, Bialystok, Poland
NIP: 5423457175
REGON: 523384582