JobStreet Southeast Asia Jobs & Salary Scraper
Pricing
from $6.80 / 1,000 results
JobStreet Southeast Asia Jobs & Salary Scraper
Scrape JobStreet job listings across Malaysia, Singapore, Indonesia and the Philippines with job title, company, location, salary range, employment type, category and work arrangement. Export to JSON, CSV or Excel.
Pricing
from $6.80 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 days ago
Last modified
Categories
Share
JobStreet Southeast Asia Jobs & Salary Scraper
Here is one real result, with every field the actor returns:
{"id": "93986655","title": "Manufacturing Coordinator/Planner (Fresh Graduates/Experience)","companyName": "NAI Communication Technology (Malaysia) Sdn. Bhd.","advertiserId": "62678950","companyId": null,"companyUrl": null,"roleId": "Manufacturing-Coordinator","location": "Bayan Lepas, Penang","area": "Penang","countryCode": "MY","country": "Malaysia","salaryMin": 2700,"salaryMax": 4000,"salaryCurrency": "MYR","salaryLabel": "RM 2,700 - RM 4,000 per month","employmentType": "Full time","workArrangement": "On-site","category": "Manufacturing, Transport & Logistics","subCategory": "Production, Planning & Scheduling","teaser": "Responsible for production planning, material coordination, inventory control, and production order management to ensure smooth production flow.","bulletPoints": [],"tags": ["Be an early applicant"],"description": "Key Responsibilities. Plan and coordinate production schedules based on the master production plan ... (full posting text returned; trimmed here for readability)","applicationDeadline": "2026-09-13T13:59:59.999Z","aiJdSummary": null,"aiSkills": null,"aiTechnologies": null,"aiSeniority": null,"aiSalaryEstimateMin": null,"aiSalaryEstimateMax": null,"aiSalaryEstimateCurrency": null,"aiSalaryEstimateBasis": null,"aiSalaryEstimateConfidence": null,"aiSourceLanguage": null,"aiTitleEnglish": null,"aiTeaserEnglish": null,"isFeatured": false,"listingDate": "2026-08-14T08:38:10Z","listingDateDisplay": "Just now","jobUrl": "https://www.jobstreet.com.my/job/93986655","searchQuery": "engineer","source": "JobStreet","observedAt": "2026-08-14T08:38:46.648Z","error": null}
The most complete JobStreet Southeast Asia jobs scraper available. It returns every field JobStreet exposes for each listing across Malaysia, Singapore, Indonesia and the Philippines, plus parsed salary and location fields, and gives you keyword, country and location filters plus optional AI and contact add-ons to target exactly the jobs you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor searches JobStreet across the four Southeast Asian sites (Malaysia my, Singapore sg, Indonesia id, Philippines ph), runs one search per keyword, paginates the listings, and writes one normalized record per job to the run's dataset. Each record carries parsed salary bounds and currency, structured location fields, category and subcategory, employment type and work arrangement. When fetchDescription is on (default), each job is enriched with its full description text and application deadline. Missing source values are returned as null, never invented.
Optional add-ons enrich each record: AI job summary, skills and seniority extraction, salary estimate, English translation for non-English postings, and a business-contact email and name lookup. All add-ons are off by default and require a paid Apify plan.
Quickstart
Open the actor, paste this into the input, and press Run. It searches for developer jobs in Malaysia and Singapore.
{"searchQueries": ["developer"],"countries": ["my", "sg"],"maxJobs": 50,"fetchDescription": true}
Leave searchQueries empty to return all jobs in the selected countries. Every input field is optional.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchQueries | string[] | no | ["developer"] | Job keywords, one search per item (for example accountant, software engineer, nurse). Empty returns all jobs in the selected countries. |
countries | string[] | no | ["my","sg"] | Southeast Asian JobStreet sites: my (Malaysia), sg (Singapore), id (Indonesia), ph (Philippines). |
locations | string[] | no | (empty) | City, region or country names to narrow the search (for example Kuala Lumpur, Jakarta). Applied across every selected country. |
maxJobs | integer | no | 50 | Maximum number of listings to collect across all searches. |
fetchDescription | boolean | no | true | Enrich each job with its full description text and application deadline. Disable for faster listing-only results. |
enrichContacts | boolean | no | false | Paid add-on. For results without an email, attempt to find a public business contact email and name. Billed per attempt, plus an extra charge only when an email is found. |
enrichContactsMax | integer | no | 50 | Cap how many results the contact add-on tries to enrich. Free Apify accounts are capped at 3. |
withJdSummary | boolean | no | false | Paid add-on. Generate a plain-English summary of each description. Requires a paid Apify plan. Billed per usable AI result. |
withSkills | boolean | no | false | Paid add-on. Extract required skills, technologies and seniority. Requires a paid Apify plan. Billed per usable AI result. |
withSalaryEstimate | boolean | no | false | Paid add-on. Estimate market salary for postings that state none. Requires a paid Apify plan. Billed per usable AI result. |
withTranslate | boolean | no | false | Paid add-on. Translate job title and teaser to English for non-English postings. Charged only when the posting is not already in English. Requires a paid Apify plan. |
Output reference
One dataset item per job listing. Types: string, integer, boolean, array, or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
id | string | JobStreet job id, unique per listing. |
title | string | Job title. |
companyName | string | Hiring company name. |
advertiserId | string | JobStreet advertiser id. |
companyId | string | JobStreet company id, or null. |
companyUrl | string | Company profile URL, or null. |
roleId | string | JobStreet normalized role slug. |
location | string | Full location label as shown on the listing. |
area | string | Region or area component of the location. |
countryCode | string | Two-letter country code (MY, SG, ID, PH). |
country | string | Country name. |
salaryMin | integer | Parsed lower salary bound, or null. |
salaryMax | integer | Parsed upper salary bound, or null. |
salaryCurrency | string | Salary currency code, or null. |
salaryLabel | string | Original salary text as displayed, or null. |
employmentType | string | Employment type, for example Full time. |
workArrangement | string | Work arrangement, for example On-site, Remote, Hybrid. |
category | string | JobStreet job category. |
subCategory | string | JobStreet job subcategory. |
teaser | string | Short listing teaser text. |
bulletPoints | array | Highlight bullet points from the listing. Empty array when none. |
tags | array | Listing tags (for example Be an early applicant). |
description | string | Full job description text (when fetchDescription is on). |
applicationDeadline | string | ISO 8601 application deadline, or null. |
aiJdSummary | string | AI summary of the description (paid add-on), else null. |
aiSkills | array | AI-extracted skills (paid add-on), else null. |
aiTechnologies | array | AI-extracted technologies (paid add-on), else null. |
aiSeniority | string | AI-inferred seniority (paid add-on), else null. |
aiSalaryEstimateMin | integer | AI salary estimate low bound (paid add-on), else null. |
aiSalaryEstimateMax | integer | AI salary estimate high bound (paid add-on), else null. |
aiSalaryEstimateCurrency | string | AI salary estimate currency (paid add-on), else null. |
aiSalaryEstimateBasis | string | AI salary estimate basis (paid add-on), else null. |
aiSalaryEstimateConfidence | string | AI salary estimate confidence (paid add-on), else null. |
aiSourceLanguage | string | Detected posting language (translate add-on), else null. |
aiTitleEnglish | string | Title translated to English (translate add-on), else null. |
aiTeaserEnglish | string | Teaser translated to English (translate add-on), else null. |
isFeatured | boolean | Whether the listing is a featured/promoted post. |
listingDate | string | ISO 8601 listing date. |
listingDateDisplay | string | Human-readable posted-time label. |
jobUrl | string | Public URL of the job listing. |
searchQuery | string | The keyword that matched this result. |
source | string | Always JobStreet. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"searchQueries":["engineer"],"countries":["my","sg"]}). The description value is trimmed here for readability; the dataset returns it in full. The original salaryLabel used an en dash between the bounds; shown here as a hyphen.
{"id": "93986655","title": "Manufacturing Coordinator/Planner (Fresh Graduates/Experience)","companyName": "NAI Communication Technology (Malaysia) Sdn. Bhd.","advertiserId": "62678950","companyId": null,"companyUrl": null,"roleId": "Manufacturing-Coordinator","location": "Bayan Lepas, Penang","area": "Penang","countryCode": "MY","country": "Malaysia","salaryMin": 2700,"salaryMax": 4000,"salaryCurrency": "MYR","salaryLabel": "RM 2,700 - RM 4,000 per month","employmentType": "Full time","workArrangement": "On-site","category": "Manufacturing, Transport & Logistics","subCategory": "Production, Planning & Scheduling","teaser": "Responsible for production planning, material coordination, inventory control, and production order management to ensure smooth production flow.","bulletPoints": [],"tags": ["Be an early applicant"],"description": "Key Responsibilities. Plan and coordinate production schedules based on the master production plan ... (trimmed; full text in dataset)","applicationDeadline": "2026-09-13T13:59:59.999Z","aiJdSummary": null,"aiSkills": null,"aiTechnologies": null,"aiSeniority": null,"aiSalaryEstimateMin": null,"aiSalaryEstimateMax": null,"aiSalaryEstimateCurrency": null,"aiSalaryEstimateBasis": null,"aiSalaryEstimateConfidence": null,"aiSourceLanguage": null,"aiTitleEnglish": null,"aiTeaserEnglish": null,"isFeatured": false,"listingDate": "2026-08-14T08:38:10Z","listingDateDisplay": "Just now","jobUrl": "https://www.jobstreet.com.my/job/93986655","searchQuery": "engineer","source": "JobStreet","observedAt": "2026-08-14T08:38:46.648Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~jobstreet-sea-jobs-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries":["developer"],"countries":["sg"],"maxJobs":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~jobstreet-sea-jobs-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries":["nurse"],"countries":["my","sg","id","ph"],"maxJobs":200}'
Apify CLI:
apify call scrapers_lat/jobstreet-sea-jobs-scraper \--input '{"searchQueries":["accountant"],"countries":["my"]}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per job record returned (
resultevent). See the pricing tab for the current per-result price. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 records per run, and the contact add-on is capped at 3 attempts. The AI and contact add-ons require a paid Apify plan. Upgrade for higher
maxJobsand enrichment.
FAQ and troubleshooting
Which countries are covered?
Malaysia (my), Singapore (sg), Indonesia (id) and the Philippines (ph). Pass any subset in countries; the default is my and sg.
Can I search multiple keywords at once?
Yes. Each item in searchQueries runs as its own search, and results are merged. The matching keyword is recorded in each record's searchQuery.
Does it include salary?
When the employer publishes it. salaryMin, salaryMax, salaryCurrency and the original salaryLabel are populated when a pay range is shown, and null otherwise.
Why is description empty?
It is only fetched when fetchDescription is enabled (on by default). Disable it for faster listing-only runs.
A run returned 0 records. Why? The keyword or location matched nothing in the selected countries. Loosen the search or widen the countries. Zero-result runs are not charged.
Are the add-ons free? No. The AI add-ons and the contact-enrichment add-on require a paid Apify plan. They are off by default; on free plans the contact add-on is capped at 3 attempts.
Is this an official JobStreet tool? No. This actor is independent and has no affiliation with JobStreet or SEEK. It only accesses publicly available job listings. Use the results in accordance with the source's terms.
Related scrapers
- JobScore Jobs Scraper: open roles from public JobScore company boards.
- Jobvite Jobs Scraper: open roles from public Jobvite career sites.
- Jora Jobs Scraper: job listings aggregated on Jora.
- Indeed Jobs Scraper: job listings from Indeed.
- Greenhouse Jobs Scraper: open roles from Greenhouse boards.
- Lever Jobs Scraper: open roles from Lever boards.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with JobStreet or SEEK. Accesses only publicly available job listings. Use the results in accordance with the source's terms.
