JobStreet Scraper
Pricing
Pay per usage
JobStreet Scraper
A simple and lightweight scraper for Jobstreet, designed to quickly extract essential job posting data. It provides a clean, minimal set of columns for easy integration. Important: For a smooth and reliable run, this actor requires the use of residential proxies.
Pricing
Pay per usage
Rating
5.0
(2)
Developer

Shahid Irfan
Actor stats
1
Bookmarked
31
Total users
6
Monthly active users
3 days ago
Last modified
Categories
Share
JobStreet Jobs Scraper
Extract JobStreet job listings from Malaysia, Singapore, Philippines, and Indonesia in a structured format. Collect job titles, companies, salary details, classifications, posting timestamps, and detailed descriptions for market research, recruitment intelligence, and job trend monitoring.
Features
- Multi-country coverage — Scrapes MY, SG, PH, and ID JobStreet sites.
- Flexible search modes — Use
startUrldirectly or build searches from keyword and location. - Rich job records — Includes core fields, posting metadata, and API-level attributes.
- Pagination support — Continues across result pages until your limit is reached.
- Configurable collection size — Control run size with
results_wanted. - Proxy-ready runs — Supports standard Apify proxy configuration for reliability.
Use Cases
Hiring Intelligence
Track active roles by company, location, and work type to benchmark recruitment activity in your target market.
Job Market Research
Analyze salary visibility, job volume, and posting freshness across countries and industries.
Lead Generation
Build targeted employer and vacancy datasets for staffing outreach and sales prospecting.
Trend Monitoring
Schedule recurring runs to monitor changes in role demand, classifications, and posting cadence.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrl | String | No | — | Full JobStreet search URL to scrape directly. |
keyword | String | No | "developer" | Search keyword used when startUrl is not provided. |
location | String | No | — | Location filter used with keyword search. |
country | String | No | "my" | Country site: my, sg, ph, id. |
posted_date | String | No | "anytime" | Date filter: anytime, 24h, 7d, 30d. |
results_wanted | Integer | No | 20 | Maximum jobs to collect (primary limit). |
proxyConfiguration | Object | No | {"useApifyProxy":false} | Optional proxy settings (enable if you need extra reliability). |
Output Data
Each dataset item can include:
| Field | Type | Description |
|---|---|---|
id | String | Job ID extracted from listing URL. |
url | String | Job detail URL. |
title | String | Job title. |
company | String | Hiring company name. |
location | String | Job location. |
salary | String | Salary text when available. |
workType | String | Employment/work type label. |
classification | String | Job classification/category label. |
postedAt_iso | String | ISO timestamp of posting time. |
subClassification | String | Job sub-classification label when available. |
teaser | String | Short summary text for the role. |
bulletPoints | Array | Highlight bullets when available. |
workArrangements | Array | Work arrangement tags when available. |
isFeatured | Boolean | Whether listing is featured. |
isPremium | Boolean | Whether listing is premium. |
tags | Array | Additional listing tags when available. |
description_html | String | Job description HTML extracted from job detail page embedded data (with JSON-LD fallback). |
description_text | String | Plain-text description derived from description_html. |
source | String | Source marker for dataset lineage. |
list_url | String | Listing URL where the job was found. |
scrapedAt | String | ISO timestamp when item was scraped. |
Usage Examples
Basic Search
{"keyword": "data analyst","location": "Malaysia","results_wanted": 20}
Country-Specific Search
{"keyword": "software engineer","location": "Singapore","country": "sg","posted_date": "7d","results_wanted": 40}
Direct URL Mode
{"startUrl": "https://my.jobstreet.com/developer-jobs/in-Malaysia","results_wanted": 30}
Sample Output
{"id": "90123456","url": "https://my.jobstreet.com/job/90123456","title": "Senior Software Engineer","company": "Example Tech Sdn Bhd","location": "Kuala Lumpur, Malaysia","salary": "RM 8,000 - RM 12,000 per month","workType": "Full time","classification": "Information & Communication Technology","subClassification": "Developers / Programmers","postedAt_iso": "2026-02-26T03:12:11.000Z","teaser": "Build and scale backend services for regional products.","bulletPoints": ["Node.js and TypeScript","AWS and CI/CD"],"workArrangements": ["Hybrid"],"isFeatured": true,"isPremium": false,"tags": ["backend","cloud"],"description_html": "<p>Build and maintain scalable backend services...</p>","description_text": "Build and maintain scalable backend services...","source": "jobstreet_api","list_url": "https://my.jobstreet.com/software-engineer-jobs/in-Kuala-Lumpur","scrapedAt": "2026-02-28T12:22:07.331Z"}
Tips for Best Results
Start Small
- Begin with
results_wanted: 20for quick validation. - Increase limits only after confirming output quality.
Prefer Specific Queries
- Use precise keywords and locations to improve relevance.
- Apply
posted_dateto focus on recent roles.
Use Reliable Proxies
- Enable residential proxies if you hit blocking on larger runs.
- Keep concurrency moderate for consistent completion.
Integrations
Connect output data with:
- Google Sheets — Analyze hiring trends and role volume.
- Airtable — Build searchable job intelligence databases.
- Make — Automate downstream enrichment workflows.
- Zapier — Trigger alerts and notifications.
- Webhooks — Send run results to your internal systems.
Export Formats
- JSON — API-ready structured output.
- CSV — Spreadsheet analysis.
- Excel — Business reporting.
- XML — System interoperability.
Frequently Asked Questions
How many jobs can I collect per run?
You can collect as many as available, controlled by results_wanted.
Does it support multiple countries?
Yes. Set country to my, sg, ph, or id for keyword/location searches.
Can I use my own JobStreet search URL?
Yes. Provide startUrl and the actor will scrape from that URL directly.
Why are some fields sometimes empty?
Some listings do not expose all attributes (for example salary or classification), so those fields may be null.
How do I improve run reliability?
Keep request limits practical, and enable residential proxies in proxyConfiguration only when needed.
Support
For issues or feature requests, use the Apify Console issue/support channels.
Resources
Legal Notice
This actor is intended for legitimate data collection use cases. You are responsible for complying with website terms and applicable laws in your jurisdiction.


