hezaohezao/osint-investigation
Public-records OSINT: SEC, sanctions, courts, property.
npx skills add https://github.com/HezaoHezao/poirot --skill osint-investigation
Investigative framework for public-records OSINT: government contracts,
corporate filings, lobbying, sanctions, offshore leaks, property records,
court records, web archives, knowledge bases, and global news. Resolve
entities across heterogeneous sources, build cross-links with explicit
confidence, and produce structured evidence chains.
Python stdlib only. Zero install. Most sources work with no API key.
Use when the user asks for:
members, filings
| Source | What | Access |
|--------|------|--------|
| SEC EDGAR | US public company filings (10-K, 10-Q, 8-K, 13F) | curl to https://efts.sec.gov/LATEST/search-index?q=... |
| USAspending.gov | Federal contracts and grants | curl to https://api.usaspending.gov/api/v2/... |
| Senate Lobbying | Lobbying Disclosure Act filings | curl to https://lda.senate.gov/api/v1/... |
| OFAC SDN | Sanctions list | curl to https://www.treasury.gov/ofac/... |
| ICIJ Offshore Leaks | Panama Papers, Paradise Papers, etc. | browse_page to https://offshoreleaks.icij.org/... |
| OpenCorporates | Corporate registry (optional free token) | curl to https://api.opencorporates.com/... |
| Source | What | Access |
|--------|------|--------|
| NYC ACRIS | NYC property records (deeds, mortgages) | browse_page to https://a836-acris.nyc.gov/... |
| CourtListener | Federal + state court opinions | curl to https://www.courtlistener.com/api/... |
| Source | What | Access |
|--------|------|--------|
| Wayback Machine | Archived web pages | browse_page to https://web.archive.org/web/... |
| Wikipedia/Wikidata | Encyclopedia + structured data | bash with curl to Wikipedia API |
| GDELT | Global news monitoring | bash with curl to https://api.gdeltproject.org/... |
Before cross-referencing, resolve the entity across sources:
For each relevant source, query by entity name or identifier:
# SEC EDGAR — search for company filings
curl -s "https://efts.sec.gov/LATEST/search-index?q=%22Company+Name%22" | python3 -c "..."
# USAspending — federal contracts to entity
curl -s -X POST "https://api.usaspending.gov/api/v2/search/spending_by_award/" -d '{"filters":{...}}'
# OFAC SDN — check sanctions list
curl -s "https://www.treasury.gov/ofac/downloads/sdn.csv" | grep -i "entity name"
Build explicit cross-links between sources:
For each finding, assign confidence:
Construct an evidence chain showing how findings connect:
[Source A: fact 1] → [Source B: fact 2] → [Inference: conclusion]
confidence: High confidence: Medium confidence: Medium
Produce a structured investigation report:
# OSINT Investigation: [Entity / Topic]
## Executive Summary
[2-3 paragraph overview of findings]
## Entity Profile
- **Canonical Name**: ...
- **Aliases**: ...
- **Identifiers**: EIN, LEI, CIK, etc.
- **Known Addresses**: ...
## Findings by Source
### SEC EDGAR
[Findings with dates, filing types, key data]
### USAspending
[Contract awards, amounts, dates, agencies]
### OFAC SDN
[Sanctions status: CLEAR / MATCH (with details)]
### [Other sources...]
## Cross-Link Analysis
[Explicit connections between findings across sources]
## Evidence Chain
[Step-by-step reasoning from raw data to conclusions]
## Confidence Assessment
[Summary of confidence levels for key conclusions]
## Sources
[All URLs queried, with access dates]
Save to .poirot/outputs/osint-{entity}-{YYYYMMDD}.md.
entities. Normalize but don't assume.
review. Don't report a match without verifying the full entry.
suggests" not "proven".
Take hezaohezao/osint-investigation from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.