Seek, JobStreet & JobsDB Scraper - Jobs Data of 8 Countries avatar

Seek, JobStreet & JobsDB Scraper - Jobs Data of 8 Countries

Pricing

from $2.50 / 1,000 jobs

Go to Apify Store
Seek, JobStreet & JobsDB Scraper - Jobs Data of 8 Countries

Seek, JobStreet & JobsDB Scraper - Jobs Data of 8 Countries

Extract jobs from Seek (🇦🇺AU/🇳🇿NZ), JobStreet (🇸🇬SG/🇲🇾MY/🇮🇩ID/🇵🇭 PH), and JobsDB (🇭🇰HK/🇹🇭TH). Extracts 40 fields: Job title & description, salaries, contact email/phone, company details, work type, work arrangement, classifications. 8 countries, one actor. $2.50/1K job listings.

Pricing

from $2.50 / 1,000 jobs

Rating

0.0

(0)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

0

Bookmarked

52

Total users

3

Monthly active users

0.85 hours

Issues response

5 days ago

Last modified

Share

Seek Scraper - Jobs in 8 Asia-Pacific Countries

Extract job listings from Seek (Australia, New Zealand), JobStreet (Singapore, Malaysia, Indonesia, Philippines), and JobsDB (Hong Kong, Thailand). Get 40 structured fields per job including salary ranges, full job description, contact email and phone, company profile with industry and perks, and employer screening questions. No code needed.


What data can you extract?

Every job listing returns up to 40 fields organized into these categories:

Job details title, id, teaser, description_full (plain text), description_html (original HTML), classifications (formatted array), classification, sub_classification, work_type, work_arrangement, bullet_points, is_featured, job_status (online/expired), content_hash (MD5 for change detection), listing_date

Salary salary_text, salary_min, salary_max, salary_currency, salary_period

Hidden salary band (optional, off by default) salary_hidden_min, salary_hidden_max, salary_hidden_type, salary_hidden_source, salary_hidden_note -- only present when you turn on revealHiddenSalary and a band was found for a job that shows no salary. See Hidden salary bands (optional).

Contact info contact_email, contact_phone — extracted from the job detail data. These are real, unobscured contact details when the employer provides them.

Employer employer_id, employer_questions — screening questions the employer asks applicants

Company profile company, company_logo_url, company_industry, company_size, company_description, company_perks, company_profile_url

Location location, locations (array of all locations), country, country_code, state

Meta source_url, source_platform, search_query, scraped_at


Pricing

EventCost
Actor start$0.001
Per job result$0.003
JobsCost
10$0.03
100$0.30
1,000$2.50
10,000$25.00

$2.50 per 1,000 jobs. Every result includes salary, company profile, contact info, and full description. No hidden fees, no monthly subscription.


Supported countries

CountryDomainPlatformCurrency
Australiaau.seek.comSeekAUD
New Zealandnz.seek.comSeekNZD
Hong Konghk.jobsdb.comJobsDBHKD
Singaporesg.jobstreet.comJobStreetSGD
Malaysiamy.jobstreet.comJobStreetMYR
Indonesiaid.jobstreet.comJobStreetIDR
Philippinesph.jobstreet.comJobStreetPHP
Thailandth.jobsdb.comJobsDBTHB

Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client -- Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.

Apify MCP server URL:

https://mcp.apify.com?tools=santamaria-automations/seek-scraper

Example prompts:

"Use seek-scraper to find remote Software Engineer jobs in Sydney, Australia. Return the top 20 as a table with title, company, salary, and work arrangement."

"Use seek-scraper with country=sg to search for Data Engineer jobs in Singapore."

"Search Seek NZ for Python developer jobs and compare salaries across New Zealand cities."


How to use

Go to the job site for your country, search by keywords, location and posting date, and paste the URL. Other filters in the URL (salary, work type, classification) are not applied. The country is auto-detected from the domain -- no need to set the country dropdown separately.

Australia example:

