# Changelog of SEC Form D Scraper – New Startup Funding Raises (`cce_partners/sec-form-d-new-raises-feed`) Actor

- **URL**: https://apify.com/cce_partners/sec-form-d-new-raises-feed/changelog.md
- **Full Actor documentation**: https://apify.com/cce_partners/sec-form-d-new-raises-feed.md

## Changelog

### 0.1.27 (Oct 16, 2026)

- **State filters ignore upper/lower case and extra spaces.** `["ca"]`, `["Ca"]` and `[" ca "]` now mean CA. Before, a lower-case code such as `ca` matched nothing and the run returned no filings.
- **Industry group filters work the same way.** Blank entries in Industry groups (like `""` or `"  "`, which some tools send for an empty field) are skipped, and a list of only blank entries means all industries. Industry groups also ignore upper/lower case and extra spaces around the label, so `other technology` matches "Other Technology". Listing "pooled investment fund" in any case now includes investment funds, as the exact label always did.
- **If you run a named monitor with such filters, it may now start receiving filings it used to miss.** Monitors whose state or industry filters had unusual casing, extra spaces or blank entries returned fewer filings (often none) before. From this version they return the matching new filings, and those filings are charged as usual. Filings that earlier runs already passed over are not sent again.
- Runs without a monitor name keep exactly the same saved-state behavior as 0.1.26: whether a run counts as having filters is unchanged, so no run starts or stops using saved state because of this version.
- Correction to the 0.1.26 notes below: a list such as `["", "CA"]` already returned the CA filings. Only lists made entirely of blank entries (`[""]`, `["  "]`) or with spaces around a code (`[" CA "]`) returned no filings, and 0.1.26 fixed those.
- The title of the GitHub README now matches the live Store page.
- No pricing changes. No new inputs; the output fields are unchanged.

### 0.1.26 (Oct 16, 2026)

- **Monitor names made only of spaces, with filters, work as they did before 0.1.24.** If an older version saved state for a run whose monitor name was only spaces, a run with that name and any filter again continues from that saved state (stored under one underscore per space, for example `___`), so nothing is re-sent or re-charged. The log names the monitor name that keeps it explicitly. Without filters, such a name still reads and saves nothing. Runs with filters and an empty monitor name keep using the default saved state, as in 0.1.25.
- **Blank entries in Issuer states are ignored.** Before, a list made only of blank entries, such as `[""]` (which some tools send for an empty field), or a code with spaces around it, such as `[" CA "]`, returned no filings at all. Now blank entries are skipped and spaces are trimmed: a list of only blank entries means all states, and `[" CA "]` means CA. A list such as `["", "CA"]` already returned the CA filings and still does. Whether a run counts as having filters is unchanged, because blank entries never counted as a filter.
- The descriptions of `lookbackDays` and `maxFilings` and the README now mention that runs with filters but no monitor name that keep using saved state from an older version get up to 200 filings and a 3-day first-run lookback.
- The README title and the SEO description in the Actor files now match the live Store page.
- No pricing changes. No new inputs; the output fields are unchanged.

### 0.1.25 (Oct 16, 2026)

- **Runs with no monitor name and no filters don't read or save any saved state.** This covers an empty input, the Store's example input, and an empty monitor name. A monitor name made only of spaces counts as no name and doesn't read or save state either, even with filters. These runs return the latest filings (up to 25 from the last 5 days by default). Before, they still looked up the state that older versions saved for runs without a name, and a name made only of spaces continued from it.
- **Runs with filters but no monitor name keep using the default saved state, as before.** If an older version saved state for your runs without a monitor name, a run with filters (for example a state, an industry or a minimum amount) and no monitor name still returns only new filings from that default saved state and updates it. The run log says so in one line that ends "set monitor name "default" to keep this explicitly". Setting the monitor name to `default` (in the API: `"stateKey": "default"`) uses the same saved state, so nothing is re-sent or re-charged. If there is no such saved state, these runs return the latest filings and save nothing.
- If an older version ran with a monitor name made only of spaces, its state is saved under one underscore per space (for example `___` for three spaces). Set that as the monitor name to keep using it.
- **Graceful abort: about 30 s at most.** On a graceful abort the platform gives the run about 30 s to finish. The run waits for the filing being delivered within that time. A delivery that takes longer (normally it takes well under a second) is cut off like a forced abort: up to 10 filings may be skipped and are never charged, and the monitor stays blocked for up to 10 minutes.
- Fixed-date runs now report "Pushed 3 filings" instead of "Pushed 3 new filings", since they return every filing in the window, and a rate-limited fixed-date run no longer says the next run will pick up the rest.
- When a run is blocked because another run is working on the same monitor, the message now explains what to do after a forced abort or crash: the monitor is freed 10 minutes after that run's last heartbeat, and the message says roughly how long is left.
- The README lists the other Actors in the suite under their current names and adds Federal Contract Awards – New Winners Feed.
- No pricing changes. No new inputs; the output fields are unchanged.

