Query Jobstreet programmatically: 73 fields, one call

679 words ~3 min read Updated 2026-08-24

There is no official Jobstreet API. The data sits in page markup, which means bulk access requires scraping.

Our Jobstreet Actor exposes that data programmatically. Here is what it returns, what it costs, and where the limits are.

Calling it as an API

One call starts a run and waits for the dataset:

curl -X POST "https://api.apify.com/v2/acts/blackfalcondata~jobstreet-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
 -H 'Content-Type: application/json' \
 -d '{"query": "..."}'

The same request in Python:

from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("blackfalcondata~jobstreet-scraper").call(run_input={"query": "..."})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
 print(item)

What comes back

Every row contains 73 fields, organized into several groups:

Below is an actual run record, trimmed to its leading fields:

{
 "jobId": "d77206224c3f7e99bc39ab7b53f1b986dbaf33f4d13323c45dd935fe6372d5c2",
 "seekJobId": "93876754",
 "title": "Executive, IT Software Engineer",
 "canonicalUrl": "https://my.jobstreet.com/job/93876754",
 "company": "Tokio Marine General Insurance",
 "companyUrl": "https://my.jobstreet.com/companies/tokio-marine-general-insurance-172535451217543",
 "advertiserId": "60179119",
 "location": "Kuala Lumpur City Centre, Kuala Lumpur",
 "locationCountry": "MY",
 "locationState": null,
 "locationSuburb": null,
 "locationPostcode": null,
 "salaryText": null,
 "salaryMin": null
}

What you give it

The input supports 53 options. They include query, country, location, startUrls, maxResults, maxPages, sortMode, dateRange, workType, and workArrangement.

Filters run server-side. You pay for the records you requested instead of fetching everything first and filtering afterwards.

Coverage includes Malaysia, Singapore, Indonesia and the Philippines. The country option accepts MY, SG, ID, PH and defaults to MY. Each run is limited to one market before it produces a record, so data outside that market is neither fetched nor billed.

What it costs

Pricing is pay per event, with no subscription:

In one measured run:

Those figures are measured, not estimated.

Limits

Practical details

Official API availability

Jobstreet publishes this data on its pages but provides no public API for it. Every option here therefore depends on reading those pages.

Authentication

Supply an Apify API token through ?token= or an Authorization: Bearer header. The token belongs to you, not us. It is the only credential involved, and you do not need a separate account on the source site.

Request duration

The measured run returned 25 records in 15.2 seconds. run-sync-get-dataset-items keeps the connection open for the entire run. For large runs, start the run first, then poll the dataset.

Pagination

Runs are bounded by maxResults, not by paging through responses. You request a number of records and receive one dataset. The dataset endpoint accepts offset and limit when you need to read that dataset in chunks.

Output formats

JSON is the default. Change the format parameter to serve the same run as CSV, XLSX or JSONL from the dataset endpoint. No separate export step is required.

Try it

our Jobstreet API endpoint runs on Apify. The endpoint above is the entire integration. New accounts receive $5 of free platform credit each month, enough to cover a real run of this size several times over.

Disclosure: we build and maintain this Actor, and the link above is an affiliate link.

Further reading

Also published on