# Customer Service Jobs API (`aspen-technology-labs-inc/customer-service-jobs-api`) Actor

Find customer service and call center job postings worldwide by role, location, company, salary, posting age, employment type, remote status, and seniority.

- **URL**: https://apify.com/aspen-technology-labs-inc/customer-service-jobs-api.md
- **Developed by:** [Aspen Technology Labs, Inc.](https://apify.com/aspen-technology-labs-inc) (community)
- **Categories:** Developer tools, Jobs, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 job records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Customer Service / Call Center Jobs API - JobsIndex by Aspen Tech Labs

This Actor provides direct access to customer service and call center job openings from employers worldwide. Because these roles are commonly hired remotely or through outsourced BPO providers, companies recruit for them across the globe. The dataset currently covers **200,000+ live vacancies across more than 22,000 employers internationally**.

Hiring is concentrated in major outsourcing hubs in Latin America, led by Santiago, Chile, followed by Lima, Peru, and Bogota, Colombia. Other leading cities include Athens, New York, Lisbon, Medellin, London, and Bengaluru. Postings retain local context: alongside "Customer Service Representative," the dataset includes raw titles such as *Agent d'Accueil* from French employers and *Kundenberater* from German employers.

The dataset covers two closely related sub-categories: Customer Service Representative, with approximately 175,000 open roles, and Call Center Representative, with approximately 28,000. Titles range from customer service representative, call center representative, client service representative, customer support representative, and client care representative to more specialized roles such as customer experience representative, service desk representative, automotive service advisor, and member service representative. It also includes team-lead, management, and senior client-facing roles such as customer service leader, customer success representative, customer service executive, head of customer success, VP of client onboarding, and director of client relationships.

Employers include major US retail and consumer brands such as Dollar Tree, Domino's, Home Depot, Walgreens, Costco, and State Farm; international organizations such as LVMH, Sparkasse, Tata Capital, Standard Chartered, and Tesco; and call-center and BPO providers such as Konecta, Atento, Emtelco, and MCI.

Use this Actor to source live customer service and call center roles for job boards or recruiting tools, track which BPO providers and direct employers are actively hiring, or analyze where hiring is concentrated globally, city by city.

### Need More or Something Different?

If this Actor is working well for you, we'd love a review. For more data, custom feeds, feedback, or questions, reach out through our [website](https://jobsindex.com/) or by [email](mailto:inquiry+apify@aspentechlabs.com). You can also explore [JobMarketPulse](https://jobmarketpulse.com/), our labor and job market intelligence platform.

### Built-In Search Preset

This Actor always retains an internal customer-service preset covering the JobsIndex `Customer Service Representative` and `Call Center Representative` classifications. The preset itself is not editable in the Actor UI.

The user-facing `what` field does not replace the preset. When a user enters `what`, the Actor appends the role query to the internal customer-service query with `AND` and searches it across job title and job-family fields.

For example, user input:

```json
{
  "what": "bilingual OR manager",
  "where": "Germany OR France",
  "remote": "remote",
  "size": 5
}
```

keeps the customer-service preset and further narrows it to matching bilingual or manager roles. If `what` is empty, the Actor sends only the internal customer-service preset.

### Quick Start

```json
{
  "what": "bilingual OR manager",
  "country": "United States",
  "remote": "remote",
  "size": 5
}
```

### Input Parameters

| Parameter | Description | Example |
|---|---|---|
| `salary` | Salary amount or range filter. | `20h-30h` |
| `what` | Optional role search within the customer-service dataset. The Actor appends it to the internal preset with `AND`. | `bilingual OR manager` |
| `where` | Optional free-text location search with place names, boolean logic, or field targeting. | `Germany OR France` |
| `country` | Country filter. | `United States` |
| `region` | State, province, or region. | `Texas` |
| `city` | City filter. | `Austin` |
| `postal_code` | Postal or ZIP code filter. | `78701` |
| `metro_area` | Metropolitan area filter. | `Austin-Round Rock-San Marcos, TX` |
| `title` | Job title filter. | `Customer Service Manager` |
| `company_name` | Company name filter. | `Concentrix` |
| `company_domain` | Company website domain. | `concentrix.com` |
| `category` | Job category filter. | `Retail` |
| `sub_category` | More specific customer service role group. | `Customer Service Representative` |
| `industry` | Company industry filter. | `Business Services` |
| `posted` | Relative posting age or ISO date. | `1w` |
| `employment_type` | Employment type. | `Full-Time` |
| `remote` | Work arrangement filter. Supported values: `remote`, `on-site`, `hybrid`. | `remote` |
| `seniority` | Seniority level. | `Manager` |
| `page` | Page number, starting from 0. | `0` |
| `size` | Number of results per page. Default 5, min 1, max 100. | `5` |

### Search Behavior

The Actor's internal customer-service preset is always retained. User input in `what` is appended with `AND` and searched across:

- `title`
- `title_raw`
- `category`
- `sub_category`

Examples:

```text
what = bilingual
what = manager OR supervisor
what = customer success
what = technical support
```

Use `what` for a free-text role search. Structured job fields such as `title`, `company_name`, `company_domain`, `category`, `sub_category`, `industry`, `posted`, `salary`, `employment_type`, `remote`, and `seniority` can further narrow the result set.

Use `where` for free-text location searches, boolean location expressions, or field-targeted location queries:

```text
where = Germany
where = Germany OR France
where = @(country) (Germany OR France)
where = @(city,metro_area) (London)
```

`where` is independent from the Actor's enforced customer-service `what` preset. Using `where` does not replace the preset or the optional user-facing `what` query.

#### Structured Filter Precedence

Use `where` when the structured location filters are not set. If `where` is provided together with `country`, `region`, `city`, `postal_code`, or `metro_area`, those structured filters take priority and can override, narrow, or deprioritize `where`.

### Salary Filter Format

Use `NUMBER[UNIT]` or `NUMBER[UNIT]-NUMBER[UNIT]`.

Supported units:

- `h` - per hour
- `d` - per day
- `w` - per week
- `m` - per month
- `y` - per year

Examples:

- `20h-30h` - hourly rate between 20 and 30
- `50000y` - yearly salary of 50,000
- `40000y-70000y` - yearly salary range

### Location Filtering

This is a global Actor. Use `where` or the structured location filters below to narrow results:

- `country`
- `region`
- `city`
- `postal_code`
- `metro_area`

### Limits and Pagination

This Actor uses the JobsIndex jobs API. Results are paginated with `page` and `size`.

| Parameter | Default | Min | Max |
|---|---:|---:|---:|
| `page` | 0 | 0 | Depends on `size` and the item cap |
| `size` | 5 | 1 | 100 |

Invalid `page` or `size` values can return `400 Invalid page or size parameters`.

#### Item Caps

| Query shape | Max items | Effective max `size` | Over-size behavior |
|---|---:|---:|---|
| No company filter | 1000 | 100 | Validation error; not silently capped |
| Company filter with the Actor preset or another filter | 20 | 20 | Silent cap with capping metadata |

A company filter means `company_name` or `company_domain`. This Actor always applies an internal customer-service query, so company-filtered requests use the 20-item cap.

When capping applies, response metadata includes `size_requested` and `size_capped_by="company|keywords"`. These fields are absent from uncapped responses.

No-company-filter requests are not silently capped. Requests beyond the 1000-item retrieval window can return `400 Item limit reached. Maximum of 1000 items can be retrieved`.

#### Free-Text Query Limits

The optional user-facing `what` and `where` queries are each subject to JobsIndex free-text limits:

| Limit | Value | Error behavior |
|---|---:|---|
| Raw URL length before decoding | 700 characters per parameter | `400 parameter exceeds 700 characters` |
| Decoded text length | 500 characters per parameter | `400 MATCH input exceeds length limit` |
| Combined operator characters: `?`, `+`, pipe, `@` | 20 per parameter | `400 Too many MATCH operators` |
| Unsafe SQL-like keywords | blocked | `400 Unsafe MATCH expression` |

#### Field Validation

Invalid filter values can return `400 Invalid value for parameter: <name>`. Common validation examples include malformed company domains, invalid dates or relative `posted` values, invalid salary format, unsupported location formats, or overly long field values.

### Output

Each run stores job records in the default Apify dataset. The dataset schema includes an `Overview` table for the most useful fields and a `Raw data (all fields)` table for the complete JobsIndex record.

Example dataset item:

```json
{
  "id": "9343167339286732210",
  "title": "Customer Service Representative",
  "title_raw": "Customer Service Associate I",
  "company_name": "ABC Hidden Co",
  "company_domain": "hidden.sample.com",
  "category": "Retail",
  "sub_category": "Customer Service Representative",
  "country": "United States",
  "region": "Colorado",
  "city": "Westminster",
  "metro_area": "Denver-Aurora-Centennial, CO",
  "salary_value": "20.00",
  "salary_currency": "USD",
  "salary_unit": "HOUR",
  "employment_type": "Part-Time",
  "posted": "2025-12-12",
  "url_source": "https://hiddenats.sample.com/abchiddenco/job/Customer-Service-011119"
}
```

Field availability depends on the source job posting.

# Actor input Schema

## `salary` (type: `string`):

Salary amount/range filter. Format: 1-9 digits followed by y, m, w, d, or h; optional range A-B. Examples: 20h-30h, 35h, 20h-200000y.

## `what` (type: `string`):

Optional role search within customer service jobs. The Actor always applies its internal customer-service category preset and appends this value to it. Examples: bilingual, manager, technical support, or customer success.

## `where` (type: `string`):

Optional free-text location search. Supports place names, boolean logic, and field targeting. Examples: Germany, @(country) (Germany OR France), or @(city,metro\_area) (London). Structured location fields take priority when also provided. Maximum 700 raw URL characters or 500 decoded characters.

## `country` (type: `string`):

Country for job location filter. Use a 2-3 letter country code or a country name up to 60 characters.

## `region` (type: `string`):

State, province, or region. Maximum 80 characters.

## `city` (type: `string`):

City filter. Maximum 100 characters.

## `postal_code` (type: `string`):

Postal or ZIP code. Maximum 20 characters.

## `metro_area` (type: `string`):

Metropolitan area filter. Maximum 100 characters. Example: Denver-Aurora-Centennial, CO.

## `title` (type: `string`):

Job title filter. Maximum 200 characters.

## `company_name` (type: `string`):

Company name filter. Company filters reduce the retrievable item cap; see README.

## `company_domain` (type: `string`):

Company website domain in valid DNS form, for example ibm.com. Company filters reduce the retrievable item cap; see README.

## `category` (type: `string`):

Job category filter. This narrows the customer-service dataset after the internal preset is applied.

## `sub_category` (type: `string`):

More specific job function or role within a category. Maximum 100 characters.

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

Company industry. Maximum 100 characters. Example: Food Products or Hotels and Restaurants.

## `posted` (type: `string`):

Relative posting age, such as 1h, 1d, 1w, 1m, or an ISO date: YYYY, YYYY-MM, YYYY-MM-DD.

## `employment_type` (type: `string`):

Employment type, for example Full-Time. Comma-separated values are supported; each value can be up to 31 characters.

## `remote` (type: `string`):

Work arrangement filter. Supported values: remote, on-site, hybrid.

## `seniority` (type: `string`):

Seniority level, for example Junior, Middle, Senior. Comma-separated values are supported; each value can be up to 31 characters.

## `page` (type: `integer`):

Page number. Starts from 0. Pagination is capped by query shape: no company filter up to 1000 items, company filter with another filter up to 20 items, company filter only up to 5 items.

## `size` (type: `integer`):

Number of results per page. Default 5, min 1, max 100. Effective maximum can be lower for company-filtered queries; see README.

## Actor input object example

```json
{
  "salary": "",
  "what": "",
  "where": "",
  "country": "",
  "region": "",
  "city": "",
  "postal_code": "",
  "metro_area": "",
  "title": "",
  "company_name": "",
  "company_domain": "",
  "category": "",
  "sub_category": "",
  "industry": "",
  "posted": "",
  "employment_type": "",
  "remote": "",
  "seniority": "",
  "page": 0,
  "size": 5
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `meta` (type: `string`):

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("aspen-technology-labs-inc/customer-service-jobs-api").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("aspen-technology-labs-inc/customer-service-jobs-api").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 '{}' |
apify call aspen-technology-labs-inc/customer-service-jobs-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=aspen-technology-labs-inc/customer-service-jobs-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/caDafarYcCHTp6O3E/builds/Vc9yTPM9dqTD5t449/openapi.json
