# Sales Jobs API | US & Canada (`thejobsapi/sales-jobs-api`) Actor

Find sales and business development roles in the US and Canada, including account executives, sales representatives and account managers. Full descriptions, original job links and CSV/JSON export. US$0.50 per 1,000 results, with platform usage included. No separate API key.

- **URL**: https://apify.com/thejobsapi/sales-jobs-api.md
- **Developed by:** [The Jobs API](https://apify.com/thejobsapi) (community)
- **Categories:** Jobs, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.50 / 1,000 live jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Sales Jobs API | US & Canada

Find sales and business development roles in the US and Canada, including account executives, sales representatives and account managers.

Get **full job descriptions, employer names, locations, original job links and available source details** in one dataset. Export as JSON, CSV, Excel or XML through Apify. No separate Jobs API subscription or key is required.

### Price

**US$0.50 per 1,000 live jobs saved.** Platform usage is included. No startup fee or separate description charge. 100 results cost US$0.05; 1,000 cost US$0.50. Only matching results saved by the Actor trigger the paid event. Repeated runs may return and charge for the same jobs again. Check the Pricing tab before running.

### Try the data

The default **Preview sample data** mode returns three saved examples specific to this listing, captured October 16, 2026 (Toronto). Every sample is marked `_sample: true`. Samples are not current vacancy checks and ignore optional search filters. Preview has no paid job event.

For current data, choose **Search live jobs**, set your filters, choose a result limit and set a maximum run cost. Start with 100 jobs and a US$0.05 budget.

### Example search

```json
{
  "mode": "live",
  "country": "US",
  "maxItems": 100,
  "maxRequests": 30,
  "title": "\"account executive\""
}
```

### What this listing includes

**Markets:** United States and Canada. Run once per country. United States is the default.

This feed matches job titles against a defined set of role words and phrases: `sales`, `account executive`, `business development`, `sales representative`, `account manager`, `vente`, `ventes`. Matching is case-insensitive and ignores accents and punctuation. Excluded title phrases: `salesforce developer`, `salesforce engineer`, `salesforce administrator`, `commercial cleaner`, `commercial driver`, `commercial electrician`, `commercial plumber`, `commercial roofer`, `commercial pilot`, `sap application consultant`. This is a transparent title-based selection, not a complete occupational classification or a filter on the employer's industry. It may miss relevant roles with unusual titles. Review a small sample for your use case.

Country and category restrictions cannot be removed through custom JSON input. Additional title, keyword, location, ATS, salary and discovery-window filters narrow results. Optional title rules are applied before saving and charging.

### Filters

- **Keywords anywhere:** searches titles, employers and descriptions.
- **Keywords in title only:** narrows the job title within this listing.
- **State or province:** two-letter codes, such as CA,NY for US states or ON,BC for Canadian provinces.
- **City:** for example Austin or Toronto.
- **ATS source:** for example greenhouse, workday or ashby.
- **Jobs with salary only:** requires a structured salary amount; missing pay is never invented.
- **First discovered within:** when our catalogue discovered the job, not the employer's posting date.
- **Maximum jobs:** 1 to 5,000 matching rows per run.
- **Maximum API requests:** bounds the search, including retries and pages that produce no matching results. Default 30, maximum 100.

### Output

Each result keeps the complete API job object, including available text and HTML descriptions, employer, locations, source, original URL, application URL, timestamps, salary, employment types and nested source fields. Missing facts stay missing. Derived fields remain separate from employer-supplied facts. Coverage and field availability vary by source.

These records come from our continuously collected catalogue. Starting this Actor searches the catalogue; it does not trigger a fresh scrape of every employer website. A record marked active can still close before the next source check.

### Continue a larger search

The `OUTPUT` record contains `items`, `scannedItems`, `filteredItems`, `requests`, `stoppedReason` and `next_cursor`. If a cursor remains, copy it into a new run with the same country and all filters. A request limit may stop the run before your result limit. Zero results in a bounded run does not prove no matching jobs exist.

Schedule a saved task for recurring searches, or use the API tab to integrate with your app, n8n or Make. This Actor is not an expiration feed. Do not delete jobs simply because they are missing from a limited search.

### Help and related feeds

Open an Actor issue with your filters and run ID if you need help. Never include passwords, API keys or applicant information.

Need a broader feed? Try [US & Canada Jobs API](https://apify.com/thejobsapi/us-canada-jobs-api), [US Jobs API](https://apify.com/thejobsapi/us-jobs-api) or [Canada Jobs API](https://apify.com/thejobsapi/canada-jobs-api).

# Actor input Schema

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

Preview shows three saved examples for this listing with no job charge. It ignores optional filters. Live mode searches current catalogue records at US$0.50 per 1,000 saved jobs.

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

Country to search in live mode. Run once per country for separate US and Canada datasets.

## `q` (type: `string`):

Search titles, employers and descriptions. Example: software engineer. Words match together; OR and quoted phrases are supported.

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

Maximum saved jobs. Live jobs are billed at the price shown on the Pricing tab. Default 100. The run budget may reduce this limit.

## `maxRequests` (type: `integer`):

Hard cap on upstream requests, including retries and empty pages. Stops with a resume cursor when more pages remain. No separate request event is charged.

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

US examples: CA,NY. Canada examples: ON,BC. Use uppercase two-letter codes separated by commas.

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

City name, for example Austin or Toronto.

## `remote` (type: `boolean`):

When selected, return jobs marked remote by the API. Remote does not mean work from any country; check job eligibility.

## `has_salary` (type: `boolean`):

Only jobs with a structured salary amount. Missing salary information is not invented.

## `window` (type: `string`):

Filters when our catalogue first saw the job, not its employer posting date.

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

Optional employment type supplied by the source.

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

Further narrow job titles. Supports words together, OR, quoted phrases, -excluded words and prefix\*. This cannot broaden the listing category.

## `source` (type: `string`):

Optional source system name, for example greenhouse, lever or ashby. Comma-separated names are allowed.

## `cursor` (type: `string`):

Copy next_cursor from a previous run OUTPUT summary. Keep the same country and search filters. Leave empty for a new search.

## Actor input object example

```json
{
  "mode": "sample",
  "country": "US",
  "maxItems": 100,
  "maxRequests": 30,
  "remote": false,
  "has_salary": false,
  "window": "all"
}
```

# Actor output Schema

## `jobs` (type: `string`):

No description

## `summary` (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("thejobsapi/sales-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("thejobsapi/sales-jobs-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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 thejobsapi/sales-jobs-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thejobsapi/sales-jobs-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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