JobStreet $1๐Ÿ’ฐ Keyword & URL Job Scraper avatar

JobStreet $1๐Ÿ’ฐ Keyword & URL Job Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
JobStreet $1๐Ÿ’ฐ Keyword & URL Job Scraper

JobStreet $1๐Ÿ’ฐ Keyword & URL Job Scraper

From $1/1K. Scrape JobStreet listings across Malaysia, Singapore, Indonesia, and the Philippines. Extract titles, companies, salaries, locations, descriptions, company info, and apply details. Search with filters or paste JobStreet URLs directly. Fast, browser-free, and cost-efficient.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

AbotAPI

AbotAPI

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

2

Monthly active users

3 days ago

Last modified

Share

JobStreet Jobs Scraper (Malaysia, Singapore, Philippines, Indonesia)

Scrape job listings from JobStreet across all four Southeast Asian markets: Malaysia (my.jobstreet.com), Singapore (sg.jobstreet.com), the Philippines (ph.jobstreet.com), and Indonesia (id.jobstreet.com). The actor reads JobStreet's public JSON search and returns one clean, flat record per job, with an optional full description, company overview, salary, and contact details pulled from the public job-detail endpoint. No browser, fast, and inexpensive.

Search two ways: fill in the filter fields (country, keywords, location, category, work type, salary, date range), or paste one or more JobStreet search URLs and let the actor read the filters straight from each link.

Why this scraper

  • Covers all four JobStreet country sites from one actor, with the country auto-detected from each pasted URL.
  • 60+ fields per job, including the full HTML description, plain-text body, bullet points, salary, company overview, and any phone numbers or emails found in the ad body.
  • Detail enrichment is batched: one extra request fetches the full description for a whole page of up to 22 jobs, so deep runs stay fast.
  • Forward pagination across as many pages as you allow, with automatic de-duplication by job ID.
  • Filter by category and subcategory, work type, salary range (monthly or annual), and listing recency.
  • Global caps on item count and run time, so a run never overshoots your budget. Partial results are always flushed.

Data you get

Sample shape, values are illustrative placeholders, not from a live listing.

FieldExample
id"00000001"
url"https://my.jobstreet.com/job/00000001"
title"Software Engineer"
teaser"Join a growing team building cloud services."
companyName"Sample Company Sdn Bhd"
companyId"00000000"
companyOverview"Sample Company is a leading provider of ..."
advertiserName"Sample Company Sdn Bhd"
locationLabel"Kuala Lumpur"
locationSeoHierarchy["Kuala Lumpur", "Wilayah Persekutuan"]
countryCode"MY"
classificationInfo{ "classification": "Information & Communication Technology", "subClassification": "Developers/Programmers" }
workTypes["Full time"]
salaryLabel"RM 5,000 to RM 8,000 per month"
content"<p>Full job description HTML appears here when includeFullDescription=true.</p>"
contentText"Full job description plain text appears here."
bulletPoints["Competitive salary", "Hybrid work", "Career growth"]
phoneNumbers["+60100000000"]
emails["careers@example.com"]
listingDate"2026-01-01T00:00:00Z"
listingDateDisplay"2d ago"
expiresAt"2026-02-01T00:00:00Z"
isVerifiedtrue
applyLink"https://my.jobstreet.com/job/00000001/apply"
scrapedAt"2026-01-01T00:00:00.000Z"

The full record carries more: classifications[] with IDs, workArrangementLabels, salaryCurrency, shareLink, companyOpenJobs, branding, advertiser details, and raw passthrough blocks (advertiserRaw, employerRaw, companyProfileRaw) so no upstream field is ever dropped.

How to use

1. Basic search (Malaysia)

{
"country": "MY",
"keywords": "software engineer",
"location": "Kuala Lumpur",
"maxItems": 50
}

2. Search with filters (Singapore, ICT, full time, salary range)

{
"country": "SG",
"keywords": "data engineer",
"classification": ["6281"],
"workType": ["242"],
"salaryMin": 5000,
"salaryMax": 12000,
"salaryType": "monthly",
"daterange": 14,
"sortmode": "ListedDate",
"maxItems": 100,
"includeFullDescription": true
}

