# Jobstreet & JobsDB Jobs Scraper - MY, SG, PH, ID, HK, TH (`rel8ble/jobstreet-jobsdb-scraper`) Actor

Use this to get job ads from Jobstreet (MY, SG, PH, ID) and JobsDB (HK, TH). Input: keywords, locations, filters or site URLs. One result = one job: title, company, location, salary, work type, category, date, URL; optional full description and company profile. Not capped at 550. $0.80 per 1,000.

- **URL**: https://apify.com/rel8ble/jobstreet-jobsdb-scraper.md
- **Developed by:** [Giovanni Rich](https://apify.com/rel8ble) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.80 / 1,000 results

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

## Jobstreet & JobsDB Jobs Scraper & API - Malaysia, Singapore, Philippines, Indonesia, Hong Kong, Thailand

**Jobstreet & JobsDB Jobs Scraper** is a Jobstreet scraper, JobsDB scraper and unofficial jobs API for **my.jobstreet.com, sg.jobstreet.com, ph.jobstreet.com, id.jobstreet.com, hk.jobsdb.com and th.jobsdb.com**. Give it keywords, locations and filters (or paste search URLs from the sites) and get every matching job ad as clean JSON, CSV or Excel: title, company, location, salary (as written and as numbers with the currency), work type, on-site / hybrid / remote, classification, listing date, the job URL and, if you want it, the full description and the company profile (website, industry, size, rating, perks).

It reads the same JSON the websites load, over plain HTTP: no browser and no login, 100 jobs per request. The sites show at most 550 jobs for any one search; this scraper **splits big searches automatically** by category, sub-category, work type and work arrangement and merges the results without duplicates, so a search that lists 19,533 jobs returned 17,881 of them in testing instead of 550, and 5,250 Malaysian accountant jobs took 56 seconds.

Use it for **hiring-signal lead generation** across South-East Asia and Hong Kong (which companies are hiring for what, right now), job boards and aggregators, recruitment market mapping, salary benchmarking and labour-market research.

### How to use

1. Pick the **Country / site**: Malaysia, Singapore, Philippines, Indonesia (Jobstreet), Hong Kong or Thailand (JobsDB). One country per run.
2. Type one or more **Search keywords** (`accountant`, `software engineer`, `customer service`) and, optionally, **Locations** (`Kuala Lumpur`, `Selangor`, `Metro Manila`, `Jakarta Raya`, `Bangkok`). Every keyword is searched in every location. No keyword = all jobs matching your location and filters.
3. Optionally filter: **Classification** (30 job categories), **Work types**, **Work arrangements** (on-site, hybrid, remote), **Posted within (days)**, **Minimum / Maximum salary** and **Sort order**.
4. Set **Max jobs per search** (0 = everything). Tick **Include full description & company profile** if you need the ad text.
5. Click **Start**. Download the results as JSON, CSV, Excel or HTML from the **Output** tab, or pull them through the Apify API, Make, Zapier, n8n or an MCP client.

Already have links? Paste **search URLs** or **job URLs** from any of the six sites into *Search or job URLs* instead; the filters in a search URL are read from the URL, and the site is read from the link.

### What you get

One dataset item per job ad:

- **Identity**: `id` (job id, stable across runs), `title`, `url`, `site`, `country`.
- **Company**: `company`, `advertiserName` and `advertiserId` (the account that posted the ad, which can be a recruiter), `companyId`, `companyProfileUrl`, `companyLogoUrl`.
- **Where**: `location`, `locations`, `area` (the wider region), `countryCode`.
- **Work**: `workType` (Full time, Part time, Contract/Temp, Casual/Vacation), `workArrangement` (On-site, Hybrid, Remote), `isRemote`.
- **Pay**: `salaryText` exactly as the advertiser wrote it, plus `salaryMin`, `salaryMax`, `salaryCurrency` (MYR, SGD, PHP, IDR, HKD, THB, or USD where the ad says so) and `salaryPeriod` parsed from it.
- **Category**: `classification`, `subclassification` and `classifications` (an ad can sit in two).
- **Ad text**: `teaser`, `bulletPoints`.
- **Dates and flags**: `listedAt`, `isFeatured`, `isSponsored`, `isExpiringSoon`.
- **Where it came from**: `sourceQuery`, `sourceLocation`, `position`, `scrapedAt`.

With **Include full description & company profile** on, each job also gets `description` (plain text), optional `descriptionHtml`, `expiresAt`, `status`, `appliesOnCompanySite`, `isVerifiedAdvertiser`, `advertiserSince`, `screeningQuestions`, and from the company profile where one exists: `companyWebsite`, `companyIndustry`, `companySize`, `companyRating`, `companyReviewCount`, `companyDescription`, `companyPerks`, `companyJobsUrl`.

### Use cases

- **Lead generation from hiring signals**: a company in Selangor advertising for five accounts executives is a prospect for accounting software; a Singapore firm hiring DevOps engineers buys cloud tooling. Run your keywords daily with *Posted within 1 day* and send new ads to your CRM with the company website attached.
- **Recruitment agencies and RPO**: see who is hiring in your niche, which ads are direct employers and which are other agencies (`advertiserName` vs `company`), and the screening questions they ask.
- **Job boards and aggregators**: pull a category or a whole country into your own feed, deduplicated by `id`.
- **Salary benchmarking**: `salaryMin` / `salaryMax` by role, city and country in local currency, from ads that publish pay.
- **Offshoring and remote-hiring research**: the Philippines site lists many remote roles paid in USD; filter with `workArrangements: ["remote"]`.
- **AI agents**: "find remote accountant jobs in the Philippines posted this week" maps straight onto the input fields.

### Input example

| Field | Default | Description |
|---|---|---|
| `country` | `MY` | `MY`, `SG`, `PH`, `ID` (Jobstreet), `HK`, `TH` (JobsDB) |
| `searchQueries` | - | Keywords, one search each. Empty = all jobs matching the filters |
| `locations` | whole country | Locations as the site writes them: `Kuala Lumpur`, `Selangor`, `Metro Manila`, `Jakarta Raya`, `Bangkok` |
| `classification` | `any` | One of the 30 categories; via API also `"Accounting > Payroll"` or an id |
| `workTypes` | all | Any of `fulltime`, `parttime`, `contract`, `casual` |
| `workArrangements` | all | Any of `onsite`, `hybrid`, `remote` |
| `postedWithinDays` | 0 (any) | 1 = listed today, 3, 7, 14, 31 |
| `salaryMin` / `salaryMax` | 0 | In local currency, in the unit set by `salaryType` |
| `salaryType` | `monthly` | `monthly`, `annual` or `hourly` |
| `sort` | `relevance` | `relevance` or `date` |
| `maxItems` | 100 | Max jobs per search; 0 = all |
| `deepSearch` | true | Split searches above 550 jobs so nothing is cut off |
| `includeDetails` | false | Full description, expiry, screening questions, company profile (one extra request per job) |
| `includeDescriptionHtml` | false | Also keep the description HTML |
| `startUrls` | - | Search URLs, job URLs or bare job ids |
| `proxyConfiguration` | Apify datacenter | No residential proxies needed |

Software jobs in Singapore listed this week, with descriptions:

```json
{
    "country": "SG",
    "searchQueries": ["software engineer", "devops engineer"],
    "postedWithinDays": 7,
    "maxItems": 200,
    "includeDetails": true
}
```

Full-time accountant jobs in central Hong Kong paying HK$30,000 a month or more, newest first:

```json
{
    "country": "HK",
    "searchQueries": ["accountant"],
    "locations": ["Central and Western District"],
    "workTypes": ["fulltime"],
    "salaryMin": 30000,
    "salaryType": "monthly",
    "sort": "date",
    "maxItems": 0
}
```

From links you copied off the sites (any mix of the six):

```json
{
    "startUrls": [
        "https://th.jobsdb.com/accountant-jobs/in-Bangkok",
        "https://id.jobstreet.com/job/95039993",
        "https://ph.jobstreet.com/job/95218270"
    ]
}
```

### Output example

From a real run (`software engineer` in Singapore, details on; description, company description, questions and perks shortened):

```json
{
    "id": "95236588",
    "title": "Software Engineer (Full stack with Automation)",
    "company": "HOPE Technik Pte Ltd",
    "location": "Teban Gardens, West Region",
    "locations": ["Teban Gardens, West Region"],
    "area": "West Region",
    "countryCode": "SG",
    "workType": "Full time",
    "workTypes": ["Full time"],
    "workArrangement": "On-site",
    "workArrangements": ["On-site"],
    "isRemote": false,
    "salaryText": "$4,500 – $6,000 per month",
    "salaryMin": 4500,
    "salaryMax": 6000,
    "salaryCurrency": "SGD",
    "salaryPeriod": "month",
    "classification": "Information & Communication Technology",
    "subclassification": "Engineering - Software",
    "classifications": ["Information & Communication Technology > Engineering - Software"],
    "teaser": "Seeking a potential software engineer interested in working on a wide range of projects across different industries!",
    "bulletPoints": ["Dynamic, fun, learning and casual working environment", "Opportunity to work in multiple projects (govt. & commercial)"],
    "listedAt": "2026-10-13T07:07:06Z",
    "isFeatured": false,
    "isSponsored": false,
    "isExpiringSoon": false,
    "advertiserId": "60257926",
    "advertiserName": "HOPE Technik Pte Ltd",
    "companyId": "168550780952919",
    "companyProfileUrl": "https://sg.jobstreet.com/companies/hope-technik-pte-ltd-168550780952919",
    "companyLogoUrl": "https://bx-branding-gateway.cloud.seek.com.au/30ec5e2a-157c-4a32-b5ab-3a330dbc13c7.1/jdpLogo",
    "roleId": "full-stack-software-engineer",
    "url": "https://sg.jobstreet.com/job/95236588",
    "site": "sg.jobstreet.com",
    "country": "Singapore",
    "sourceQuery": "software engineer",
    "sourceLocation": null,
    "position": 3,
    "scrapedAt": "2026-10-13T17:24:28.410Z",
    "description": "Role:\n\nWork as a part of the team to meet project targets and quality objectives. Provide hands-on advice to members of the project team. Provide effort estimat ...",
    "expiresAt": "2026-11-12T12:59:59.999Z",
    "isExpired": false,
    "status": "Active",
    "appliesOnCompanySite": false,
    "isVerifiedAdvertiser": true,
    "advertiserSince": "2008-09-18T01:38:24.390Z",
    "screeningQuestions": [
        "How many years' experience do you have as a Software Engineer?",
        "Which of the following programming languages are you experienced in?",
        "Which of the following front end development libraries and frameworks are you proficient in?"
    ],
    "companyWebsite": "http://www.hopetechnik.com",
    "companyIndustry": "Science & Research",
    "companySize": "51-100 employees",
    "companyRating": null,
    "companyReviewCount": null,
    "companyDescription": "HOPE Technik, a Singapore-proud engineering company, has been evolving the industry landscape with its technological innovations since 2006. ...",
    "companyPerks": ["Medical", "Miscellaneous allowance", "Education support", "Sports (e.g. Gym)"],
    "companyJobsUrl": "https://sg.jobstreet.com/HOPE-Technik-Pte-Ltd-jobs/at-this-company"
}
```

Fill rates on a 17,881-job test run (`admin`, all of Indonesia): id, title, company, location, area, work type, work arrangement, classification, sub-classification, teaser, listing date and URL 100%; advertiser id 95%; company profile link 52%; salary text 38%; parsed salary numbers 37%; company logo 32%; bullet points 13%. On a 162-job run with details (Singapore and Thailand): description, expiry date and status 100%; company industry 64%; screening questions 62%; company size and description 60%; company website 38%; company perks 27%; company rating 22% (company fields exist only for employers with a company profile on the site). A field the site does not publish for a job is `null`, never guessed.

### Pricing

Pay per result: **$0.80 per 1,000 jobs** (one result = one job ad saved to the dataset). The full description and company profile are included in that price.

- 100 jobs for a quick search = $0.08
- Every `accountant` job in Malaysia, about 5,250 jobs = $4.20
- A daily run of 20 keywords, new ads only (about 300 jobs) = $0.24 a day

No start fee and no charge per search. Failed requests, duplicate ads, expired job URLs and empty searches are never charged. If you set a maximum cost per run, the scraper stops cleanly when it reaches it. Apify's free plan includes $5 of monthly platform credit, enough for about 6,000 jobs.

### Integrations

- **Make, Zapier and n8n**: start runs and push new jobs to your CRM, Slack, Google Sheets or Airtable.
- **Google Sheets**: export the dataset straight into a spreadsheet, or refresh it on a schedule.
- **Apify API**: run the actor and fetch results over REST, or with the official JavaScript and Python clients.
- **Webhooks**: get notified when a run finishes and process the data right away.
- **Schedules**: run daily with `postedWithinDays: 1` and deduplicate by `id` to collect only new ads.
- **MCP for AI agents**: through the Apify MCP server (https://mcp.apify.com), Claude, ChatGPT, Cursor and other agents can call this jobs API directly and read the results.

### Limits (read before large runs)

- **550 jobs per single search** is the sites' own limit. Deep search gets around it by splitting; on the largest test (19,533 listed) it returned 92%. A slice that is still above 550 after every split is fetched in both sort orders, and the run summary counts those slices (`searchesCappedAt550`).
- **Site totals are estimates.** The `siteTotal` in the run summary can differ from the number of unique jobs by a few percent, and the same ad can be listed twice (sponsored and organic); duplicates are dropped and not charged.
- **One country per run** for keyword searches. URLs in `startUrls` can mix sites.
- **Language**: results come from the English version of each site. Ads written in Bahasa Indonesia, Thai or Chinese are returned as written; category names are in English.
- **Locations must be ones the site recognises.** An unknown location returns 0 jobs and the summary says so.
- **Salary numbers are parsed from free text.** Fewer than half of all ads show a salary; those that do not keep the numbers `null`.
- **No applicant or personal data.** The scraper returns the public job ad and company profile only; recruiter phone numbers and emails are not collected.
- **Details cost one request per job**, so runs with details are slower.

### FAQ

**Is there an official Jobstreet or JobsDB API for job search?**
The official API is for hirers and recruitment software posting ads, not for reading the job market. This actor is an unofficial alternative that reads the public search results.

**Can I scrape SEEK Australia or New Zealand as well?**
Yes, with the sister actor [SEEK Jobs Scraper](https://apify.com/rel8ble/seek-jobs-scraper). Same input and output fields.

**How do I get only new jobs every day?**
Schedule the actor daily with `postedWithinDays: 1` and `sort: "date"`, and deduplicate on `id` in your own system.

**How do I find companies, not recruiters?**
Compare `company` with `advertiserName`; when they differ the ad was placed by an agency. With details on, `companyWebsite` is filled for companies that have a profile on the site.

**Why did I get fewer jobs than the site's count?**
The site's count includes duplicates and is rounded. Check `RUN_SUMMARY` in the key-value store: it lists each search with the site total, pages fetched and why it stopped.

**Is scraping Jobstreet or JobsDB legal?**
The actor collects publicly visible job ads, not personal data. You are responsible for how you use the data and for following the sites' terms and the laws that apply to you.

**Something is wrong or a field is missing.**
Open an issue on the Issues tab of the actor page with the run ID. It reaches the developer directly.

# Actor input Schema

## `searchQueries` (type: `array`):

Optional. Job keywords as typed into the Jobstreet / JobsDB search box, one per line: "accountant", "software engineer", "customer service". A company name also works. Each keyword is one search and returns up to maxItems jobs. Leave empty to list all jobs matching the location and filters below. Give at least one of searchQueries, locations, a filter or startUrls.

## `locations` (type: `array`):

Optional. Where to search, one per line, written the way the site shows it: "Kuala Lumpur", "Selangor", "Penang", "Singapore", "Metro Manila", "Jakarta Raya", "Central and Western District", "Bangkok". Every keyword is searched in every location (2 keywords x 3 locations = 6 searches). Empty = the whole country. A location the site does not recognise returns 0 jobs and is named in the run summary.

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

Which site to search: "MY" = Malaysia (my.jobstreet.com), "SG" = Singapore (sg.jobstreet.com), "PH" = Philippines (ph.jobstreet.com), "ID" = Indonesia (id.jobstreet.com), "HK" = Hong Kong (hk.jobsdb.com), "TH" = Thailand (th.jobsdb.com). One country per run; start another run for another country. Default "MY".

## `classification` (type: `string`):

Optional. Limit every search to one of the 30 job categories, e.g. "Information & Communication Technology", "Healthcare & Medical", "Accounting". "any" (default) = no limit. Through the API you can also pass a sub-category as "Accounting > Payroll" or a numeric id such as "6281".

## `workTypes` (type: `array`):

Optional. Keep only these work types: any of "fulltime", "parttime", "contract", "casual". Empty = all work types.

## `workArrangements` (type: `array`):

Optional. Keep only these arrangements: any of "onsite", "hybrid", "remote". Use \["remote"] for remote jobs only. Empty = all.

## `postedWithinDays` (type: `integer`):

Optional. Only jobs listed in the last N days, integer 0-31: 1 = listed today, 3, 7, 14 or 31 are the usual choices. 0 (default) = any date (ads stay up about 30 days). Use 1 on a daily schedule to collect only new jobs.

## `salaryMin` (type: `integer`):

Optional. Lowest pay to include, in the site currency and the unit chosen in salaryType: 5000 with "monthly" in Malaysia = jobs paying at least RM 5,000 a month. 0 (default) = no minimum. The site matches on the pay range the advertiser entered, including ads that hide the figure.

## `salaryMax` (type: `integer`):

Optional. Highest pay to include, same unit as salaryMin. 0 (default) = no maximum.

## `salaryType` (type: `string`):

Optional. Unit of salaryMin / salaryMax: "annual", "monthly" or "hourly". Default "monthly". Ignored when both salary fields are 0.

## `sort` (type: `string`):

Optional. "relevance" (default) or "date" (newest first; sponsored ads still appear near the top, flagged isSponsored).

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

Optional. Maximum jobs saved per search (one keyword in one location), integer >= 0. Default 100; 0 = every job the search has. You pay per job saved ($0.0008 each), so 100 jobs = $0.08. Use 10-20 for a quick answer.

## `deepSearch` (type: `boolean`):

Optional boolean, default true. The site returns at most 550 jobs for any one search. With deep search on, a bigger search is split automatically by category, sub-category and work type and the results are merged without duplicates, so "engineer" in all of Singapore returns thousands of jobs instead of 550. Only kicks in when maxItems is above 550 (or 0). It costs extra requests, not extra money per job.

## `includeDetails` (type: `boolean`):

Optional boolean. false (default) = listing data only: title, company, location, salary, work type, category, teaser, bullet points, dates, links; 100 jobs per request. true = also open each job to add the full description (plain text), expiry date, screening questions, whether you apply on the company site, and the company profile where one exists (website, industry, size, rating, review count). One extra request per job, same price per result.

## `includeDescriptionHtml` (type: `boolean`):

Optional boolean. Only used with includeDetails. true = add descriptionHtml (the original formatting) next to the plain-text description. Default false.

## `startUrls` (type: `array`):

Optional. URLs copied from the site, one per line. A search results URL ("https://my.jobstreet.com/accountant-jobs/in-Kuala-Lumpur?daterange=7") is scraped with the filters in the URL (the filter fields above are not applied to it). A job URL ("https://sg.jobstreet.com/job/95238710") or a bare job id ("95126283") is looked up directly and always includes the full details. A job that has expired is listed in the run summary and is not charged.

## `maxConcurrency` (type: `integer`):

Optional, advanced. Number of parallel requests, integer 1-20. Default 8. Leave unset.

## `maxRequestRetries` (type: `integer`):

Optional, advanced. Retries per failed or blocked request, integer 0-20; each retry uses a new session and IP. Default 8. Leave unset.

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

Optional, advanced. Apify Proxy settings object. Default {"useApifyProxy": true} (datacenter proxies are enough). Leave unset.

## Actor input object example

```json
{
  "searchQueries": [
    "accountant"
  ],
  "country": "MY",
  "classification": "any",
  "postedWithinDays": 0,
  "salaryMin": 0,
  "salaryMax": 0,
  "salaryType": "monthly",
  "sort": "relevance",
  "maxItems": 20,
  "deepSearch": true,
  "includeDetails": false,
  "includeDescriptionHtml": false,
  "maxConcurrency": 8,
  "maxRequestRetries": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All jobs found: title, company, location, salary (text and parsed numbers), work type, work arrangement, classification, teaser, bullet points, listing date, job URL and company links (plus full description, expiry date and company profile when details are on).

## `summary` (type: `string`):

Per-search counts, the totals the site reported, how many narrower searches deep search ran, stop reasons and the list of anything that failed.

# 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 = {
    "searchQueries": [
        "accountant"
    ],
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rel8ble/jobstreet-jobsdb-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 = {
    "searchQueries": ["accountant"],
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("rel8ble/jobstreet-jobsdb-scraper").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 '{
  "searchQueries": [
    "accountant"
  ],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call rel8ble/jobstreet-jobsdb-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rel8ble/jobstreet-jobsdb-scraper"
        }
    }
}
```

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/HCO97OWvL9Lhw6Azn/builds/z6Mbm7sFvB5MJuLu3/openapi.json
