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.
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)
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
}
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.
Pricing is pay per event, with no subscription:
In one measured run:
Those figures are measured, not estimated.
Jobstreet publishes this data on its pages but provides no public API for it. Every option here therefore depends on reading those pages.
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.
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.
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.
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.
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.