Discover/Onetonline API
live

Onetonline APIonetonline.org ↗

Search O*NET-SOC occupations by keyword and retrieve live job openings by state or ZIP code. Returns occupation codes, titles, employers, and posting dates.

Endpoint health
verified 2h ago
search_occupations
list_job_openings
2/2 passing latest checkself-healing
Endpoints
2
Updated
2h ago

What is the Onetonline API?

The O*NET OnLine API exposes 2 endpoints that cover occupation search and live job listing retrieval against the O*NET-SOC taxonomy. The search_occupations endpoint returns every matching occupation—often several hundred rows—with O*NET-SOC codes, titles, and Bright Outlook flags. The list_job_openings endpoint then maps any occupation code to current postings, filtered nationwide, by US state, or by ZIP code proximity.

This call costs1 credit / call— charged only on success
Try it
Keyword, job title, or O*NET-SOC code to search for (e.g. dental assistant).
→ api.parse.bot/scraper/36a445fb-2f68-4b94-a5ee-583473dc4d93/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/36a445fb-2f68-4b94-a5ee-583473dc4d93/search_occupations?query=dental+assistant' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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 onetonline-org-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: O*NET OnLine Job Openings API — search occupations, then browse openings."""
from parse_apis.onetonline_org_api import OnetOnline, State, OccupationNotFound

client = OnetOnline()

# Search for occupations matching a keyword; cap total items fetched.
for occ in client.occupations.search(query="dental assistant", limit=5):
    print(occ.title, occ.occupation_code, occ.bright_outlook)

# Drill into the first matching occupation's job openings in one state.
occ = client.occupations.search(query="software developer", limit=1).first()
if occ is not None:
    print(f"\nJob openings for {occ.title} in New York:")
    for job in occ.job_openings.list(state=State.NY, limit=3):
        print(f"  {job.title} at {job.company} — {job.location} ({job.posted_date})")

# Point-construct an occupation by its known code and list nationwide openings.
try:
    nurse = client.occupation(occupation_code="29-1141.00")
    for job in nurse.job_openings.list(limit=5):
        print(job.title, job.company, job.location)
except OccupationNotFound as e:
    print(f"Occupation not found: {e.occupation_code}")

print("\nexercised: occupations.search / occupation() / job_openings.list")
All endpoints · 2 totalmissing one? ·

Searches O*NET OnLine occupations by keyword or O*NET-SOC code and returns every matching occupation in the site's relevance order (a single page; the site returns the full match list in one response, often several hundred rows). Each row carries the O*NET-SOC occupation_code that list_job_openings accepts, the occupation title, whether the site flags it as Bright Outlook, and the occupation summary page URL. A query with no matches returns an empty occupations array with total 0.

Input
ParamTypeDescription
queryrequiredstringKeyword, job title, or O*NET-SOC code to search for (e.g. dental assistant).
Response
{
  "type": "object",
  "fields": {
    "query": "the search term as submitted",
    "total": "integer count of occupations returned",
    "occupations": "array of matching occupations, each with occupation_code (O*NET-SOC code string, e.g. 31-9091.00), title, bright_outlook (boolean), occupation_url"
  },
  "sample": {
    "data": {
      "query": "dental assistant",
      "total": 594,
      "occupations": [
        {
          "title": "Dental Assistants",
          "bright_outlook": true,
          "occupation_url": "https://www.onetonline.org/link/summary/31-9091.00",
          "occupation_code": "31-9091.00"
        },
        {
          "title": "Dental Laboratory Technicians",
          "bright_outlook": false,
          "occupation_url": "https://www.onetonline.org/link/summary/51-9081.00",
          "occupation_code": "51-9081.00"
        }
      ]
    },
    "status": "success"
  }
}

About the Onetonline API

Occupation Search

The search_occupations endpoint accepts a query parameter—a keyword, job title fragment, or an O*NET-SOC code like 31-9091.00—and returns a single-page result set containing every matching occupation in relevance order. Each occupation in the occupations array carries an occupation_code (the canonical O*NET-SOC string), a human-readable title, and a bright_outlook boolean that flags occupations projected to grow significantly or have large numbers of openings. The total field gives the integer count of matches for that query.

Job Openings by Occupation

The list_job_openings endpoint accepts an occupation_code from the search results and returns current job postings associated with that occupation. Each entry in the jobs array includes title, company, location (City, ST format), posted_date (e.g. September 18, 2026), and job_url linking directly to the posting's detail page. Results paginate via a 1-based page parameter; the has_more boolean indicates whether another page exists, and total reports the full count the source shows for the selected scope.

