osint-investigation

Cross-reference public records from SEC, USAspending, OFAC, and other sources into evidence chains.

Updated Jun 5, 2026
One-click install
npx skills add https://github.com/xu1713/openhorse --skill osint-investigation-xu1713
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: osint-investigation
Source: https://github.com/xu1713/openhorse/tree/main/openhorse/openhorse/optional-skills/research/osint-investigation
Command: npx skills add https://github.com/xu1713/openhorse --skill osint-investigation-xu1713

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes scripts (resource) and references (resource) components.

What problem does it solve? Investigating people and companies across fragmented public records — corporate filings, federal contracts, lobbying disclosures, sanctions lists, property deeds, court records, and news archives — requires manually querying a dozen different government and open-data APIs and reconciling inconsistent entity names. This Skill automates acquisition, entity resolution, timing analysis, and evidence-chain construction across 11 public-records sources using only the Python standard library. ## Core Features & Use Cases - Multi-source data acquisition: Fetch normalized CSVs from SEC EDGAR, USAspending, Senate lobbying disclosures, OFAC SDN sanctions, ICIJ Offshore Leaks, NYC ACRIS property records, OpenCorporates, CourtListener, Wayback Machine, Wikipedia/Wikidata, and GDELT news. - Cross-source entity resolution: Match entity names across datasets with three explicit confidence tiers (exact, fuzzy word-bag, token overlap) so every link carries a stated confidence level. - Timing correlation and evidence chains: Run permutation tests to detect suspicious clustering (e.g., lobbying filings near contract awards) and compile findings.json where every claim traces to a specific source row. - Use Case: A journalist investigating pay-to-play can pull a company's lobbying filings and federal contracts, resolve the entity names across both datasets, test whether filing dates cluster near award dates, and produce a verifiable findings document. ## Quick Start Ask the agent to investigate a company by pulling its SEC filings, federal contracts, and lobbying records, then cross-reference the results and build an evidence chain.

Frequently Asked Questions about osint-investigation

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I investigate a company using public records?

Run the fetch scripts for relevant sources — SEC EDGAR for filings, USAspending for contracts, Senate LDA for lobbying — then use entity_resolution.py to match names across the CSVs and build_findings.py to compile an evidence chain. Each finding links back to specific source rows.

How do I check if a person or company is on the OFAC sanctions list?

Run fetch_ofac_sdn.py to download the full SDN list with addresses and aliases joined in, then search the output CSV by name. You can filter by sanctions program or entity type (individual, entity, vessel, aircraft).

Does this OSINT tool require API keys or paid accounts?

Most sources work anonymously with no key, including SEC EDGAR, USAspending, OFAC, ICIJ, ACRIS, Wayback, Wikipedia, and GDELT. Optional free tokens for OpenCorporates, CourtListener, and Senate LDA raise rate limits. SEC requires only a User-Agent string with contact info.

What Python dependencies does the OSINT investigation skill need?

None beyond the Python standard library. All fetch scripts use urllib.request, and entity matching uses built-in string normalization rather than external fuzzy-matching libraries like rapidfuzz. It runs on Linux, macOS, and Windows with zero installation.

Why did entity resolution return a fuzzy match instead of an exact one?

A fuzzy match means the names matched only after sorting tokens into a word bag, which indicates probable but unconfirmed identity. Treat fuzzy and token_overlap matches as leads requiring manual verification, not confirmed facts — confidence tiers travel with every claim.

What are the limitations of public-records OSINT cross-referencing?

Entity resolution produces candidates, not conclusions, and statistical timing significance does not establish wrongdoing. Coverage is also bounded: ACRIS covers only NYC, ICIJ covers only offshore leak datasets, and federal campaign finance via the FEC is intentionally excluded.