# O\*NET Occupation Data Scraper (`crawlerbros/onet-occupation-data-scraper`) Actor

Scrape O\*NET OnLine (US Dept. of Labor) occupation data: SOC lookup, keyword search, browse by Job Zone or Bright Outlook. Tasks, skills, wages, growth outlook, related occupations.

- **URL**: https://apify.com/crawlerbros/onet-occupation-data-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Jobs, Automation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## O*NET Occupation Data Scraper

Scrape **O*NET OnLine** — the US Department of Labor's official occupation reference database covering 900+ standardized (SOC) occupations. Look up a specific occupation by SOC code, search by keyword, or browse by Job Zone, Bright Outlook, Job Family, Industry, Career Cluster, STEM category, or Hot Technology. Get tasks, skills, knowledge areas, abilities, work activities, work context, wages (national + state percentiles), employment outlook, and related occupations. HTTP-only via the public `onetonline.org` website. No login, no API key, no proxy required.

### What this actor does

- **Nine modes:** `bySocCode`, `search`, `browseByJobZone`, `browseByBrightOutlook`, `browseByJobFamily`, `browseByIndustry`, `browseByCareerCluster`, `browseBySTEM`, `browseByHotTechnology`
- **Deep occupation profiles:** tasks, work activities, work context, skills, knowledge, abilities, work styles, interests
- **Wages:** national median + full percentile breakdown (10th/25th/50th/75th/90th), with optional US-state-level percentiles
- **Employment outlook:** current employment, projected growth label, projected job openings, top employing industries
- **Bright Outlook & Job Zone tagging** on every occupation, with dedicated browse modes for each
- **Taxonomy browse:** Job Family (23 SOC major groups), Industry (20 sectors), Career Cluster (14 clusters), STEM category, and Hot Technology (176 employer-demand software/tools)
- **Related occupations & professional associations** for career-pathing and enrichment
- **Empty fields are omitted**

### Data source

This actor scrapes the free, public `onetonline.org` website (O*NET OnLine), maintained by the US Department of Labor's Employment and Training Administration. It does **not** use the key-gated O*NET Web Services API (`services.onetcenter.org`), which requires a registered account — everything here comes from the same pages a visitor sees in their browser.

### Output per occupation (mode = bySocCode)

- `socCode`, `title`, `description`, `sampleJobTitles[]`
- `brightOutlook`, `updatedYear`
- `tasks[]` — `{ task, category (Core/Supplemental), importance }`
- `workActivities[]`, `detailedWorkActivities[]`
- `workContext[]` — `{ name, description, responses[], topResponse, topResponsePercent }`
- `jobZone` — `{ jobZoneLabel, jobZoneTitle, education, relatedExperience, jobTraining, examples, svpRange }`
- `apprenticeshipTitles[]`
- `softwareSkills[]` — `{ category, examples[] }`, `hotTechnologies[]`
- `essentialSkills[]`, `transferableSkills[]`, `knowledge[]`, `abilities[]`, `workStyles[]` — each `{ name, description, importance }`
- `careerInterestTypes[]`, `specificInterestAreas[]` — RIASEC-style interest ratings
- `educationLevels[]` — `{ level, percent }`
- `medianHourlyWage`, `medianAnnualWage`, `wageDataYear`
- `wagePercentiles` — `{ national: { annualWage, hourlyWage }, state?, stateCode?, stateName? }` (10th/25th/50th/75th/90th)
- `employmentCount`, `employmentDataYear`
- `projectedGrowthLabel`, `projectedGrowthPeriod`, `projectedJobOpenings`, `projectedJobOpeningsPeriod`
- `topIndustries[]` — `{ industry, percentEmployed }`
- `relatedOccupations[]`, `professionalAssociations[]`
- `onetUrl`, `onetDetailsUrl`
- `recordType: "occupation"`, `scrapedAt`

