# NIH Type1 Territory Award Review (`remarkable_whipscorpion/nih-territory-award-review`) Actor

A bounded queue of new Type1 administrative NIH award notices for human account review in your states and administering institutes.

- **URL**: https://apify.com/remarkable_whipscorpion/nih-territory-award-review.md
- **Developed by:** [Kagerou AP](https://apify.com/remarkable_whipscorpion) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 unique eligible award saveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## NIH Type1 Territory Award Review

Regional scientific supplier sales operations teams can retrieve a small factual queue of NIH Type1 administrative award notices for human CRM account review. Make one weekly API call for your owned states and administering NIH institutes, then supply previously reviewed `applId` values to omit those exact records on later runs.

The Actor uses the official, keyless [NIH RePORTER Projects API](https://api.reporter.nih.gov/). It checks the actual returned award type, project-number application type, organization state, administering institute and notice calendar date before returning each award. Type1 is a source administrative application classification; it does not mean the institution is a new NIH customer.

### Try it

The form prefill, `sample-input.json` and API `exampleRunInput` use the same input:

```json
{"states":["MA"],"adminInstitutes":["NCI"],"maxResults":20,"previousApplicationIds":[]}
```

At runtime the omitted dates become UTC today minus 30 days through UTC today, inclusive. The Actor filters the source notice calendar date while preserving its original timestamp. It searches all fiscal years, including when the interval crosses October 1, and does not enable an active-only filter.

Optional `awardFrom` and `awardTo` are valid `YYYY-MM-DD` dates, inclusive, with a maximum 30-day span and no future `awardTo`. If supplying one date, the other still takes its ordinary runtime default; supply both for a historical window. There are no fixed dates in prefill or the API example.

Input limits: 1–5 US states/DC, 1–3 supported administering institutes, 1–100 maximum new output awards, and at most 1000 positive integer previous application IDs. State and institute abbreviations are uppercase. Territories are outside this MVP. Supported NIH extramural ICs: NCI, NEI, NHLBI, NHGRI, NIA, NIAAA, NIAID, NIAMS, NIBIB, NICHD, NIDCD, NIDCR, NIDDK, NIDA, NIEHS, NIGMS, NIMH, NIMHD, NINDS, NINR, NLM, NCCIH, NCATS, FIC. FDA/AHRQ, OD, intramural-only centers and historical NCRR are outside this product's allowlist.

### Results and coverage

Each `award` row contains stable `applId`, project number, both source application-type fields, organization name/state, UEI/IPF if present, administering institute, source award amount, raw notice and project-start dates, source fiscal year, NIH project URL, observation time and `newToSuppliedIds: true`. Missing optional values are `null`. `awardAmountUSD` is the administrative source award amount, not a future grant total, available purchasing budget or spending forecast.

Identical application IDs are deduplicated. Conflicting records for the same application ID are omitted. Already supplied application IDs incur no custom result fee. No record's absence implies termination, expiry, withdrawal or no change.

Retrieval is capped at two sequential pages of 100 source records, 25 seconds and 2 MB per response, with at least 1.1 seconds between request starts. Output is further bounded by `maxResults` and the run's available award budget. Every row includes `coverage`: returned source total, retrieved pages/rows, invalid/out-of-scope and duplicate counts, prior-ID omissions, output count and truncation reason. A retrieved-scope count is never a claim of complete NIH coverage. Source updates, lag and changes while paging remain possible. All fiscal years are requested; current FY2027 availability is not guaranteed by this filter.

No useful rows produces one `summary` row with zero custom award fee. On missing/error/403/429/redirect challenge data, a `source_failed_or_unknown` summary is saved and the run fails with no custom award fee. There are no source retries or challenge bypasses. A later page error releases no first-page award rows.

The default Dataset is the saved review queue. Key-value `OUTPUT` contains authoritative coverage and custom charge settlement. `CHECKPOINT` records the same funded slice and operation state. A native restart reads the checkpoint, returns a fully settled result without republishing, and refuses automatic replay of an incomplete publication or unknown remote charge. A failed run with an ambiguous charge requires native ledger reconciliation by the release/maintenance operator; it never blindly charges again. Dataset rows preserve the publication-time billing state; use `OUTPUT` and the platform charge ledger for settlement.

### Price

Proposed Pay-per-event pricing: **$0.005 per unique eligible award actually saved**, plus a separate automatic **$0.00005 Actor start** event. Default Dataset item fee is zero. Price configuration must match exactly at runtime; an unexpected event fee is rejected before source retrieval. At most 20 default awards means up to $0.10005 in event charges; the 100-row cap means up to $0.50005. Normal Apify platform terms, compute treatment and any account/owner fee waiver remain platform-controlled. A local unbilled test does not prove native owner-waiver behavior. Native pricing and actual compute are unverified before the first authorized cloud run.

The funded award capacity is applied before any useful Dataset, OUTPUT or CHECKPOINT save. The funded slice is persisted and published before per-award charging. Zero, subunit and fractional limits exclude unfunded rows. Source errors never create custom award events. A publication/charge interruption can leave accessible funded rows whose settlement is unknown or incomplete; the checkpoint marks that state and prevents replay. Automatic startup charges are separate: zero custom awards does not mean a totally free native run.

### Source and use

Source attribution: NIH RePORTER; observation time appears on each award. The official API is intended for third-party reporting/integration/business applications and [documents its access limits](https://api.reporter.nih.gov/). This Actor uses only administrative facts and NIH record links, under the selected-source/general public-domain basis recorded for this project. Government general guidance is not a blanket license for third-party works. Titles, abstracts, PI names, contacts, scientific interpretation, equipment-need guesses, clinical decisions and third-party images/logos are excluded. No NIH endorsement is implied. Human account review is required.

`sample-output.json` is a dated actual local observation, not a perpetual freshness guarantee. The official [NIH Awards by Location & Organization](https://report.nih.gov/award/index.cfm) also explains that current data can change. This product's results are an account-review input and do not establish any organization's purchasing intent.

### Development

Requires Node 24.18.0 and the pinned Apify SDK 3.7.2. `npm ci --ignore-scripts`, `npm test`, `npm run validate`, `npm run live`. `live` makes a bounded real official API request, writes a minimized administrative fixture/sample and verifies actual local SDK INPUT/Dataset/OUTPUT/CHECKPOINT storage. It performs no native build/run/publish or paid upstream call. Tests clear cloud credentials/flags and set a fresh SKU-local resolved storage path before the first SDK import, assert the actual SDK storage location and never purge/drop shared storage. Production local launches likewise use fresh SKU-local storage; native restarts use native run storage.

The Docker image installs from `package-lock.json`. Local dependency copies, npm cache, storage and tests are excluded from the Docker context; a successful native Docker build and schema recognition still need independent release verification. This MVP contains native fetch and Apify storage/charging only; it has no notifications, contact enrichment, browser, proxy, LLM, database or dashboard.

# Actor input Schema

## `states` (type: `array`):

One to five uppercase US state codes or DC. Default MA. No territories in this MVP.

## `adminInstitutes` (type: `array`):

One to three NIH extramural IC abbreviations; default NCI. Administering institute, not merely a funding agency. FDA/AHRQ/OD and historical NCRR are excluded. Supported values are listed in README.

## `maxResults` (type: `integer`):

Default 20, maximum 100. Source search is capped at two 100-record pages; output and source coverage can be partial.

## `previousApplicationIds` (type: `array`):

Up to 1000 positive integer appl_id values from prior runs. These IDs are omitted without a custom award fee. Absence does not imply removal or expiry.

## `awardFrom` (type: `string`):

YYYY-MM-DD. Omitted uses UTC today minus 30 days. Inclusive source notice calendar date; maximum 30-day span.

## `awardTo` (type: `string`):

YYYY-MM-DD, inclusive. Omitted uses UTC today. Future dates are rejected; source timestamps retain their original representation.

## Actor input object example

```json
{
  "states": [
    "MA"
  ],
  "adminInstitutes": [
    "NCI"
  ],
  "maxResults": 20,
  "previousApplicationIds": []
}
```

# Actor output Schema

## `awards` (type: `string`):

No description

## `output` (type: `string`):

No description

# 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 = {
    "states": [
        "MA"
    ],
    "adminInstitutes": [
        "NCI"
    ],
    "maxResults": 20,
    "previousApplicationIds": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("remarkable_whipscorpion/nih-territory-award-review").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 = {
    "states": ["MA"],
    "adminInstitutes": ["NCI"],
    "maxResults": 20,
    "previousApplicationIds": [],
}

# Run the Actor and wait for it to finish
run = client.actor("remarkable_whipscorpion/nih-territory-award-review").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "states": [
    "MA"
  ],
  "adminInstitutes": [
    "NCI"
  ],
  "maxResults": 20,
  "previousApplicationIds": []
}' |
apify call remarkable_whipscorpion/nih-territory-award-review --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,remarkable_whipscorpion/nih-territory-award-review"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/3GAIZtq89lqUBdYDS/builds/qOXdfWcM8mt6koED5/openapi.json