### 0.1.23 (Oct 16, 2026)

- **`cik` is now always the filing's primary issuer; older versions could report a co-issuer's `cik`. Other issuers are listed in `coIssuers`.** This happened with a watchlist (`ciks`) that named a company which is a co-issuer of a filing but not its primary issuer: the row showed your company's CIK next to the primary issuer's name, and `coIssuers` was empty. Now `cik`, `issuerName` and the filing links are the primary issuer's, and `coIssuers` lists every other issuer of the filing, including the company you watch. The filing is still one row and one charge.
- `coIssuers` now also lists co-issuers named in the filing itself, so every source (daily index, watchlist, full-text search) gives the same issuers for the same filing.
- **A graceful abort waits for the filing being delivered.** Before, a graceful abort, migration or SIGTERM/SIGINT waited at most 3 s for a filing in progress; if returning or charging it took longer, the filing could be returned and charged again by the next run. Now the run waits until that delivery is finished, then saves its progress and frees the monitor. The wait never runs into the run timeout: it ends 15 s before the timeout (a third of the remaining time for very short timeouts), so the monitor is still freed.
- A run that freed its monitor itself no longer logs that it lost the monitor to another run.
- No pricing changes. No input changes; the output fields are unchanged.

### 0.1.22 (Oct 15, 2026)

- **A filing listed under several co-issuers is now delivered and charged once.** EDGAR lists a filing made by several co-issuers once per co-issuer, and the Actor used to return and charge it once per listing (for example 25 rows for 23 filings). Now each filing (accession number) is one row and one charge.
- New output field **`coIssuers`**: the other issuers the filing is listed under, as `{ cik, name }` (empty when there is one issuer). `cik` and `issuerName` are the filing's primary issuer.
- `maxFilings` and the "Max items" run option count filings, not listings.
- Monitors keep their saved state with no reset: a filing already returned is never returned again under another co-issuer, on this run or later ones.
- No pricing changes.

### 0.1.21 (Oct 15, 2026)

- **A monitor run stops itself shortly before its run timeout.** The platform ends a run at its timeout with no time to clean up, which used to block the monitor for up to 10 minutes. A monitor run now stops about 15 s before the timeout (a third of the remaining time for very short timeouts): it returns and charges nothing more, keeps the filings already returned as delivered, frees the monitor, and ends FAILED with "Stopped 15 s before the run timeout so the monitor lock is released; …".
- **A run that lost its monitor to another run never overwrites that run's saved progress.** Before every save, the run checks it still holds the monitor; if not, it saves nothing. A run that is still aborting or timing out counts as running, so another run doesn't take its monitor while it may still save.
- **Safer stops.** Freeing the monitor now waits for a save in progress, and no save starts after that. Before, a stop at an unlucky moment could leave up to 10 filings marked as delivered without delivering them (never charged). An aborted run now saves its progress before it frees the monitor.
- Stopping a run with SIGINT (Ctrl+C when run locally) saves progress and frees the monitor, like SIGTERM.
- A forced abort (the default Abort in Console) or an out-of-memory crash still can't free the monitor, which then stays blocked for up to 10 minutes. A graceful abort frees it right away.
- No pricing changes. No input or output changes.

### 0.1.16 (Oct 15, 2026)