Geographic Filtering

Job openings can be scoped in three ways: omit both state and zip_code for nationwide results, pass a two-letter state code (e.g. CA, TX, PR) to restrict to that state or territory, or supply a 5-digit zip_code to retrieve openings near that location. The state and zip_code parameters are mutually exclusive. The area field in the response reflects the scope the site applied—nationwide, in <State>, or near <ZIP>—and is null when no openings were found for the combination.

Reliability & maintenanceVerified

The Onetonline API is a managed, monitored endpoint for onetonline.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when onetonline.org 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 onetonline.org 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.

Last verified
2h ago
Latest check
2/2 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build an occupation explorer that maps keywords to O*NET-SOC codes and displays projected demand using the bright_outlook flag.
  • Aggregate job postings by occupation code and state to visualize regional hiring demand across the US.
  • Power a career-guidance tool that takes a user's job title query and surfaces live openings tied to the closest matching O*NET occupation.
  • Monitor hiring trends for a set of occupation codes by polling list_job_openings periodically and tracking changes in total.
  • Provide ZIP-code-aware job recommendations by chaining search_occupations with list_job_openings using the zip_code filter.
  • Enrich workforce analytics dashboards with standardized O*NET-SOC codes and employer names from posting data.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 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.

Frequently asked questions
Does O*NET OnLine have an official developer API?+
Yes. The O*NET Center publishes the O*NET Web Services API at https://services.onetcenter.org/. It covers occupational data such as skills, tasks, and wages. This Parse API focuses specifically on occupation keyword search and live job openings as shown on the O*NET OnLine site, which the official web services do not expose.
What does `list_job_openings` actually return, and how do I page through results?+
Each call returns a jobs array of postings for the given occupation_code, each with title, company, location, posted_date, and job_url. The total field shows how many openings exist for the selected scope. Pass an incrementing page integer (1-based) to retrieve subsequent pages. When has_more is false, you have reached the last page. Passing a page number beyond the last returns an empty jobs array.
Can I combine `state` and `zip_code` in the same request?+
No. The two parameters are mutually exclusive. Use state for a statewide filter or zip_code for proximity-based results. Omit both to get nationwide openings. The area field in the response confirms which scope was applied.
Does the API return occupation details such as skills, tasks, wages, or education requirements?+
Not currently. The API covers occupation search (returning occupation_code, title, and bright_outlook) and job posting listings. Detailed occupational attributes—skills, tasks, knowledge areas, median wages—are not included in the response fields. You can fork this API on Parse and revise it to add an endpoint pulling those details.
How fresh are the job postings returned by `list_job_openings`?+
Each posting carries a posted_date string exactly as the source displays it (e.g. September 18, 2026), so you can assess recency per listing. The API reflects what the O*NET OnLine site shows at the time of the request; postings that have been removed from the site will not appear in results.
Page content last updated . Spec covers 2 endpoints from onetonline.org.
Related APIs in JobsSee all →
careeronestop.com API
Access data from CareerOneStop.com.
occ.com.mx API
Search for job listings across OCC.com.mx, Mexico's largest job board, by keyword and location. Retrieve paginated results with titles, companies, salaries, and posting dates, then fetch full listing details including job descriptions, required skills, benefits, and company information.
usajobs.gov API
Search federal job openings and view detailed job announcements from USAJobs.gov, plus access historical job data and reference codes to help you find the right government position. Filter and explore thousands of federal career opportunities with comprehensive job details all in one place.
getmyfirstjob.co.uk API
Search and browse apprenticeship and early career opportunities across the UK by occupation, location, and employer. Access detailed job descriptions, employer profiles, occupation categories, and the latest apprenticeship listings from GetMyFirstJob.co.uk.
careers.un.org API
Search and browse current job openings at the United Nations, filtering by job network, job family, and other criteria. Retrieve structured data on available positions across UN departments and duty stations worldwide.
indeed.com API
Search and discover job opportunities on Indeed while accessing detailed job descriptions, company profiles, and salary insights all in one place. Get comprehensive career information including specific compensation data to help you find and evaluate the right job opportunity for you.
offerzen.com API
Browse and retrieve tech job listings from OfferZen's developer marketplace. Access structured job data including required skills, company details, location, and workplace policy, with support for keyword filtering and pagination.
upwork.com API
Access comprehensive details about Upwork job postings, including descriptions, budgets, required skills, client information, and engagement metrics to help you find and evaluate opportunities. Monitor job activity and client profiles to make informed decisions about which projects to pursue.