# JobStreet Job Listings Scraper

> JobStreet Job Listings Scraper is a paid API for AI agents from x402.186-241-26-229.sslip.io, paid per call via x402, $0.04/call, status unknown (last checked 2026-10-02).

Scrapes structured job listing data from JobStreet across Malaysia, Singapore, Indonesia, and the Philippines via keyword search or direct URLs.

## Facts

- Endpoint: POST https://x402.186-241-26-229.sslip.io/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-listings-scraper-efeaf4b8
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_OlBB6x11GaOEiI67VDdie

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-listings-scraper-efeaf4b8 -d '<json body>'
```

Example prompt: Search JobStreet in Singapore for 'data scientist' jobs 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 (MY, SG, ID, PH markets) with rich filtering options like salary, date range, location, and employment type. Prefer this over generic web scrapers when you need clean, structured output (job ID, company, URL) without parsing raw HTML. The pay-per-successful-call model makes it cost-efficient since failed or empty runs are not charged.

## Known failure modes

- No results found for the given query/location combination — endpoint is not charged
- Invalid country code returns a validation error
- Malformed startUrls that don't belong to supported JobStreet markets cause empty or partial results
- Classification code not matching any JobStreet category returns zero results
- Rate limiting or anti-scraping measures on JobStreet's side may cause partial datasets
- maxPages or maxResults too low may truncate results before all matches are retrieved

## 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 of matched jobs 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 identifies the 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-listings-scraper-efeaf4b8/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402.186-241-26-229.sslip.io](https://www.zero.xyz/host/x402.186-241-26-229.sslip.io/llms.txt)
