JobStreet Jobs Scraper — APAC Hiring Data avatar

JobStreet Jobs Scraper — APAC Hiring Data

Pricing

from $5.00 / 1,000 jobstreet job record scrapeds

Go to Apify Store
JobStreet Jobs Scraper — APAC Hiring Data

JobStreet Jobs Scraper — APAC Hiring Data

Search public JobStreet listings in Malaysia, Singapore, Indonesia, and the Philippines. Returns structured jobs, companies, salary, location, work type, dates, and apply URLs for recruiters and hiring research.

Pricing

from $5.00 / 1,000 jobstreet job record scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

17 days ago

Last modified

Categories

Share

What is JobStreet Jobs Scraper — APAC Hiring Data?

JobStreet Jobs Scraper turns a keyword search on JobStreet Malaysia, Singapore, Indonesia or the Philippines into a dataset with one row per public job listing. Each row returns the job ID, title, location, country, salary text with parsed minimum, maximum and pay period when shown, a description, the job URL and the search page it came from, plus the company name when the listing shows one. Recruiters, staffing agencies, compensation analysts, HR-tech builders and AI agents use it to track hiring demand and salary ranges across Southeast Asia.

Why recruiters use this JobStreet scraper

  • Four Southeast Asian markets. Choose MY, SG, ID or PH and search each market's own JobStreet site.
  • Salary parsed for analysis. salaryMin, salaryMax and salaryPeriod turn advertised ranges into numbers you can chart.
  • Fresh postings first. postedWithinDays and sortBy set to date focus each run on new listings.
  • Richer text on request. includeJobDetails visits each job page for a fuller description where JobStreet publishes one.
  • Stable job keys. jobId and jobUrl make deduplication and daily tracking simple.

Best fit for this Actor

Example workflow: from a role to a regional salary benchmark

A compensation analyst starts with one role, data analyst. They run the Actor four times with keywords set to data analyst, postedWithinDays set to 14 and country set to MY, SG, ID and PH in turn. The dataset returns title, location, salaryText, salaryMin, salaryMax and salaryPeriod for each listing. They keep rows with parsed salaries, compare the median range per country, export the table to their benchmark deck and schedule the same runs monthly to track movement.

Input

FieldTypeWhat it controls
keywordsstringJob search text, for example software engineer or senior data engineer. Required.
countrystringMY Malaysia, SG Singapore, ID Indonesia or PH Philippines. Default MY.
locationstringCity or region filter, for example Kuala Lumpur.
postedWithinDaysstringany, 1, 3, 7, 14 or 30. Default 7.
sortBystringdate for newest first or relevance.
maxResultsintegerJob rows to save and bill, 1 to 500. Default 20.
includeJobDetailsbooleanVisit each job page for fuller text. Default true.
{
"keywords": "data analyst",
"country": "SG",
"postedWithinDays": "14",
"sortBy": "relevance",
"maxResults": 25,
"includeJobDetails": true
}

Output

One row per job listing.

FieldWhat it contains
jobId, jobUrlJobStreet job ID and public job URL
titleJob title as advertised
companyNameAdvertiser name when the listing shows one
location, countryCity or region and market code
salaryTextSalary line exactly as JobStreet shows it
salaryMin, salaryMax, salaryPeriod, salaryCurrencyParsed salary range when the listing advertises one
descriptionTeaser or job-page description
sourceUrl, scrapedAtSearch page the job came from and collection time
workType, workArrangement, classification, subClassification, postedAt, postedText, companyUrlExtra listing attributes, filled when JobStreet exposes them for a job
{
"jobId": "94987557",
"title": "Application Engineer",
"companyName": null,
"companyUrl": null,
"location": "Senai, Johor",
"country": "MY",
"salaryText": "RM 3,900 – RM 5,000 per month",
"salaryCurrency": "MYR",
"salaryMin": 3900,
"salaryMax": 5000,
"salaryPeriod": "month",
"workType": null,
"workArrangement": null,
"classification": null,
"subClassification": null,
"description": "Support production activities by providing technical engineering support",
"jobUrl": "https://my.jobstreet.com/job/94987557",
"postedAt": null,
"postedText": null,
"sourceUrl": "https://my.jobstreet.com/software-engineer-jobs?sortmode=ListedDate&daterange=7",
"scrapedAt": "2026-10-01T01:34:42.627Z"
}

Every row carries the job ID, title, location, salary line, description and URLs. Many listings advertise a salary range, which fills the parsed salary fields; others show a sign-in prompt in salaryText instead, so filter on salaryMin for salary analysis. The company name appears when the listing publishes it and can include the advertiser's profile text.

Pricing

This Actor uses Pay per event plus Apify platform usage. You pay one JobStreet job record scraped event per validated job saved to the dataset and one small Actor Start event per run, and Apify platform usage is billed on top. The live Pricing tab on this page shows the current event prices.

Worked example: four country runs with maxResults set to 25 save up to a hundred job rows, so they cost up to that many job events, four start events and the platform usage of those runs.

API example

curl -X POST "https://api.apify.com/v2/acts/khadinakbar~jobstreet-jobs-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords": "software engineer", "country": "MY", "location": "Kuala Lumpur", "maxResults": 20}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("khadinakbar/jobstreet-jobs-scraper").call(run_input={
"keywords": "data analyst",
"country": "PH",
"postedWithinDays": "7",
"maxResults": 50,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], job["location"], job.get("salaryMin"), job.get("salaryMax"))

Use with AI agents (MCP)

Connect the Actor to Claude, ChatGPT, Cursor or any MCP client through Apify MCP, then ask:

Find 30 data analyst jobs posted on JobStreet Singapore in the last 14 days and summarize the advertised monthly salary range.

The agent calls the Actor with keywords, country and postedWithinDays, reads rows with get-dataset-items, and uses rows with salaryMin for the summary. jobUrl and scrapedAt give provenance per job, and maxResults bounds cost.

Best results

Starting situationHelpful actionExpected outcome
A role in one marketSet keywords and countryListings from that JobStreet site
A city focusAdd location, for example Kuala Lumpur or CebuJobs in that area
Daily monitoringUse postedWithinDays 1 with sortBy date on a scheduleNew jobs each day
Salary benchmarksFilter rows that have salaryMinNumeric ranges to compare
Fast, lighter runsSet includeJobDetails to falseTeaser text from search results
Regional comparisonRun the same keywords for each countryA four-market view

Builder's note

I built this for people who compare hiring across Southeast Asia, so the country switch covers all four JobStreet sites with one input shape. I designed salary parsing to keep the original salaryText next to the numbers, because JobStreet salary lines vary in format and the source text is the safest reference. I made job-page visits optional, since many monitoring runs only need titles, locations and salary lines.

FAQ

Which countries are covered?

Malaysia, Singapore, Indonesia and the Philippines, selected with country.

Why is a salary field empty?

Some employers keep salary private and JobStreet shows a sign-in prompt instead. Parsed salary fields fill when the listing advertises a range.

Can I search several keywords at once?

Run the Actor once per keyword, or schedule several tasks, each with its own keywords.

Responsible use

This Actor collects public JobStreet listings without logging in. Use the data in line with JobStreet's terms and applicable laws such as Malaysia's PDPA, Singapore's PDPA, Indonesia's PDP Law and the Philippine Data Privacy Act. JobStreet is a trademark of its owner; this independent Actor is not affiliated with or endorsed by JobStreet. For questions or bugs, open a ticket in the Issues tab.