JobStreet Singapore Scraper — Jobs, Salaries & Leads avatar

JobStreet Singapore Scraper — Jobs, Salaries & Leads

Pricing

$4.00 / 1,000 job scrapeds

Go to Apify Store
JobStreet Singapore Scraper — Jobs, Salaries & Leads

JobStreet Singapore Scraper — Jobs, Salaries & Leads

Scrape JobStreet Singapore (sg.jobstreet.com). Get salary ranges, work type & arrangement (on-site/hybrid/remote), classification, company, full job descriptions and recruiter contact — turning postings into hiring-intent leads. Monitor mode emits only new or changed jobs. No login, no API key.

Pricing

$4.00 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

Scrape Sage

Scrape Sage

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

JobStreet Singapore Scraper — Jobs, Salaries, Skills & Company Leads

Extract complete job data from JobStreet Singapore — the country's largest commercial job board (on the SEEK platform). Get every field that matters: salary ranges, work type and arrangement (on-site / hybrid / remote), classification, company, and the full job description — plus, for lead generation, the advertiser, employer verification badge, and recruiter phone number when published.

No login, no cookies, no browser, no API key — fast JSON extraction straight from JobStreet's public search and GraphQL APIs, with monitor mode to capture only newly-posted or changed jobs on a schedule.

Why this JobStreet scraper?

Most job scrapers grab the listing card and stop, or return one stale aggregator feed without salaries or descriptions. This actor reads JobStreet's live search API and enriches each posting through its GraphQL job API — so you get the richest JobStreet Singapore dataset in the category, with parsed salaries, full descriptions, and the employer turned into a lead.

DataTypical job scrapersThis actor
Job title, company, location, listed date
Salary parsed to min/max + period + currency❌ raw text or null✅ when published
Work type (Full/Part time, Contract…)partial
Work arrangement (on-site / hybrid / remote)
Classification + sub-classification
Full job description (HTML and plain text)partial
Advertiser + employer verification badge
Recruiter phone number (lead gen)✅ when published
Expiry date, posting status, ad type (organic/sponsored)
Company profile URL + logo
Monitor mode — only new & changed jobs
No start fee

Use cases

  • Recruitment & sourcing intelligence — track who's hiring across Singapore's largest commercial board, with salaries, work arrangement and full descriptions in one clean feed.
  • Lead generation — a new posting is a buying signal. Capture the advertiser, company page and (when published) the recruiter phone number; target agencies and employers for HR-tech, staffing, training, payroll or recruitment outreach.
  • Salary & compensation benchmarking — parse published salary ranges by role, classification, work type and arrangement. Turn on Only jobs with a salary for clean benchmarking datasets.
  • Labour-market research — analyse hiring velocity, remote/hybrid mix, and in-demand categories across Singapore.
  • Job boards & aggregators — power a niche site with fresh, structured, deduplicated postings — salaries and descriptions included.

How to use

  1. Sign up for Apify — the free plan is enough to try this actor.
  2. Open the JobStreet Singapore Scraper, enter search terms (e.g. data engineer, nurse) and any filters, and click Start.
  3. Watch results stream into the dataset table — one clean row per job.
  4. Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.

Input

