This Actor uses semantic versioning. Apify's actor.json version is 0.1 because that field is MAJOR.MINOR. The package version is the full semver.
- A run that delivers no notices pushes one free
no-new-notices status row after the final state save. The row names the feed, the filters, the stop reason, and the time it was written. It is not a charge, it does not count toward maxResults, and it does not change the saved position. A spending-limit stop with no notices pushes the row, as the permits feed does. A migrating process does not, because that run continues. One row per run: STATUS_ROW in the default key-value store survives a migration or resurrection.
- The run logs its User-Agent once at the start and copies it to
RUN_METADATA.user_agent.
.actor/actor.json version stays 0.1. That field is MAJOR.MINOR. This release is a patch, so only the package version and ACTOR_VERSION move to 0.1.4.
- pricing.json now records the live Store prices (published 2026-11-01); the proposal marker is removed. No code change.
- README: adds an H1 naming the Actor as unofficial, and the price lines use the Pricing tab event names (Extra publication day, Page scanned). Prices are unchanged.
- resetState applies once per run. The run saves the empty position, then writes RESET_APPLIED in the default key-value store. That store survives a migration, so a restarted process does not wipe the saved position or charge the same notices again. The marker is not in the named state store, so the next run with resetState still resets.
- State is saved when the platform emits persistState, as well as on migrating and aborting.
- maxResults holds across a migration: the run records notices pushed so far in RUN_PROGRESS in the default key-value store after each push.
- A resurrected run restarts with the same default key-value store, so it keeps RESET_APPLIED and does not reset again. Locally,
apify run --purge clears the default store, so the next start with resetState resets again; --no-purge keeps RESET_APPLIED.
- The Console prefill no longer sets resetState, so tasks and schedules saved from the form keep their position instead of re-reading and re-charging 2026-10-30 on every run.
- The timeout margin is raised from 30 s to 90 s so a request admitted near the deadline (60 s request timeout) finishes before the platform timeout.
- The README private-test-runs line is corrected.
- Stop 30 seconds before
ACTOR_TIMEOUT_AT, so a run whose platform timeout is 300 seconds can scan. A run already inside that margin still stops and keeps the saved day. The default run timeout stays 1800 seconds.
- The README states the pay-per-event prices: $0.01 per run start (one start event up to 1 GB of memory), $0.003 per notice delivered, $0.005 per non-empty publication day beyond the first, and $0.001 per result page that contains at least one notice.
- First build of the unofficial TED notice feed. Scrolls the TED Search API and keeps state in the named store
ted-notice-feed-state-<stateKey>.
- The store name is checked against Apify's 63-character limit, the same rule the Form D state store uses.
- State is saved once per fetched page, when a day is committed, and again at the end of the run, including a graceful stop.
- The Console prefill is a small 2026-10-30 sample. Defaults are unchanged. The default run build is latest.
- The default run timeout is 1800 s: about 230 requests at the measured 3.95 s each for the largest allowed run (maxResults 50000), plus the 300 s clean-stop margin and headroom.
- Winner and tenderer names are off unless
includeWinnerNames is true.
- The title is the notice-title entry for the first official-language value that has one. TED's own title prefix is kept. HTML entities are decoded.
notice_url is links.htmlDirect.ENG and xml_url is links.xml.MUL.