
Google Ads Scraper
scrape.ly/store/querystone/google-ads-scraperLead generationSEO tools
4 monthly users

Scrape federal job announcements from USAJOBS.gov by keyword, location and the site's filters, or from search and job URLs. Get title, agency, salary range, grade, locations, dates, who can apply, duties, qualifications, telework, clearance and the agency contact.
Scrape federal job announcements from USAJOBS.gov, the official job site of the U.S. government. Search by keyword and location with the site's own filters, or paste USAJOBS search and job URLs, and get every job as a clean row: title, agency, salary range, pay grade, all locations, open and close dates, who can apply, duties, qualifications, telework, clearance and the agency contact. No login, no API key, and a run of 20 fully detailed jobs finishes in under 10 seconds.
software engineer, nurse, 2210) and an optional location (e.g. Washington, DC, Texas, Germany), or paste USAJOBS search or job URLs.| Field | What it does |
|---|---|
keywords | Job titles, skills or occupations; each one is its own search |
location | City, state, ZIP or country, as typed on USAJOBS |
startUrls | USAJOBS search URLs (filters kept) or job URLs / control numbers |
maxItems | Maximum jobs in the run, across all searches (0 = all) |
maxItemsPerSearch | Optional cap per keyword or search URL |
postedWithinDays | Only announcements opened in the last N days |
remoteOnly, teleworkOnly | Only remote or telework-eligible jobs |
hiringPaths, workSchedules, appointmentTypes, securityClearances, travel | The site's filters |
minSalary, maxSalary, occupationSeries | Salary range and OPM series codes |
sortBy | Relevance, recently posted, closing soon or highest salary |
includeDetails | Open each announcement for the full text and contact (on by default) |
{
"keywords": ["software engineer", "data scientist"],
"location": "Washington, DC",
"maxItems": 100,
"postedWithinDays": 14,
"hiringPaths": ["public"],
"teleworkOnly": true,
"sortBy": "newest"
}
| Field | Description |
|---|---|
controlNumber, announcementNumber | USAJOBS control number and the agency's announcement number |
title, department, agency, subAgency | Job title and hiring organization |
location, locations, locationCount | Display location and every duty location |
salary, salaryMin, salaryMax, salaryPeriod | Pay range as text and numbers, per year or per hour |
payPlan, grade, gradeLow, gradeHigh, promotionPotential | Pay plan and grade (e.g. GS 12 - 14) |
workSchedule, appointmentType, serviceType | Full-time, permanent, competitive or excepted service... |
hiringPaths, hiringPathCodes | Who may apply |
openDate, closeDate, status | Announcement dates and status (accepting applications, reviewing...) |
jobCategories | Occupational series codes and names |
remote, teleworkEligible, travelRequired, relocationReimbursed | Work-site conditions |
securityClearance, positionSensitivity, drugTest, financialDisclosure, supervisoryStatus, unionRepresented | Position requirements |
summary, duties, qualifications, education, conditionsOfEmployment, additionalInformation, evaluation, requiredDocuments, howToApply, nextSteps | Announcement sections as plain text |
descriptionText, descriptionHtml | Summary, duties, qualifications and education in one text or HTML field |
contactName, contactEmail, contactPhone, contactAddress | Agency HR contact |
url, applyUrl | Job page and apply link |
searchQuery, scrapedAt | Which search found the job, and when |
Example (from a real run, long texts shortened, contact replaced with a fictional one):
{
"controlNumber": "888547100",
"title": "Software Engineer and Data Automation Specialist",
"department": "Judicial Branch",
"agency": "U. S. Sentencing Commission",
"location": "Washington, District of Columbia",
"locations": ["Washington, DC"],
"locationCount": 1,
"salary": "$102,415 - $187,093 per year",
"salaryMin": 102415,
"salaryMax": 187093,
"salaryPeriod": "Per year",
"payPlan": "JS",
"grade": "JS 12 - 14",
"gradeLow": "12",
"gradeHigh": "14",
"promotionPotential": "14",
"workSchedule": "Full-time",
"appointmentType": "Permanent",
"hiringPaths": ["Open to the public"],
"hiringPathCodes": ["public"],
"openDate": "2026-10-13",
"closeDate": "2026-11-13",
"status": "Accepting applications",
"jobCategories": [{"code": "2210", "name": "Information Technology Management"}],
"announcementNumber": "27-01",
"remote": false,
"teleworkEligible": "Yes—as determined by the agency policy.",
"travelRequired": "Not required",
"serviceType": "Excepted Service",
"securityClearance": "Other",
"positionSensitivity": "Non-sensitive (NS)/Low Risk",
"summary": "The Commission is seeking a Software Engineering and Data Automation Specialist who will work within the Information Systems team...",
"duties": "The Software Engineering and Data Automation Specialist will work within the Information Systems team...",
"qualifications": "Specialized Experience:\n\n- Software Development: Experience developing and maintaining production Python applications...",
"education": "Applicants must have an undergraduate degree from an accredited college or university in information technology or a related field of study.",
"requiredDocuments": "- Resume (limited to 2 pages)\n\n- Cover Letter\n\n- Recent job performance evaluation (if available)",
"contactName": "Jordan Lee",
"contactEmail": "jobs@agency.example",
"contactPhone": "202-555-0142",
"contactAddress": "One Columbus Circle NE, Washington, DC 20002, US",
"url": "https://www.usajobs.gov/job/888547100",
"applyUrl": "https://www.usajobs.gov/Applicant/Application/ApplyStart/888547100",
"searchQuery": "software engineer in Washington, DC",
"scrapedAt": "2026-10-21T22:36:35.392Z"
}
$0.70 per 1,000 jobs ($0.0007 per job), full announcement included, no start fee. Platform usage (compute and proxy traffic) is billed on top and is small: in our test runs it came to about $0.05 per 1,000 detailed jobs.
Example: 1,000 detailed jobs ≈ $0.75 in total. Jobs left out by your filters, duplicates and failed pages are never charged. Set a maximum charge for the run and the scraper stops cleanly when it is reached.
Is it legal to scrape USAJOBS? USAJOBS announcements are public U.S. government information that anyone can read without an account. You are responsible for how you use the data, including any personal data such as HR contact details.
Do I need a login, API key or proxy? No. The scraper reads the public site without an account or key. Datacenter proxies are used by default; if USAJOBS refuses requests several times in a row, the run moves to US residential addresses by itself.
How many jobs can I get? As many as match. USAJOBS shows at most 10,000 jobs per search, so for more, split the search by location, agency, occupation series or keyword. The status message tells you when a search hit that ceiling.
Why is a field empty?
Agencies do not fill every field: some announcements have no maximum salary, remote flag, union or financial disclosure line, or contact phone. Empty fields reflect the announcement, not a failed scrape. With includeDetails off you get only the search fields.
Can I get closed announcements?
USAJOBS search lists only open announcements. Closed ones can still be scraped when you add their job URLs or control numbers to startUrls.
Can I schedule it or use the API?
Yes. Schedule the scraper (e.g. daily with postedWithinDays: 1 and sortBy: newest) and read results through the API, webhooks or integrations. Moving from a similar actor on another platform? keyword, searchUrl, daysBack and maxJobs are accepted as input too.
postedWithinDays with a sort other than relevance or recently posted has to page through every result to filter them.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
keywordsarrayOptionalKeywords
Job titles, skills or occupations to search for, one per line, e.g. software engineer, nurse, contract specialist, 2210. Each keyword is a separate search. Leave empty to search by location or filters only.
locationstringOptionalLocation
City, state, ZIP code or country as you would type it on USAJOBS, e.g. Washington, DC; Texas; San Diego, California; Germany. Used for every keyword. Leave empty for all locations.
startUrlsarrayOptionalUSAJOBS search or job URLs
Pages copied from your browser: search results (https://www.usajobs.gov/Search/Results?k=nurse&l=Texas, every filter in the URL is kept) or single job announcements (https://www.usajobs.gov/job/883691200, open or closed). A bare control number such as 883691200 works too.
maxItemsintegerOptionaldefault 20Max jobs
Maximum number of jobs to save in this run, across all keywords and URLs. 0 means all matching jobs. USAJOBS shows at most 10,000 jobs per search, so split very broad searches by location, agency or occupation.
maxItemsPerSearchintegerOptionalMax jobs per search
Optional cap for each keyword or search URL, so one broad keyword does not use up 'Max jobs'. Empty or 0 means no per-search cap.
postedWithinDaysintegerOptionalPosted within (days)
Only jobs whose announcement opened in the last N days, e.g. 7 for the last week. Leave empty for all open jobs. With 'Relevance' sorting the run switches to newest-first so it can stop early.
remoteOnlybooleanOptionaldefault falseRemote jobs only
Only jobs marked as remote (work from anywhere in the country).
teleworkOnlybooleanOptionaldefault falseTelework-eligible only
Only jobs that allow telework on some days.
hiringPathsarrayOptionalWho can apply (hiring path)
Only jobs open to these groups. Empty means any.
workSchedulesarrayOptionalWork schedule
Only jobs with these schedules. Empty means any.
appointmentTypesarrayOptionalAppointment type
Only these appointment types. Empty means any.
securityClearancesarrayOptionalSecurity clearance
Only jobs that need one of these clearances. Empty means any.
travelarrayOptionalTravel
Only jobs with this much travel. Empty means any.
minSalaryintegerOptionalMinimum salary (USD)
Only jobs paying at least this much, as filtered by USAJOBS (yearly amount, e.g. 90000).
maxSalaryintegerOptionalMaximum salary (USD)
Only jobs whose salary starts at or below this amount, as filtered by USAJOBS.
occupationSeriesarrayOptionalOccupation series
OPM occupational series codes, e.g. 2210 (IT management), 0610 (nurse), 1102 (contracting). Empty means any.
sortByenumOptionaldefault "relevance"Sort by
Order of the results, as on the site.
includeDetailsbooleanOptionaldefault trueInclude full announcement
Open each job announcement for the salary range, duties, qualifications, education, conditions of employment, how to apply, telework, travel, clearance, all locations and the agency contact. Turn off for a faster list with the search fields only (title, agency, location, starting salary, grade, dates, schedule, hiring paths).
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies work well for USAJOBS. If the site refuses requests several times in a row, the run moves to US residential addresses by itself.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| controlNumber | string | null | |
| title | string | null | |
| department | string | null | |
| agency | string | null | |
| subAgency | string | null | |
| location | string | null | |
| locations | array | null | |
| locationCount | number | null | |
| salary | string | null | |
| salaryMin | number | null | |
| salaryMax | number | null | |
| salaryPeriod | string | null | |
| payPlan | string | null | |
| grade | string | null | |
| gradeLow | string | null | |
| gradeHigh | string | null | |
| promotionPotential | string | null | |
| workSchedule | string | null | |
| appointmentType | string | null | |
| hiringPaths | array | null | |
| hiringPathCodes | array | null | |
| openDate | string | null | |
| closeDate | string | null | |
| dateDisplay | string | null | |
| status | string | null | |
| jobCategories | array | null | |
| announcementNumber | string | null | |
| remote | boolean | null | |
| teleworkEligible | string | null | |
| travelRequired | string | null | |
| relocationReimbursed | boolean | null | |
| supervisoryStatus | boolean | null | |
| serviceType | string | null | |
| unionRepresented | boolean | null | |
| drugTest | boolean | null | |
| securityClearance | string | null | |
| positionSensitivity | string | null | |
| financialDisclosure | boolean | null | |
| summary | string | null | |
| duties | string | null | |
| qualifications | string | null | |
| education | string | null | |
| conditionsOfEmployment | string | null | |
| additionalInformation | string | null | |
| evaluation | string | null | |
| requiredDocuments | string | null | |
| howToApply | string | null | |
| nextSteps | string | null | |
| agencyClarification | string | null | |
| descriptionText | string | null | |
| descriptionHtml | string | null | |
| contactName | string | null | |
| contactEmail | string | null | |
| contactPhone | string | null | |
| contactAddress | string | null | |
| url | string | null | |
| applyUrl | string | null | |
| searchQuery | string | null | |
| scrapedAt | string | null |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Job | One saved federal job announcement (full announcement included). | $0.0007 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('openrole/usajobs-scraper').call({
"keywords": [
"software engineer"
],
"location": "Washington, DC",
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run openrole/usajobs-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=openrole/usajobs-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
No examples yet
The developer hasn't published example inputs for this actor.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.