Jobstreet Jobs Scraper | $1.50/1K — SEA: MY, SG, PH, ID, TH, HK avatar

Jobstreet Jobs Scraper | $1.50/1K — SEA: MY, SG, PH, ID, TH, HK

Pricing

from $1.45 / 1,000 job results

Go to Apify Store
Jobstreet Jobs Scraper | $1.50/1K — SEA: MY, SG, PH, ID, TH, HK

Jobstreet Jobs Scraper | $1.50/1K — SEA: MY, SG, PH, ID, TH, HK

Scrape job postings from Jobstreet & JobsDB (Malaysia, Singapore, Philippines, Indonesia, Thailand, Hong Kong) via the public v5 search API. Get title, company, location, salary, work type, seniority, remote type, classification, parse_confidence. Multi-query, keyword filters.

Pricing

from $1.45 / 1,000 job results

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

1

Monthly active users

14 days ago

Last modified

Share

Jobstreet Jobs Scraper — Malaysia, Singapore & Southeast Asia

Scrape job postings from Jobstreet and JobsDB across Southeast Asia — Malaysia, Singapore, Philippines, Indonesia, Thailand and Hong Kong — straight from the official SEEK-platform v5 search API. Run one or many keyword searches, paginate the full result set, and get a clean, flat, 24-field record per job: title, company, location, salary, work type, seniority, remote type, classification, posting date, job URL, and a machine-readable parse_confidence score on every row.

This Jobstreet Jobs Scraper is built for recruiters, job-market analysts, HR-tech products, and lead-generation pipelines that need structured SEA hiring data without maintaining a fragile in-house scraper.

What Jobstreet job data you get

Every result row contains:

  • title — the job title (e.g. "Senior Software Engineer")
  • company — hiring company name
  • location, area, country_code — where the job is based
  • salary — the salary label exactly as Jobstreet displays it (e.g. RM 8,000 – RM 12,000 per month), when disclosed
  • work_type — Full time, Part time, Contract, Casual
  • seniority — canonical level inferred from the title: executive, vp, director, manager, principal, staff, lead, senior, intern, entry, mid
  • remote_type — remote, hybrid, or onsite (from Jobstreet workArrangements)
  • classification / subclassification — Jobstreet's own industry taxonomy
  • listing_date — ISO-8601 posting timestamp
  • url — canonical link to the job on the correct regional site
  • teaser + bullet_points — the short summary and highlight bullets
  • description_html / description_text — full job description (optional, enable "Include full job descriptions")
  • parse_confidence + warnings — quality signal per row, so you can filter low-quality records programmatically

How to scrape Jobstreet jobs

  1. Add one or more search queries (e.g. software engineer, accountant, sales manager).
  2. Pick the country / market — Malaysia, Singapore, Philippines, Indonesia, Thailand or Hong Kong.
  3. Optionally set a location filter, work type, title/location keyword filters, or remote-only.
  4. Set Max total items to cap cost (default 200), or 0 for the full result set.
  5. Run. Results stream into the dataset as they are scraped.

The actor paginates automatically until every matching job for each query is collected or your maxItems cap is reached.

Which countries does this Jobstreet scraper cover?

MarketSite
Malaysiamy.jobstreet.com
Singaporesg.jobstreet.com
Philippinesph.jobstreet.com
Indonesiaid.jobstreet.com
Thailandth.jobsdb.com
Hong Konghk.jobsdb.com

Each market is selected with the Country / market input and returns localized results, including local salary currencies (RM, S$, ₱, Rp, ฿, HK$).

Why this Jobstreet Jobs Scraper

  • Official internal API, not HTML scraping — fast, stable, and resilient to front-end redesigns. The same SEEK v5 search backend powers Jobstreet, JobsDB and Seek.
  • Clean unified schema — one consistent record shape across all six SEA markets, ready to push straight into a database, spreadsheet, or ATS.
  • Enriched fields — seniority and remote-type are derived for you, not left as raw strings.
  • Quality signal built in — parse_confidence lets you trust the data and drop incomplete rows automatically.
  • Apify Proxy — runs on Apify's RESIDENTIAL proxy by default for reliable access; you pay only per result.

