JobStreet Southeast Asia Jobs & Salary Scraper avatar

JobStreet Southeast Asia Jobs & Salary Scraper

Pricing

from $6.80 / 1,000 results

Go to Apify Store
JobStreet Southeast Asia Jobs & Salary Scraper

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

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 days ago

Last modified

Categories

Share

JobStreet Southeast Asia Jobs & Salary Scraper

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

Apify Coverage Output Billing

Table of contents

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

FieldTypeRequiredDefaultDescription
searchQueriesstring[]no["developer"]Job keywords, one search per item (for example accountant, software engineer, nurse). Empty returns all jobs in the selected countries.
countriesstring[]no["my","sg"]Southeast Asian JobStreet sites: my (Malaysia), sg (Singapore), id (Indonesia), ph (Philippines).
locationsstring[]no(empty)City, region or country names to narrow the search (for example Kuala Lumpur, Jakarta). Applied across every selected country.
maxJobsintegerno50Maximum number of listings to collect across all searches.
fetchDescriptionbooleannotrueEnrich each job with its full description text and application deadline. Disable for faster listing-only results.
enrichContactsbooleannofalsePaid 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.
enrichContactsMaxintegerno50Cap how many results the contact add-on tries to enrich. Free Apify accounts are capped at 3.
withJdSummarybooleannofalsePaid add-on. Generate a plain-English summary of each description. Requires a paid Apify plan. Billed per usable AI result.
withSkillsbooleannofalsePaid add-on. Extract required skills, technologies and seniority. Requires a paid Apify plan. Billed per usable AI result.
withSalaryEstimatebooleannofalsePaid add-on. Estimate market salary for postings that state none. Requires a paid Apify plan. Billed per usable AI result.
withTranslatebooleannofalsePaid 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.

FieldTypeDescription
idstringJobStreet job id, unique per listing.
titlestringJob title.
companyNamestringHiring company name.
advertiserIdstringJobStreet advertiser id.
companyIdstringJobStreet company id, or null.
companyUrlstringCompany profile URL, or null.
roleIdstringJobStreet normalized role slug.
locationstringFull location label as shown on the listing.
areastringRegion or area component of the location.
countryCodestringTwo-letter country code (MY, SG, ID, PH).
countrystringCountry name.
salaryMinintegerParsed lower salary bound, or null.
salaryMaxintegerParsed upper salary bound, or null.
salaryCurrencystringSalary currency code, or null.
salaryLabelstringOriginal salary text as displayed, or null.
employmentTypestringEmployment type, for example Full time.
workArrangementstringWork arrangement, for example On-site, Remote, Hybrid.
categorystringJobStreet job category.
subCategorystringJobStreet job subcategory.
teaserstringShort listing teaser text.
bulletPointsarrayHighlight bullet points from the listing. Empty array when none.
tagsarrayListing tags (for example Be an early applicant).
descriptionstringFull job description text (when fetchDescription is on).
applicationDeadlinestringISO 8601 application deadline, or null.
aiJdSummarystringAI summary of the description (paid add-on), else null.
aiSkillsarrayAI-extracted skills (paid add-on), else null.
aiTechnologiesarrayAI-extracted technologies (paid add-on), else null.
aiSenioritystringAI-inferred seniority (paid add-on), else null.
aiSalaryEstimateMinintegerAI salary estimate low bound (paid add-on), else null.
aiSalaryEstimateMaxintegerAI salary estimate high bound (paid add-on), else null.
aiSalaryEstimateCurrencystringAI salary estimate currency (paid add-on), else null.
aiSalaryEstimateBasisstringAI salary estimate basis (paid add-on), else null.
aiSalaryEstimateConfidencestringAI salary estimate confidence (paid add-on), else null.
aiSourceLanguagestringDetected posting language (translate add-on), else null.
aiTitleEnglishstringTitle translated to English (translate add-on), else null.
aiTeaserEnglishstringTeaser translated to English (translate add-on), else null.
isFeaturedbooleanWhether the listing is a featured/promoted post.
listingDatestringISO 8601 listing date.
listingDateDisplaystringHuman-readable posted-time label.
jobUrlstringPublic URL of the job listing.
searchQuerystringThe keyword that matched this result.
sourcestringAlways JobStreet.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull 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:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "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 (result event). 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 error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on 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 maxJobs and 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.

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.