Jobstreet Jobs Search Scraper avatar

Jobstreet Jobs Search Scraper

Under maintenance

Pricing

from $2.99 / 1,000 jobstreet job records

Go to Apify Store
Jobstreet Jobs Search Scraper

Jobstreet Jobs Search Scraper

Under maintenance

Scrape job listings from Jobstreet.com.my, Malaysia and Southeast Asia's leading job platform. Extract job titles, companies, locations, salaries, and job types for regional recruitment and market analysis.

Pricing

from $2.99 / 1,000 jobstreet job records

Rating

0.0

(0)

Developer

Jobs API

Jobs API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

11 days ago

Last modified

Share

What does JobStreet Public Jobs Scraper do?

This Apify Actor is designed to extract public JobStreet job postings across Asia-Pacific. It parses official search pages, verifies each posting on its official detail page, and writes only complete source-backed job records to the default dataset.

Current audit status: SKIPPED. On 2026-09-24, Chrome showed JobStreet's “Performing security verification” page at the configured public search URL. No Actor request or dataset run followed. Do not run this Actor against JobStreet while that access challenge is present.

The existing implementation uses bounded, sequential, ordinary direct HTTPS requests and Cheerio. It does not use proxy routing, custom request headers, retries, automatic redirects, alternate identities, or challenge bypass. HTTP 401/403/429/451 or a visible source-authored denial/challenge stops the run, discards buffered records, and is recorded as SKIPPED with diagnostics and request receipts.

Why use JobStreet Public Jobs Scraper?

  • Collect complete detail-page descriptions instead of abbreviated search cards.
  • Verify posting IDs, canonical URLs, titles, employers, and query relevance before output.
  • Search the configured JobStreet country site with bounded pagination and sequential detail requests.
  • Schedule runs, call the Actor through the Apify API, export datasets, and connect Apify integrations.

How to scrape JobStreet jobs

  1. Open the Actor input tab and choose a mode.
  2. Select the JobStreet country and enter a query and optional location.
  3. Keep maxItems and maxPages small for the first run.
  4. If the ordinary public page presents a denial, CAPTCHA, or security verification, stop; this Actor records SKIPPED and does not switch routes or identities.
  5. When ordinary public access is available, inspect the dataset plus RUN_SUMMARY, RUN_DIAGNOSTICS, and REQUEST_RECEIPTS.
  6. Download the data or use the API and integrations for automation.

Modes

  • search — one query and up to maxItems verified postings.
  • searchMultiple — up to five queries, with a bounded quota and stable deduplication per query.
  • single — one official /job/<id> or /job-details/<id> URL.
  • multiple — a bounded list of official detail URLs.
  • startUrls — official search and/or detail URLs.

Generated searches use the selected country subdomain (au, hk, id, my, nz, ph, sg, or th). Pagination is limited to maxPages 1–3, maxItems to 10, and each request to 5–45 seconds. Requests are sequential.

Input

See .actor/input_schema.json for the complete definition. A normal local search is:

{
"mode": "search",
"country": "my",
"query": "developer",
"location": "Kuala Lumpur",
"maxItems": 3,
"maxPages": 2,
"requestTimeoutSecs": 25
}

URL-list modes use objects, for example:

{
"mode": "multiple",
"urls": [
{ "url": "https://my.jobstreet.com/job/93421879" },
{ "url": "https://my.jobstreet.com/job/93421880" }
],
"maxItems": 2
}

Only HTTPS URLs on the official JobStreet country hosts are accepted. Posting IDs, canonical URLs, titles, employers, and search-query matches are verified before output.

What data can JobStreet Public Jobs Scraper extract?

FieldTypeDescription
jobIdstringVerified JobStreet posting identifier
jobTitlestringPublic job title
employerstringHiring organization
locationstringPublic advertised or structured location
descriptionstringComplete normalized detail text
employmentTypestringPublished employment type
salarystringPublished compensation text when available
publicUrlstringCanonical official posting URL
applicationUrlstringExplicit source application URL when published