### Output per occupation (mode = search / browseByJobZone / browseByBrightOutlook / browseByJobFamily / browseByIndustry / browseByCareerCluster / browseBySTEM / browseByHotTechnology)

- `socCode`, `title`, `onetUrl`, `brightOutlook`
- `featuredMatch` — best-match flag (mode=search only)
- `jobZoneValue`, `jobZoneBrowseLabel` — (mode=browseByJobZone only)
- `brightOutlookCategory` — (mode=browseByBrightOutlook only)
- `jobFamilyValue`, `jobFamilyLabel` — (mode=browseByJobFamily only)
- `industryValue`, `industryLabel` — (mode=browseByIndustry only)
- `careerClusterValue`, `careerClusterLabel` — (mode=browseByCareerCluster only)
- `stemOccupation`, `stemCategoryValue`, `stemCategoryLabel` — (mode=browseBySTEM only)
- `hotTechnologyName` — (mode=browseByHotTechnology only)
- `recordType: "occupationSummary"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `bySocCode` | `bySocCode` / `search` / `browseByJobZone` / `browseByBrightOutlook` / `browseByJobFamily` / `browseByIndustry` / `browseByCareerCluster` / `browseBySTEM` / `browseByHotTechnology` |
| `socCodes` | array | `["15-1252.00"]` | SOC codes to look up (mode=bySocCode), format `##-####.##` |
| `wageState` | string | – | Optional US state for wage percentiles (mode=bySocCode) |
| `searchQuery` | string | `electrician` | Keyword to search occupation titles (mode=search) |
| `jobZone` | string | `4` | Job Zone bucket to browse (mode=browseByJobZone) |
| `brightOutlookCategory` | string | `0` | Bright Outlook category to browse (mode=browseByBrightOutlook) |
| `jobFamily` | string | `15` | Job Family (SOC major group) to browse (mode=browseByJobFamily) |
| `industry` | string | `51` | Industry sector to browse (mode=browseByIndustry) |
| `careerCluster` | string | `060100` | Career Cluster to browse (mode=browseByCareerCluster) |
| `stemCategory` | string | `0` | STEM category to browse (mode=browseBySTEM) |
| `hotTechnology` | string | `Python` | Employer-demand technology name to browse (mode=browseByHotTechnology) |
| `titleContains` | string | – | Keep only occupations whose title contains this text |
| `brightOutlookOnly` | boolean | `false` | Keep only Bright Outlook occupations |
| `maxItems` | int | `50` | Hard cap (1–1000) |
| `proxyConfiguration` | object | AUTO | Optional fallback; not required for this public site |

#### Example: full occupation profile by SOC code