{
"searchTerms": ["data engineer", "accountant"],
"classifications": ["6281"],
"workTypes": ["Full time"],
"salaryMin": 4000,
"onlyWithSalary": false,
"sortBy": "ListedDate",
"postedWithinDays": 7,
"includeJobDetails": true,
"maxItems": 500,
"monitorMode": false
}
  • searchTerms — keywords, each searched separately. Leave empty to scrape all live Singapore jobs (narrow with filters and limits).
  • startUrls — paste JobStreet job URLs (https://sg.jobstreet.com/job/12345678) to scrape specific postings, or search URLs to reuse their keyword.
  • classifications — optional JobStreet classification IDs (e.g. 6281 ICT, 1209 Engineering, 1203 Accounting); see the field hint for the full list.
  • workTypes — keep only these work types (Full time, Part time, Contract/Temp, Casual/Vacation). Applied by the actor with loose matching, so Contract also matches Contract/Temp.
  • salaryMin — minimum monthly salary in SGD (applied to published salaries).
  • onlyWithSalary (default false) — drop postings without a published salary (~40–45% of JobStreet SG jobs show one).
  • sortBy (default ListedDate) — newest first (best for monitoring) or KeywordRelevance.
  • postedWithinDays (default 0 = no limit) — only jobs listed within the last N days; also stops pagination early for fast, cheap incremental runs.
  • includeJobDetails (default true) — fetch each job's GraphQL detail for the full description, exact salary, advertiser verification, status, expiry date and recruiter phone. Adds one request per job.
  • maxItems / maxItemsPerSearch (default 0 = no limit) — caps for test runs or budget control.
  • monitorMode (default false) — emit only new or changed jobs since the last run (see below).
  • dedupStoreName (default jobstreet-sg-state) — named store holding the monitor state.
  • proxyConfiguration — proxy settings (default Apify Proxy; residential is not needed).

Output

One clean record per job:

{
"jobId": "92698989",
"title": "Accounts Executive (Full Sets / Shipping)",
"url": "https://sg.jobstreet.com/job/92698989",
"teaser": "Handle finance analysis, budgeting, audit checks and vessel-related documentation…",
"abstract": "Handle finance analysis, budgeting, audit checks, accounting records…",
"descriptionHtml": "<ul><li><p><strong>Position : Accounts Executive…</strong></p></li>…</ul>",
"descriptionText": "Position : Accounts Executive (Full Sets / Shipping)\nLocation : Orchard…",
"companyName": "Search Personnel Pte Ltd",
"companyUrl": "https://sg.jobstreet.com/companies/search-personnel-168551...",
"advertiserName": "Search Personnel Pte Ltd",
"advertiserIsVerified": true,
"recruiterPhone": "+65 6...",
"salaryLabel": "$4,000 – $4,500 per month",
"salaryMin": 4000,
"salaryMax": 4500,
"salaryPeriod": "month",
"salaryCurrency": "SGD",
"workTypes": ["Full time"],
"workArrangements": ["On-site"],
"classification": "Accounting",
"subClassification": "Accounts Officers/Clerks",
"bulletPoints": ["5-day work week", "Career progression"],
"location": "Orchard, Central Region, SG",
"region": "Central Region",
"country": "Singapore",
"listingDate": "2026-06-12T14:13:52Z",
"expiryDate": "2026-07-13T13:59:59.999Z",
"status": "Active",
"isExpired": false,
"jobAdType": "ORGANIC",
"isFeatured": false,
"logoUrl": "https://bx-branding-gateway.cloud.seek.com.au/...jdpLogo",
"searchTerm": "accountant",
"scrapedAt": "2026-06-12T17:00:53.690Z"
}

What to expect (field coverage)

JobStreet is employer-entered data, so several fields appear only when the employer published them.

Field groupAlways presentPresent when published
IdentityjobId, title, url, listingDateteaser, bulletPoints
SalarysalaryLabel/Min/Max parsedshown on ~40–45% of postings (the rest hide it)
Classificationclassification, subClassification
WorkworkTypesworkArrangements (on-site/hybrid/remote)
Job details (with includeJobDetails)descriptionHtml, descriptionText, status, expiryDateabstract, advertiserIsVerified, recruiterPhone
CompanycompanyName, companyUrl, advertiserNamelogoUrl, companyId
Locationlocation, countryregion (when the label includes a region)

A blank field means the employer didn't publish it — never that scraping failed. Nothing is dropped, so you always get the richest record available.

Monitor only new & changed jobs

Turn on monitorMode and the actor saves a fingerprint of every job it has seen in a named key-value store (dedupStoreName), then on each later run emits only jobs that are new or have changed — tagged with monitorStatus:

  • new — a posting not seen before.
  • salary_change — the salary changed (with previousSalaryLabel).
  • updated — the job was relisted / its listing date changed.

The first run emits everything (and seeds the state); subsequent runs emit only the delta. Combined with a daily Schedule, you get a clean feed of just the new Singapore roles for your search — perfect for hiring-signal alerts and job-board ingestion.

  • Monitor mode is the actor's own dedupe layer — it complements, and does not conflict with, Apify Schedules (a cron trigger) or the Console Monitoring tab (charts & alerts). The Schedule triggers the run; monitor mode decides what's worth saving.
  • Use a distinct dedupStoreName per independent monitor so their states don't mix.
  • If you schedule frequent runs, enable the Schedule's exclusive option so a new run doesn't start before the previous one finishes writing its state.
  • Heads-up: a quiet run legitimately returns 0 items, which can trip a Console Monitoring "results lower than N" alert — expected behaviour, not an error.

Automate & schedule

Run this actor on autopilot and pull results into your own stack:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });
const run = await client.actor('scrapesage/jobstreet-singapore-scraper').call({
searchTerms: ['data engineer'],
onlyWithSalary: true,
postedWithinDays: 7,
monitorMode: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} new Singapore jobs`);

Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

  • Make — multi-step automation scenarios.
  • Zapier — push new job postings or leads straight into your ATS, CRM, or spreadsheet.
  • Slack — get notified when a monitored search finds new roles.
  • Google Drive / Sheets — auto-export every run to a spreadsheet.
  • Airbyte — pipe results into your data warehouse.
  • GitHub — trigger runs from commits or releases.

Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "find Singapore accounting jobs paying over $5k and list the companies and salaries" and let it run the scraper for you.

More scrapers from scrapesage

Build a complete Singapore hiring-intelligence & lead-gen stack:

Tips

  • Newest-first + postedWithinDays is the cheapest way to track a market: results are sorted newest-first, so the actor stops paginating once it passes your date window.
  • Listing-only, faster runs: set includeJobDetails: false to skip the per-job detail call — you still get salary, work type/arrangement, classification, company and location from the listing, at a fraction of the cost. Turn it on for full descriptions and recruiter contacts.
  • Salary benchmarking: combine onlyWithSalary: true with a classification to build a clean compensation dataset for a sector.
  • Big pulls: JobStreet lists ~60,000+ live Singapore jobs. Use searchTerms, classifications and limits to focus a run.
  • Recurring monitoring: combine monitorMode with Schedules and a webhook to push new roles into your CRM the moment they appear.

FAQ

How do I scrape jobs for a specific role or sector? Put keywords in searchTerms and/or pick classifications, workTypes and salaryMin. You can also paste a JobStreet job URL into startUrls to scrape a specific posting.

Does it need a JobStreet API key or login? No. This actor reads the same public search and GraphQL APIs that power sg.jobstreet.com — no key, cookie or login required.

Why do some jobs have no salary? JobStreet lets employers hide salary, so roughly 40–45% of Singapore postings show a range. When a salary is published, it's parsed into salaryMin, salaryMax, salaryPeriod and salaryCurrency. Use onlyWithSalary to keep only jobs that show one.

Where does the recruiter phone come from? From the job's own detail page, where some advertisers (especially recruitment agencies) publish a contact number. It's captured with includeJobDetails on, and is blank when the advertiser didn't publish it.

Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.

How do I monitor new jobs automatically? Turn on monitorMode, create a Schedule (e.g. daily), and optionally add a webhook or Zapier zap to push new postings into your CRM as they appear.

Is scraping JobStreet legal? This actor collects publicly available data only. You're responsible for using the data in compliance with applicable laws (e.g. Singapore's PDPA for personal data) and JobStreet's terms.

Need help?

Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests — more filters, more fields — are welcome; this actor is actively maintained.