California New Grant Opportunity Watch
Pricing
from $67.00 / 1,000 new-opportunity deltas
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
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:
| shape | rows |
|---|---|
a timestamp, 2026-09-01 23:59:00 | 1,845 |
the literal string Ongoing | 127 — every one an active grant |
| empty | 1 |
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.
| Event | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|
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.