Using the Jobstreet API without getting blocked

Using the Jobstreet API without getting blocked

blackfalcondata

Building against a Jobstreet API rarely fails because of parsing. The harder problem is staying in: requests leave successfully, then responses return empty, truncated, or replaced by a challenge page the parser cannot handle.

Here is what our own Jobstreet Actor handles, what a run costs, and where it stops.

Doing it yourself

The DIY route makes sense when you need one snapshot or when a broken run costs nothing. The specifics below come directly from what our own scraper has to handle.

The front door. A plain HTTP request to Jobstreet does not return a page. Measured on 2026-08-22 (3 attempts, all refused), it returned 403 behind Cloudflare, actively challenging. Your scraper must clear that barrier before parsing a single field.

Rate limits. Push hard enough and Jobstreet returns 429. Backoff is mandatory; without it, the run becomes a queue of failures.

Proxies. Runs use rotating proxies. A single IP creates a trivially detectable pattern, and proxies are usually the largest cost line, well above compute.

Pagination. Listings are paged. The stop condition needs more care than "until a page comes back empty" because an empty page can also signal a soft block.

Silent breakage. Jobstreet changes its markup without announcing it. Extraction then fails quietly, producing empty fields instead of an error. Detecting that drift is a separate piece of work.

Deduplication. Re-running produces the same records. Hashing every record and storing the hashes prevents each run from re-processing everything.

The real cost is upkeep. The first version takes an afternoon to write. Keeping it working takes an hour every few weeks, forever. Failures stay silent: you discover them when a report is empty, not when the scraper errors.

Here is a measured run, not an estimate:

  • 25 records in 28.0 seconds
  • cost: $0.00155 — about $0.06 per 1,000 records

The shortcut

If you do not want to own that work, one call returns the same result:

```bash curl -X POST "https://api.apify.com/v2/acts/blackfalcondata~jobstreet-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \ -H 'Content-Type: application/json' \ -d '{"query": "..."}' ```

Or use Python:

```python from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN") run = client.actor("blackfalcondata~jobstreet-scraper").call(run_input={"query": "..."})

for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item) ```

What comes back

Every row contains 73 fields, grouped into categories such as:

  • company — company, companyUrl, companyIndustry, companySize, companyWebsite, companyDescription, +6 more
  • location — location, locationCountry, locationState, locationSuburb, locationPostcode
  • salary — salaryText, salaryMin, salaryMax, salaryCurrency, salaryType

What people use it for

  • Benchmarking. Pricing and salary fields support comparisons across the whole set instead of an eyeballed page of results.
  • Reputation monitoring. Ratings and review text reveal movement over time that a single page view cannot show.
  • Lead lists. Company-level fields let you isolate the relevant segment before anyone opens a CRM.
  • Change detection. Timestamps make it possible to diff runs and act on new records rather than re-reading everything.
  • Geographic analysis. Location fields enable market-by-market comparisons without a separate data source.

Limits

Nothing here bypasses a Jobstreet login. Whoever writes the scraper, it can access public pages only.

A scraper that works today may not work in six weeks. Expect to touch it whenever Jobstreet ships a redesign—and expect some delay before you notice. Extraction fails quietly, returning empty fields rather than errors. Budget an hour every few weeks, not a fix-and-forget afternoon.

Proxy costs also rise with volume. They are the line item people often omit when estimating the DIY route. For anything beyond a small sample, you need proxies: a single origin IP is the easiest target to rate-limit, and residential addresses are treated differently from datacentre ones.

The browser-versus-client difference explains many 403s. A plain request to Jobstreet from our probe on 2026-08-22 was answered by cloudflare, actively challenging — every attempt was refused. A browser passes because it carries a TLS fingerprint, a cookie and a header set that a bare HTTP client does not.

Reading publicly visible pages is generally treated differently from accessing data behind a login, and courts in the US have repeatedly declined to treat public scraping as unauthorised access. That is not legal advice, and a site's terms of service are a separate question from the law. Anything behind a login is out of scope either way.

Building it yourself is cheaper only if your time is free. The measured run below cost $0.00155 for 25 records; the equivalent DIY cost is proxy spend plus the maintenance hour, and the maintenance hour recurs.

Try it

If you would rather not own the upkeep, a working Jobstreet API you can call today already handles everything above. New accounts get $5 of free platform credit each month, which covers a real run of this size several times over.

Disclosure: we build and maintain this Actor, and the link above is an affiliate link.

Further reading


We also publish our write-up on the Jobstreet API on blackfalcondata.com — the request, the response, and what a run costs.

Report Page