GovSalaries Public Employee Salary Scraper
Pricing
from $0.80 / 1,000 record scrapeds
GovSalaries Public Employee Salary Scraper
Nationwide database of actual US public-employee pay — every state and employer type: cities, counties, school districts, universities, colleges, hospitals, police and fire departments. Filter by state, category, employer or job title; add pay and benefits detail per record.
Pricing
from $0.80 / 1,000 record scrapeds
Rating
0.0
(0)
Developer
BowTiedRaccoon
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Share
Scrape public-employee pay records from GovSalaries, the nationwide database of actual US government payroll. Returns employee name, year, job title, employer, state, and category across every US state and nine employer types — cities, counties, school districts, colleges, universities, hospitals, fire departments, and police.
GovSalaries Scraper Features
- Covers all 50 states plus DC and federal employers — one actor, every jurisdiction
- Filters by state, employer category, a specific employer, job title text, or year
- Returns the full pay breakdown as an opt-in — regular pay, other pay, total pay, benefits, and total compensation
- Pulls employer aggregates too: headcount, average annual wage, median annual wage
- Pure HTTP scraping — no browser required
- Supports resuming a stopped run without re-paying for records you already have
Who Uses Public Payroll Data?
- Journalists and watchdog groups — pull salary history for any agency, any state, without filing a records request
- Union negotiators — benchmark police, fire, and teacher pay against comparable jurisdictions
- Compensation and relocation researchers — school-district and university pay are the highest-volume slices, and now they're queryable
- Policy researchers — track public payroll spend across categories and geography
- Recruiters and HR teams — check what a public-sector role actually pays before making an offer
How GovSalaries Scraper Works
- Pick a scope — one or more states, one or more employer categories, a single employer, or leave it open for everything.
- The scraper walks GovSalaries' own category and employer indexes to find matching roster pages, then reads name, year, job title, and employer off each one.
- Set
includePayto true and each row also gets a follow-up fetch for the pay breakdown and employer aggregates — one extra request per record, billed as an add-on. - Records stream out until
maxItemsis reached or the scope is exhausted.
Input
{"states": ["CA"],"categories": ["school-district"],"includePay": true,"maxItems": 100}
| Field | Type | Default | Description |
|---|---|---|---|
states | array | all states | US state/territory codes to include (e.g. CA, TX, DC, FD for federal). Leave empty for all. |
categories | array | all categories | Employer types to include: city, county, state, school-district, college, university, fire-protection, police, hospital. Leave empty for all. |
agency | string | — | Limit results to one employer by name or URL slug. Requires at least one selected state. |
jobTitleQuery | string | — | Only return rows whose job title contains this text. |
year | integer | — | Only return rows from one calendar year. |
includePay | boolean | false | Add regular pay, other pay, total pay, benefits, and total compensation to each row. |
maxItems | integer | 15 | Maximum number of records to return. |
resumeCursor | string | — | Cursor from a previous run's Output. Continues a stopped crawl without re-charging for records already delivered. |
A second example, pulling every record for a single employer with the full pay breakdown:
{"states": ["CA"],"agency": "gilroy-unified","includePay": true,"maxItems": 500}
GovSalaries Scraper Output Fields
Without includePay (the default — fast, roster-only):
{"employee_name": "Paul Winslow","year": 2024,"job_title": "Assistant Superintendent HR","agency": "Gilroy Unified","state": "CA","category": "school-district","profile_url": "https://govsalaries.com/paul-winslow-213465883"}
With includePay: true, the same row also carries the pay breakdown and employer aggregates:
{"employee_name": "Paul Winslow","year": 2024,"job_title": "Assistant Superintendent HR","agency": "Gilroy Unified","state": "CA","category": "school-district","profile_url": "https://govsalaries.com/paul-winslow-213465883","total_compensation": 305010,"regular_pay": 238377,"other_pay": 17334,"total_pay": 255711,"benefits": 49299,"location": "Santa Clara County","pay_plan": null,"employer_employees_number": 1538,"employer_average_annual_wage": 87722,"employer_median_annual_wage": 69535}
| Field | Type | Description |
|---|---|---|
employee_name | string | Employee's full name |
year | number | Calendar year the record covers |
job_title | string | Job title as listed (some agencies don't publish this — expect N/A) |
agency | string | Employer name |
state | string | Two-letter state code (or FD for federal) |
category | string | Employer type — see the categories input field for the full list |
profile_url | string | Link to the employee's detail page on GovSalaries |
total_compensation | number | Total compensation, includePay only |
regular_pay | number | Regular pay, includePay only |
other_pay | number | Other pay, includePay only |
total_pay | number | Total pay (regular + other), includePay only |
benefits | number | Benefits value, includePay only |
location | string | County, includePay only |
pay_plan | string | Pay plan, when published — includePay only |
employer_employees_number | number | Employer's total headcount, includePay only |
employer_average_annual_wage | number | Employer's average annual wage, includePay only |
employer_median_annual_wage | number | Employer's median annual wage, includePay only |
Resuming a large crawl
Every run emits a resumeCursor in its Output. If a large crawl stops before it finishes — because it hit maxItems, your spend cap (maxTotalChargeUsd), or was aborted — start a new run with the same input plus that resumeCursor to continue from where it left off. The crawl resumes from the queued work the previous run didn't reach.
- You are not re-charged for records the earlier run already delivered.
- Resume within your account's run-retention window — on the free tier, roughly your 10 most recent runs. Once the source run is pruned, its
resumeCursoris no longer valid. resumeCursoris opaque — supply it unmodified.
FAQ
How do I scrape GovSalaries?
Run this actor with a state, a category, or an employer — or leave the filters empty and let maxItems bound the run. GovSalaries Scraper handles the pagination and employer discovery for you.
What data can I get from GovSalaries?
Employee name, year, job title, employer, state, and category on every run. Add includePay: true for the full pay breakdown — regular pay, other pay, total pay, benefits, total compensation — plus employer headcount and wage averages.
Can I filter by state or employer type?
Yes. states and categories both take multiple values, so you can pull, say, school districts in California and Texas in one run. agency narrows to a single employer, and jobTitleQuery filters by title text.
How much does GovSalaries Scraper cost to run?
Roster records (name, year, title, employer) are priced at the standard per-record rate. The pay breakdown is a separate add-on charge per record, only billed when includePay is set — you're not paying for data you didn't ask for.
Does GovSalaries Scraper need proxies?
No setup on your end. The actor handles its own access — you just configure the input and run it.
What job titles show up as "N/A"?
Some agencies don't publish job titles for every record — GovSalaries lists those rows as N/A, and the scraper returns exactly what the source shows rather than guessing.
Need More Features?
Need custom fields, filters, or a different target site? File an issue or get in touch.
Why Use GovSalaries Scraper?
- National coverage — every state, every employer level, one actor. Most public-pay sources cover a single state.
- Real payroll, not advertised pay — this is what public employees are actually paid, not a job listing's salary range.
- Pay data on demand — the roster is free to browse; the full pay breakdown is a per-record add-on, so you only pay for what you use.