# BLS Wage Data - Salary by Occupation, State & Industry (`pink_comic/bls-oews-wage-salary-data`) Actor

Get US wage and salary data from the Bureau of Labor Statistics OEWS survey. Search by occupation, state, metro area, or industry. Returns hourly/annual wages, employment counts, and percentile pay ranges. No API key needed.

- **URL**: https://apify.com/pink\_comic/bls-oews-wage-salary-data.md
- **Developed by:** [Ava Torres](https://apify.com/pink_comic) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## BLS Wage & Salary Data — Occupational Employment Statistics (OEWS)

Look up official U.S. Bureau of Labor Statistics (BLS) wage and employment data for any occupation, geographic area, and industry. Data comes from the [Occupational Employment and Wage Statistics (OEWS)](https://www.bls.gov/oes/) survey — the authoritative source for salary benchmarking in the U.S.

### What You Get

Each run returns a record containing:

| Field | Description |
|---|---|
| `occupationTitle` | Occupation name (e.g. "Software Developers") |
| `areaTitle` | Geographic area (e.g. "National", "California") |
| `industryTitle` | Industry sector (e.g. "All Industries") |
| `year` | Data year |
| `employment` | Total workers employed in this category |
| `annualMedianWage` | Annual median salary (50th percentile) in USD |
| `annualMeanWage` | Annual mean salary in USD |
| `annual10th` | Annual 10th percentile wage |
| `annual25th` | Annual 25th percentile wage |
| `annual75th` | Annual 75th percentile wage |
| `annual90th` | Annual 90th percentile wage |
| `hourlyMedianWage` | Hourly median wage |
| `hourlyMeanWage` | Hourly mean wage |
| `hourly10th` / `hourly25th` / `hourly75th` / `hourly90th` | Hourly percentile wages |

### Who Uses This

- **HR and compensation teams** benchmarking salaries against market data
- **Recruiters** researching realistic pay ranges before posting jobs
- **Job seekers** validating offers and negotiating compensation
- **Consultants and analysts** building compensation models
- **Researchers** studying labor market trends and wage inequality

### How to Use It

#### Step 1: Find Your Occupation Code (SOC)

The BLS uses [Standard Occupational Classification (SOC)](https://www.bls.gov/soc/) codes. Common examples:

| Occupation | SOC Code |
|---|---|
| All Occupations | `000000` |
| Software Developers | `151252` |
| Data Scientists | `152051` |
| Registered Nurses | `291141` |
| Physicians (All) | `291064` |
| Lawyer | `231011` |
| Financial Managers | `113031` |
| General Managers | `111021` |
| Accountants and Auditors | `132011` |
| Market Research Analysts | `131161` |

Enter the code with or without a hyphen (e.g. `15-1252` or `151252`).

#### Step 2: Choose an Area Code

| Area | Code |
|---|---|
| **National (all U.S.)** | `0000000` |
| California | `S0600000` |
| Texas | `S4800000` |
| New York | `S3600000` |
| Florida | `S1200000` |
| Washington | `S5300000` |
| Illinois | `S1700000` |
| Massachusetts | `S2500000` |
| Georgia | `S1300000` |
| Colorado | `S0800000` |

For Metropolitan Statistical Area (MSA) codes, refer to the [BLS OES area definitions](https://www.bls.gov/oes/current/oes_stru.htm).

#### Step 3: Choose an Industry Code (optional)

Leave blank or use `000000` to get data across all industries. To narrow by sector:

| Industry | Code |
|---|---|
| All Industries | `000000` |
| Information | `510000` |
| Finance and Insurance | `520000` |
| Professional/Scientific/Technical Services | `540000` |
| Health Care and Social Assistance | `620000` |
| Educational Services | `610000` |
| Manufacturing | `310000` |
| Government | `910000` |

#### Step 4: Set the Year

BLS OEWS data is published annually each May. The most recent release covers **2023** data (published May 2024). Valid years: 2014–2023.

### Example Output

```json
{
  "occupationCode": "151252",
  "occupationTitle": "Software Developers",
  "areaCode": "0000000",
  "areaTitle": "National",
  "industryCode": "000000",
  "industryTitle": "All Industries",
  "year": "2023",
  "employment": "1847900",
  "annualMedianWage": "132270",
  "annualMeanWage": "138980",
  "hourlyMedianWage": "63.59",
  "hourlyMeanWage": "66.82",
  "annual10th": "74580",
  "annual25th": "101000",
  "annual75th": "168870",
  "annual90th": "208000",
  "hourly10th": "35.86",
  "hourly25th": "48.56",
  "hourly75th": "81.19",
  "hourly90th": "100.00"
}
````

### BLS API Rate Limits

Without a BLS API key, this actor can fetch data for **one occupation/area/industry combination per run** within the free tier. The BLS rate limit resets every 24 hours.

To increase limits, register for a free BLS API key at [data.bls.gov/registrationEngine](https://data.bls.gov/registrationEngine/) and enter it in the `apiKey` field. This raises the daily quota from 25 to 500 series per day.

### Data Notes

- Wages marked `*` indicate the wage is at or above the top-coded value ($239,200/year as of 2023).
- Wages marked `#` indicate the hourly wage is below $10/hour.
- Not all occupation/area/industry combinations are published. Very small or suppressed cells may return no data.
- OES data is **not seasonally adjusted**.
- Employment figures are in thousands for broad groups; individual occupation counts are actual numbers.

### Source

Data is sourced directly from the [BLS Public Data API v2](https://www.bls.gov/developers/api_public.htm) — the official BLS developer API. No scraping; all public government data.

# Actor input Schema

## `occupationCode` (type: `string`):

6-digit Standard Occupational Classification (SOC) code. Hyphens are optional (e.g. '15-1252' or '151252' for Software Developers). Use '000000' for all occupations combined. See the README for a full code list.

## `occupationTitle` (type: `string`):

Human-readable occupation name. Used to label output records. If blank, the actor looks up the title from a built-in SOC code table.

## `areaCode` (type: `string`):

7-character BLS OES area code. Use '0000000' for national data, 'S0600000' for California, etc. See the README for a state/MSA code reference.

## `areaTitle` (type: `string`):

Human-readable area name. Used to label output records. If blank, the actor looks up the title from a built-in area code table.

## `industryCode` (type: `string`):

6-character BLS OES industry code. Use '000000' for all industries combined, '540000' for Professional/Scientific/Technical Services, '620000' for Healthcare, etc.

## `industryTitle` (type: `string`):

Human-readable industry name. Used to label output records.

## `year` (type: `integer`):

The BLS OEWS data year to retrieve. OES publishes annual data each May for the prior year. The most recent release is 2024 data (published May 2025). Valid range: 2014-2024.

## `apiKey` (type: `string`):

Optional BLS API key from https://data.bls.gov/registrationEngine/. Without a key, the actor is limited to 25 series per day. With a key, you get 500 series per day and can query longer date ranges.

## Actor input object example

```json
{
  "occupationCode": "151252",
  "occupationTitle": "",
  "areaCode": "0000000",
  "areaTitle": "",
  "industryCode": "000000",
  "industryTitle": "",
  "year": 2024
}
```

# 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 = {
    "occupationCode": "151252",
    "occupationTitle": "",
    "areaCode": "0000000",
    "areaTitle": "",
    "industryCode": "000000",
    "industryTitle": "",
    "year": 2024
};

// Run the Actor and wait for it to finish
const run = await client.actor("pink_comic/bls-oews-wage-salary-data").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 = {
    "occupationCode": "151252",
    "occupationTitle": "",
    "areaCode": "0000000",
    "areaTitle": "",
    "industryCode": "000000",
    "industryTitle": "",
    "year": 2024,
}

# Run the Actor and wait for it to finish
run = client.actor("pink_comic/bls-oews-wage-salary-data").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 '{
  "occupationCode": "151252",
  "occupationTitle": "",
  "areaCode": "0000000",
  "areaTitle": "",
  "industryCode": "000000",
  "industryTitle": "",
  "year": 2024
}' |
apify call pink_comic/bls-oews-wage-salary-data --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=pink_comic/bls-oews-wage-salary-data",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "BLS Wage Data - Salary by Occupation, State & Industry",
        "description": "Get US wage and salary data from the Bureau of Labor Statistics OEWS survey. Search by occupation, state, metro area, or industry. Returns hourly/annual wages, employment counts, and percentile pay ranges. No API key needed.",
        "version": "0.1",
        "x-build-id": "ChwvHiZTO8afqiytm"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/pink_comic~bls-oews-wage-salary-data/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-pink_comic-bls-oews-wage-salary-data",
                "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/pink_comic~bls-oews-wage-salary-data/runs": {
            "post": {
                "operationId": "runs-sync-pink_comic-bls-oews-wage-salary-data",
                "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/pink_comic~bls-oews-wage-salary-data/run-sync": {
            "post": {
                "operationId": "run-sync-pink_comic-bls-oews-wage-salary-data",
                "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",
                "properties": {
                    "occupationCode": {
                        "title": "Occupation Code (SOC)",
                        "type": "string",
                        "description": "6-digit Standard Occupational Classification (SOC) code. Hyphens are optional (e.g. '15-1252' or '151252' for Software Developers). Use '000000' for all occupations combined. See the README for a full code list.",
                        "default": "151252"
                    },
                    "occupationTitle": {
                        "title": "Occupation Title (optional label)",
                        "type": "string",
                        "description": "Human-readable occupation name. Used to label output records. If blank, the actor looks up the title from a built-in SOC code table.",
                        "default": ""
                    },
                    "areaCode": {
                        "title": "Area Code",
                        "type": "string",
                        "description": "7-character BLS OES area code. Use '0000000' for national data, 'S0600000' for California, etc. See the README for a state/MSA code reference.",
                        "default": "0000000"
                    },
                    "areaTitle": {
                        "title": "Area Title (optional label)",
                        "type": "string",
                        "description": "Human-readable area name. Used to label output records. If blank, the actor looks up the title from a built-in area code table.",
                        "default": ""
                    },
                    "industryCode": {
                        "title": "Industry Code (NAICS-based)",
                        "type": "string",
                        "description": "6-character BLS OES industry code. Use '000000' for all industries combined, '540000' for Professional/Scientific/Technical Services, '620000' for Healthcare, etc.",
                        "default": "000000"
                    },
                    "industryTitle": {
                        "title": "Industry Title (optional label)",
                        "type": "string",
                        "description": "Human-readable industry name. Used to label output records.",
                        "default": ""
                    },
                    "year": {
                        "title": "Data Year",
                        "minimum": 2014,
                        "maximum": 2024,
                        "type": "integer",
                        "description": "The BLS OEWS data year to retrieve. OES publishes annual data each May for the prior year. The most recent release is 2024 data (published May 2025). Valid range: 2014-2024.",
                        "default": 2024
                    },
                    "apiKey": {
                        "title": "BLS API Registration Key (optional)",
                        "type": "string",
                        "description": "Optional BLS API key from https://data.bls.gov/registrationEngine/. Without a key, the actor is limited to 25 series per day. With a key, you get 500 series per day and can query longer date ranges."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