```json
{
  "mode": "bySocCode",
  "socCodes": ["15-1252.00", "29-1141.00"],
  "wageState": "CA"
}
````

#### Example: keyword search

```json
{
  "mode": "search",
  "searchQuery": "registered nurse",
  "brightOutlookOnly": true,
  "maxItems": 20
}
```

#### Example: browse by education/experience level

```json
{
  "mode": "browseByJobZone",
  "jobZone": "4",
  "titleContains": "engineer"
}
```

#### Example: browse high-growth occupations

```json
{
  "mode": "browseByBrightOutlook",
  "brightOutlookCategory": "1",
  "maxItems": 100
}
```

#### Example: browse by Job Family

```json
{
  "mode": "browseByJobFamily",
  "jobFamily": "15",
  "maxItems": 50
}
```

#### Example: browse by Industry

```json
{
  "mode": "browseByIndustry",
  "industry": "62",
  "maxItems": 50
}
```

#### Example: browse by Career Cluster

```json
{
  "mode": "browseByCareerCluster",
  "careerCluster": "060100"
}
```

#### Example: browse STEM occupations

```json
{
  "mode": "browseBySTEM",
  "stemCategory": "1"
}
```

#### Example: occupations that use a specific technology

```json
{
  "mode": "browseByHotTechnology",
  "hotTechnology": "Python"
}
```

### Use cases

- **HR tech & ATS platforms** — enrich job requisitions with standardized SOC task/skill data
- **Job boards & career sites** — power "explore this career" pages with real O\*NET content
- **Resume/job-matching tools** — match candidate skills against occupation skill profiles
- **Workforce development** — identify Bright Outlook occupations for training program design
- **Compensation benchmarking** — pull national and state wage percentiles per occupation
- **Career guidance & counseling apps** — surface Job Zone education requirements and related occupations

### FAQ

**What is O\*NET OnLine?**
O\*NET OnLine is the US Department of Labor's free public database describing the world of work — occupation descriptions, tasks, skills, wages, and outlook for 900+ standardized occupations, based on the Standard Occupational Classification (SOC) system.

**Is this affiliated with the US Department of Labor or O\*NET?**
No. This is an independent, third-party actor that scrapes the public `onetonline.org` website. It is not endorsed by or affiliated with the US DOL, ETA, or the O\*NET program.

**Why isn't this actor using the official O\*NET Web Services API?**
The official API (`services.onetcenter.org`) requires a registered account and API credentials. This actor uses the same free public website instead, so it works with zero configuration.

**What's the difference between "Job Zone" browse values and an occupation's individual Job Zone?**
Every occupation has its own Job Zone (1–5) shown in its full profile. The *browse* page groups Job Zone 1 together with Job Zone 2 ("1-2: Very Little to Some Preparation Needed") because O\*NET OnLine doesn't publish a standalone Job Zone 1 browse bucket.

**Why do some `softwareSkills` categories show fewer examples than the site lists?**
Categories with many examples show a "N more" link on the site that loads extra names via a pop-up, not in the page's initial HTML. The examples returned are the ones visible without that extra click.

**How current is the wage and employment data?**
Wages and employment figures come from the Bureau of Labor Statistics data currently published on O*NET OnLine (median wages, percentiles, employment counts, and projected growth), refreshed by O*NET/BLS on their own schedule.

**Can I get wage percentiles for a specific US state?**
Yes — set `wageState` (mode=bySocCode) to a two-letter US state code to include that state's wage percentiles alongside the national figures.

**Does this actor require a proxy?**
No. `onetonline.org` is a public, unauthenticated site with no known IP-based blocking. The `proxyConfiguration` field exists only as a fallback and can be left at its default.

**What is a "Hot Technology"?**
O\*NET flags specific software/tools (e.g. Python, AWS, Salesforce) as "Hot Technologies" when employer job postings show rapidly growing demand for them. `mode=browseByHotTechnology` returns every occupation that reports using the selected technology.

**What is a "Career Cluster"?**
O\*NET's 2024-revised Career Clusters group occupations by broad career pathway (e.g. Digital Technology, Healthcare & Human Services) — a newer, coarser grouping than Job Family, aimed at career-exploration tools.

**Are there browse axes on onetonline.org that this actor doesn't support?**
Yes, a few, deliberately excluded because they don't return reliable structured data without extra per-record requests or JavaScript rendering:

- **Training & Credentials** and **Job Openings on the Web** (per-occupation sections) are interactive state/ZIP-code search widgets with no static list content — they redirect to third-party sites (state training boards, CareerOneStop/ZipRecruiter) rather than returning data.
- **"Green" occupations** — O\*NET OnLine has retired this as a standalone browse category; it no longer appears on the site.
- STEM sub-categories shown in the site's own dropdown (e.g. "Architecture and Engineering" under "Research, Development, Design, and Practitioners") 404 when requested directly — only the top-level STEM categories are exposed.

# Actor input Schema

## `mode` (type: `string`):

What to fetch.

## `socCodes` (type: `array`):

O\*NET-SOC occupation codes to look up, format `##-####.##` (e.g. `15-1252.00` for Software Developers). Find codes via mode=search first.

