Tech Jobs Feed — Dice, StepStone & Remote Boards avatar

Tech Jobs Feed — Dice, StepStone & Remote Boards

Pricing

from $100.00 / 1,000 job source harvesteds

Go to Apify Store
Tech Jobs Feed — Dice, StepStone & Remote Boards

Tech Jobs Feed — Dice, StepStone & Remote Boards

IT jobs scraper & tech jobs feed API: Dice, StepStone, Remotive, Arbeitnow, RemoteOK. Stellenangebote & Stellenanzeigen aus DE-Boards, normalised rows. Independently validated. 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

1

Monthly active users

9 hours ago

Last modified

Share

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

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

Quick start (3 steps)

  1. Search — set searchTerms (e.g. ["python"]); optionally pick sources, location, remoteOnly, postedSince. Everything except searchTerms has a sane default.
  2. Run — one run harvests every selected board, normalises and dedupes into one dataset.
  3. Get your data — export the dataset to JSON/CSV/Excel, or pull it via the Apify API (Python example at the bottom of this page).

Example — remote Python jobs, Germany, last 7 days

{"searchTerms": ["python"], "location": "Germany", "remoteOnly": true, "postedSince": "7d"}

Example — one unified feed from every board

{"searchTerms": ["kubernetes", "devops"], "maxPerSource": 200}

Example — LinkedIn only, no login, US market

{"searchTerms": ["data engineer"], "sources": ["linkedin"], "location": "United States"}

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 | linkedin | 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). RemoteOK feed note (measured 2026-09-08): the board's public API window has degraded — generic non-tech listings (retail management, hospitality, trades) now sit alongside tech roles and fresh developer listings are sparse. This actor applies a tech-title gate to RemoteOK rows (a row is kept only when its title carries an unambiguous tech-role phrase; the board's own tags are keyword-stuffed and untrustworthy, so they are not used as a pass signal), so what you get is the tech subset of their window, never the junk. Measured 2026-09-08: ~6 tech rows pass out of 100 in the window. Niche terms can validly return 0 rows there — that is the board's window, disclosed, not hidden.
  • Arbeitnow — DE/AT job-market aggregator, public JSON API.
  • LinkedIn (guest search, added 2026-09-09) — the same public job-search endpoint the logged-out linkedin.com/jobs page calls: real LinkedIn listings, no login, no cookies. Posted dates, locations, salary text when present. Two honest limits: guest search caps results deeper than ~1000, and it is the same server-side keyword search the LinkedIn page itself uses, so niche long-tail terms behave exactly as they do on linkedin.com.

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.
  • LinkedIn — server-side keyword search (the board's own); you get what linkedin.com's search returns. remoteOnly uses LinkedIn's own remote-workplace filter, postedSince uses its posted-date filter.
  • 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 six (unknown names are ignored with a warning, not an error)
  • location — free text, applied everywhere
  • remoteOnly — keep only remote-flagged rows
  • postedSince — 24h, 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.

Use cases

  • Recruitment & sourcing — one daily run, one deduplicated feed of US (Dice, LinkedIn) and EU (StepStone, Arbeitnow) tech roles plus the remote boards.
  • Job boards & aggregators — power a jobs section without maintaining six scrapers; the normalisation layer is the product.
  • Labor-market research — same searchTerms on a schedule gives a time-series: which roles appear, where, at what pay.
  • AI agents & LLM apps — flat JSON, stable field names, null semantics documented (see the next section).
  • Lead generation — company + location + posted_at = who is hiring what, where, this week.

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.16 — StepStone exact timestamps: posted dates now come from the board's own embedded listing JSON instead of the coarse "vor 3 Tagen" label (which floors fractional days and ran up to a day late). Verified against the board's own data: 25/25 rows match to the exact second.

  • 0.1.14 — throttle resilience: bounded retry with Retry-After honoured (429/5xx, backoff 2/4/8s) on every source, and a LinkedIn pagination failure after page 1 now returns the partial rows already fetched instead of failing the run. Shipped the morning after measuring a guest-endpoint 429 against a single-source LinkedIn run — the exact pattern our first external user runs.

  • 0.1.13 — LinkedIn source added (guest search, no login, verified live 2026-09-09) + unknown source names in sources are now ignored with a warning instead of failing the run with exit 91. Both changes came from watching our first external user's runs: they asked for LinkedIn twice.

  • 0.1.11 — RemoteOK tech-title gate: board's public feed degraded to mostly generic non-tech listings (measured 2026-09-08: 0 python jobs in the 100-item window; retail/hospitality/trades rows; tags keyword-stuffed — a "Store Manager" row carried react/consulting tags). Gate evolved in-session from tag-or-title to TITLE-ONLY after the tag leak was measured: a row is kept only when its title carries an unambiguous tech-role phrase (ambiguous words like "test"/"data"/"support"/"technician" alone do NOT pass — they leaked non-tech rows when measured). Effect: 6/100 feed rows pass, zero retail/trades/maintenance rows. Daily smoke now asserts the gate (non-empty tech subset, keyword hit, no leak classes). No pricing/schema change.

  • 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 (six since 0.1.13).

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 six 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.