How much will it cost to scrape JobStreet?

This Actor uses lightweight HTTP requests, so compute usage is normally modest. Cost depends on your Apify plan, selected memory, run duration, result limits, and detail-page count. When JobStreet exposes a challenge or denial, the run stops promptly without retries or alternate routes.

Output and run state

The strict output definition is .actor/dataset_schema.json. A record can contain the title, employer, company URL/logo, canonical URL, advertised and structured location, remote flag, salary, employment type, category, skills, dates, teaser/highlights, JSON-LD/public-detail description, sectioned responsibilities/qualifications/benefits, source-backed application URL, and verification/source receipts. Rows are emitted only after detail and canonical identity checks and at least 21 distinct, populated, source-grounded facts; IDs, URL-only values, aliases, metadata, and duplicate fact values do not count.

Optional values are omitted rather than emitted as null, blank, placeholder, or empty values. An application URL is copied only when an explicit source link is published; the canonical detail URL is never mislabeled as an application URL.

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. No live output example is included: this audit encountered a source-authored access challenge and emitted no records.

Run state is stored outside the job dataset:

  • RUN_SUMMARY — mode, counts, timing, request limits, and local-only provenance;
  • RUN_DIAGNOSTICS — target, transport, redirect, or parsing errors;
  • RUN_SKIPS — candidates rejected after verification;
  • RUN_HEALTH — quality and access-mode receipts;
  • REQUEST_RECEIPTS — one record per attempted request, including HTTP status or bounded visible challenge evidence.

RUN_SUMMARY.status is the platform outcome (SUCCEEDED or FAILED); resultStatus independently reports COMPLETE, LIMITED, SKIPPED, DEFERRED, NO_DATA, or FAILED. A handled source challenge is SUCCEEDED / SKIPPED and discards buffered jobs. Generic transport errors are DEFERRED, not access blocks. Verified rows already stored before a later non-block failure remain SUCCEEDED / LIMITED; a fatal zero-row failure writes its diagnostic to KVS and calls Actor.fail() as FAILED / FAILED.

Local development

The offline checks are npm test, node --check on the source files, and apify validate-schema. npm run lint is not currently configured for ESLint 9. A live Actor run is not qualified by this audit and must not be made while the source challenge remains. If ordinary access is independently available in a future audit, use a new actor-relative storage directory and --resurrect; never reuse a dataset directory or use --purge.

The validator accepts an isolated storage path, for example npm run validate -- storage-validation-jobstreet-<unique-suffix>. It checks output counts, official URL/ID consistency, duplicate IDs/URLs, recursive null/blank/placeholder/empty values, application provenance, KVS diagnostics, and request receipts.

FAQ, disclaimer, and support

Why is a run marked SKIPPED?

JobStreet returned a source-authored security-verification page on the public search URL during the 2026-09-24 Chrome check. Per the access policy, stop requests and do not retry, use a proxy, change identity or headers, switch routes, or solve the challenge. The current Actor audit is marked SKIPPED; there is no dataset or Actor request receipt from that Chrome-only observation.

Does this Actor collect applicant data?

No. It collects public job advertisements only and does not access candidate accounts or authenticated recruiting systems.

Our Actors are ethical and do not extract private user data. They only extract publicly available job information. Results can still contain personal data published in an advertisement. Personal data is protected by the GDPR in the European Union and by other regulations worldwide. Do not process personal data without a legitimate reason; consult your lawyers if you are unsure.

Use the Actor API tab for programmatic access and the Issues tab for support. Include a redacted input and run ID when reporting a reproducible problem.

Responsible use

Collect only public job information, respect JobStreet’s terms and robots directives, and use modest bounded limits. Do not use this Actor for authenticated pages, paywall or challenge bypassing, or collection of candidate or recruiter personal data. If the source presents an access barrier, stop and leave the Actor skipped.