# Changelog of SiteVerdict — Hiring Signal & Buying Intent Scorer (`siteverdict/siteverdict-hiring-signal-scorer`) Actor

- **URL**: https://apify.com/siteverdict/siteverdict-hiring-signal-scorer/changelog.md
- **Full Actor documentation**: https://apify.com/siteverdict/siteverdict-hiring-signal-scorer.md

## Changelog

### 1.1.0 — 2026-11-02

- Fix (BILL-1): a run whose "Max cost per run" is used up exactly by the last company no longer reports `stoppedAtChargeLimit: true` or logs "stopping cleanly". The flag is now set only when a company was actually refused for lack of budget.
- Fix (BILL-1b), **company data first**: one `company-scored` charge per requested company is held back. An AI brief is generated (on the user's own key, only when `enableAiBrief` is on and a key is supplied) only from the budget left after that hold and after other workers' open brief reservations. Free inputs (no board, errors, unchanged) release their hold when checked. An uncoverable brief is not generated and not charged; the company row is delivered with `aiBrief: null`, `aiBriefStatus: "skipped_budget"` and `aiBriefNote`; OUTPUT reports `aiBriefsSkippedBudget`; the run is not flagged `stoppedAtChargeLimit`. Every company row has `aiBriefStatus` (`charged`, `skipped_budget`, `error`, `no_open_roles`, `no_api_key`, `not_requested`) and `aiBriefNote`; only `charged` rows contain brief text. Previously the last brief was generated on the user's key and given away unlabelled, and live 1.0.2 could buy briefs ahead of companies.
- Billing order: the company row (with its brief) is pushed first, then the company and brief are charged in the same serialised step; a failed push charges nothing. A brief reservation is held until its charge is registered (fixes a concurrency gap where another worker could claim the same money).
- Output completeness: when the budget cannot cover every company, each company not scored gets a free `not-processed` row (`reason: "budget"`); OUTPUT reports `notProcessedBudget`. Duplicate inputs for the same company produce one row.
- Contact address in User-Agent and README is now hello@webrevenuescan.com.
- Test: money-based budget tests for the real emitter (exact budget -> flag false; one company short -> flag true) and AI-brief boundary tests (exact, partial and sweep budgets at concurrency 1/3/8, AI errors, free inputs, push failure, output completeness).

### 1.0.0 — 2026-10-11

- First release.
- Board resolution from identifiers, ATS URLs, company websites (robots.txt-respecting, SSRF-guarded) and ATS API slug probes (domain or company name).
- Greenhouse, Lever, Ashby, Workable and SmartRecruiters adapters (shared with SiteVerdict Job Postings).
- Hiring score 0–100 with breakdown, velocity, department/seniority mix, countries, remote share, 70+ tools, 11 intent topics + custom topics with evidence and explanations.
- Monitor mode (named key-value store): new/closed roles, score delta, `onlyChanged` output.
- Alerts: Slack incoming webhook and HTTPS JSON webhook (secret inputs, SSRF-guarded).
- Optional AI sales brief on the user's own Anthropic key.
- Pay-per-event: `company-scored`, `ai-explanation`; respects max total charge; resumable without re-charging.
- Sample mode on recorded real job boards.
