IT Jobs Scraper — Tech Jobs Feed: Dice, StepStone, Remote avatar

IT Jobs Scraper — Tech Jobs Feed: Dice, StepStone, Remote

Pricing

from $100.00 / 1,000 job source harvesteds

Go to Apify Store
IT Jobs Scraper — Tech Jobs Feed: Dice, StepStone, Remote

IT Jobs Scraper — Tech Jobs Feed: Dice, StepStone, Remote

IT jobs scraper & unified tech jobs feed API: Dice, StepStone, Remotive, Arbeitnow, RemoteOK in one run. Normalised rows: title, company, location, remote, salary, posted date, apply URL. Independently validated (remotive 18/18, dice 100/100). Built by an autonomous AI agent.

Pricing

from $100.00 / 1,000 job source harvesteds

Rating

0.0

(0)

Developer

B

B

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Share

Tech Job Boards Feed — Dice, StepStone & Remote Boards, Unified

One run → ONE normalised job feed from five tech job boards. Same fields from every source, one source column telling you which board a row came from. Query them all without writing five scrapers, five parsers and five normalisers — that normalisation layer IS this actor.

Sample output (real rows from a live run)

{"source": "dice", "source_id": "d6492c4ceda1228660114a072c5b8ba1", "title": "Sr. Python Developer", "company": "TEKsystems c/o Allegis Group", "location": "Menlo Park, California, USA", "country": "USA", "employment_type": "Full-time", "is_remote": false, "posted_at": "2026-08-18T12:19:05Z", "salary": "USD 70.00 - 90.00 per hour", "description_snippet": "…first ~1,500 chars, HTML stripped…", "job_url": "https://www.dice.com/job-detail/bc8523b8-41bb-4382-8004-dcc68c20edef", "apply_url": "https://www.dice.com/job-detail/bc8523b8-41bb-4382-8004-dcc68c20edef"}

Every source returns this identical shape — 13 flat fields, no nesting, no pagination to walk.

What you get

Every dataset item is a flat JSON row with identical fields, whichever board it came from:

fieldnotes
sourcedice | stepstone | remotive | arbeitnow | remoteok
source_idthe job's ID on that board
title, companynormalised, whitespace-cleaned
location, countryfree text as the board states it
employment_typeFull-time / Contract / … (empty when the board has none)
is_remotetrue/false when the board says so, null when it doesn't
posted_atISO-8601 UTC everywhere, regardless of source format
salaryas published (often empty — these boards mostly hide pay)
description_snippetfirst ~1 500 chars, HTML stripped
job_url, apply_urlcanonical links

Sources

  • Dice (US tech market) — via the same public JSON API dice.com's own frontend calls. Full summaries, salary text, employment type, posted dates.
  • StepStone (DE/EU market) — server-rendered result pages, parsed from the public search. German relative dates ("vor 3 Tagen") normalised to ISO.
  • Remotive, RemoteOK — remote-only tech boards, public JSON APIs. RemoteOK rows link back to remoteok.com (their ToS attribution).
  • Arbeitnow — DE/AT job-market aggregator, public JSON API.

Multiple search terms are run against every included source and merged, deduplicated, capped per source. Blocked or empty sources are skipped and never billed — you pay per source that actually returned data.

How keyword search matches (per board)

Boards differ in what their search can do, and this actor uses each board's real capability instead of pretending they're equal:

  • Dice — keyword search runs server-side on the board itself; you get exactly what the board's own search returns (full-text matches included).
  • Remotive — the board's server-side search is currently dead (every term returns the same global feed; measured 2026-08-24), so the keyword is matched client-side against the full description. Niche terms can be valid-empty — that is the board's limitation, disclosed, not hidden.
  • RemoteOK — has no search endpoint (one whole-feed API), so the keyword is matched client-side against the full description, not just the title.
  • StepStone — server search + client title/company/location check.
  • Arbeitnow — no server-side search at all. The actor pulls maxPerSource × 6 recent listings and filters client-side. Niche terms can live deeper in the feed than that window: a measured 'python' search (2026-08-22) recalled 10 of 15 matches inside the newest 746 listings — the 5 misses sat at feed positions 692–731, past the 6× window.

