JobStreet SEA Scraper [~$1.3/1K💰] | Salaries | Hiring Data avatar

JobStreet SEA Scraper [~$1.3/1K💰] | Salaries | Hiring Data

Pricing

from $0.77 / 1,000 results

Go to Apify Store
JobStreet SEA Scraper [~$1.3/1K💰] | Salaries | Hiring Data

JobStreet SEA Scraper [~$1.3/1K💰] | Salaries | Hiring Data

Scrape JobStreet job listings from Malaysia, Singapore, Philippines & Indonesia via the SEEK internal JSON and GraphQL API - titles, companies, salaries, locations, work arrangements and full descriptions. Build job databases, salary benchmarks and hiring intelligence across Southeast Asia.

Pricing

from $0.77 / 1,000 results

Rating

0.0

(0)

Developer

Ahmed Jasarevic

Ahmed Jasarevic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

JobStreet SEA Jobs Scraper — MY, SG, PH, ID — Salaries, Hiring Data & Salary Benchmarks

Extract job listings from JobStreet Southeast Asia — Malaysia (my.jobstreet.com), Singapore (sg.jobstreet.com), Philippines (ph.jobstreet.com) and Indonesia (id.jobstreet.com) — via the same internal SEEK JSON + GraphQL API the JobStreet site itself uses. Get job title, company, salary, location, classification, work type/arrangement, posted date and the full job description for every listing across all four SEA markets in a single run. No browser, no login, no API key.

