The same role found on two boards is one row and one charge. Blocked boards, empty searches and merged duplicates are never charged. One keyword across Indeed and any company's own hiring board, merged and de-duplicated into one feed.
The careers-page lookup's spending allowance now counts correctly.
The per-run allowance on our careers-page lookup now counts every lookup at its true cost. A lookup that cost more than one unit could previously be counted as one, so a lookup-heavy run could spend past the allowance before its clean stop engaged. That allowance is ours and was never billed to you — nothing changes about what a run delivers or charges.
1.0.14 — 2026-08-29
Two Indeed settings that already worked are now listed properly, and a dropped connection no longer ends a search.
"Radius" and "Sort by" are now proper input options. Both already worked when sent through the API, but they were missing from the input list — so a run that set one could be told the field was not recognised while the run was quietly using it. They are now on the form, documented, and never reported as unknown.
A dropped or refused connection no longer ends an Indeed search with "not found". Indeed had answered nothing. The search now retries on a fresh connection, and if it still cannot get through you get an uncharged row saying the problem was temporary and asking you to re-run. When Indeed itself answers "not found" for a page, that is still reported as a real answer.
If our careers-page lookup provider ever refuses our key, the run stops asking straight away rather than retrying it for every company. That lookup was never billed to you.
1.0.13 — 2026-08-29
Companies whose careers pages block automated visitors now get one more chance through an alternate route.
A careers page that blocks every direct read is no longer a dead end. Some company sites answer every automated visitor with a block page, so those companies always came back "temporarily unreachable — please re-run", even though re-running hit the same wall. The run now checks such a page once through an alternate route: if the page links a hiring board, the company resolves and its openings are delivered as normal; if it genuinely links none, the row can finally say so definitively instead of suggesting another try.
A block page on the alternate route is never mistaken for an answer. If the alternate route is walled off too, the row stays "temporarily unreachable" — exactly as before — rather than turning a blocked read into a false "no board found". The alternate route always reads the live page, never a stale cached copy, so a site that has stopped blocking is seen as it is now.
Charging is unchanged: jobs are charged exactly as before, only after they are delivered, and nothing about this check is ever billed to you.
1.0.12 — 2026-08-29
A typo in an input field name now gets a helpful pointer instead of sample rows.
A run that sets a field this actor does not have is answered, not demoed. Sending something like queries instead of query, or companys instead of companies, used to look exactly like an empty run, so it came back with the uncharged sample rows — and nothing said the field had been ignored. Such a run now returns one uncharged row that names the field it did not recognise, names both ways to tell this actor what to look for (query for a job title, companies for company boards) and shows the shape to send. Changing a setting such as the country without giving either is answered the same way. A run that really is empty still returns the sample rows, and a run with a real keyword or real companies is unchanged.
1.0.11 — 2026-08-29
Two answers that were the wrong way round: one asked for a re-run that could never help, the other stopped you from re-running when it would have.
Companies with no public hiring board now get a final answer that names any board which could not be checked, instead of "temporarily unreachable, please re-run" — a re-run that could never have changed the result.
A careers page that answers with a bot check or a security screen no longer counts as a look at that company; those are reported as temporary and uncharged.
A board link that no longer exists now says so and names the address, instead of reporting that the board answered with no openings. A board that really is empty reads exactly as before.
1.0.10 — 2026-08-28
Special characters in job text (like & or < written as HTML codes) are now decoded exactly once — text that spells out an HTML code literally can no longer turn into the character it names.
1.0.8 — French and Swiss salaries are read the way those pages write them
A French salary is no longer inflated 100×. France writes decimals with a comma, so
11,88 € an hour was being read as 1188. France now joins the countries whose comma is a
decimal point, and the number on the row is the number on the page.
Switzerland's apostrophe no longer splits a salary in two.CHF 50'000 (either
apostrophe character) is one number, not 50 and 000.
par heure and par an are recognised, so French listings get hour and year in
salaryPeriod instead of nothing.
A run that stopped at your row cap or deadline no longer tells you to re-run with
resumeCursor. It is a field on the summary row, not something you can pass in, so the
summary now says what actually works: raise the caps and run again.
1.0.7 — see a real run's output before you spend anything
The page now links a real run's full dataset: eight live jobs pulled from four different company
boards in one run, the coverage row for each board, and the summary. Every row that was charged
is marked charged: true; nothing else is, so you can check the promise before you buy.
Links to the sibling actors that went live today (Trends Now, Social trends, YouTube videos,
YouTube channels, Speech to Text) instead of naming them.
1.0.6 — your maxRunSeconds is also measured from when the run started
1.0.5 stopped the actor's own one-hour ceiling from restarting when Apify moves a run to
another server. The maxRunSeconds you set was still being measured from the moment the new
server started, so a moved run could keep working for a second full window. Both limits are
now measured from when the RUN started, which is what you asked for when you set the number.
1.0.5 — a run moved to another server never delivers or charges the same job twice
Apify sometimes moves a running job to a different server, and a resurrected run restarts the
same way. Until now that wiped the run's memory: jobs already delivered could be collected
again, written into your dataset a second time, and charged a second time. The run now reads
back what it has already delivered before it does any new work, so a moved or resurrected run
picks up exactly where it stopped — same rows, same charges, nothing repeated.
If a move landed in the gap between a row being delivered and being charged, that one missing
charge is now settled once when the run comes back, instead of the row sitting in your dataset
marked as charged when it never was.
maxItems is now counted across the whole run rather than per server. A moved run could
previously deliver up to twice the row cap you set.
The run's own time limit is now measured from when the RUN started, not from when the current
server started, so a moved run no longer gets handed a fresh full hour.
The same company board reached two ways in one run — by domain and by pasting its board URL —
now collapses to one row and one charge. It used to be two of each.
If a run cannot read back what it already delivered AND it has already charged for some of it,
it now stops and tells you, rather than risk charging you twice for the same job.
1.0.4 — review-fix build: two different Workday jobs no longer collapse into one row
Workday jobs are now identified by the job's own URL slug (which carries the requisition id)
instead of the board card's first bullet. That bullet is a per-tenant display setting: on a
board that shows something like employment type there, every job carried the same value, so
distinct roles shared a dedupe key and got merged into a single row — you lost real jobs from
the feed, and were charged once for what should have been several separate jobs.