Input

  • searchTerms (required) — e.g. ["python", "kubernetes"]
  • sources — which boards; default all five
  • location — free text, applied everywhere
  • remoteOnly — keep only remote-flagged rows
  • postedSince24h, 7d, 30d
  • maxPerSource — cap per search term × source (default 100)

Minimal agent input: {"searchTerms": ["python"]} — everything else has a sane default.

For AI agents & LLM apps

One flat JSON object per job, stable field names, no HTML to parse. Semantic notes an agent should know:

  • is_remote: null means the board genuinely doesn't say — not "false".
  • source_id is the board's stable job id — dedupe across runs on (source, source_id).
  • An empty dataset is a valid answer (term genuinely matches nothing on that day); it is charged only per source that returned rows. A source that is down or returns nothing is skipped, logged, and never charged.
  • posted_at is ISO-8601 UTC always — normalised from "vor 3 Tagen", relative timestamps, and every board's own format.

Keywords

dice jobs scraper · stepstone scraper · remotive jobs api · remoteok jobs api · arbeitnow scraper · tech job boards unified · unified job feed · remote tech jobs api · job search aggregator · python jobs dataset · developer jobs dataset · job data for ai agents · job postings api · tech job market data · germany tech jobs · usa tech jobs scraper · job board monitor · recruiting data feed

FAQ

Am I charged for sources that fail or return nothing? No. The charge event is source-harvested — one per source that actually returned written rows. Blocked, down, or empty sources are skipped, logged in run status, and billed at zero.

Why is a salary often empty? Because the board doesn't publish it. The field is there when they do — Dice publishes pay text frequently, the remote boards rarely.

Why do I get fewer rows for a niche term on remotive/arbeitnow? Those boards have no working server-side search; matching is client-side over their recent-listings window (disclosed above with measured numbers). Broad terms fill the cap; ultra-niche terms can be valid-empty.

Can I run it on a schedule? Yes — daily or hourly runs with the same searchTerms give you a time-series of the tech job market. Dedupe on (source, source_id).

Is there an MCP / API example?

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("halobartku/tech-jobs-feed").call(run_input={"searchTerms": ["python"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], "|", item["company"], "|", item["source"])

Changelog

  • 0.1.8 — remotive precision fix: board's server-side search found dead (every term returned the same 18-listing feed); remotive rows now client-side keyword-filtered. Empty queries verified: 0 rows, 0 charges.
  • 0.1.6 — empty-coverage gate: a term that matches nothing is a valid empty answer (SUCCEEDED, 0 rows, 0 charges), never a run failure.
  • 0.1.5 — remoteok full-description matching; arbeitnow 6× fetch headroom (measured recall disclosed above).
  • 0.1 — first public release: five boards, one schema.

Honest limits

  • Dice is US-only (its API is countryCode=US).
  • StepStone is the German site — German listings, occasionally English.
  • Salary data is sparse on all five boards; the field is there when they publish it.
  • Wellfound (AngelList Talent) and ZipRecruiter are deliberately NOT included. Both sit behind an interactive Cloudflare challenge on every endpoint (page, API, regional domains — verified 2026-08-19). An actor that needs residential-proxy farms and challenge solvers to maybe-work is a liability, not a product. If they ever drop the wall, they'll be added.
  • StepStone's remote filter (wfh=2) and Dice's remote filter (workplaceTypes=Remote) restrict server-side; the other boards are remote-by-definition.

AI-authored disclosure

This actor, its code, and its documentation were written end-to-end by an autonomous AI agent (Jarvis, operated by the publisher). Field mappings were verified against each board's live responses on the build date above — including independent from-scratch ground-truth comparisons (receipts in the publisher's validation log) and daily automated smoke tests.