Main Use Cases

  • Salary benchmarking — aggregate advertised salary ranges across roles, markets and locations for your Salary Guide or compensation review (JobStreet is the primary salary data source cited in SEEK's own SEA salary reports)
  • Recruiters & sourcers — build candidate-outreach lists by keyword, location and posting date for MY, SG, PH and ID
  • Labor-market researchers — track job-post volumes, classifications and work-arrangement trends (remote/hybrid/on-site) over time
  • Job aggregators & job boards — feed a normalized job feed for Southeast Asia from one actor
  • Hiring-intelligence dashboards — monitor new job postings daily with sortMode: ListedDate and postedWithinDays

Build Job Databases & Salary Benchmarks Without the Official JobStreet API

JobStreet is Southeast Asia's largest job board (part of the SEEK group). It publishes no public bulk-export API for job listings. This actor queries the SEEK internal search API (/api/jobsearch/v5/search) to enumerate job listings and the SEEK GraphQL API (/graphql) to pull each job's full description and metadata — the exact endpoints the JobStreet website itself calls. It returns clean, structured JSON rows ready for export to JSON, CSV or Excel.

How It Works

  1. SearchGET https://{country}.jobstreet.com/api/jobsearch/v5/search?siteKey={MY|SG|PH|ID}-Main&sourcesystem=houston&page=N&pageSize=100&keywords=...&where=...&daterange=...&sortMode=...&locale=... Returns up to 100 jobs per request with title, company, salary label, location, work type, work arrangement, classification, listing date and teaser. Paginated with page until maxResults is reached.
  2. Detail (optional)POST https://{country}.jobstreet.com/graphql with the jobDetails(id:) query returns the full description HTML, salary, work types, classifications, advertiser info, status, expiry and recruiter phone.

Why this strategy? JobStreet's HTML pages are served behind a Cloudflare challenge (cf-mitigated: challenge), but the JSON search API and GraphQL endpoint are not Cloudflare-walled — they return clean JSON with just a browser User-Agent. This keeps the actor ~10x cheaper and far more stable than a Playwright scraper, and it never touches the walled HTML.

Input Parameters

FieldTypeRequiredDefaultNotes
countriesarrayNo["MY","SG","PH","ID"]JobStreet country sites to search: MY, SG, PH, ID
keywordsstringYessoftware engineerSearch query — e.g. software engineer, accountant, data analyst
locationstringNo""Free-text location filter, e.g. Kuala Lumpur, Singapore, Jakarta, Metro Manila. Empty = all locations
maxResultsintegerNo100Max listings to scrape (max 10,000)
includeDetailsbooleanNotrueFetch full description + metadata per job via GraphQL (one extra request per job)
postedWithinDaysintegerNo0Only jobs posted in the last N days (0 = any time)
sortModestringNoKeywordRelevanceKeywordRelevance or ListedDate
proxyConfigurationobjectNo{ "useApifyProxy": false }Standard Apify proxy editor. No proxy by default. Only enable a residential group if your IP gets blocked with HTTP 403

Output Fields

Each dataset item is one job listing:

FieldDescription
jobIdSEEK job ID
titleJob title
companyCompany / advertiser name
advertiserIdSEEK advertiser ID
urlCanonical JobStreet job URL
countryMY, SG, PH or ID
locationLocation label (city, state)
locationCountryCodeISO country code of the location
salaryAdvertised salary label (e.g. RM 4,500 – RM 6,500 per month)
workTypeFull time / Part time / Contract etc.
workArrangementOn-site / Hybrid / Remote
classificationsClassification + sub-classification
postedDateISO listing date
postedDateDisplayHuman-readable date (4d ago)
teaserShort listing teaser
advertiserVerifiedVerified-employer flag
status / isExpired / expiresAtListing lifecycle
descriptionFull description (HTML)
descriptionTextFull description (plain text)

Example Input

{
"countries": ["MY", "SG", "PH", "ID"],
"keywords": "software engineer",
"location": "Kuala Lumpur",
"maxResults": 1000,
"includeDetails": true,
"postedWithinDays": 30,
"sortMode": "ListedDate"
}

Example Output

{
"jobId": "94498339",
"title": "Software Engineer",
"company": "SILVERSTREAM TECHNOLOGY SDN. BHD.",
"advertiserId": "60627682",
"url": "https://my.jobstreet.com/job/94498339",
"country": "MY",
"location": "Puchong, Selangor",
"locationCountryCode": "MY",
"salary": "RM 4,500 – RM 6,500 per month",
"workType": "Full time",
"workArrangement": "Hybrid",
"classifications": [
{ "classification": "Information & Communication Technology", "subClassification": "Engineering - Software" }
],
"postedDate": "2026-09-08T05:10:53Z",
"postedDateDisplay": "4d ago",
"teaser": "Design cutting-edge software solutions...",
"advertiserVerified": true,
"status": "Active",
"isExpired": false,
"expiresAt": "2026-10-08T12:59:59.999Z",
"description": "<p><strong>About the role</strong>...",
"descriptionText": "About the role\n\nICAS Technology..."
}

Integrations & Automation

  • API — run this actor programmatically from the Apify API, JavaScript/Python SDK, or any REST client; pull results from the dataset endpoint
  • Webhooks / Make / Zapier — trigger runs and push new listings to Slack, Sheets or your ATS
  • Scheduling — for daily new-jobs monitoring, schedule a run with postedWithinDays: 1 and sortMode: ListedDate. This recurring usage also improves the actor's relevance ranking in Apify Store search.

FAQ

Why use this actor instead of the official JobStreet / SEEK API?

JobStreet/SEEK do not offer a public, self-serve job-search API for third parties. The only practical API route is paid aggregator partnerships or the SEEK Affiliate program with approval requirements. This actor reads the same internal JSON + GraphQL endpoints the JobStreet website itself calls, so you get the job listing search and full descriptions programmatically without an API key or partnership.

What are alternatives to a JobStreet scraper / to this data source?

  • easyapi/jobstreet-job-scraper — 8 APAC countries, higher per-result price ($0.00299)
  • memo23/jobstreet-scraper — adds JobsDB markets (VN, TH, HK) and incremental mode
  • santamaria-automations/seek-scraper — also covers Australia/NZ Seek and JobsDB HK/TH at $2.50/1K
  • Official channels — SEEK Employer reports and JobStreet's own published Salary Guides (salary data beyond job ads requires their commercial reports)

How can I scrape JobStreet job listings without a browser?

This actor is HTTP-only against the site's own JSON API — no Playwright/Puppeteer. It bypasses the Cloudflare wall on the HTML pages because the underlying JSON endpoints answer from a plain datacenter IP with a browser User-Agent. That makes it roughly 10x cheaper than a browser-based scraper and far more stable.

How do I benchmark salaries in Malaysia, Singapore, Philippines and Indonesia?

Run this actor with a job-title keyword per market (e.g. software engineer), leave location empty, set maxResults to a broad sample (e.g. 5,000 per run) and aggregate the salary field into your own pipeline. Advertised salary ranges are exactly the data SEEK uses to compile its own SEA salary reports, so the same source produces comparable benchmarks. Note: many employers don't publish a figure, so salary is empty on some ads.

What is the cost to scrape 1,000 JobStreet jobs?

Roughly ~1,010 requests (10 search requests + 1,000 detail requests) for a 1,000-job run with full details. Free Apify accounts get a capped preview (10 listings); paid accounts can scrape up to 10,000 listings per run. No residential proxy needed for typical volumes.

Does the scraper need a login or proxy?

No login, no API key. The default AUTO proxy group works because the SEEK JSON endpoints respond from datacenter IPs. Only enable a residential proxy group if your IP gets rate-limited with HTTP 403.

SEO Keywords

jobstreet scraper, jobstreet api, jobstreet data extraction, jobstreet malaysia, jobstreet singapore, jobstreet indonesia, jobstreet philippines, my.jobstreet.com scraper, sg.jobstreet.com scraper, id.jobstreet.com scraper, ph.jobstreet.com scraper, malaysia job listings data, singapore jobs dataset, jakarta jobs data, manila job listings, job board scraper, seek api alternative, salary benchmarking southeast asia, hiring data, recruitment data, job market research, remote work trends asia, job aggregator feed

For AI Agents & LLM Apps

Purpose: Returns structured job listings from JobStreet SEA (MY/SG/PH/ID) — title, company, salary label, location, work type/arrangement, dates and full description — as one dataset item per job.

Minimal input:

{ "keywords": "software engineer", "countries": ["SG"], "includeDetails": true }

Variants:

  • Daily-new-jobs monitor: { "keywords": "data analyst", "countries": ["MY"], "postedWithinDays": 1, "sortMode": "ListedDate", "maxResults": 200 }
  • Broad market sample for salary aggregation: { "keywords": "", "countries": ["MY","SG","PH","ID"], "maxResults": 5000, "includeDetails": false }

Output fields: jobId, title, company, advertiserId, url, country, location, locationCountryCode, salary, workType, workArrangement, classifications, postedDate, postedDateDisplay, teaser, advertiserVerified, status, isExpired, expiresAt, description, descriptionText.

Behaviors an agent should know:

  • keywords is the only required input field.
  • includeDetails (default true) adds one GraphQL request per job and populates description/descriptionText; set false to halve request count when descriptions aren't needed.
  • maxResults caps total listings; free-tier runs are limited to ~10 items.
  • countries is an array — pass ["MY"], ["SG"], ["PH"], ["ID"], or any combination.
  • location is free-text (e.g. Kuala Lumpur) and combined with the site's own where filter.
  • Billing is per result ($0.0008) plus per detail ($0.0005) when includeDetails is on — a 1,000-job run with details ≈ $1.30.

This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by JobStreet, SEEK Limited, or any of their subsidiaries. It accesses only publicly available job listing pages and the same public API endpoints the JobStreet website itself calls — no login bypass, no CAPTCHA solving, no access to non-public data. Users are responsible for compliance with JobStreet's Terms of Service and all applicable laws in the countries where they use the data. Advertised salary and job data should not be relied on as the sole source for HR decisions; verify against official reports where required.