- **Progress saved as the run goes (no re-charge after an abort).** Monitors (and the older no-name saved state described below) used to save which filings they had returned only at the end of the run, so an aborted, timed-out, crashed or migrated run made the next run re-send and re-charge them. Now filings are delivered in batches of 10: each batch is saved as delivered BEFORE it is returned and charged, and progress is saved again when a run is aborted or migrated. On a graceful abort the run stops after the filing in progress and un-marks the batch's undelivered filings, so they come on the next run. Only a hard kill between a batch's save and its delivery can skip those filings (never charged). A batch is trimmed to your spending limit before it is saved.
- **One run at a time per monitor.** A run claims the monitor (a `LOCK-STATE-<name>` record in the same store) before it reads the saved state, keeps the claim fresh every 60 s, and checks it before every batch and every filing. A second run on the same monitor ends without returning or charging filings ("Another run (…) is working on this monitor"); a run that loses the monitor stops returning and charging at once and doesn't save again. A run killed outright (no time to clean up, or out of memory) can't free the monitor: it is freed after 10 minutes without a refresh. Stateless and fixed-date runs don't claim anything.
- **"Max items" run option honored** as an extra cap on filings returned.
- **Monitor names with spaces around them** (e.g. `" tech "`) were saved by older versions under `STATE-_tech_` and are trimmed since 0.1.14 (`STATE-tech`), so those monitors restarted. If `STATE-tech` doesn't exist yet, the run now reads `STATE-_tech_` (read only) and continues under `STATE-tech`.
- **Request rate:** a missing or invalid `requestsPerSecond` means 5/s, and values above 5 are treated as 5.
- **Existing no-name users keep their saved state.** 0.1.14 and 0.1.15 made runs without a monitor name stateless for everyone, so users who relied on the old no-name saved state (`STATE-default` in the `sec-form-d-feed-state` store, written by 0.1.13 and earlier) got repeat filings and paid for them again. Now, if your store already has that record, a run without a monitor name keeps returning only new filings from it, as before, and updates it in the same format. That path keeps the old defaults (`maxFilings` 200, first-run `lookbackDays` 3); values you set still win. The run log names the monitor name that holds that record: "Stateless (latest filings) is now the default for runs without a monitor name; your existing saved state is kept. Set monitor name "default" to keep it explicitly." The status message has a short form. Setting exactly that monitor name uses the same saved record, so switching to it re-sends and re-charges nothing. Filings returned by 0.1.14/0.1.15 stateless runs aren't in that saved state and can be returned once more.
- **Runs with no filters (an empty input or the Store's example input) are always stateless.** They always return the latest filings (up to 25), even when the old "default" saved state exists; that record is only read, never written, and the log names the monitor name that keeps it ("Saved state from an older version exists, but runs without a monitor name and without filters are always stateless (latest filings). Set monitor name "default" to get only new filings from that saved state."). Runs with any filter, or with a whitespace-only monitor name, keep the old saved state as described above.
- The old saved state is recognised in every format earlier versions wrote, including records stored as text. A whitespace-only monitor name (treated as "no name" since 0.1.14) maps to the record older versions used for it (e.g. `STATE-_`); the notice then suggests the monitor name `_` (one underscore per space).
- A monitor-name run also reads a saved record stored as text.
- Status messages are kept to 500 characters or fewer (Apify cuts longer ones). Long lists of days without a daily index are shown as a range.
- Users with no earlier saved state get stateless runs exactly as in 0.1.15 (5-day lookback, up to 25 filings, nothing saved), and no store is created for them.
- Monitor names and fixed date windows are unchanged. No pricing changes.

### 0.1.15 (Oct 15, 2026)

- Runs without a monitor name (no `stateKey`, no `dateFrom`) now look back **5 days** by default instead of 3, so a run after a long weekend or holiday, before SEC posts the evening index, still finds filings. Monitor runs are unchanged (first run looks back 3 days). A `lookbackDays` value you set always wins; the schema no longer has a default for it.
- No pricing changes.

### 0.1.14 (Oct 15, 2026)

- **Stateless by default.** Saved "only new results" state is used only when you set a monitor name (`stateKey`). Without one, each run returns the latest filings from the last `lookbackDays` days (newest first) and reads or writes no saved state.
- Removed the input schema default `stateKey: "default"`. The old `STATE-default` record is not used anymore (no carry-over). Scheduled runs and integrations that want only new filings must set a monitor name; their first run looks back `lookbackDays`.
- `maxFilings` has no schema default now: 25 for runs without a monitor name, 200 with a monitor name or a fixed date window. A value you set always wins.
- Runs without a monitor name end with the status message "Set a monitor name to get only new results."
- No pricing changes: $0.01 per run + $0.005 per filing returned, one charge per row pushed.
- Input descriptions and README updated ("Monitor names: get only new results").