Pricing

Pay per result. You are billed $1.50 / 1,000 jobs returned. Optional premium events apply when you enable full descriptions or have salary-disclosed rows.

Pair this with our Seek Jobs Scraper (Australia & New Zealand) and Dice Tech Jobs Scraper (US tech) for full-coverage cross-region hiring intelligence on the same unified schema.

FAQ

Do I need a Jobstreet login or API key? No. The actor uses Jobstreet's public search API.

Can I get full job descriptions? Yes — enable "Include full job descriptions". Each job then makes one extra request to its detail page (slower, richer output). Teaser and bullet points are always included even without it.

How fresh is the data? It is fetched live on every run, directly from Jobstreet's search backend.

Is salary always present? No — only when the employer discloses it. Indonesia and Hong Kong listings disclose salary most often; check salary (null when not disclosed).

More scrapers from our toolkit

Building a data pipeline? These actors pair well with this one — each runs on your own Apify account with the same pay-per-result pricing, no subscription:

Chain any of them together from the Integrations tab (the Run succeeded trigger) to build a multi-step workflow — one actor's output feeds the next.

Usage statistics

This Actor creates a small, content-free summary at the end of each run. It is used only to monitor reliability and improve this Actor. A copy is saved as USAGE_STATS in your own Apify key-value store, so you can see the exact record created for your run.

Set disableUsageStats to true in the input to opt out. Nothing is sent then; your USAGE_STATS record only says that statistics were disabled.

Only these fields are recorded:

  • schema version, Actor name and build number;
  • UTC start and finish hour (not a precise timestamp);
  • run duration, number of results and time to the first result, each as a coarse range;
  • whether the result was empty, the end status, and an error type from a fixed list;
  • memory setting and counts of charged events;
  • names of the input fields you set, never their values;
  • the selected option for input fields that offer a fixed list of choices (for example a sort order).

We do not collect input text, search terms, URLs, domains, usernames, email addresses, names, proxy credentials, tokens, scraped records, output items, raw error messages, stack traces, or hashes of any of those values. Records are kept for no longer than 13 months, used only as aggregated operational statistics, and never sold or shared.

Additional fields (Phase 2)

This Actor also records your Apify user ID, whether Apify marks the account as paying, the size range of list inputs, the selected country when the input offers a fixed list of countries, and one category from a fixed Actor taxonomy. We use these fields only for aggregate reliability, repeat-use and cross-Actor analysis; reports suppress any cell with fewer than five distinct users.

The same disableUsageStats: true input flag turns these fields off too. The user ID is removed after 13 months; we do not export, sell, share, or attempt to re-identify this data.

Run-outcome signals (v2)

To learn whether a run did what it was asked to do, the record also holds a few more coarse ranges and yes/no flags. None of them contains content:

  • the result limit you asked for (a range, when the input has one) and what share of it was delivered;
  • results delivered per input item you listed (a range);
  • output quality as ranges: how fully the result fields were filled, the share of rows that look like errors, the share of duplicate rows, and how many different fields appeared. These are counted in memory while results are saved; no result content is kept;
  • how the run was started (console, API, schedule, webhook, another Actor);
  • how it ended: stopped by you, timed out, reached the requested limit, stopped by the charge limit, and how many times the platform moved the run;
  • if this Actor reports it: how many items to process worked or failed (ranges) and one failure reason from a fixed list;
  • a short code made from the names of the input fields you set, never their values.

Repeat-run fingerprint (v2)

When your Apify user ID is recorded (see above), the record also holds an 8-character one-way code made from your input (proxy settings left out) and this Actor's name. It only lets us see that the same account ran the same input again soon after an unsatisfying run; we never see the input itself. It is stored only in the database, never published, and reports use it in aggregate with the same five-user minimum. It is the one exception to the statement above that no hashes are collected, and disableUsageStats: true turns it off.