Blog · Engineering
🔧 Engineering & Security

OSINT Link Analysis: Maltego, Entity Graphs, and Visualizing Relationships

The previous posts in this series covered collection: where data lives, how to find it, how to harvest it. This post covers making sense of it — turning a pile of identifiers and findings into a coherent picture. Link analysis is the discipline of representing entities and the relationships between them as a graph, then querying and visualizing that graph to find patterns the underlying data hides.

Why graphs, not spreadsheets

Most OSINT investigations start in spreadsheets. For small cases, that's fine. As soon as you cross a threshold — usually around 50-100 entities or after a few pivots — spreadsheets fail in characteristic ways:

Link analysis tooling is built for this exact transition: when the case is bigger than a single analyst's head can hold.

Core concepts: entities, links, transforms

Entities

An entity is a node in the graph. In OSINT contexts, common entity types include: Person, Organization, Phone Number, Email Address, Domain, IP Address, Username, URL, Image, Document, Geographic Location, Cryptocurrency Address, License Plate, Vessel, Aircraft, Phrase. Each entity has a type, a value, and a set of properties (e.g., a Person entity has a name, possibly a date of birth, possibly photos).

Links

A link is an edge between two entities, representing a relationship. Common types: "owns," "registered to," "communicated with," "related to," "located at," "co-occurred in document with," "shares contact with." Links carry metadata too — direction, timestamp, source, confidence.

Transforms

A transform is a function: given an entity, return other entities related to it. "Given an email address, find usernames registered with it." "Given a domain, find its current and historical resolved IPs." "Given a phone number, find associated names from public records." Transforms are the heart of an investigative tool — they're how the graph expands.

Modern link analysis tools ship with hundreds of transforms; you can also write custom transforms that wrap your own data sources or paid APIs.

Maltego in 2026

Maltego, originally released by Paterva and now maintained by Maltego Technology, is the long-standing standard for OSINT link analysis. The core product is a graph editor with a marketplace of transform integrations.

What Maltego does well:

The trade-offs:

Open-source alternatives

SpiderFoot

An automated OSINT framework with built-in graph visualization. Less interactive than Maltego — you point it at a target and it runs many transforms automatically — but excellent for fast initial reconnaissance.

Gephi

A general-purpose graph-analysis tool, originally academic. You import nodes and edges as CSV/GEXF, run layout algorithms (ForceAtlas2 is the popular one), and analyze. Less integrated into OSINT collection workflows but better at large-scale visualization and quantitative graph analysis (centrality measures, community detection).

Neo4j + Bloom

A property graph database with a visualization client (Bloom). More technical to stand up but offers unbeatable query power (Cypher) and scales to very large graphs. Useful when an investigation grows into a long-running data product.

Recon-ng

A modular reconnaissance framework with a database backend and workspace concept. Less graph-oriented but pairs well with Gephi or Neo4j for visualization.

Custom Python + NetworkX

For programmatic investigators, NetworkX gives you full graph-theory operations in a few dozen lines of code. Pair with Pyvis, Plotly, or D3 for visualization. Often the right answer when an investigation has unusual data sources that no off-the-shelf transform covers.

A practical investigative workflow

  1. Seed entities. Start with the small set of high-confidence facts that motivated the investigation — a person's name, an email, a domain, an incident IP. Place them on the canvas.
  2. First-pass pivots. Run the obvious transforms on each seed. Don't yet curate; let the graph grow.
  3. Review and prune. Most first-pass results are noise (common usernames that happen to match, generic phone numbers, etc.). Prune obvious false hits, flag uncertain ones.
  4. Second-pass pivots on the kept entities. The investigation deepens. Now you're following real edges.
  5. Verify cross-source. When a relationship appears, verify it through at least one independent source before treating it as a fact in your graph.
  6. Annotate with provenance. Each link should reference the source that established it, with a confidence level. Future-you will thank present-you.
  7. Run graph algorithms. Centrality (who's structurally important), community detection (which entities cluster), shortest paths (how A connects to B).
  8. Snapshot. Save graph snapshots at each major investigative milestone. You'll want them when writing the report.

Worked example (synthetic)

Suppose an investigator is examining whether a domain registered last week is part of a coordinated phishing campaign.

  1. Seed: the new domain.
  2. Transforms: WHOIS → registrant email + registrar; passive DNS → resolving IPs; certificate transparency → subdomains; HTTP fingerprint → technology stack and favicon hash.
  3. Pivots:
    • Favicon hash → search across Shodan for other internet-facing assets with the same favicon → 12 hits across 9 hosting providers.
    • Resolving IP → reverse-DNS, then passive DNS on that IP → 47 sibling domains historically resolved.
    • Registrant email → check across other registrar records → 6 additional domains registered with the same email this year.
  4. Cluster analysis: the 12+47+6+seed entities cluster into 3 communities by hosting provider and registration cadence. One cluster is a long-running campaign; one is a recent re-registration; one is a single decoy.
  5. Centrality: one specific email address sits at the intersection of all three clusters. High-value pivot for further investigation.
  6. Report: the graph plus narrative makes the campaign legible to a non-technical reviewer in a way a list of 60 domains never would.

Pitfalls in graph thinking

Presenting findings

The final graph is for you. The graph for the stakeholder is usually different:


For the data sources that feed link analysis, see Shodan, Google Dorks, and the OSINT Toolkit. For identifier-specific pivots, see Username & Email OSINT and Geolocation OSINT. For boundaries on what you should do with the resulting graph, see OSINT Legal & Ethics.

Sources & References
  1. Maltego — Official documentation
  2. SpiderFoot — Open-source automation
  3. Gephi — Graph visualization platform
  4. NetworkX — Python network analysis
  5. Neo4j — Property graph database