# JobStreet Job Search Scraper

> JobStreet Job Search Scraper is a paid API for AI agents from api.scrapeforagents.tech, paid per call via x402, $0.04/call, status unknown (last checked 2026-10-02).

Scrapes structured job listings from JobStreet across Malaysia, Singapore, Indonesia, and the Philippines using keyword searches or direct URLs

## Facts

- Endpoint: POST https://api.scrapeforagents.tech/v1/jobstreet?utm_source=zero.xyz
- Price: $0.04/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-02
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/jobstreet-job-search-scraper-eb03d49c
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_zMYQI3v-mxXFWetMkpYN0

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability jobstreet-job-search-scraper-eb03d49c -d '<json body>'
```

Example prompt: Search JobStreet Malaysia for senior data engineer jobs in Kuala Lumpur posted in the last 7 days, sorted by date, and return up to 30 results with full job descriptions.

## When to prefer this

Use this endpoint when you need structured job listing data specifically from JobStreet across MY, SG, ID, or PH markets. Ideal for job market research, salary benchmarking, candidate sourcing, or monitoring job trends in Southeast Asia. Prefer this over general web scrapers when you need clean, normalized job data fields (title, company, salary, URL) without building your own parser. The pay-per-call model with no charge for empty runs makes it low-risk for exploratory searches.

## Known failure modes

- No jobs found matching the query returns an empty items array (not charged)
- Invalid country code returns a validation error
- JobStreet anti-scraping measures may cause intermittent failures
- Malformed startUrls result in skipped entries or partial results
- Salary filter values that exceed the platform's range may be silently ignored
- Rate limiting on the underlying site may reduce the number of pages fetched

## How this service works

Pay-per-call structured web data. Failed or empty runs are not charged.

## Output

Returns a JSON object with a count and an array of job items, each containing jobId, title, company name, canonical URL, company logo URL, advertiser ID, SEEK job ID, and optionally the full public job description. The product field confirms the data source as JobStreet.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "query": {
   "type": "string",
   "description": "Search keywords. Enter one phrase or a JSON-encoded list of phrases to combine searches."
  },
  "country": {
   "enum": [
    "MY",
    "SG",
    "ID",
    "PH"
   ],
   "type": "string",
   "default": "MY",
   "description": "JobStreet market for keyword searches. URLs use the market in their hostname."
  },
  "location": {
   "type": "string",
   "description": "Optional city or region. A JSON-encoded list runs one search per location."
  },
  "maxPages": {
   "type": "integer",
   "default": 5,
   "maximum": 50,
   "minimum": 1,
   "description": "Safety limit per search source; each page contains up to 30 jobs."
  },
  "sortMode": {
   "enum": [
    "relevance",
    "date"
   ],
   "type": "string",
   "default": "relevance",
   "description": "Order keyword search by relevance or listing date."
  },
  "workType": {
   "enum": [
    "",
    "242",
    "243",
    "244",
    "245"
   ],
   "type": "string",
   "default": "",
   "description": "Filter by the site’s employment type code."
  },
  "dateRange": {
   "enum": [
    "",
    "1",
    "3",
    "7",
    "14",
    "31"
   ],
   "type": "string",
   "default": "",
   "description": "Restrict search to jobs listed within this many days."
  },
  "salaryMax": {
   "type": "integer",
   "minimum": 0,
   "description": "Maximum salary filter in the selected market’s currency, using the site’s search interpretation."
  },
  "salaryMin": {
   "type": "integer",
   "minimum": 0,
   "description": "Minimum salary filter in the selected market’s currency, using the site’s search interpretation."
  },
  "startUrls": {
   "type": "array",
   "default": [],
   "description": "Optional JobStreet search URLs or individual /job/<id> URLs from the four supported markets."
  },
  "maxResults": {
   "type": "integer",
   "default": 50,
   "minimum": 0,
   "description": "Maximum jobs in the dataset across all searches. Zero removes this cap."
  },
  "classification": {
   "type": "string",
   "description": "Optional numeric JobStreet classification code; find it in a search URL."
  },
  "includeDetails": {
   "type": "boolean",
   "default": true,
   "description": "Fetch each job’s public description; adds one request per listing."
  },
  "excludeKeywords": {
   "type": "array",
   "default": [],
   "description": "Discard jobs containing any phrase in the title, employer, location, teaser, or fetched description."
  },
  "inc
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "count": 1,
  "items": [
   {
    "jobId": null,
    "title": null,
    "company": null,
    "seekJobId": null,
    "companyUrl": null,
    "companyLogo": null,
    "advertiserId": null,
    "canonicalUrl": null
   }
  ],
  "product": "jobstreet"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/jobstreet-job-search-scraper-eb03d49c/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.scrapeforagents.tech](https://www.zero.xyz/host/api.scrapeforagents.tech/llms.txt)
