# Grants.gov Opportunity Alert — Daily Federal Grant Diff (`changewire/grantsgov-opportunity-alert`) Actor

Daily diff feed for the Grants.gov public REST API. Emits JSONL records for every change to status, close-date, award ceiling/floor, eligibility, or synopsis. Replaces $550-2,400/yr NOFO trackers (GrantStation, FDO) at $3-15/mo. For grant writers, university grants offices, and AI funding agents.

- **URL**: https://apify.com/changewire/grantsgov-opportunity-alert.md
- **Developed by:** [ChangeWire](https://apify.com/changewire) (community)
- **Categories:** AI, Agents, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Grants.gov API Wrapper — Daily Funding Opportunity Diff Feed

> Daily diff of federal grant opportunities for grant writers,
> nonprofit BI teams, and AI agents. Watches Grants.gov public
> REST endpoints for status / close-date / award-amount / eligibility
> changes and emits JSONL change records.

### What this does

- **Tracks every federal NOFO posted to Grants.gov** with full historical
  diff coverage (status / close-date / award-ceiling / award-floor /
  award-count / eligibility / synopsis-text).
- **Cuts grant-deadline detection latency from days to hours** so
  grant writers don't miss pull-forward close dates or freshly
  posted NOFOs in their watched CFDA codes.
- **Replaces $550-2400/yr commercial NOFO trackers** with a metered
  pay-per-result Apify actor at $3-15/month for a typical filter set.

### Use cases

#### Grants gov daily alert for nonprofit grant writers

A grant-writing agency tracking 200-500 opportunities across HHS,
NIH, NSF, and USDA filters this actor on `agencies: ["HHS", "NIH"]`
+ `cfda_numbers: ["93.243", "93.205", "93.226"]` + `statuses:
["forecasted", "posted"]`. Schedules it daily at 06:00 UTC. Pipes
the dataset into Slack `#grants-alerts` via webhook. Cost:
roughly 30-150 change records per week × $0.02 = $0.60-3/wk =
$3-12/mo. Replaces a $699/yr GrantStation seat with full diff
fidelity (close-date pull-forwards + award-ceiling adjustments
that GrantStation summarizes monthly).

#### Federal funding opportunity API for university grants offices

A research university's central grants office filters on
`eligibilities: ["06"]` (state higher ed) + `statuses: ["posted"]`,
runs every 12 hours, and pushes the JSONL feed into their internal
Grants Pipeline BI tool (Tableau / PowerBI). The 7-change-type
schema lines up cleanly with their existing opportunity-tracking
data model — they don't have to re-shape anything. Sub-second
joins against their existing PI-interest watchlist surface
matches in their grants newsletter without manual triage.

#### NOFO tracking automation for AI funding-discovery agents

A funding-discovery AI agent embedded in a foundation's research
desk consumes the diff stream as a retrieval-augmented fact source.
Each diff record is a structured event the agent can reason over
("HHS just pulled the close date forward on CFDA 93.243 by 16
days") rather than an unstructured "grants.gov has new content"
HTML page. The agent uses change records to prompt the foundation's
program officers proactively rather than waiting for the next
weekly digest.

### Input

See `.actor/input_schema.json` for the full schema. Key fields:

| Field | Type | Default | Description |
|---|---|---|---|
| `watchlist` | array of opp numbers | `[]` | Explicit list, e.g. `["HHS-2026-IHS-RAP-0001"]` |
| `keywords` | array of strings | `[]` | Title + synopsis keyword filter |
| `agencies` | array of strings | `[]` | Agency codes (HHS, NIH, NSF, USDA, DOD) |
| `cfda_numbers` | array of strings | `[]` | CFDA / Assistance Listing Numbers (e.g. `93.243`) |
| `funding_categories` | array of strings | `[]` | Grants.gov category codes |
| `eligibilities` | array of strings | `[]` | Eligibility codes (00, 06, 07, 11) |
| `statuses` | array of strings | `["forecasted","posted"]` | forecasted / posted / closed / archived |
| `change_types` | array of strings | all seven | Subset of {status, close_date, award_ceiling, award_floor, award_count, eligibility, synopsis_text} |
| `snapshot_key` | string | `snapshot-latest` | Key-value-store key for previous snapshot (lets you run multiple watchlists in one account) |
| `max_opportunities` | int | 5000 | Hard cap so a misconfigured filter can't blow the budget |

Realistic example input:

```json
{
  "agencies": ["HHS", "NIH"],
  "cfda_numbers": ["93.243", "93.205", "93.226"],
  "statuses": ["forecasted", "posted"],
  "max_opportunities": 500
}
````

### Output

JSONL dataset; one record per detected change:

```json
{
  "actor": "actor-2-grantsgov-opportunity-alert",
  "schema_version": "1.0.0",
  "extracted_at": "2026-05-16T12:00:00Z",
  "source_url": "https://www.grants.gov/search-results-detail/352001",
  "opportunity_id": "352001",
  "opportunity_number": "HHS-2026-IHS-RAP-0001",
  "change_type": "close_date",
  "before": {"synopsis.responseDate": "12/15/2026"},
  "after":  {"synopsis.responseDate": "12/31/2026"},
  "detected_at": "2026-05-16T12:00:00Z"
}
```

Apify Console preview shows a 5-column table view (opp ID / opp ## /
change type / detected at / source URL) so non-engineers can
sanity-check runs before piping into BI.

### Pricing & limits

- **$0.02 per result** (per detected diff record).
- **Free 7-day trial** so you can verify the diff fidelity against
  your own watchlist before committing.
- **Recommended schedule:** daily for posted/forecasted opps,
  every 12 hours for active-deadline workflows.
- **Estimated monthly cost:**
  - Small filter (~200-500 watched opps, weekly cadence): **$3-12/mo**
  - Mid-market BI (~5,000 opps, daily cadence): **$30-180/mo**
  - Replaces GrantStation Premium ($699/yr) and Foundation Directory
    Online ($550/yr) at substantially lower cost with full diff
    fidelity rather than monthly snapshots.

### Data source & freshness

- **Source:** Grants.gov public REST API (`POST /v1/api/search2`
  - `POST /v1/api/fetchOpportunity`), <https://www.grants.gov/api>
- **Update cadence (source-side):** Grants.gov refreshes posted
  opportunities continuously as agencies submit them; in practice
  most posting activity falls within US business hours. Forecasted
  opportunities update less often (typically weekly per agency).
- **Actor cadence (recommended):** Daily 06:00 UTC for forecasted
  - posted; every 12 hours if you depend on intra-day close-date
    detection.
- **Public-domain license:** Grants.gov data is US government
  public-domain under the DATA Act 2014 (Pub. L. 113-101) +
  FFATA (Pub. L. 109-282). No restrictions on derivative use.

### FAQ

#### What's the difference between a Grants.gov "watchlist" and "filters"?

A **watchlist** is an explicit list of opportunity numbers you
already know about (e.g. NIH PA-25-225). The actor only checks
those. **Filters** (agencies / CFDA / eligibilities / statuses)
let the actor discover new opportunities that match your criteria
on each run. Most buyers use filters; watchlists are for narrow
"watch this specific NOFO" workflows.

#### Does this give me forecasted opportunities or only posted ones?

Both. `statuses: ["forecasted", "posted"]` is the default. Forecasted
opportunities have a `forecast.*` block with parallel field names
to the `synopsis.*` block on posted opps. When a forecasted opp
graduates to posted, the actor emits a `change_type: status` record
plus per-field synopsis-level changes on the same cycle.

#### How does this compare to the Grants.gov RSS feed?

The Grants.gov RSS feed is post-only (no diffs, no field-level
change semantics, no forecasted opps). It's useful for "did
something new appear" but not for "did the close date shift" or
"did the award ceiling drop by 20%" — both of which this actor
emits as structured records.

#### Can I run multiple independent watchlists from one Apify account?

Yes. Each watchlist gets its own `snapshot_key` value. The actor
reads/writes the previous snapshot from `snapshot_key` in your
Apify Key-Value Store, so two runs with different keys don't
trample each other.

#### What about the Grants.gov S2S SOAP API?

This actor uses the **public REST API** (read-only opportunity
discovery). The S2S SOAP API is for application *submission* and
requires Workspace credentials — that's a different product and
out of scope here.

#### How is dates formatted? ISO 8601?

No — Grants.gov returns dates as `MM/DD/YYYY` strings (US format).
The diff comparison treats them as opaque strings. Downstream
consumers re-parse for timezone-aware deadlines.

#### What does `awardCeiling: "none"` mean?

Some agencies post opportunities with no fixed dollar ceiling and
the API returns the literal string `"none"` rather than `null`.
The diff stream treats `"none"` as a present value, so transitions
like `"none" → 50000` emit on the next snapshot. Treat literal
`"none"` as a missing-data signal, not as the dollar amount zero.

#### Is there a rate limit risk?

The actor self-limits to roughly 2 req/s and respects standard
Grants.gov throttling. We've never hit the limit at typical
filter sizes. If you push `max_opportunities` past 10,000 you
should split into multiple runs with disjoint filters.

### Companion actors in this portfolio

`changewire` maintains a portfolio of federal-data diff actors. All
share the same daily-snapshot + JSONL change-record pattern, watchlist
filtering, and per-record change-type semantics. Pick the data domain
you need; mix and match across a single Apify account:

- [`changewire/clinicaltrials-protocol-diff`](https://apify.com/changewire/clinicaltrials-protocol-diff) — NIH-registered trial protocol diffs.
- [`changewire/fda-orange-book-extraction`](https://apify.com/changewire/fda-orange-book-extraction) — FDA Orange Book pharmaceutical applications + patent listings.
- [`changewire/noaa-storm-events-diff`](https://apify.com/changewire/noaa-storm-events-diff) — NOAA NCEI storm-event records.
- [`changewire/uspto-ttab-docket-extractor`](https://apify.com/changewire/uspto-ttab-docket-extractor) — USPTO TTAB trademark docket records + filings.
- [`changewire/epa-echo-compliance`](https://apify.com/changewire/epa-echo-compliance) — EPA ECHO facility compliance status + violations.
- [`changewire/samgov-contracts-diff`](https://apify.com/changewire/samgov-contracts-diff) — SAM.gov federal contract opportunities, daily diff. *(currently hard-blocked on identity-tied SAM.gov API key; awaiting user-machine key generation)*

### Running locally (for contributors)

```bash
cd actors/actor-2-grantsgov-opportunity-alert
apify run --purge  ## uses .actor/input_schema.json defaults
```

Targeted run:

```bash
apify run --input '{"watchlist": ["HHS-2026-IHS-RAP-0001"]}'
```

Filter run:

```bash
apify run --input '{"agencies": ["HHS"], "statuses": ["posted"], "max_opportunities": 100}'
```

### Legal

Grants.gov data is US government public-domain under the DATA Act
2014 (Pub. L. 113-101) + FFATA (Pub. L. 109-282). The actor
respects polite ~2-rps rate limit and emits no PII.

# Actor input Schema

## `watchlist` (type: `array`):

Explicit list of opportunity numbers (e.g. HHS-2026-IHS-RAP-0001). If empty, use filters below.

## `keywords` (type: `array`):

Free-text keyword filter applied to title and synopsis (OR-combined).

## `agencies` (type: `array`):

Agency codes (e.g. HHS, NIH, NSF, USDA, DOD). Partial match.

## `cfda_numbers` (type: `array`):

Catalog of Federal Domestic Assistance numbers (e.g. 93.243, 84.305). Now formally Assistance Listing Numbers (ALN).

## `funding_categories` (type: `array`):

e.g. \['HL','ED','ST']. See Grants.gov category code list.

## `eligibilities` (type: `array`):

Eligibility codes (e.g. '00' Unrestricted, '06' Public/State Higher Ed, '07' Nonprofit).

## `statuses` (type: `array`):

Subset of: forecasted, posted, closed, archived. Default: forecasted + posted.

## `change_types` (type: `array`):

Subset of: status, close\_date, award\_ceiling, award\_floor, award\_count, eligibility, synopsis\_text.

## `snapshot_key` (type: `string`):

Key-value store key holding the previous snapshot. Default: 'snapshot-latest'.

## `max_opportunities` (type: `integer`):

Hard cap on opportunities fetched per run (cost ceiling).

## `rate_limit_rps` (type: `integer`):

Grants.gov has no published RPS but honour 2 rps as polite-default.

## Actor input object example

```json
{
  "watchlist": [],
  "keywords": [],
  "agencies": [],
  "cfda_numbers": [],
  "funding_categories": [],
  "eligibilities": [],
  "statuses": [
    "forecasted",
    "posted"
  ],
  "change_types": [
    "status",
    "close_date",
    "award_ceiling",
    "award_floor",
    "award_count",
    "eligibility",
    "synopsis_text"
  ],
  "snapshot_key": "snapshot-latest",
  "max_opportunities": 5000,
  "rate_limit_rps": 2
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("changewire/grantsgov-opportunity-alert").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("changewire/grantsgov-opportunity-alert").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call changewire/grantsgov-opportunity-alert --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=changewire/grantsgov-opportunity-alert",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Grants.gov Opportunity Alert — Daily Federal Grant Diff",
        "description": "Daily diff feed for the Grants.gov public REST API. Emits JSONL records for every change to status, close-date, award ceiling/floor, eligibility, or synopsis. Replaces $550-2,400/yr NOFO trackers (GrantStation, FDO) at $3-15/mo. For grant writers, university grants offices, and AI funding agents.",
        "version": "0.1",
        "x-build-id": "s8rESXtTNFLAcP2yw"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/changewire~grantsgov-opportunity-alert/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-changewire-grantsgov-opportunity-alert",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/changewire~grantsgov-opportunity-alert/runs": {
            "post": {
                "operationId": "runs-sync-changewire-grantsgov-opportunity-alert",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/changewire~grantsgov-opportunity-alert/run-sync": {
            "post": {
                "operationId": "run-sync-changewire-grantsgov-opportunity-alert",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "watchlist": {
                        "title": "Watchlist (Opportunity numbers)",
                        "type": "array",
                        "description": "Explicit list of opportunity numbers (e.g. HHS-2026-IHS-RAP-0001). If empty, use filters below.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "keywords": {
                        "title": "Keywords",
                        "type": "array",
                        "description": "Free-text keyword filter applied to title and synopsis (OR-combined).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "agencies": {
                        "title": "Agencies",
                        "type": "array",
                        "description": "Agency codes (e.g. HHS, NIH, NSF, USDA, DOD). Partial match.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "cfda_numbers": {
                        "title": "CFDA / ALN numbers",
                        "type": "array",
                        "description": "Catalog of Federal Domestic Assistance numbers (e.g. 93.243, 84.305). Now formally Assistance Listing Numbers (ALN).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "funding_categories": {
                        "title": "Funding categories",
                        "type": "array",
                        "description": "e.g. ['HL','ED','ST']. See Grants.gov category code list.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "eligibilities": {
                        "title": "Applicant eligibilities",
                        "type": "array",
                        "description": "Eligibility codes (e.g. '00' Unrestricted, '06' Public/State Higher Ed, '07' Nonprofit).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "statuses": {
                        "title": "Opportunity statuses",
                        "type": "array",
                        "description": "Subset of: forecasted, posted, closed, archived. Default: forecasted + posted.",
                        "default": [
                            "forecasted",
                            "posted"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "change_types": {
                        "title": "Change types to emit",
                        "type": "array",
                        "description": "Subset of: status, close_date, award_ceiling, award_floor, award_count, eligibility, synopsis_text.",
                        "default": [
                            "status",
                            "close_date",
                            "award_ceiling",
                            "award_floor",
                            "award_count",
                            "eligibility",
                            "synopsis_text"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "snapshot_key": {
                        "title": "Snapshot key",
                        "type": "string",
                        "description": "Key-value store key holding the previous snapshot. Default: 'snapshot-latest'.",
                        "default": "snapshot-latest"
                    },
                    "max_opportunities": {
                        "title": "Max opportunities per run",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Hard cap on opportunities fetched per run (cost ceiling).",
                        "default": 5000
                    },
                    "rate_limit_rps": {
                        "title": "API rate limit (requests per second)",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Grants.gov has no published RPS but honour 2 rps as polite-default.",
                        "default": 2
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
