iCIMS Jobs Scraper — Live Postings API by Company
Pricing
from $2.00 / 1,000 successful lookups
iCIMS Jobs Scraper — Live Postings API by Company
Look up any company's live iCIMS careers portal and get its open roles — title, location, category, apply link. Filter by title, location, remote, or posted date, or get only postings new since your last run. Charged once per company checked.
Pricing
from $2.00 / 1,000 successful lookups
Rating
0.0
(0)
Developer
Adrian Voss
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
iCIMS Jobs Lookup — Live Postings by Company
You paste a list of companies. For each one, this actor looks up their live iCIMS careers portal and returns its open roles — title, location, category, and apply link — as one row per posting (or one row per company, your choice). No API key, no browser: it reads the portal's own server-rendered noscript job listing directly, the same fallback iCIMS ships for visitors with JavaScript disabled. Optional filters narrow the roles you get back by title, location, or posting date, and an optional delta mode returns only the postings that appeared since your last run, so you can put a company list on a schedule and get a hiring alert instead of a full re-dump every time.
Who it's for
The accountable_eel catalogue sells company and hiring intelligence columns for outbound and recruiting. Each actor takes a list of identifiers and returns one flat, stably-named row per result — the shape a Clay table, an n8n workflow, or an AI agent can consume without post-processing. Pricing is pay-per-event: a fraction of a cent for a row you actually got, and nothing at all for a company with no board or no open roles. No seat licence, no monthly minimum, no credit system to decode.
This actor is part of the ATS family alongside greenhouse-jobs-lookup, lever-jobs-lookup,
ashby-jobs-lookup, and workday-jobs-lookup — same input shape (a company identifier), same
per-company billing, same job-filter fields. iCIMS is a large enterprise ATS (used by employers
like Peraton, Utah State University, and Intrepid Solutions) that none of the other actors in this
portfolio, and few actors anywhere on Apify, currently cover.
Why this one
- Reaches data the rendered page can't. iCIMS careers pages are a client-side widget — the
page you'd normally fetch has zero job rows in its raw HTML, and several tenants additionally
wall the page behind a "Human Verification" check. This actor instead fetches the same
?in_iframe=1URL iCIMS itself serves to visitors with JavaScript disabled — fully server-rendered, no wall, no browser, no proxy. - The keyword search is real. iCIMS' own search box, reachable through this same URL, genuinely filters results upstream (verified live: a real keyword narrowed one portal's results from 14 to 3, a nonsense keyword to 0) rather than serving one cached page regardless of the query.
- You pay per company, not per job. A portal with 1,500 open roles and one with 2 both cost one
item-lookupcharge. A subdomain with no portal, or zero open roles, is a free miss. - Real filters, not a wall of raw fields. Title keyword include/exclude, location, remote-only, and posted-after-date all combine, matching the rest of the ATS family.
- A delta mode for watching hiring over time. Turn on
onlyNewSinceLastRun, put the actor on a schedule, and every run after the first returns only postings you haven't seen — a quiet week still gets a row, so you can tell "nothing new" from "the run broke." - Honest about the page cap. iCIMS pages results at 50 per screen and never prints an exact
board-wide total (only "Page 1 of N"). This actor fetches page 1 and says so in
noteandtotalPagesrather than pretending to have the whole board — see "What you get."
What you get
One row per open job posting by default (toggle "One row per job posting" off in the Input tab to
get one row per company instead, with the full job list nested in jobs). Every row carries these
fields, whether or not you've turned on filters or delta mode — the columns never move:
| Field | Type / format | Description |
|---|---|---|
query | text | The company value you passed in, unchanged. |
found | boolean | true if the company has an iCIMS portal with at least one open role. |
status | text | OK, NOT_FOUND (no portal, or no open roles), or BLOCKED (the portal's Human Verification wall is active for this request). |
boardToken | text | The iCIMS subdomain, extracted from whatever you pasted (bare token or careers URL). |
jobCount | number | How many roles matched, after your filters (and after delta filtering, if onlyNewSinceLastRun is on). |
totalJobCount | number | How many roles were on the fetched page before any filtering — up to 50, iCIMS' own page size. |
totalPages | number | How many result pages this portal reports in total. 1 means you saw everything; higher means the company has more open roles than fit on one page (see note). |
newJobs | number | How many roles are new since your last scheduled run. Empty unless onlyNewSinceLastRun is on. |
firstRun | boolean | true if this was the baseline run for this watchlist. Empty unless onlyNewSinceLastRun is on. |
note | text | Set when totalPages > 1, explaining that this row only covers page 1. Empty otherwise. |
jobs | array | The full list of matching jobs, each with the fields below. Present in every row; it's what gets expanded into separate rows in "one row per job" mode. |
title | text | Job title. |
location | text | Location as the portal lists it (e.g. "US-OH-Dayton", "US-VA-Arlington"). |
departments | array | Category/department name, when this tenant publishes one — iCIMS lets every customer configure its own extra fields, so this is empty on tenants that don't. |
remote | boolean | true if the location, title, or a "Telecommute" field reads as remote. |
postedAt | date (ISO) | When the role was posted, parsed from the portal's own absolute timestamp. The portal doesn't publish its timezone, so this is read as UTC and can be off by a few hours from the tenant's real local time. |
applyUrl | link | Direct link to the posting on the portal. |
scrapedAt | date (ISO) | When this actor fetched the row. |
A company with no portal, or zero open roles, comes back as a single found: false row and is
never charged.
Pricing
$4 per 1,000 companies, plus a $0.00005 start fee. Misses (found:false) are never charged.
How to use
- In the Apify Console. Open the actor page and click Start — the
companiesfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - Via the API. Call it directly with a POST request — no Console needed once you have an API token:
curl "https://api.apify.com/v2/acts/accountable_eel~icims-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"companies":["careers-intrepidsolutions"]}'
- On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.
Paste one company per line — the iCIMS tenant subdomain (with or without the usual careers-
prefix) or the full careers page URL:
careers-intrepidsolutionscareers-peratontouro
🎯 Job filters — applied here, after the page is fetched, so you can narrow results beyond what the portal's own search box exposes. They combine with AND across fields and OR within a field:
| Input | What it does |
|---|---|
titleKeywords | Keep only titles containing one of these — ["engineer","analyst"]. |
excludeTitleKeywords | Drop titles containing one of these — ["intern","contract"]. Applied after the include list. |
locations | Keep only roles whose location mentions one of these. |
remoteOnly | Keep only roles whose location, title, or telecommute field reads as remote. |
postedAfter | Keep only roles first posted on or after this date, e.g. 2026-06-01. |
onlyNewSinceLastRun | On a schedule, return only postings you haven't seen on a previous run of this exact filter set. A quiet run still returns a jobCount: 0 row, not silence. |
Input
{"companies": ["careers-intrepidsolutions"]}
One company per line — paste the iCIMS tenant subdomain or the full careers page URL, e.g. "careers-intrepidsolutions" or "https://careers-intrepidsolutions.icims.com". Accepted formats: careers-intrepidsolutions, intrepidsolutions, https://careers-intrepidsolutions.icims.com, https://careers-intrepidsolutions.icims.com/jobs/search.
Output
| query | found | status | boardToken | jobCount | totalJobCount | totalPages | newJobs | firstRun | note | jobs | title | location | departments | remote | postedAt | applyUrl | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| careers-intrepidsolutions | true | OK | careers-intrepidsolutions | 15 | 15 | 1 | <all matching jobs (full list)> | AWS Cloud/Virtual Infrastructure Technician | US-OH-Dayton | ["Information Technology"] | false | https://careers-intrepidsolutions.icims.com/jobs/2413/aws-cloud-virtual-infrastructure-technician/job | 2026-08-31T07:00:36.710Z |
A miss comes back as a row with "found": false and is never charged.
Use it from Clay, n8n, Make, or an AI agent
This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.
curl "https://api.apify.com/v2/acts/accountable_eel~icims-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"companies":["careers-intrepidsolutions"]}'
n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~icims-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"companies":["careers-intrepidsolutions"]} (swap in an expression from an earlier node for a real value).
Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~icims-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"companies":["{{company}}"]}, mapping the row's company into the companies array.
MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "iCIMS Jobs Lookup | Apify" — the agent will find and run this actor.
FAQ
Why was I charged for a company that returned 0 jobs? Filters (or delta mode) can legitimately
narrow a real result down to zero. The lookup happened and answered the question — totalJobCount
shows what was on the page before filtering, so a zero row explains itself.
Does this actor need a proxy? No. The ?in_iframe=1 fallback this actor reads is served
directly, no anti-bot handling required — see "Why this one."
What if a tenant's portal is walled? A small number of iCIMS tenants gate even this fallback
path behind a "Human Verification" check. That row comes back status: BLOCKED and is never
charged.
Why only page 1? iCIMS caps each results page at 50 postings and never prints an exact
board-wide total in its markup (only "Page 1 of N"). totalPages tells you when there's more than
one page so you know the row is a sample, not the whole board.
Can I schedule this to alert me on new postings? Yes — turn on onlyNewSinceLastRun and put
the actor on an Apify Task schedule. See "How to use."
Is this GDPR-relevant? No personal data is collected — this actor reads public job postings (title, location, category, apply link), not candidate or employee data.