How to scrape jobs data from USAJobs using the Minexa.ai extension
- Minexa.ai

- 18 hours ago
- 4 min read
Federal job listings contain more structured data than most people realize. USAJobs surfaces job titles, hiring organizations, salary ranges, employment types, application deadlines, and eligibility paths all on a single search results page. The challenge is getting that data out in a usable format without copying rows manually.
This guide walks through how to extract that data using the Minexa.ai Chrome extension, a no-code tool that turns any structured web page into a downloadable dataset. No selectors, no scripts, no libraries needed.
Watch the full tutorial first
The video below covers the entire workflow from opening USAJobs to exporting your dataset. It is worth watching before going through the screenshots.
What you will extract from USAJobs
The starting URL for this walkthrough is usajobs.gov/Search/Results?k=remote, which lists remote federal job openings across all agencies. Each listing card on that page contains a dense set of fields that Minexa captures automatically once you point it at the right container.
Here is a sample of what the extracted data looks like for two listings:
[
{
"job_description": "Radiologist- Hampton (Remote)",
"job_location": "Anywhere in the U.S. (remote job)",
"salary_range": "Starting at $350,000 Per year (VM 15)",
"job_url": "/job/869547800",
"job_organization": "Veterans Health Administration / Department of Veterans Affairs"
},
{
"job_description": "Operations Specialist (Remote Delivery)",
"job_location": "Washington, District of Columbia",
"salary_range": "Starting at $57,736 Per year (GS 7-9)",
"job_url": "/job/874262800",
"job_organization": "U.S. Secret Service / Department of Homeland Security"
}
]Beyond those flat fields, Minexa also captures job_identification and job_salary_and_type as structured arrays. The job_identification field is particularly rich: it encodes the job title anchor text, the detail page href, the data-document-id attribute used internally by USAJobs, the hiring organization, the parent department, the location string, the posting date and application deadline as a combined text node, hiring path labels, eligibility title attributes, the salary string, employment type, and schedule. All of that comes from a single listing card and lands in one traversable object per row.
The job_salary_and_type array surfaces the salary string, permanence label, and schedule as separate typed objects, making it straightforward to isolate just the pay range or filter by full-time versus part-time in post-processing.
Step 1: Open USAJobs and launch the extension
Navigate to the remote jobs search results page on USAJobs, then open the Minexa.ai extension from your Chrome toolbar. The extension loads its home screen and detects the active tab automatically.
Once the page has fully loaded, click the I'm on the right page button inside the extension popup. This confirms the active URL and moves the workflow forward.
Step 2: Confirm pagination and choose your scraping mode
Minexa detects the pagination controls on the page and shows you what it found, including whether a next-page button is present. Review the detected pagination logic and click Continue to proceed.
Next, choose whether to scrape the listing page only or to also follow each job's detail page. For most use cases involving bulk job data collection, the list-only option is sufficient since the listing cards already contain salary, organization, location, and eligibility data.
Step 3: Select the data container
After choosing your mode, Minexa highlights the full container holding the job listing cards on the page. This is the parent element wrapping all the results, not an individual field. You are not clicking on job titles or salary figures one by one. You select the block that holds everything, and Minexa discovers the individual columns automatically.
Click Create Scraper and wait a moment. Minexa analyzes the container structure and generates a reusable scraper with all data points identified and named.
The field list includes job_code, which captures the DOM panel ID for each hiring path section per listing. This ID matches the value referenced in button_aria_controls, which encodes the space-separated list of panel IDs that the show/hide hiring paths buttons control. These two fields together let you programmatically map each listing's expandable eligibility panels without any additional page interaction.
The numeric_code field surfaces the data-search-result attribute from the job title anchor, which reflects the zero-indexed position of each listing in the search results. This is useful for preserving original sort order when processing results in bulk.
Step 4: Run the job and export your data
Once the scraper is created, click through to finalize the job configuration. The summary screen gives you options to connect a Google Sheet or set up a schedule for recurring runs directly from the extension.
Your job appears at the top of the scraping jobs list. Click Run to start extraction. Minexa processes each page and populates the results table in real time.
When the run finishes, the full dataset is available for export. You can download it as Excel or JSON depending on what your workflow requires.
What to do with the data
The exported dataset gives you a clean, row-per-listing structure covering job title, hiring agency, parent department, location, salary, employment type, application deadline, and eligibility paths. From there you can filter by agency, sort by salary grade, track which roles have applicant caps like the Operations Specialist listing limited to 50 applicants, or build a feed that surfaces newly posted remote federal roles as they appear.
The scraper you created works across structurally similar USAJobs search result pages. Point it at a different keyword search or agency filter and the same field set is extracted without any reconfiguration.
If you are working with job market data more broadly, the post on scraping jobs data from Apna using the Minexa.ai API covers the developer workflow for running the same type of extraction at scale programmatically.

Comments