# PayScale API

> PayScale returns job and company salary data as a workflow and API.

Get salary returns typical pay, salary ranges, bonuses, skills, and experience breakdowns for a job title, optionally by country and city. Get company pay returns average annual base salary and common jobs for an employer, optionally by country and result count.

- Page: https://fous.com/workflows/payscale
- Handle: `@payscale`
- Category: [Jobs](https://fous.com/workflows/category/jobs)
- Source website: https://payscale.com
- Last verified: Sep 29, 2026
- Fous is not affiliated with PayScale.

## Methods

### Get company pay

Operation `get_company_pay`, version 1. 1 credit per call.

See average annual base salary and common jobs at a named employer on PayScale public research pages. Jobs are listed in the order shown, with salary ranges where available; some employers have no salary data in a given country.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `company` | string | yes | `"Shopify"` | Employer name or PayScale company page link, for example Target. |
| `country` | string | no | `"Canada"` | Country name or two-letter country code, for example Canada. |
| `max_results` | integer | no | `9` | Maximum number of jobs to return, for example 20. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "company"
  ],
  "properties": {
    "company": {
      "type": "string",
      "minLength": 1,
      "description": "Employer name or PayScale company page link, for example Target.",
      "examples": [
        "Shopify",
        "Target"
      ]
    },
    "country": {
      "type": "string",
      "default": "United States",
      "description": "Country name or two-letter country code, for example Canada.",
      "examples": [
        "Canada"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 20,
      "maximum": 50,
      "minimum": 1,
      "description": "Maximum number of jobs to return, for example 20.",
      "x-fous-developer": true,
      "examples": [
        9,
        50
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "company": "Shopify",
      "country": "Canada",
      "max_results": 9
    },
    {
      "company": "Target"
    },
    {
      "company": "Target",
      "max_results": 50
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `jobs` | array |  | Common jobs in the order shown on PayScale. |
| `jobs[].page_url` | string or null | `"https://www.payscale.com/research/CA/Job=Customer_Service_Advisor/Salary/6c680dde/Shopify"` | PayScale job salary page. |
| `jobs[].job_title` | string | `"Customer Service Advisor"` |  |
| `jobs[].average_salary` | number or null | `45096.51` | Average annual salary in the company currency. |
| `jobs[].salary_range_low` | number or null | `36020.91` | Low end of the displayed annual salary range. |
| `jobs[].salary_range_high` | number or null | `56482.18` | High end of the displayed annual salary range. |
| `company` | string | `"Shopify"` | Employer name on PayScale. |
| `currency` | string or null | `"CAD"` | Currency code for all salary figures. |
| `page_url` | string | `"https://www.payscale.com/research/CA/Employer=Shopify/Salary"` | PayScale company salary page. |
| `average_base_salary_per_year` | number or null | `81083.27` | Average yearly base salary in the given currency. |

**Example input**

```json
{
  "company": "Shopify",
  "country": "Canada",
  "max_results": 9
}
```

**Example output**

```json
{
  "jobs": [
    {
      "page_url": "https://www.payscale.com/research/CA/Job=Customer_Service_Advisor/Salary/6c680dde/Shopify",
      "job_title": "Customer Service Advisor",
      "average_salary": 45096.51,
      "salary_range_low": 36020.91,
      "salary_range_high": 56482.18
    },
    {
      "page_url": "https://www.payscale.com/research/CA/Job=Data_Scientist/Salary/79d54b3a/Shopify",
      "job_title": "Data Scientist",
      "average_salary": 86141.38,
      "salary_range_low": 66224.74,
      "salary_range_high": 107836.15
    },
    {
      "page_url": "https://www.payscale.com/research/CA/Job=Technical_Support_Specialist/Salary/94b6c18a/Shopify",
      "job_title": "Technical Support Specialist",
      "average_salary": 51927.5,
      "salary_range_low": 40341.63,
      "salary_range_high": 66870.23
    }
  ],
  "company": "Shopify",
  "currency": "CAD",
  "page_url": "https://www.payscale.com/research/CA/Employer=Shopify/Salary",
  "average_base_salary_per_year": 81083.27
}
```

### Get salary

Operation `get_salary`, version 1. 1 credit per call.

Get typical pay for a job title on public PayScale research pages, optionally in a country and city. Skill pay effects are null when not published.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `city` | string | no | `"Chicago"` | City, for example Chicago. |
| `country` | string | no | `"Canada"` | Country, for example United States or Canada. |
| `job_title` | string | yes | `"Software Engineer"` | Job title to look up, for example Office Manager. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "job_title"
  ],
  "properties": {
    "city": {
      "type": "string",
      "description": "City, for example Chicago.",
      "examples": [
        "Chicago"
      ]
    },
    "country": {
      "type": "string",
      "default": "United States",
      "description": "Country, for example United States or Canada.",
      "examples": [
        "Canada"
      ]
    },
    "job_title": {
      "type": "string",
      "description": "Job title to look up, for example Office Manager.",
      "examples": [
        "Software Engineer",
        "Office Manager"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "country": "Canada",
      "job_title": "Software Engineer"
    },
    {
      "city": "Chicago",
      "job_title": "Office Manager"
    },
    {
      "job_title": "Office Manager"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `currency` | string or null | `"CAD"` |  |
| `location` | string | `"Canada"` |  |
| `page_url` | string | `"https://www.payscale.com/research/CA/Job=Software_Engineer/Salary"` |  |
| `job_title` | string | `"Software Engineer"` |  |
| `top_skills` | array |  |  |
| `top_skills[].name` | string | `"JavaScript"` |  |
| `top_skills[].pay_effect_percent` | number or null |  |  |
| `bonus_range` | object |  |  |
| `bonus_range.low` | number or null | `1979.23` |  |
| `bonus_range.high` | number or null | `13548.92` |  |
| `last_updated` | string or null | `"2026-05-22"` |  |
| `salary_profiles` | integer or null | `1198` |  |
| `total_pay_range` | object |  |  |
| `total_pay_range.low` | number or null | `61072` |  |
| `total_pay_range.high` | number or null | `124079.92` |  |
| `base_salary_range` | object |  |  |
| `base_salary_range.low` | number or null | `62190.94` |  |
| `base_salary_range.high` | number or null | `118956.77` |  |
| `average_hourly_rate` | number or null | `38.4` |  |
| `average_pay_by_experience` | object |  |  |
| `average_pay_by_experience.mid_career` | number or null | `96557.55` |  |
| `average_pay_by_experience.entry_level` | number or null | `68681.18` |  |
| `average_pay_by_experience.experienced` | number or null | `108341.92` |  |
| `average_pay_by_experience.late_career` | number or null | `109941.28` |  |
| `average_pay_by_experience.early_career` | number or null | `82558.38` |  |
| `average_base_salary_per_year` | number or null | `87785.21` |  |

**Example input**

```json
{
  "country": "Canada",
  "job_title": "Software Engineer"
}
```

**Example output**

```json
{
  "currency": "CAD",
  "location": "Canada",
  "page_url": "https://www.payscale.com/research/CA/Job=Software_Engineer/Salary",
  "job_title": "Software Engineer",
  "top_skills": [
    {
      "name": "JavaScript",
      "pay_effect_percent": null
    },
    {
      "name": "SQL",
      "pay_effect_percent": null
    },
    {
      "name": "Python",
      "pay_effect_percent": null
    }
  ],
  "bonus_range": {
    "low": 1979.23,
    "high": 13548.92
  },
  "last_updated": "2026-05-22",
  "salary_profiles": 1198,
  "total_pay_range": {
    "low": 61072,
    "high": 124079.92
  },
  "base_salary_range": {
    "low": 62190.94,
    "high": 118956.77
  },
  "average_hourly_rate": 38.4,
  "average_pay_by_experience": {
    "mid_career": 96557.55,
    "entry_level": 68681.18,
    "experienced": 108341.92,
    "late_career": 109941.28,
    "early_career": 82558.38
  },
  "average_base_salary_per_year": 87785.21
}
```

## Quick start

Call the API with a Fous API key (`FOUS_API_KEY`). To create one, turn on Developer mode in Fous Studio, then open Keys & connections → API keys (https://app.fous.com/keys).

```bash
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
: "${FOUS_API_KEY:?Set FOUS_API_KEY before running this example}"

curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 120 \
  -H "Authorization: Bearer $FOUS_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@payscale",
  "visibility": "public",
  "operation": "get_company_pay",
  "version": 1,
  "input": {
    "company": "Shopify",
    "country": "Canada",
    "max_results": 9
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
import json
import os
import urllib.error
import urllib.request

api_key = os.environ.get("FOUS_API_KEY")
if not api_key:
    raise RuntimeError("Set FOUS_API_KEY before running this example")

body = json.loads("{\n  \"api\": \"@payscale\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_company_pay\",\n  \"version\": 1,\n  \"input\": {\n    \"company\": \"Shopify\",\n    \"country\": \"Canada\",\n    \"max_results\": 9\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=120) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
// First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
const apiKey = process.env.FOUS_API_KEY;
if (!apiKey) throw new Error("Set FOUS_API_KEY before running this example");

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(120_000),
  body: JSON.stringify({
  "api": "@payscale",
  "visibility": "public",
  "operation": "get_company_pay",
  "version": 1,
  "input": {
    "company": "Shopify",
    "country": "Canada",
    "max_results": 9
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

Or describe the data in plain language: send `{"api":"@payscale","prompt":"Describe the data you need, with every detail"}` to the same URL. Fous fills in the input, runs the method that fits and returns only the fields you asked for; `data.route.calls[].request` is the exact call it made. Routing is free; the run costs the same.

## Use cases

- Compare typical pay across job titles and locations
- Review salary ranges and bonuses for a role
- Compare average base salaries across employers
- Identify common jobs and their salary ranges at an employer

## FAQ

### Is Fous affiliated with PayScale?

No. Fous is not affiliated with PayScale. This workflow reads the public payscale.com website and returns its data.

### How much does it cost?

Each run costs 1 credit. With pay-as-you-go, a credit costs 1¢; monthly plans cost less per credit.

### Do I need a PayScale account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from payscale.com when you run it; repeating the same request within a day may return the saved result. Fous checks this workflow automatically; it last passed a check on Sep 29, 2026.

### What is typical pay for a job title?

Get salary returns typical pay and salary ranges for a required job title, with optional country and city.

### How does pay vary by experience level?

Get salary returns average pay by experience level for a job title.

### What jobs and salaries does an employer list?

Get company pay returns common jobs in the order shown, with average salaries and salary ranges where available.

## Related

- [Indeed API](https://fous.com/workflows/indeed.md): Indeed returns public first-page listings and details for available, unexpired jobs, company employee ratings and CEO approval when available, and typical pay from public salary pages.
- [ZipRecruiter API](https://fous.com/workflows/ziprecruiter.md): ZipRecruiter returns up to 100 public job listings per search and U.S. job-title pay ranges and top-paying cities where public salary pages exist.
- [Levels.fyi API](https://fous.com/workflows/levels-fyi.md): Levels.fyi returns published per-level median annual pay, rankings of up to 50 companies by role/location median total pay, and cross-company pay comparisons for 2–10 companies.
- [AmbitionBox API](https://fous.com/workflows/ambitionbox.md): AmbitionBox covers company reviews, salaries and jobs, including role pay, experience averages and ratings; verification can limit salary results, and review summaries may be unavailable.
- [H1B Salary Database API](https://fous.com/workflows/h1b-salary-database.md): Search employer-filed H-1B salary and labor condition records.
- [Glassdoor API](https://fous.com/workflows/glassdoor.md): Employee reviews and company ratings.
- [Bureau of Labor Statistics API](https://fous.com/workflows/bureau-of-labor-statistics.md): Bureau of Labor Statistics provides latest occupation pay, employment, career outlooks, unemployment, category inflation (up to 24 months’ history), and CPI conversions from January 1913.
- [Remote OK API](https://fous.com/workflows/remote-ok.md): Remote job postings from Remote OK.
- [All Jobs workflows](https://fous.com/workflows/category/jobs)
