OpenTheBooks APIopenthebooks.com ↗
Search Nevada state employee salary records by job title, employer, year, and name. Returns annual wages, titles, and employer data via a single endpoint.
What is the OpenTheBooks API?
The OpenTheBooks Nevada Salaries API exposes one endpoint — search_salaries_by_title — that returns up to 100 salary records per page from Nevada's public employee compensation database. Each record includes the employee's name, job title, employer, annual wages, and reporting year. You can filter server-side by employer, year, and last name, with an additional title keyword match applied across results.
curl -X GET 'https://api.parse.bot/scraper/2ca9c77c-aac9-405d-9a55-fbfa7662e0d1/search_salaries_by_title?page=8&year=2024&title=economics&employer=University+of+Nevada%2C+Reno' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace openthebooks-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: OpenTheBooks SDK — bounded, re-runnable; every call capped."""
from parse_apis.openthebooks_com_api import OpenTheBooks, TitleRequired
client = OpenTheBooks()
# Search for economics department at UNR, 2024
for record in client.salary_search_results.search(
title="economics", employer="University of Nevada, Reno", year="2024", limit=3
):
print(record.name, record.title, record.annual_wages)
# Take a single result for a broader search
result = client.salary_search_results.search(
title="football", employer="University of Nevada, Reno", limit=1
).first()
if result:
print(result.name, result.title, result.year)
# Typed error: title is required
try:
client.salary_search_results.search(title="nursing", year="2024", limit=1).first()
except TitleRequired as e:
print("error:", e)
print("exercised: salary_search_results.search")
Search Nevada state employee salary records by title/department keyword. The title filter is applied client-side (case-insensitive substring match) against server-paginated results sorted by annual wages descending. Each page contains up to 100 upstream records; matches_on_page reports how many matched the title filter. Use employer and year filters to narrow the server-side result set before title filtering. Results are auto-iterated across upstream pages.
| Param | Type | Description |
|---|---|---|
| name | string | Employee last name (optionally followed by first name, no comma) for server-side filtering. |
| page | integer | Upstream page number (1-based). Each page has up to 100 upstream records, of which zero or more may match the title filter. |
| year | string | Year to filter by (e.g. '2024'). Omit or leave empty for all years. |
| titlerequired | string | Keyword to match in the employee title field (case-insensitive substring). Titles typically contain academic department names (e.g. 'economics', 'nursing', 'computer science'). |
| employer | string | Employer name for server-side filtering. Must match a value from the site's employer dropdown (e.g. 'University of Nevada, Reno', 'University of Nevada, Las Vegas'). |
{
"type": "object",
"fields": {
"page": "integer — current upstream page number",
"records": "array of matching salary records with year, employer, name, title, annual_wages, source",
"year_filter": "string or null — the year filter applied",
"title_filter": "string — the title keyword that was applied",
"has_next_page": "boolean — whether more upstream pages exist",
"employer_filter": "string or null — the employer filter applied",
"matches_on_page": "integer — how many records matched the title filter",
"records_on_page": "integer — total upstream records on this page (up to 100)"
},
"sample": {
"data": {
"page": 8,
"records": [
{
"name": "Sokolova Anna",
"year": "2024",
"title": "Associate Professor Economics",
"source": "University of Nevada, Reno",
"employer": "University of Nevada, Reno",
"annual_wages": "$124,978.54"
},
{
"name": "Pram Kym",
"year": "2024",
"title": "Assistant Professor Economics",
"source": "University of Nevada, Reno",
"employer": "University of Nevada, Reno",
"annual_wages": "$118,205.20"
}
],
"year_filter": "2024",
"title_filter": "economics",
"has_next_page": true,
"employer_filter": "University of Nevada, Reno",
"matches_on_page": 2,
"records_on_page": 100
},
"status": "success"
}
}About the OpenTheBooks API
What the API Returns
The search_salaries_by_title endpoint queries Nevada state employee salary records and returns structured compensation data. Each record in the records array contains the employee's name, title, employer, annual_wages, year, and a source reference. Results are sorted by annual wages in descending order, so the highest-paid matches surface first.
Filtering and Pagination
The endpoint accepts four optional server-side filters: employer (must match a value from the source's employer list, e.g. 'University of Nevada, Reno'), year (e.g. '2024'), and name (employee last name, optionally followed by first name). The required title parameter applies a case-insensitive substring match against the employee title field — useful for finding all employees with titles containing terms like 'engineer', 'director', or 'professor'.
Pagination is controlled by the page parameter (1-based). Each upstream page holds up to 100 records (records_on_page), but only the subset that matches the title keyword is returned in records (matches_on_page). The has_next_page boolean tells you whether additional pages exist, so you can walk through the full result set incrementally.
Coverage and Scope
Data covers Nevada state employees across multiple employers including state agencies and university systems. Year coverage depends on what OpenTheBooks has published for Nevada; omitting the year filter returns records across all available years. The employer_filter and year_filter fields in the response confirm which filters were applied, helping you validate that your query parameters were recognized correctly.
The OpenTheBooks API is a managed, monitored endpoint for openthebooks.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when openthebooks.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official openthebooks.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a salary comparison tool for Nevada public sector job titles like 'nurse' or 'engineer'
- Track year-over-year compensation changes for a specific Nevada state agency by filtering on employer and year
- Identify the highest-paid employees in a department by retrieving the first page of results sorted by annual_wages descending
- Look up a specific employee's compensation history by filtering on their last name across multiple years
- Analyze wage distribution across Nevada university system roles using the title keyword and employer filters
- Export a dataset of all records for a given employer and year for offline analysis or reporting
- Cross-reference job title keywords across different state employers to compare compensation levels
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does OpenTheBooks have an official developer API?+
What does the title parameter actually filter, and how precise does it need to be?+
title parameter performs a case-insensitive substring match against the employee's job title field. You don't need an exact match — passing 'director' will return records with titles like 'Director of Finance' or 'Associate Director'. The filter is applied after server-side pagination, so matches_on_page may be lower than records_on_page on any given page.Why might matches_on_page be zero on some pages even when results exist on other pages?+
matches_on_page will be zero for that page even though matching records may exist on later pages. You need to iterate through all pages using has_next_page to guarantee complete coverage.Does the API cover other states besides Nevada?+
Can I retrieve individual employee benefit or pension data beyond annual wages?+
annual_wages, title, employer, name, year, and source — there are no fields for benefits, pensions, overtime, or other compensation components. You can fork it on Parse and revise it to add an endpoint that targets any additional compensation detail available on the source site.