Analyze NIH grant portfolios and funding history using the OpenNIH FY1985-present corpus, then connect grants to investigators, institutions, publications, clinical trials, patents, targets, or drugs with ToolUniverse. Use for NIH grant discovery, topic or Institute/Center trends, PI and institution profiles, activity-code or mechanism analysis, funding growth and concentration, grant-writing landscape research, SBIR/STTR landscapes, research-policy analysis, expert discovery, funding-to-output translational impact studies, or public-facing NIH explainers for patients, advocates, local and national journalists, trainees, applicants, institutions, entrepreneurs, and taxpayers.
87%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Build source-traceable NIH funding analyses with explicit scopes, count units, data coverage, and interpretation limits. Use OpenNIH_* for funding facts and other ToolUniverse sources only for downstream evidence they actually cover.
Always read references/tool-reference.md before choosing tools or comparing totals. Read references/verified-cases.md when testing the skill, debugging an unexpected response, or adapting one of the verified case patterns. Read references/public-value-cases.md for a patient, family, advocate, journalist, trainee, applicant, taxpayer, policy, or other public-facing request.
Start from the reader's decision, not from the available endpoints:
| Reader | Optimize the answer for | Never imply |
|---|---|---|
| Patient, family, advocate | A topic-specific research map, recent activity, inspectable projects, and next contacts | Clinical expertise, quality of care, treatment advice, or patient benefit from funding alone |
| Journalist, taxpayer, policy analyst | A reproducible headline number, its definition, its largest drivers, and its sensitivity to alternate queries | That the largest number is the truest, a partial year is final, or spending caused outcomes |
| Researcher, trainee, applicant | Funded precedents, active mechanisms, institutions, and project language | Application odds, reviewer preferences, mentorship quality, or K99-to-R00 conversion |
| Institution or translational team | Resolved peer portfolios and exact identifiers for output follow-up | Raw-name totals as one entity or grant-output chronology as causality |
| Local reporter or community | A location-qualified portfolio joined through resolved institutions | That an institution-name substring is a city/state geography query or that award location equals beneficiary location |
| Entrepreneur | Topic-specific R41/R42/R43/R44 awards, companies, and phase-labeled project activity | Commercial success, current company status, addressable market, or Phase I-to-II conversion from annual award rows |
For public output, give: (1) a one-sentence answer with window/surface/unit, (2) the records or outliers that drive it, (3) the material definition sensitivity, (4) what the evidence does not prove, and (5) a public link or stable-identifier next step. If an answer cannot change a reader's next action, narrow the question before adding more tables.
OpenNIH_source_status before a broad report, an absence claim, publication/detail linkage, or any current-year conclusion. Capture the main-corpus fiscal years, latest-year status, snapshot-lag note, and sidecar coverage relevant to the requested window.Choose the matching path:
OpenNIH_search_grants, then OpenNIH_topic_trend. Use OpenNIH_ic_topic_cross to measure the topic within one named IC or to inspect its RCDC/text classification. ic="ALL" returns one combined NIH scope, not a per-IC table. To rank ICs, fully paginate search_grants, choose all-mechanism or comparable=true RPG scope explicitly, group the returned ic field, and reconcile the pages before reporting.LAST, FIRST first. If a user supplies First Last and gets zero results, retry Last, First and surname-only. Collect every returned pi_profile_id; disambiguate candidates using full displayed name, institution, project title, IC, and fiscal year before calling OpenNIH_get_pi_profile. The same historical name and institution can still appear under multiple source profile IDs; inspect overlap and provenance rather than summing profiles. When name-order fallbacks still leave multiple candidates, or when the profile's missing publications field needs filling, cross-check identity with ORCID_search_researchers/ORCID_get_profile — see references/tool-reference.md#orcid-identity-cross-check.OpenNIH_rank_institutions and use its returned entity_id. Paginate the ranking if the requested institution is not on the first page. Never construct or guess an entity ID from a name, and never treat search_grants(institution=...) substring totals as one resolved entity without inspecting every matched org_name. When a user supplies a free-text affiliation string as printed in a paper (e.g. "Dept. of Chemistry, Harvard Univ.") rather than a clean institution name, resolve it first with ROR_match_affiliation — verified live, it returns a ranked list of Research Organization Registry matches with confidence scores (e.g. "Department of Chemistry, Harvard University" -> Harvard University, ROR ID, chosen: true); ROR_search_organizations/ROR_get_organization then give canonical name variants, parent/child relationships (useful for hospital-system or university-affiliate rollups), and external IDs (GRID, ISNI, Wikidata) for cross-referencing against whatever name string OpenNIH_rank_institutions actually returns.OpenNIH_funding_trend, OpenNIH_activity_code_distribution, or single-year OpenNIH_institution_concentration snapshots.OpenNIH_search_grants(project_num=...), then OpenNIH_fetch for a citation-shaped record and public URL. NIHReporter_get_project/NIHReporter_search_projects (the live official NIH RePORTER API) is a simpler direct path for a single known project or a live full-text search, when the OpenNIH bulk-corpus machinery above is more than the question needs.institution= as a city/state filter. OpenNIH returns raw organization names but no location fields on grant rows; require a separately sourced institution-to-location crosswalk joined through resolved entities, or state that geographic attribution is unsupported.core_project_num when the question asks for distinct awards. A core number alone is not fetchable.ic_topic_cross selects RCDC, inspect every matched_rcdc_categories value. Generic words such as disease, disorder, syndrome, or research can make the matched-category list noisy. Rerun a distinctive seed such as Alzheimer instead of Alzheimer's Disease, and compare forced text versus rcdc when the conclusion depends on classification.matched_rcdc_categories, alternate_surface_grants, and no_match_note. A phrase such as health equity may have no exact official RCDC category while title text matches many awards; this is a controlled-vocabulary gap, not $0 or absence.PASC matched PASCALL and a surname; prefer a disease-specific phrase and deduplicate a multi-query union by stable award identifiers.meta.total <= 100050; limit is 50 and offset is capped at 100000. If the slice is larger, narrow it by fiscal year, exact IC/activity, or a more specific query, and aggregate reconciled partitions. For a retrievable slice, verify collected rows equal meta.total, the number of non-null amounts equals meta.reported_grant_count, and distinct non-null core IDs equal meta.distinct_awards. Sum dollars only when at least one amount is reported; when reported_grant_count=0, require meta.total_funding=null and report dollars as not reported, never $0.OpenNIH_search as citation discovery, not a record-level precision audit. Multi-component matches can be canonicalized to a parent project whose visible title/text omits the query terms. Validate the matching component with search_grants before using a citation-shaped hit as representative topical evidence.project_num values before reporting dollars or counts. Use meta.total > meta.unique_project_nums to detect repetition across the full slice even when the returned page shows each number only once. In a multi-component award, search_grants.meta.total_funding is a row sum and can contain both a parent amount and component allocations. If the component sum equals the parent, the row sum doubles unique-award dollars. Show the canonical parent amount and component allocation table separately; if the structure does not reconcile, withhold a unique-award total.get_institution_profile is a multi-scope container: mechanism_mix is the institution's all-mechanism portfolio, while funding_trend and top_pis are RPG-research only. Its sections share the requested window, not one funding scope.rank_institutions may roll up campus name families; profiles, mechanism mix, growth, and concentration use one canonical entity_id. Totals can differ even when labels look identical.rank_institutions, sort_by="funding_scale" means top-funded. The default composite is a weighted score; label it a composite ranking, not a funding ranking.rank_institutions can return positive funding and fully reported rows while search_grants, funding_trend, institution profile/growth, and concentration return null dollars for the same years. Treat that ranking-dollar surface as quarantined unless it reconciles at runtime; counts may still be described separately. Do not use its funding or composite order in a cross-endpoint historical conclusion.ic_topic_cross, total_grants is a count of distinct non-null core awards in the RPG-research slice, while total_funding is recorded nominal funding for that same slice. ic="ALL" combines all matched ICs and still returns top institutions, not an IC breakdown.mechanism_mix, share is a 0–1 fraction; render 0.528174 as 52.82%.funding_growth, yoy_growth_pct and cagr_pct are already percentages; render 3.9084 as 3.91%, not 390.84%. The response does not carry a partial field, so check the same years with funding_trend and exclude a partial endpoint from growth/CAGR interpretation.institution_concentration, gini and top5_share are 0–1 fractions, while hhi uses the 0–10,000 scale. Always report total_institutions and use like-for-like single-year snapshots.total_institutions=0. This means the metric is unavailable, not that concentration or funding is zero.topic_trend omits years with no matches and returns data=[] for a wholly unmatched window. Do not claim it zero-filled every requested year; distinguish “no matching rows in covered corpus years” from missing corpus coverage.meta.total_grants; the profile name may remain populated while funding and profile-level year fields are null. Use meta.fiscal_year_start/end for the requested window.get_pi_profile response does not expose a publications field, even when source_status reports the official publication source loaded. Missing is not zero; perform publication linking through PubMed/OpenAlex with exact identifiers or explicit author disambiguation.grant_count, active_grants, and total_funding are always row-level fields, not deduplicated award facts. When a full project number repeats, official parent amounts can be copied onto multiple component rows and inflate both counts and dollars. Reconcile distinct core awards through search_grants and canonical fetch before making award-level claims, even when the current profile page shows no duplicate.fetch returns one canonical row. If metadata.matching_rows > 1, its amount is neither the component sum nor a server-certified deduplicated award total; inspect all search_grants rows.official_detail_source_loaded=true does not mean the requested fiscal years have official detail rows. Check source_status sidecar-year coverage and the actual returned detail fields.award_amount = null as not reported, never zero. State the reported-dollar coverage when it materially affects a comparison.rank_institutions competitive RPG-research totals with funding_trend all-mechanism totals.distinct_awards for award counts and name the unit every time.partial=true. In particular, a latest-year shard or sidecar does not imply a complete fiscal year; inspect the returned row and source_status at analysis time.topic_trend as title-keyword evidence, not semantic classification. Multiword queries use AND logic. Test synonyms separately and show query sensitivity when conclusions depend on terminology.match_strategy, matched categories, and window coverage.no_match_note and alternate_surface_grants; use auto/text or a window reaching FY2008 before making an absence claim.ic_scope.kind, n, and matched_ic_names when filtering by IC. Historical labels may be modernized or many-to-one: a modern alias can select multiple raw labels, while a legacy abbreviation may resolve to zero. Do not reconstruct historical organizational ownership from display labels alone.ic_scope.kind="fragment", treat the result as an inspected multi-IC subset, not the named IC. A broad phrase such as National Institute reported n=26 while returning 25 matched-name entries and only 17 unique modernized display names in the verified case. Preserve all three quantities, flag any mismatch, and prefer an exact abbreviation or ALL; do not infer a precise IC count from the fragment response.source_status before saying a grant, PI, publication link, or fiscal-year record is absent. Say “not found in this snapshot/query” when corpus lag or sidecar gaps remain possible.org_name. Strings such as Massachusetts or Boston match names, not verified locations, and omit organizations whose names lack the place word.meta.total_grants; returned grants and collaborators, including explicit “none returned” and the collaborators' window-independent scope; duplicate full-number audit before using profile counts or dollars; publications reported as unavailable from this endpoint rather than zero.If the data cannot meet a minimum, keep the section and state the actual coverage and reason.
Use exact identifiers where available. Grade claims as:
A publication linked to an award is an attributed output, not proof that the award caused the result. A later trial, patent, or drug program requires independent identity and subject-matter confirmation. An exact grant-number link is stronger than a name/topic match, but it still establishes attribution rather than causality. A topical trial hit is X3 until an exact identifier or independently verified award acknowledgment is found.
For a funding-to-impact study, construct a compact evidence table with:
For broad analyses, return a narrative report with:
For a narrow lookup, answer directly and include only the necessary provenance and caveat. Prefer tables for repeated comparisons and concise prose for one finding.
Before returning, verify that:
ic_topic_cross(ic="ALL") as a ranking;n, matched-list length, and unique displayed names separately when they disagree;sort_by="funding_scale" rather than the composite default;mims-harvard/ToolUniverse
37bb81a
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.