Skip to main content

grantscan

Which of our papers acknowledged this grant?

Research groups have to answer that question repeatedly: for a funder's final report, for a renewal, for an institutional review. The answer is buried in the acknowledgment paragraph of every paper the group has published, and the codes themselves are unmemorable strings like RTG 4200/1 or 900123456.

Answering it by hand means opening papers one at a time and reading the small print at the end of each. Answering it with a normal search is worse than it sounds, because a code that reads cleanly on the page rarely survives being extracted from a PDF: it breaks across a line, loses its spaces, or fuses to the word beside it. Searching for what you can see gets you a fraction of what is there.

grantscan reads a folder of papers once and then answers that question in milliseconds, for one code or for a whole reporting portfolio, showing you the sentence each answer rests on so you can judge it rather than trust it.

grantscan

It also answers the question a spreadsheet cannot: which of the codes you asked about appear in no paper at all. For a report you have to sign, that is usually the line that matters.

Getting it

Download grantscan.exe from the latest release and double-click it. It needs no installation, no Python, and no network.

Or, with Python 3.12 or newer:

pip install grantscan
grantscan

Using it

The user guide is written for the people who will use this rather than work on it. In short: add your folders, list the codes you care about, press Search.

Papers are read on your computer. Nothing is sent anywhere.

Working on it

DESIGN.md explains how it is put together and why, including what was measured to decide it.

uv sync
uv run pytest
uv run ruff check .
uv run ruff format .
uv run mypy
uv run grantscan

Dependencies are managed with uv add, never by editing pyproject.toml.

package what it does
core/ normalising, parsing a code, locating sections, matching. Pure functions.
model/ the corpus, its text store, and the only module importing a PDF library
presenter/ thread pool, search generations, exact-then-fuzzy staging
export/ writing a run to a workbook
view/ PySide6. The only package importing Qt.

Licence

MIT. It reads PDFs with pypdfium2 over Google's PDFium, which is BSD-3-Clause, and draws its interface with Qt through PySide6, which is LGPL-3.0.

Metadata

Release files for grantscan 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for grantscan 0.1.0
File Size Uploaded Provenance
grantscan-0.1.0.tar.gz 28.1 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for grantscan 0.1.0
File Interpreter ABI Platform
grantscan-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 64.8 kB

Release files / grantscan-0.1.0.tar.gz

Download URL grantscan-0.1.0.tar.gz
Size 28.1 kB
Tags Source
SHA-256 checksum
How to use checksums
ba49982087ed72c182524d377ae96b91a2702fe0f064ce985042e6e6a38b0e0c
BLAKE2b-256 checksum
How to use checksums
ed2ef9e671aec091aae3c6994f1634c5a6acb25a118cca219b2a333cae14cba9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 8, 2026.

Transparency log

Release files / grantscan-0.1.0-py3-none-any.whl

Download URL grantscan-0.1.0-py3-none-any.whl
Size 36.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
70cfe6db8c979cdccfeefc0db5d75a0999f635a5e15f7092efd125f90c79663a
BLAKE2b-256 checksum
How to use checksums
ad5c5d2029a3845f47133d3e788c69b3b4ba51fe3e1dde992ef3b30c230dec3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 8, 2026.

Transparency log

Security for grantscan 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for grantscan-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 8, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page