3. Multiple countries via URL mode

{
"urls": [
"https://my.jobstreet.com/it-jobs/in-Penang",
"https://sg.jobstreet.com/jobs-in-information-communication-technology",
"https://ph.jobstreet.com/accountant-jobs",
"https://id.jobstreet.com/marketing-jobs/in-Jakarta-Raya"
],
"maxItems": 200,
"includeFullDescription": false
}

In URL mode, the filter fields in Option 1 are ignored. Each URL's host sets the country, and its path and query string set the filters. You can mix all four country sites in one run.

4. Recent jobs only, sorted by date

{
"country": "ID",
"keywords": "marketing",
"daterange": 7,
"sortmode": "ListedDate",
"maxItems": 30
}

Input parameters

ParameterTypeDefaultDescription
countrystring"MY"Market to search: MY, SG, PH, or ID. Applies in filter mode only.
keywordsstring(empty)Job title or keywords. Empty matches all jobs in the location.
locationstring(empty)Location within the country, for example Kuala Lumpur or Jakarta Raya. Empty searches the whole country.
classificationarray[]One or more category IDs. Empty means all categories.
workTypearray[]Work types: 242 Full time, 243 Part time, 244 Contract/Temp, 245 Casual/Vacation.
salaryMininteger(none)Minimum salary in local currency.
salaryMaxinteger(none)Maximum salary in local currency.
salaryTypestring"monthly"Whether salary values are monthly or annual.
daterangeinteger(none)Listed within N days. Accepted: 1, 3, 7, 14, 31.
sortmodestring"ListedDate"ListedDate newest first, or KeywordRelevance best match.
urlsarray[]One or more JobStreet search URLs. Overrides Option 1. Country auto-detected per URL.
includeFullDescriptionbooleantrueFetch the full HTML description, company overview, expiry, and phone via the job-detail endpoint. Batched per page.
maxItemsinteger20Global cap across all URLs and pages. 0 means unlimited.
maxTimeSecinteger0Global wall-clock cap in seconds. 0 means no limit. Partial results are flushed when reached.
proxyConfigurationobjectApify datacenterProxy settings. See below.

Output example

Sample shape, values are illustrative placeholders, not from a live listing.

{
"id": "00000001",
"url": "https://my.jobstreet.com/job/00000001",
"applyLink": "https://my.jobstreet.com/job/00000001/apply",
"title": "Software Engineer",
"teaser": "Join a growing team building cloud services.",
"companyName": "Sample Company Sdn Bhd",
"companyId": "00000000",
"companyOverview": "Sample Company is a leading provider of cloud services in the region.",
"advertiserName": "Sample Company Sdn Bhd",
"locationLabel": "Kuala Lumpur",
"locationSeoHierarchy": ["Kuala Lumpur", "Wilayah Persekutuan"],
"countryCode": "MY",
"classificationInfo": {
"classification": "Information & Communication Technology",
"subClassification": "Developers/Programmers"
},
"workTypes": ["Full time"],
"salaryLabel": "RM 5,000 to RM 8,000 per month",
"content": "<p>Full job description HTML appears here when includeFullDescription=true.</p>",
"contentText": "Full job description plain text appears here.",
"bulletPoints": ["Competitive salary", "Hybrid work", "Career growth"],
"phoneNumbers": ["+60100000000"],
"emails": ["careers@example.com"],
"listingDate": "2026-01-01T00:00:00Z",
"listingDateDisplay": "2d ago",
"expiresAt": "2026-02-01T00:00:00Z",
"isVerified": true,
"scrapedAt": "2026-01-01T00:00:00.000Z"
}

Plan requirement and proxy

The actor defaults to Apify datacenter proxy, which is included on the free plan, and JobStreet serves its public data fine through it. If your account cannot reach datacenter proxy, the actor automatically falls back to a backup pool, then to a direct connection, so a run never fails just because of proxy access.

For heavy or production workloads, residential proxy gives more rotation and reliability. Set proxyConfiguration.apifyProxyGroups to ["RESIDENTIAL"] (available on Apify paid plans) and optionally pin the country with apifyProxyCountry to match the market you are scraping.