## `wageState` (type: `string`):

Optional. Also include state-level wage percentiles (10th/25th/median/75th/90th, hourly + annual) alongside the national figures. Leave blank for national-only.

## `searchQuery` (type: `string`):

Free-text keyword to search occupation titles, e.g. `electrician`, `nurse`, `software developer`.

## `jobZone` (type: `string`):

Preparation/education level to browse. Job Zone 1 has no standalone browse bucket on O\*NET OnLine — it is combined with Job Zone 2.

## `brightOutlookCategory` (type: `string`):

Bright Outlook occupations are projected to grow rapidly, have many job openings, or are new/emerging.

## `jobFamily` (type: `string`):

O\*NET Job Family (SOC major occupational group) to browse.

## `industry` (type: `string`):

Industry sector to browse.

## `careerCluster` (type: `string`):

O\*NET Career Cluster (2024-revised) to browse.

## `stemCategory` (type: `string`):

STEM (Science, Technology, Engineering, Math) occupation category to browse.

## `hotTechnology` (type: `string`):

Employer-demand software/technology name. Returns occupations that report using it.

## `titleContains` (type: `string`):

Only keep occupations whose title contains this text (case-insensitive). Applies to search and all browse\* modes.

## `brightOutlookOnly` (type: `boolean`):

Only keep occupations tagged Bright Outlook. Applies to search and all browse\* modes.

## `maxItems` (type: `integer`):

Hard cap on emitted records.

## `proxyConfiguration` (type: `object`):

Not required — onetonline.org is a public, unauthenticated site with no known IP-based blocking. Kept as an optional fallback only.

## Actor input object example

