JobStreet Singapore Jobs Scraper
Pricing
Pay per event
JobStreet Singapore Jobs Scraper
Extract public JobStreet Singapore vacancies with employer, salary, location, work arrangement, classification, listing date, description, and canonical URL data. Export to JSON, CSV, or Excel and schedule recurring searches.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Collect fresh JobStreet Singapore job listings without a login or API key. Search by role, skill, employer keyword, location, classification, work type, salary availability, or listing age. Export clean vacancy data to JSON, CSV, Excel, XML, or RSS for recruiting and labour-market workflows.
- 🔎 Search multiple roles in one run.
- 💰 Capture published salary labels and parsed salary ranges.
- 🏢 Identify employers that are actively hiring.
- 📍 Compare vacancies across Singapore locations.
- ⏱️ Sort newest first and schedule recurring searches.
Try JobStreet Singapore Jobs Scraper on Apify.
What does JobStreet Singapore Jobs Scraper do?
JobStreet Singapore Jobs Scraper extracts public vacancy cards from sg.jobstreet.com. It turns changing search pages into a stable dataset with job IDs, titles, employers, salary signals, work arrangements, classifications, dates, descriptions, and canonical links.
The Actor is explicitly Singapore-only. It does not silently mix Malaysia, Indonesia, the Philippines, or other SEEK markets into your results. No JobStreet account, employer account, private credential, or paid API is required.
The extractor uses JobStreet's public structured search surface instead of rendering a heavy browser for every page. That makes scheduled searches faster and keeps platform costs predictable.
Who is this JobStreet jobs scraper for?
Recruiters and staffing teams
- Build role-specific candidate sourcing lists from current openings.
- Discover employers with fresh hiring demand.
- Track contract, full-time, part-time, hybrid, remote, or on-site demand.
Sales and lead-generation teams
- Treat a new vacancy as a verified hiring-intent signal.
- Route employers to HR software, payroll, staffing, training, or IT-service campaigns.
- Export company names and vacancy context to a CRM enrichment workflow.
Job aggregators and newsletter operators
- Collect canonical JobStreet links for a Singapore niche board.
- Power daily or weekly vacancy newsletters.
- Deduplicate feeds with the stable
jobIdfield.
Labour-market and compensation analysts
- Compare published salary ranges by role and classification.
- Measure location and work-arrangement trends.
- Monitor listing velocity with newest-first scheduled searches.
Why use this Actor?
- ✅ Live source data — records come from JobStreet Singapore's current search index.
- ✅ No login — no account, cookies, or private token to maintain.
- ✅ Singapore scope — every canonical URL uses
sg.jobstreet.com. - ✅ Structured salaries — keep the original label plus numeric min/max when parseable.
- ✅ Source taxonomy — retain JobStreet classification and subclassification IDs.
- ✅ Low overhead — structured requests avoid browser rendering.
- ✅ Streaming output — jobs appear in the dataset as they are found.
- ✅ Automation ready — use schedules, webhooks, API clients, Make, Zapier, or MCP.
What JobStreet Singapore data can you extract?
| Data group | Fields | Example |
|---|---|---|
| Identity | jobId, title, url, roleId | Software Engineer |
| Employer | companyName, companyId | Example Pte Ltd |
| Location | location, country, searchLocation | Central Region, Singapore |
| Salary | salaryLabel, salaryMin, salaryMax, salaryCurrency, salaryPeriod | $4,000–$5,500 per month |
| Work | workTypes, workArrangements | Full time, Hybrid |
| Taxonomy | classification, subClassification, IDs | ICT, Engineering - Software |
| Freshness | listingDate, listingAge, scrapedAt | 2026-07-17T08:00:00Z |
| Content | description, bulletPoints, tags | Public search-card summary |
| Advertising | isFeatured, jobAdType | false, ORGANIC |
| Traceability | searchTerm, searchLocation | data engineer, Jurong |
JobStreet fields are employer-entered. Some employers do not publish a salary, work arrangement, highlight, or company identifier. The Actor preserves available data and does not invent missing values.
How much does it cost to scrape JobStreet Singapore jobs?
This Actor uses pay-per-event pricing. A small start event covers setup, then each unique saved vacancy is charged once. Apify platform usage is included in the event price.
| Charge | Free | Starter | Scale | Business |
|---|---|---|---|---|
| Run start | $0.005 | $0.005 | $0.005 | $0.005 |
| Per saved job | $0.00003466 | $0.000030139 | $0.000023509 | $0.000018084 |
| 1,000 jobs plus start | $0.03966 | $0.03514 | $0.02851 | $0.02308 |
Platinum and Diamond plans receive additional volume discounts. Final live prices are shown in the Apify Console before every run. With Apify's free monthly credits, you can test a small targeted search before scaling.
How to scrape JobStreet Singapore jobs
- Open JobStreet Singapore Jobs Scraper.
- Enter one or more roles, skills, or employer keywords in Search terms.
- Optionally add Singapore locations or numeric JobStreet classification IDs.
- Choose newest-first or keyword relevance ordering.
- Set a small Maximum jobs value for your first run.
- Click Start and inspect results in the Dataset tab.
- Export the dataset or connect it to your downstream workflow.
A small role search:
{"searchTerms": ["software engineer"],"maxItems": 25,"sortBy": "ListedDate"}
A salary research search:
{"searchTerms": ["data engineer"],"classificationIds": ["6281"],"onlyWithSalary": true,"maxItems": 100}
A fresh-vacancy search:
{"searchTerms": ["accountant", "finance manager"],"locations": ["Central Region"],"postedWithinDays": 3,"sortBy": "ListedDate","maxItems": 250}
Input parameters
| Parameter | Type | Default | Purpose |
|---|---|---|---|
searchTerms | string[] | ["software engineer"] | Job titles, skills, or employer keywords; 1–20 values |
locations | string[] | [] | Optional Singapore location text; up to 10 values |
classificationIds | string[] | [] | Numeric JobStreet classification IDs |
workTypes | string[] | [] | Full time, Part time, Contract/Temp, or Casual/Vacation |
onlyWithSalary | boolean | false | Keep only jobs with a published salary label |
postedWithinDays | integer | 0 | Keep jobs from the last 0–31 days; 0 means any age |
sortBy | string | ListedDate | ListedDate or KeywordRelevance |
maxItems | integer | 50 | Maximum unique jobs to save; 1–10,000 |
Invalid classification IDs and unsupported work types fail closed with a clear error. The maximum applies across all search term and location combinations, not separately to each query.
JobStreet classification IDs
JobStreet uses numeric classifications for broad job families.
For example, 6281 represents Information & Communication Technology in current search responses.
Classifications can change upstream, so keep the human-readable classification field in your data warehouse as well as the ID.
Use a classification with a broad keyword when you need sector coverage. Use a precise keyword without a classification when you need role coverage across sectors. Combining both is the narrowest option.
Output example
{"jobId": "93403990","title": "R&D AI Software Development Engineer","companyName": "Keysight Technologies Singapore (Sales) Pte. Ltd.","companyId": "61548142","location": "Singapore","country": "Singapore","salaryLabel": "$4,000 – $5,500 per month","salaryMin": 4000,"salaryMax": 5500,"salaryCurrency": "SGD","salaryPeriod": "month","workTypes": ["Full time"],"workArrangements": ["On-site"],"classification": "Information & Communication Technology","subClassification": "Engineering - Software","listingDate": "2026-07-17T16:07:11Z","listingAge": "12m ago","description": "Contribute to AI-assisted engineering workflows...","isFeatured": false,"searchTerm": "software engineer","url": "https://sg.jobstreet.com/job/93403990","scrapedAt": "2026-07-17T16:20:00.000Z"}
Arrays remain arrays in JSON exports. CSV and Excel exports flatten them according to Apify's dataset export options.
Tips for better JobStreet results
- 🎯 Start with one precise role and 10–50 jobs.
- 🕒 Use
ListedDatewithpostedWithinDaysfor recurring monitoring. - 💰 Enable
onlyWithSalaryfor cleaner compensation studies. - 📍 Avoid combining too many terms and locations in one run.
- 🧩 Store
jobIdas your durable deduplication key. - 🔄 Schedule at a cadence that matches the freshness you need.
- 📊 Keep both the original salary label and parsed numeric fields.
- 🏷️ Use source classifications rather than inferring a sector from title alone.
Automate fresh vacancy monitoring
Create an Apify Schedule with newest-first sorting and a short listing window.
After each run, compare jobId values with your database or use a dataset webhook.
This produces a simple fresh-hiring feed without repeatedly processing old listings downstream.
Example daily monitor input:
{"searchTerms": ["cyber security", "cloud engineer"],"postedWithinDays": 2,"sortBy": "ListedDate","maxItems": 200}
Integrations
JobStreet → Google Sheets
Export new employer and salary records to a sheet for recruiter review.
Add a unique constraint on jobId to avoid duplicate rows.
JobStreet → Slack or Discord
Use an Apify webhook and Make to post newly discovered vacancies into a role-specific channel. Include title, company, salary, arrangement, and canonical URL.
JobStreet → HubSpot or Salesforce
Treat an employer's fresh vacancy as a hiring-intent signal. Create or enrich the company record and attach the role context.
JobStreet → warehouse
Schedule searches and load JSON results into BigQuery, Snowflake, PostgreSQL, or a lakehouse. Track listing counts and salary medians over time.
JobStreet → Zapier or Make
Trigger routing, email alerts, ATS imports, spreadsheet updates, or internal review queues without writing code.
Use the Apify API with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/jobstreet-singapore-jobs-scraper').call({searchTerms: ['data analyst'],postedWithinDays: 7,maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Use the Apify API with Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/jobstreet-singapore-jobs-scraper').call(run_input={'searchTerms': ['data analyst'],'postedWithinDays': 7,'maxItems': 100,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use the Apify API with cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~jobstreet-singapore-jobs-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchTerms":["data analyst"],"postedWithinDays":7,"maxItems":100}'
Fetch dataset items after the run succeeds:
$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true&format=json"
Use with AI agents via MCP
Connect this Actor to Claude Code with the hosted Apify MCP server:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/jobstreet-singapore-jobs-scraper"
For Claude Desktop, Cursor, or VS Code, add:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/jobstreet-singapore-jobs-scraper"}}}
Your client will ask you to authenticate with Apify.
Example prompts:
- “Use
automation-lab/jobstreet-singapore-jobs-scraperto find 30 new Singapore data-engineering jobs.” - “Find JobStreet Singapore cybersecurity roles with published salaries and group them by employer.”
- “Collect fresh hybrid software jobs in Central Region and prepare a recruiter briefing.”
Data quality and limitations
JobStreet controls source availability and field coverage.
An employer may omit salary, arrangement, highlights, or company metadata.
The description field is the public description excerpt shown in JobStreet search results; it is not represented as full job-page HTML.
Salary parsing is conservative.
When a label is unparseable, the original salaryLabel remains available and numeric fields are omitted.
The Actor never converts an unknown salary period or currency into a guessed value.
A search that genuinely has no matches succeeds with an empty dataset. A source request failure is retried and a complete extraction failure exits non-zero.
Is it legal to scrape JobStreet Singapore?
This Actor collects publicly available job-listing information. Scraping public data is generally permitted in many jurisdictions, but your use case and location may impose additional obligations. Review JobStreet's terms, copyright rules, database rights, and applicable privacy law before running at scale.
Do not use the Actor to collect private profiles, bypass authentication, send spam, discriminate in employment, or republish protected content without permission. Store only the data you need, honour deletion requests where applicable, and use conservative schedules. You are responsible for ensuring that your use is lawful.
Frequently asked questions
Does this Actor need a JobStreet login or API key?
No. It reads the public Singapore vacancy search surface and requires no JobStreet credentials.
Does it scrape JobStreet Malaysia or other countries?
No. Version 1 is intentionally limited to JobStreet Singapore and canonical sg.jobstreet.com jobs.
How fast is it?
Small searches usually complete in seconds because the Actor does not render a browser. Runtime grows with the number of search combinations and jobs requested.
Why is a salary missing?
Many employers do not publish salary data.
Enable onlyWithSalary when your workflow requires a disclosed salary.
Why are numeric salary fields missing even when salaryLabel exists?
The original label may use an unusual format. The parser fails closed instead of inventing numbers; use the label for manual or custom parsing.
Why did my search return no jobs?
The combination of keyword, location, classification, date, salary, and work type may be too narrow. Remove one filter at a time and retry with a low limit.
Can I use the Actor as a monitor?
Yes. Schedule newest-first searches with a short postedWithinDays window and deduplicate downstream by jobId.
How is this different from a generic web scraper?
The Actor understands JobStreet's fields, Singapore scope, taxonomy, salary labels, work arrangements, pagination, and canonical job IDs.
Related job scrapers
Build a broader hiring-data workflow with other automation-lab Actors:
- MyCareersFuture Singapore Jobs Scraper
- LinkedIn Jobs Scraper
- Google Jobs Scraper
- Greenhouse Jobs Scraper
- Workday Jobs Scraper
- Multi ATS Jobs Scraper
Support
If a run fails, open an issue from the Actor's Apify Store page. Include the run URL, a redacted input example, the expected result, and what happened instead. Do not include private tokens or personal data.
For reproducible results, first retry with one search term and maxItems: 10.
That gives support a bounded case to investigate while protecting your budget.