Open source · Zero dependencies · Runs offline

Patent intelligence that admits what it doesn’t know.

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 18+, no npm install Free data sources only Nothing leaves your machine MIT licensed

The part most tools get wrong

A single filing is not a trend.

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.

What a naive tool prints

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.

What PatentScout prints

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

One scan, four artifacts.

Every run rebuilds a linked knowledge graph, a browsable website, a weekly report, and a dashboard — from the same normalised patent records.

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.

Trends that survive scrutiny

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.

Gap & white-space analysis

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.

Never asserts patentability

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.

Self-contained static site

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.

Local-first, optional AI

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

How a scan works.

Seven deterministic stages. Raw responses are saved to disk first, so any figure can be traced back to the record that produced it.

Query each enabled source

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.

Save the raw JSON

Written to 01 Sources/raw/<date>/ before anything is derived from it. Auditable, and git-ignored by default.

Normalise and dedupe

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.

Cluster into themes

By CPC prefix or keyword hit, then compute related patents by token similarity and shared classification.

Enrich

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.

Analyse

Trends, momentum, assignee concentration, coverage matrix, combination gaps. Every signal checked against its sample floor before it is allowed to speak.

Write

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

Free sources only.

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.

Full register, with rate limits and licensing, in DATA_SOURCES.md
SourceCoverageCostAuth
USPTO PatentSearch (PatentsView)US grants & applicationsFreeFree API key
USPTO Open Data PortalUS bibliographic dataFreeFree API key
EPO Open Patent ServicesEP, WO & worldwide familiesFree tierOAuth app
USPTO Bulk DataUS grant XML archivesPublic domainNone — local file
IP Australia IPGODAU filings (CC BY)FreeNone — local file
Bundled sample450 synthetic patents, 8 industriesFreeNone — offline

Get started

Running in sixty seconds.

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.

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