{
"searchUrls": ["https://au.seek.com/registered-nurse-jobs-in-Sydney"],
"maxResults": 50
}

New Zealand example:

{
"searchUrls": ["https://nz.seek.com/data-analyst-jobs-in-Auckland"],
"maxResults": 100
}

Singapore example:

{
"searchUrls": ["https://sg.jobstreet.com/python-developer-jobs"],
"maxResults": 100
}

2. Search Keywords

Enter one or more keywords. The scraper searches the selected country and returns matching jobs.

{
"country": "my",
"searchQueries": ["python developer", "data engineer"],
"maxResultsPerQuery": 100
}

3. Country selector

Pick a country from the dropdown and leave all other fields empty for a broad search of all jobs in that country.

{
"country": "hk",
"maxResults": 200
}

Mixing URLs from different countries

You can paste URLs from multiple countries in a single run. The scraper auto-detects the country from each URL domain.

{
"searchUrls": [
"https://au.seek.com/react-jobs-in-Sydney",
"https://sg.jobstreet.com/react-jobs",
"https://hk.jobsdb.com/react-jobs"
],
"maxResults": 200
}

4. Direct Job URLs (alive checks)

Paste individual job page URLs to check if they're still active and get the full job data. You get exactly one row per unique job (URL forms www.seek.com.au, au.seek.com, www.seek.co.nz, nz.seek.com, with or without query strings, are all accepted and de-duplicated by job id). Each row has the same fields as a search row (title, company, location, classification, work type, work arrangement, salary, teaser, listing date, country, ...) plus the full description, contact details and employer questions. job_status is online, expired (the ad was closed; metadata and description are still returned when Seek keeps them, a job id Seek no longer knows returns title [Expired/Not Found]) or unknown (the lookup failed, so nothing is claimed about the ad; these rows are not charged).

When you pass only directUrls the actor runs no search. maxResults and maxResultsPerQuery apply to search results only: every direct URL is always processed, and includeJobDetails does not affect direct URLs (they are always fully enriched). Each returned direct row is charged like a search row (job-result).

{
"directUrls": [
"https://www.seek.com.au/job/91878509",
"https://www.seek.com.au/job/50000000"
]
}

Perfect for monitoring job listings and detecting when positions are filled.

URL filters

The actor reads these parts of a pasted search URL: the keywords (from keywords= or the /python-developer-jobs path), the location (where= or the -jobs-in-Sydney path) and the date range. Every other URL parameter (salary range, work type, work arrangement, classification, sort) is ignored; use the sortBy input to choose the order.

FilterParameterExample
Keywordskeywords=python or /python-jobsPython jobs
Locationwhere=Sydney or /python-jobs-in-SydneyCity filter
Date rangedaterange=1/3/7/14/31Last 24h / 3d / 7d / 14d / 31d

Each country is searched in its own market: Singapore, Malaysia, Indonesia and the Philippines on JobStreet, Hong Kong and Thailand on JobsDB, with salaries in the local currency (SGD, MYR, IDR, PHP, HKD, THB).

Search URL examples by country:

{
"searchUrls": [
"https://au.seek.com/javascript-jobs?daterange=14",
"https://nz.seek.com/developer-jobs?daterange=7",
"https://sg.jobstreet.com/engineer-jobs?daterange=14",
"https://hk.jobsdb.com/developer-jobs?daterange=7",
"https://my.jobstreet.com/marketing-jobs",
"https://id.jobstreet.com/engineer-jobs?daterange=31",
"https://ph.jobstreet.com/nurse-jobs",
"https://th.jobsdb.com/developer-jobs"
],
"maxResults": 500
}

Note: Seek limits search results to 500 per unique filtered query (25 pages × 20 results). To get more results, use multiple filtered search URLs — for example, 10 different queries can return up to 5,000 results in a single run.


Input reference

