# Changelog of IRS 990 Scraper — Nonprofit Officer Comp (`devilscrapes/irs-990-officer-comp`) Actor

- **URL**: https://apify.com/devilscrapes/irs-990-officer-comp/changelog.md
- **Full Actor documentation**: https://apify.com/devilscrapes/irs-990-officer-comp.md

## Changelog

All notable changes to this Actor will be documented in this file.

### \[0.2.0] — 2026-05-20

#### Fixed

- Add `prefill` to the discriminating input field so Apify's automated daily QA receives a runnable payload. Empty-input runs were tripping the Pydantic `model_validate` XOR/required-field check inside 100 ms, which after three consecutive days flagged the Actor "Under maintenance" and unlisted it from the Apify Store.

### \[0.1.0] — 2026-05-16

#### Added

- Initial release: two input modes — `eins` and `searchQuery` (with optional `stateFilter`).
- Pydantic v2 XOR validator: exactly one input mode field required.
- 21-field `ResultRow` per (EIN, tax year) filing.
- Formtype mapping: 0 → 990, 1 → 990EZ, 2 → 990PF.
- Form-correct officer-comp field selection: `compnsatncurrofcr` on 990/990EZ,
  `compofficers` on 990PF.
- Year-window filter (`startYear`/`endYear`) with current-year - 3 default.
- Computed `total_comp_and_benefits_usd` (officer comp + other salaries + payroll
  tax + pension contributions + other employee benefits). Null only when all 5
  components are null.
- Org-level context fields: state, city, NTEE code, IRC subsection code.
- Financial context fields per filing: total revenue, total functional expenses,
  total assets at year-end.
- Two PPE events: `actor-start` ($0.05), `result-row` ($0.003).
- `curl-cffi` with Chrome 131 TLS impersonation (ADR-0002 house default).
- Apify Proxy support via `BUYPROXIES94952` group (opt-in via `useProxy`).
- Regression test `test_charge_no_idempotency_key.py` — locks SDK 3.x calling
  convention.
- Regression test `test_proxy_session_id.py` — verifies the Apify Proxy
  `session_id` template satisfies `^[\w._~]+$`.
