California New Grant Opportunity Watch avatar

California New Grant Opportunity Watch

Pricing

from $67.00 / 1,000 new-opportunity deltas

Go to Apify Store
California New Grant Opportunity Watch

California New Grant Opportunity Watch

New grant opportunities as the California Grants Portal publishes them - the portal's own id, the funding agency, who may apply, the deadline exactly as stated, and a link to the listing.

Pricing

from $67.00 / 1,000 new-opportunity deltas

Rating

0.0

(0)

Developer

NexGen Watch

NexGen Watch

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

New grant opportunities as the California Grants Portal publishes them - the portal's own id, the funding agency, who may apply, the deadline exactly as stated, and a link to the listing.

Source

California Grants Portal, published as a daily CSV on data.ca.gov (public, logged-out)

  • https://data.ca.gov/dataset/california-grants-portal

Measured 2026-07-28: 1,973 rows, 36 columns, resource last updated 2026-07-27 08:01. PortalID is the source-native key and is unique — 1,973 distinct of 1,973. The whole file is read every run, so a listing that disappears really has gone; there is no sliding window.

The deadline is not always a date

ApplicationDeadline carries three shapes, measured on the live file:

shaperows
a timestamp, 2026-09-01 23:59:001,845
the literal string Ongoing127 — every one an active grant
empty1

So the deadline is signed as the source's own string, and a separate application_deadline_iso field is populated only when the source actually gave a date — null for Ongoing. A grant moving from Ongoing to a real date therefore reports as acquiring a deadline, not as a date change and not as a parse failure.

The small-business slice is a filter, not another Actor

applicant_types: ["Business"] — 477 of 1,973 rows on 2026-07-28. The source lists several types per row separated by ;, so matching is substring and case-insensitive. Other tokens: Public Agency 1,557, Nonprofit 1,309, Tribal Government 959, Individual 375, Other Legal Entity 146.

Pricing

Pay-per-event on the ratified four-tier ladder (FREE → GOLD, with Platinum and Diamond floored at the Gold rate). Apify applies its own plan discount on top.

EventFREEBRONZESILVERGOLD
Actor start (apify-actor-start)$0.02$0.02$0.02$0.02
Source check (source-check)$0.10$0.09$0.08$0.067
New-opportunity delta (ca-grant-delta)$0.10$0.09$0.08$0.067

source-check is charged once per run, after the source enumeration terminates — seed runs and no-change runs included. It is not charged when the source refused the read.

ca-grant-delta is charged per emitted delta, in watch mode only. Seed runs and no-change runs charge nothing here.

apify-actor-start is the platform's reserved event, never charged in this code. The Actor is clamped to 1024 MB on both settings, so it is charged exactly once per run — the platform bills it once per gigabyte of run memory.

Snapshot mode is a PREVIEW

watch_mode: false returns at most 25 records, hard-capped in code, labelled output_mode: "preview". This Actor sells change detection, not bulk export.

Watch semantics

The first watch run stores a private baseline and emits zero deltas. Later runs emit NEW / CHANGED keyed on PortalID, with before / after and changed_fields. Billed deltas are capped at 500 per run; the overflow is a named PARTIAL withholding, never billed, and re-detected on the next run.

One delta type per Actor

This Actor emits new-opportunity and nothing else. Its sibling reads the same file for the other slice, each with its own baseline and its own price.

Terminal states

NORMAL · SUCCEEDED-0: GENUINE_EMPTY · SUCCEEDED-0 (no change) · PARTIAL · BLOCKED. A zero with no evidence FAILS loud rather than exiting 0 quietly.

A file that arrives and does not parse BLOCKS. It is never reported as an empty source. The portal serves this CSV with a UTF-8 byte-order mark; on build 0.1.2 that made every PortalID lookup miss, so a 6,401,507-byte read parsed to zero rows and the run announced GENUINE_EMPTY about a file holding 1,973 live grants. Since 0.1.3 the mark is stripped, the key column is checked by name, and a large body that yields no rows fails the run loudly naming what arrived. An outage you can see beats an emptiness you cannot.