Email network analyzer

Paste an mbox export, a single .eml, or just the headers and see who mails whom. The tool builds a weighted sender-to-recipient graph, ranks senders, recipients and correspondents, and exports CSV, JSON, GraphML, or Graphviz DOT — all in your browser.

Try:
Network report

About this tool

A mailbox is a social network hiding in plain text. Every message carries a From: address and one or more To:/Cc: addresses, and that is all you need to reconstruct who talks to whom, how often, and over what period. This tool reads that metadata out of raw email text and builds the graph.

Paste an mbox export (messages separated by a From postmark line), a single .eml file, or even just the headers. Each message contributes one link from its sender to every distinct recipient, weighted by how many messages travelled along it. You get message, participant, and link totals, the date span, the top senders, the top recipients, the top correspondents by combined volume, and the heaviest links with the first and last date each was used. Set Your address and the report adds a personal section: who you mail most, who mails you most, and a reciprocity ratio.

Switch Nodes to domains for an organisation-level rollup, Link direction to undirected to merge A → B with B → A, or Output to CSV, JSON, GraphML, or Graphviz DOT when you want to load the graph into Gephi, NetworkX, or Graphviz instead of reading it here. Message bodies are never parsed and nothing leaves the browser.

Worked example

Paste this three-message mbox:

From [email protected] Mon Jan  1 00:00:00 2024
From: Alice <[email protected]>
To: [email protected]
Cc: [email protected]
Date: Tue, 2 Jan 2024 10:00:00 +0000
Subject: kickoff

hello

From [email protected] Mon Jan  1 00:00:00 2024
From: Bob <[email protected]>
To: [email protected]
Date: Wed, 3 Jan 2024 09:00:00 +0000
Subject: re: kickoff

ack

From [email protected] Mon Jan  1 00:00:00 2024
From: Alice <[email protected]>
To: [email protected]
Date: Fri, 5 Jan 2024 11:30:00 +0000
Subject: status

update

With the defaults (address nodes, To: and Cc:, directed) the report opens with:

Email network
  3 messages, 3 addresses, 3 links
  View: directed graph of addresses, recipients = To+Cc
  Dates: 2024-01-02 .. 2024-01-05

Alice leads the top-senders list with 2 messages to 2 contacts, Bob follows with 1, and the heaviest link is [email protected] -> [email protected] with 2 messages spanning 2024-01-02 .. 2024-01-05. Switching Link direction to undirected merges Alice→Bob and Bob→Alice into a single pair link carrying all 3 messages; switching Nodes to domains leaves just example.com -> example.org, because the mail inside example.com becomes a self-loop and self-loops are dropped by default.

Limits and edge cases

FAQ

Where do I get an mbox file to paste?

Most mail clients export one. Google Takeout returns Gmail as an .mbox, Thunderbird stores folders as mbox files under its profile directory, and Apple Mail can export a mailbox to .mbox. You can also paste a single .eml, or copy the header block ("show original"/"view source") of one message — the tool only needs From:, To:, Cc:, Bcc:, and Date:.

What is the reciprocity ratio in the personal section?

It is the messages you received divided by the messages you sent, within the analysed set. Above 1.00 means more mail arrives than you send; below 1.00 means you are the one driving the conversation. It only appears when Your address is set and you sent at least one message.

Why is my inbox showing barely any links?

An inbox is mostly mail addressed to you, so a directed graph of it is a star with you at the centre. Two things help: analyse sent mail as well so the outbound half exists, and set Exclude addresses containing to noreply,notifications@,mailer-daemon so automated senders stop crowding out real people. Raising Minimum messages per link to 3 or 5 also strips one-off contacts.

What is the difference between address nodes and domain nodes?

Address nodes keep every person separate — the usual view for a personal mailbox. Domain nodes collapse everything after the @, so all of [email protected] and [email protected] become example.com. That gives an organisation-level picture of which companies talk to each other. Note that internal mail then becomes a self-loop, which is dropped unless you tick Keep self-addressed links.

How do I get this into Gephi or NetworkX?

Set Output to GraphML and save the result as network.graphml. Gephi opens it directly; in Python, networkx.read_graphml("network.graphml") gives you a graph whose edges carry a weight attribute (the message count) and whose nodes carry label, sent, and received. The edgedefault attribute follows the Link direction setting. The DOT output is the same graph for Graphviz: dot -Tsvg network.dot -o network.svg.

Is my mail uploaded anywhere?

No. The parser and the graph builder are compiled to WebAssembly and run inside this page, so the pasted text never leaves your machine. The same Rust code runs locally in the CLI. There is no account, no mailbox connection, and no server-side storage.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool email-network-analyzer "From: Alice <[email protected]>
To: [email protected]
Cc: [email protected]
Date: Tue, 2 Jan 2024 10:00:00 +0000
Subject: kickoff

hello"

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/email-network-analyzer/?input=From%3A%20Alice%20%3Calice%40example.com%3E%0ATo%3A%20bob%40example.com%0ACc%3A%20carol%40example.org%0ADate%3A%20Tue%2C%202%20Jan%202024%2010%3A00%3A00%20%2B0000%0ASubject%3A%20kickoff%0A%0Ahello&me=alice%40example.com&nodes=address&recipients=to-cc&direction=directed&top=10&min_messages=1&exclude=noreply%2Cnotifications%40%2Cmailer-daemon&self_loops=true&since=2024-01-01&until=2024-12-31&format=report

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.