```json
{
  "mode": "bySocCode",
  "socCodes": [
    "15-1252.00"
  ],
  "wageState": "",
  "searchQuery": "electrician",
  "jobZone": "4",
  "brightOutlookCategory": "0",
  "jobFamily": "15",
  "industry": "51",
  "careerCluster": "060100",
  "stemCategory": "0",
  "hotTechnology": "Python",
  "brightOutlookOnly": false,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `occupations` (type: `string`):

Dataset containing all scraped occupation records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "bySocCode",
    "socCodes": [
        "15-1252.00"
    ],
    "wageState": "",
    "searchQuery": "electrician",
    "jobZone": "4",
    "brightOutlookCategory": "0",
    "jobFamily": "15",
    "industry": "51",
    "careerCluster": "060100",
    "stemCategory": "0",
    "hotTechnology": "Python",
    "brightOutlookOnly": false,
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/onet-occupation-data-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "bySocCode",
    "socCodes": ["15-1252.00"],
    "wageState": "",
    "searchQuery": "electrician",
    "jobZone": "4",
    "brightOutlookCategory": "0",
    "jobFamily": "15",
    "industry": "51",
    "careerCluster": "060100",
    "stemCategory": "0",
    "hotTechnology": "Python",
    "brightOutlookOnly": False,
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/onet-occupation-data-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "bySocCode",
  "socCodes": [
    "15-1252.00"
  ],
  "wageState": "",
  "searchQuery": "electrician",
  "jobZone": "4",
  "brightOutlookCategory": "0",
  "jobFamily": "15",
  "industry": "51",
  "careerCluster": "060100",
  "stemCategory": "0",
  "hotTechnology": "Python",
  "brightOutlookOnly": false,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call crawlerbros/onet-occupation-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/onet-occupation-data-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "O*NET Occupation Data Scraper",
        "description": "Scrape O*NET OnLine (US Dept. of Labor) occupation data: SOC lookup, keyword search, browse by Job Zone or Bright Outlook. Tasks, skills, wages, growth outlook, related occupations.",
        "version": "1.0",
        "x-build-id": "QDGZiJJG8ihsrGZ0Y"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~onet-occupation-data-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-onet-occupation-data-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/crawlerbros~onet-occupation-data-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-onet-occupation-data-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/crawlerbros~onet-occupation-data-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-onet-occupation-data-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "bySocCode",
                            "search",
                            "browseByJobZone",
                            "browseByBrightOutlook",
                            "browseByJobFamily",
                            "browseByIndustry",
                            "browseByCareerCluster",
                            "browseBySTEM",
                            "browseByHotTechnology"
                        ],
                        "type": "string",
                        "description": "What to fetch.",
                        "default": "bySocCode"
                    },
                    "socCodes": {
                        "title": "SOC codes (mode = bySocCode)",
                        "type": "array",
                        "description": "O*NET-SOC occupation codes to look up, format `##-####.##` (e.g. `15-1252.00` for Software Developers). Find codes via mode=search first.",
                        "default": [
                            "15-1252.00"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "wageState": {
                        "title": "Wage percentiles: US state (mode = bySocCode)",
                        "enum": [
                            "",
                            "AL",
                            "AK",
                            "AZ",
                            "AR",
                            "CA",
                            "CO",
                            "CT",
                            "DE",
                            "DC",
                            "FL",
                            "GA",
                            "HI",
                            "ID",
                            "IL",
                            "IN",
                            "IA",
                            "KS",
                            "KY",
                            "LA",
                            "ME",
                            "MD",
                            "MA",
                            "MI",
                            "MN",
                            "MS",
                            "MO",
                            "MT",
                            "NE",
                            "NV",
                            "NH",
                            "NJ",
                            "NM",
                            "NY",
                            "NC",
                            "ND",
                            "OH",
                            "OK",
                            "OR",
                            "PA",
                            "RI",
                            "SC",
                            "SD",
                            "TN",
                            "TX",
                            "UT",
                            "VT",
                            "VA",
                            "WA",
                            "WV",
                            "WI",
                            "WY",
                            "AS",
                            "GU",
                            "MP",
                            "PR",
                            "VI"
                        ],
                        "type": "string",
                        "description": "Optional. Also include state-level wage percentiles (10th/25th/median/75th/90th, hourly + annual) alongside the national figures. Leave blank for national-only.",
                        "default": ""
                    },
                    "searchQuery": {
                        "title": "Search query (mode = search)",
                        "type": "string",
                        "description": "Free-text keyword to search occupation titles, e.g. `electrician`, `nurse`, `software developer`.",
                        "default": "electrician"
                    },
                    "jobZone": {
                        "title": "Job Zone (mode = browseByJobZone)",
                        "enum": [
                            "0",
                            "2",
                            "3",
                            "4",
                            "5"
                        ],
                        "type": "string",
                        "description": "Preparation/education level to browse. Job Zone 1 has no standalone browse bucket on O*NET OnLine — it is combined with Job Zone 2.",
                        "default": "4"
                    },
                    "brightOutlookCategory": {
                        "title": "Bright Outlook category (mode = browseByBrightOutlook)",
                        "enum": [
                            "0",
                            "1",
                            "2",
                            "3"
                        ],
                        "type": "string",
                        "description": "Bright Outlook occupations are projected to grow rapidly, have many job openings, or are new/emerging.",
                        "default": "0"
                    },
                    "jobFamily": {
                        "title": "Job Family (mode = browseByJobFamily)",
                        "enum": [
                            "0",
                            "17",
                            "27",
                            "37",
                            "13",
                            "21",
                            "15",
                            "47",
                            "25",
                            "45",
                            "35",
                            "29",
                            "31",
                            "49",
                            "23",
                            "19",
                            "11",
                            "55",
                            "43",
                            "39",
                            "51",
                            "33",
                            "41",
                            "53"
                        ],
                        "type": "string",
                        "description": "O*NET Job Family (SOC major occupational group) to browse.",
                        "default": "15"
                    },
                    "industry": {
                        "title": "Industry (mode = browseByIndustry)",
                        "enum": [
                            "0",
                            "72",
                            "56",
                            "11",
                            "71",
                            "23",
                            "61",
                            "52",
                            "93",
                            "62",
                            "51",
                            "55",
                            "31",
                            "21",
                            "81",
                            "54",
                            "53",
                            "44",
                            "48",
                            "22",
                            "42"
                        ],
                        "type": "string",
                        "description": "Industry sector to browse.",
                        "default": "51"
                    },
                    "careerCluster": {
                        "title": "Career Cluster (mode = browseByCareerCluster)",
                        "enum": [
                            "0",
                            "010100",
                            "010200",
                            "010300",
                            "020100",
                            "020200",
                            "030100",
                            "040100",
                            "040200",
                            "040300",
                            "050100",
                            "050200",
                            "060100",
                            "060200",
                            "060300"
                        ],
                        "type": "string",
                        "description": "O*NET Career Cluster (2024-revised) to browse.",
                        "default": "060100"
                    },
                    "stemCategory": {
                        "title": "STEM category (mode = browseBySTEM)",
                        "enum": [
                            "0",
                            "1",
                            "2",
                            "3",
                            "4",
                            "5"
                        ],
                        "type": "string",
                        "description": "STEM (Science, Technology, Engineering, Math) occupation category to browse.",
                        "default": "0"
                    },
                    "hotTechnology": {
                        "title": "Hot Technology (mode = browseByHotTechnology)",
                        "enum": [
                            "AJAX",
                            "Adobe Acrobat",
                            "Adobe After Effects",
                            "Adobe Creative Cloud software",
                            "Adobe Illustrator",
                            "Adobe InDesign",
                            "Adobe Photoshop",
                            "Alteryx software",
                            "Amazon DynamoDB",
                            "Amazon Elastic Compute Cloud EC2",
                            "Amazon Redshift",
                            "Amazon Web Services AWS CloudFormation",
                            "Amazon Web Services AWS software",
                            "Ansible software",
                            "Apache Airflow",
                            "Apache Cassandra",
                            "Apache Hadoop",
                            "Apache Hive",
                            "Apache Kafka",
                            "Apache Maven",
                            "Apache Spark",
                            "Apache Subversion SVN",
                            "Apache Tomcat",
                            "Apple Safari",
                            "Apple iOS",
                            "Apple macOS",
                            "Asana",
                            "Atlassian Bitbucket",
                            "Atlassian Confluence",
                            "Atlassian JIRA",
                            "Autodesk AutoCAD",
                            "Autodesk AutoCAD Civil 3D",
                            "Autodesk Revit",
                            "Bash",
                            "Bentley MicroStation",
                            "Bootstrap",
                            "Border Gateway Protocol BGP",
                            "C",
                            "C#",
                            "C++",
                            "Canva",
                            "Cascading style sheets CSS",
                            "Chef",
                            "Cisco Webex",
                            "Dassault Systemes SolidWorks",
                            "Django",
                            "Docker",
                            "ESRI ArcGIS software",
                            "Eclipse IDE",
                            "Elasticsearch",
                            "Epic Systems",
                            "Extensible markup language XML",
                            "Facebook",
                            "Figma",
                            "Git",
                            "GitHub",
                            "GitLab",
                            "Go",
                            "Google Analytics",
                            "Google Android",
                            "Google Angular",
                            "Google Docs",
                            "Google Looker Analytics",
                            "Google Sheets",
                            "Google Workspace software",
                            "Grafana Labs Grafana Cloud",
                            "GraphQL",
                            "Henry Schein Dentrix",
                            "Hibernate ORM",
                            "HubSpot software",
                            "Hypertext markup language HTML",
                            "IBM DB2",
                            "IBM SPSS Statistics",
                            "IBM Terraform",
                            "IBM WebSphere MQ",
                            "Informatica software",
                            "Intuit QuickBooks",
                            "Intuit TurboTax",
                            "JUnit",
                            "JavaScript",
                            "JavaScript Object Notation JSON",
                            "Jenkins CI",
                            "Kronos Workforce Timekeeper",
                            "Kubernetes",
                            "Linux",
                            "MEDITECH software",
                            "Marketo Marketing Automation",
                            "Microsoft .NET Framework",
                            "Microsoft ASP.NET",
                            "Microsoft Access",
                            "Microsoft Active Directory",
                            "Microsoft Active Server Pages ASP",
                            "Microsoft Azure software",
                            "Microsoft Edge",
                            "Microsoft Excel",
                            "Microsoft Office software",
                            "Microsoft Outlook",
                            "Microsoft Power Automate",
                            "Microsoft Power BI",
                            "Microsoft Power Platform software",
                            "Microsoft PowerPoint",
                            "Microsoft PowerShell",
                            "Microsoft Project",
                            "Microsoft SQL Server",
                            "Microsoft SQL Server Integration Services SSIS",
                            "Microsoft SQL Server Reporting Services SSRS",
                            "Microsoft SharePoint",
                            "Microsoft Team Foundation Server",
                            "Microsoft Teams",
                            "Microsoft Visio",
                            "Microsoft Visual Basic",
                            "Microsoft Visual Basic for Applications VBA",
                            "Microsoft Visual Studio",
                            "Microsoft Windows",
                            "Microsoft Windows Server",
                            "Microsoft Word",
                            "MongoDB",
                            "Mozilla Firefox",
                            "MySQL",
                            "NoSQL",
                            "Node.js",
                            "Oracle Cloud software",
                            "Oracle Database",
                            "Oracle Java",
                            "Oracle Java 2 Platform Enterprise Edition J2EE",
                            "Oracle PL/SQL",
                            "Oracle PeopleSoft",
                            "Oracle Primavera Enterprise Project Portfolio Management",
                            "Oracle SQL Developer",
                            "PHP",
                            "Perl",
                            "PostgreSQL",
                            "Procore software",
                            "Prometheus",
                            "Puppet",
                            "PyTorch",
                            "Python",
                            "R",
                            "React",
                            "Red Hat Enterprise Linux",
                            "Red Hat OpenShift",
                            "Redis",
                            "Ruby",
                            "SAP Concur",
                            "SAP ERP",
                            "SAP software",
                            "SAS",
                            "Salesforce software",
                            "Scala",
                            "Selenium",
                            "ServiceNow",
                            "Shell script",
                            "Slack",
                            "Snowflake",
                            "Splunk Enterprise",
                            "Spring Boot",
                            "Spring Framework",
                            "Structured query language SQL",
                            "Swift",
                            "Tableau",
                            "TensorFlow",
                            "Teradata Database",
                            "The MathWorks MATLAB",
                            "TikTok",
                            "Transact-SQL",
                            "Trimble SketchUp Pro",
                            "TypeScript",
                            "UNIX",
                            "UNIX Shell",
                            "Vue.js",
                            "WordPress",
                            "Workday software",
                            "Yardi software",
                            "Zoom",
                            "eClinicalWorks EHR software",
                            "jQuery"
                        ],
                        "type": "string",
                        "description": "Employer-demand software/technology name. Returns occupations that report using it.",
                        "default": "Python"
                    },
                    "titleContains": {
                        "title": "Filter: title contains",
                        "type": "string",
                        "description": "Only keep occupations whose title contains this text (case-insensitive). Applies to search and all browse* modes."
                    },
                    "brightOutlookOnly": {
                        "title": "Filter: Bright Outlook only",
                        "type": "boolean",
                        "description": "Only keep occupations tagged Bright Outlook. Applies to search and all browse* modes.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Hard cap on emitted records.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Not required — onetonline.org is a public, unauthenticated site with no known IP-based blocking. Kept as an optional fallback only.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