FieldTypeDefaultDescription
countrystringauCountry to search: au, nz, hk, sg, my, id, ph, th. Auto-detected when using search URLs.
sortBystringnewestSort order: newest (by listing date, recommended for scheduled scrapes) or relevance (by keyword match).
searchUrlsstring[]--Pre-filtered search URLs from any supported domain. Country auto-detected.
searchQueriesstring[]--One or more search keywords (e.g. "python developer").
directUrlsstring[]--Individual job page URLs: alive check plus full enrichment, one row per unique job. Always all processed; no search runs when only direct URLs are given.
includeJobDetailsbooleantrueSearch results only: fetch detail pages for full description, contact email/phone, employer questions, and company profile. Direct URLs are always fully enriched.
revealHiddenSalarybooleanfalseOpt-in. Estimate a salary band for jobs that hide their salary (SEEK Australia and New Zealand, JobStreet Singapore, Malaysia, Indonesia and Philippines, JobsDB Thailand; ignored for JobsDB Hong Kong). Extra requests, extra per-job charge. See Hidden salary bands (optional).
maxConcurrencyinteger3Parallel detail fetches (1-10). Each worker uses its own proxy session.
maxResultsinteger10Total cap across all search queries and search URLs. Does not count direct URLs.
maxResultsPerQueryinteger100Max results per search URL or keyword.

Hidden salary bands (optional)

Many ads hide their salary. SEEK never shows it, but it does let you filter searches by salary, and an ad that hides its salary is still returned when the filter overlaps the range the advertiser entered. With revealHiddenSalary turned on, the actor uses that filter to work out a band for each job without a visible salary.

How it works. SEEK groups salaries into fixed buckets (SEEK AU/NZ, annual: under 30,000, then 30,000, 40,000, 50,000, 60,000, 70,000, 80,000, 100,000, 120,000, 150,000, 200,000, 250,000 and 350,000 and above; the Asia sites use their own monthly buckets in local currency). After each search query, the actor repeats that same search once per bucket and records which buckets each hidden-salary job shows up in. The band runs from the bottom of the lowest bucket to the top of the highest one. This is done once per query for all of its jobs, not once per job.

