iCIMS Jobs Scraper — Live Postings API by Company avatar

iCIMS Jobs Scraper — Live Postings API by Company

Pricing

from $2.00 / 1,000 successful lookups

Go to Apify Store
iCIMS Jobs Scraper — Live Postings API by Company

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

Adrian Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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=1 URL 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-lookup charge. 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 note and totalPages rather 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:

FieldType / formatDescription
querytextThe company value you passed in, unchanged.
foundbooleantrue if the company has an iCIMS portal with at least one open role.
statustextOK, NOT_FOUND (no portal, or no open roles), or BLOCKED (the portal's Human Verification wall is active for this request).
boardTokentextThe iCIMS subdomain, extracted from whatever you pasted (bare token or careers URL).
jobCountnumberHow many roles matched, after your filters (and after delta filtering, if onlyNewSinceLastRun is on).
totalJobCountnumberHow many roles were on the fetched page before any filtering — up to 50, iCIMS' own page size.
totalPagesnumberHow 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).
newJobsnumberHow many roles are new since your last scheduled run. Empty unless onlyNewSinceLastRun is on.
firstRunbooleantrue if this was the baseline run for this watchlist. Empty unless onlyNewSinceLastRun is on.
notetextSet when totalPages > 1, explaining that this row only covers page 1. Empty otherwise.
jobsarrayThe 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.
titletextJob title.
locationtextLocation as the portal lists it (e.g. "US-OH-Dayton", "US-VA-Arlington").
departmentsarrayCategory/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.
remotebooleantrue if the location, title, or a "Telecommute" field reads as remote.
postedAtdate (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.
applyUrllinkDirect link to the posting on the portal.
scrapedAtdate (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

  1. In the Apify Console. Open the actor page and click Start — the companies field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. 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"]}'
  3. 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-intrepidsolutions
careers-peraton
touro

🎯 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:

InputWhat it does
titleKeywordsKeep only titles containing one of these — ["engineer","analyst"].
excludeTitleKeywordsDrop titles containing one of these — ["intern","contract"]. Applied after the include list.
locationsKeep only roles whose location mentions one of these.
remoteOnlyKeep only roles whose location, title, or telecommute field reads as remote.
postedAfterKeep only roles first posted on or after this date, e.g. 2026-06-01.
onlyNewSinceLastRunOn 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

queryfoundstatusboardTokenjobCounttotalJobCounttotalPagesnewJobsfirstRunnotejobstitlelocationdepartmentsremotepostedAtapplyUrlscrapedAt
careers-intrepidsolutionstrueOKcareers-intrepidsolutions15151<all matching jobs (full list)>AWS Cloud/Virtual Infrastructure TechnicianUS-OH-Dayton["Information Technology"]falsehttps://careers-intrepidsolutions.icims.com/jobs/2413/aws-cloud-virtual-infrastructure-technician/job2026-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.