A real knowledge graph
One note per patent, company, inventor, theme and opportunity, wired together with wikilinks. Citations resolve in both directions — cites and cited-by.
Open source · Zero dependencies · Runs offline
PatentScout scans free patent APIs, clusters filings into technology themes, and surfaces candidate opportunity areas — as linked Markdown for Obsidian and a browsable static site. It runs entirely on your machine, and it refuses to report a trend it cannot support.
$ node scan.mjs --source sample PatentScout scan 2026-07-09 Sources: sample · Themes: ai-ml, semiconductors, energy-storage, … Enrichment: heuristic [ok] sample / ai-ml: 62 patents [ok] sample / energy-storage: 64 patents [ok] sample / semiconductors: 56 patents Enriched 450 patents: heuristic × 450. Wrote 534 notes into ~/PatentScout Patents: 450 · Companies: 35 · Inventors: 30 · Themes: 8 Dashboard: 08 Dashboards/Dashboard.md Web site: site/index.html (494 pages)
The part most tools get wrong
Patent scans over a narrow window routinely return one or two records per theme. Report a percentage on that and you get confident nonsense. PatentScout gates every derived signal on a sample-size floor — and says so, in place, when the floor isn’t met.
Filing volume rising (~+200%)
— fast-growing theme.
Concentrated around Acme Inc (1/1)
— incumbent-dominated.
Both derived from a single patent. The “+200%” is one extra filing against a baseline of one. The “incumbent” holds the only record in the set.
Only 1 patent in the scanned window
— below the 8-patent floor for
trend and concentration signals.
Widen scan.dateFrom or enable more
sources before reading anything
into this.
Growth from a zero baseline is undefined, not “+100%”. Absence of evidence in a tiny set is not evidence of white space. The engine refuses both.
What you get
Every run rebuilds a linked knowledge graph, a browsable website, a weekly report, and a dashboard — from the same normalised patent records.
One note per patent, company, inventor, theme and opportunity, wired together with wikilinks. Citations resolve in both directions — cites and cited-by.
Filings by year, 12-vs-12-month momentum, rising and cooling sub-topics. Each gated on its own sample floor, including a floor on the baseline itself.
A sub-topic × application-area coverage matrix. Empty cells become candidate white space — but only once the set is large enough for absence to mean anything.
Every output is framed as a candidate area for review. The tool never claims anything is novel, patentable, or clear to use. That is a job for an attorney.
Every scan emits a browsable, interlinked site with client-side search over all patents. No server, no external assets, no build step. Host it anywhere.
Heuristic enrichment is free and offline. Point it at a local Ollama model if you want sharper summaries. A paid Claude mode exists and is off by default.
The pipeline
Seven deterministic stages. Raw responses are saved to disk first, so any figure can be traced back to the record that produced it.
Per theme, by CPC classification prefix and keyword. Results are sorted newest-first so a capped page is the most recent slice, not an arbitrary one.
Written to 01 Sources/raw/<date>/ before anything is derived from it. Auditable, and git-ignored by default.
Into one patent shape, merged by publication id, with the richer field winning. Each record declares whether its date is a filing, grant, or publication date — and the scan warns if you mix them.
By CPC prefix or keyword hit, then compute related patents by token similarity and shared classification.
Plain-English summary, likely application areas, weighted key terms, and weak-signal flags. If an LLM endpoint fails, the run degrades to heuristic and tells you — it never relabels the output.
Trends, momentum, assignee concentration, coverage matrix, combination gaps. Every signal checked against its sample floor before it is allowed to speak.
Linked notes, the weekly report, the dashboard, and the full static site. The site tree is rebuilt from scratch, so pages from a previous scan can never linger.
Data
Every wired source is free. Two need no account at all — you download a bulk file and point PatentScout at it. Outputs are derived analysis, not republished records.
| Source | Coverage | Cost | Auth |
|---|---|---|---|
| USPTO PatentSearch (PatentsView) | US grants & applications | Free | Free API key |
| USPTO Open Data Portal | US bibliographic data | Free | Free API key |
| EPO Open Patent Services | EP, WO & worldwide families | Free tier | OAuth app |
| USPTO Bulk Data | US grant XML archives | Public domain | None — local file |
| IP Australia IPGOD | AU filings (CC BY) | Free | None — local file |
| Bundled sample | 450 synthetic patents, 8 industries | Free | None — offline |
Get started
No API key, no npm install, no network. The bundled corpus is synthetic and clearly labelled as such — swap in a real source when you want real answers.
# 1. Clone and enter the tools directory $ git clone https://github.com/milkcanmarketing9-svg/Patent-Scout.git $ cd Patent-Scout/tools # 2. Run an offline scan on the bundled corpus $ node scan.mjs --source sample # 3. Open the generated site, or the vault in Obsidian $ open ../site/index.html # Check which real sources are configured $ node scan.mjs --doctor # Verify the analysis engine (39 tests, zero dependencies) $ npm test