Output. salary_hidden_min and salary_hidden_max (in the job's currency; salary_hidden_max is left out when the top bucket is open ended), salary_hidden_type (annual on SEEK AU/NZ, where SEEK converts hourly and monthly pay to annual, so bands are annual equivalents; monthly on the Asia sites, in local currency), salary_hidden_source (filter_probe) and salary_hidden_note. These fields are left out for jobs with a visible salary, for jobs where no band was found, and for every job when the option is off.

Precision. The band has SEEK's bucket precision, not the advertiser's exact figures. Example: a New Zealand ad that hides its salary came back in the 60,000 and 70,000 buckets, so you get salary_hidden_min 60000 and salary_hidden_max 80000. The advertiser's real range lies inside that band.

Cost. Each search query needs about 13 extra search requests (more for large queries), so runs take a few seconds longer per query. Each job that gets a band is charged one extra per-job event (job-salary-band) on top of the normal result charge. Jobs without a band, and jobs with a visible salary, are not charged for it. With the option off, nothing changes: no extra requests and no extra charge.

Limits.

  • Supported sites: SEEK Australia and New Zealand (annual bands), JobStreet Singapore, Malaysia, Indonesia and Philippines and JobsDB Thailand (monthly bands, local currency). JobsDB Hong Kong is not supported yet. For unsupported countries the option is ignored and the log says so.
  • Direct Job URLs get a best-effort probe: the actor searches for the job by its title and location, and only jobs it finds that way get a band. Expect fewer bands than in search mode.
  • Very large queries are only probed as deep as the jobs the run actually returned (plus a small margin, at most 600 jobs per bucket). If SEEK blocks a probe request, that query gets no bands rather than a wrong one.
  • If the detail page turns out to show a salary after all, the band is dropped and not charged.

Output example

{
"id": "82345678",
"title": "Registered Nurse - Emergency Department",
"company": "St Vincent's Health Australia",
"company_logo_url": "https://image-service-cdn.seek.com.au/abc123_transformed.png",
"employer_id": "34567",
"company_industry": "Healthcare & Medical",
"company_size": "10,001+",
"company_description": "St Vincent's Health Australia is the nation's largest not-for-profit health and aged care provider...",
"company_perks": [
"Salary packaging benefits",
"Fitness Passport",
"Employee Assistance Program",
"Career development and training"
],
"company_profile_url": "https://www.seek.com.au/companies/st-vincents-health-australia-432871",
"location": "Sydney CBD, Inner West & Eastern Suburbs",
"country": "AU",
"country_code": "AU",
"state": "New South Wales",
"classification": "Healthcare & Medical",
"sub_classification": "Nursing - Emergency",
"salary_text": "$85,000 - $105,000 per year + salary packaging",
"salary_min": 85000,
"salary_max": 105000,
"salary_currency": "AUD",
"salary_period": "year",
"work_type": "Full time",
"work_arrangement": "On-site",
"teaser": "Join our award-winning Emergency Department team at St Vincent's Hospital Sydney...",
"description_full": "About the role\n\nWe are seeking an experienced Registered Nurse to join our Emergency Department...",
"description_html": "<div><h2>About the role</h2><p>We are seeking an experienced Registered Nurse to join our Emergency Department...</p></div>",
"contact_email": "nursing.recruitment@svha.org.au",
"contact_phone": "02 8382 1111",
"employer_questions": [
"Do you have current AHPRA registration as a Registered Nurse?",
"How many years of emergency nursing experience do you have?",
"Are you willing to work rotating shifts including nights and weekends?"
],
"bullet_points": [
"Competitive salary + salary packaging up to $15,900",
"Award-winning Level 1 Trauma Centre",
"Ongoing professional development and education"
],
"is_featured": false,
"listing_date": "2026-05-02T00:00:00Z",
"source_url": "https://www.seek.com.au/job/82345678",
"source_platform": "seek.com.au",
"search_query": "registered nurse",
"scraped_at": "2026-05-04T14:30:00.000Z"
}

Use cases

Salary benchmarking across Asia-Pacific Compare salaries for the same role across 8 countries. Run "data engineer" searches in AU, SG, HK, and MY to see how compensation varies across the region.

Recruitment and talent sourcing Feed job listings into your CRM, ATS, or spreadsheet via Apify's API, webhooks, or integrations. Use contact_email and contact_phone to reach hiring managers directly.

Market research and hiring trends Track which skills and technologies are in demand across Asia-Pacific. Search for "kubernetes", "react", or "machine learning" across all 8 countries.

Competitor intelligence Monitor competitor hiring activity across multiple markets. Track when companies expand into new countries by watching their job postings.

Work arrangement analysis Use the work_arrangement field (Remote/Hybrid/On-site) to analyze flexible work trends across countries and industries.


Speed

JobsDetails OFF (fast)Details ON (full)
10~1 second~4 seconds
50~4 seconds~15 seconds
100~7 seconds~30 seconds
500~38 seconds~3 minutes

Details OFF returns SERP data: title, company, salary, location, work type, teaser, bullet points. Details ON adds: full description, contact email/phone, employer questions, company profile (industry, size, perks), content hash.

Field availability by mode

FieldsSearch (fast)Search + DetailsDirect URLs
Title, company, salary, location✅✅✅
Classification, work type/arrangement✅✅✅
Teaser, bullet points, listing date✅✅✅
Full description (text + HTML)—✅✅
Contact email & phone—✅✅
Employer questions—✅✅
Company industry, size, perks—✅✅
Content hash (change detection)—✅✅
Job status (online/expired)onlineonline✅

Integrations

This actor works with all Apify integrations:

  • API -- trigger runs and download results programmatically
  • Webhooks -- get notified when a run completes
  • Zapier & Make -- connect to 5,000+ apps
  • Google Sheets -- export directly to a spreadsheet
  • Slack, Email -- get notifications with results


Something not working? Create an issue and we will fix it fast.