Skip to content

Output Files

OCEANOFANYTHING edited this page Sep 3, 2026 · 1 revision

Output Files

Every run writes five files to the current directory. All of them (except the log) are produced by one shared function, saveResults() — see Architecture for why that matters.

_emails.txt

The original plain-text format: a fixed banner, a timestamp, then one email per line, alphabetically sorted.

Srapped Url List By MailGrab A Powerful Email Scraper Tool Made By OCEAN OF ANYTHING
This File Contains The Urls Scrapped From The Url Provided By The User
https://oceanofanything.github.io
https://github.com/oceanofanything
Date Of Last Scan: 2026-01-01 12:00:00.000000
Time Of Last Scan: 12:00:00
Scrapped Emails:
 
alice@example.com
bob@example.com

_scrappedUrls.txt

Same banner format, listing every URL that was actually fetched during the crawl (not just discovered — a URL blocked by robots.txt or excluded by --same-domain never gets added here).

_emails.csv

Spreadsheet-friendly: one row per (email, source URL) pair.

email,found_on_url
alice@example.com,https://example.com/
alice@example.com,https://example.com/team
bob@example.com,https://example.com/contact

If an email has no recorded source (shouldn't normally happen, but the code guards for it), found_on_url is left blank rather than omitting the row.

_results.json

The structured, complete record — and the one MailGrab itself reads back for --append and --resume.

{
  "emails": ["alice@example.com", "bob@example.com"],
  "scrappedUrls": ["https://example.com/", "https://example.com/contact"],
  "sources": {
    "alice@example.com": ["https://example.com/", "https://example.com/team"],
    "bob@example.com": ["https://example.com/contact"]
  },
  "socialLinks": ["https://www.linkedin.com/company/example", "https://example.com/contact-us"]
}
  • emails / scrappedUrls — sorted lists, same content as the .txt files.
  • sources — which URL(s) each email was found on (see Crawl Correctness for how mailto: links, page text, and de-obfuscated addresses all feed into this the same way).
  • socialLinks — LinkedIn/Twitter/X/Facebook/Instagram links and contact-page URLs spotted during the crawl (see Crawl Correctness) — these are not crawled as pages, just recorded.

This is also the file --verify-mx filters before writing (see Email Quality) and the one --append/--resume read back in (see Ops & Resilience).

_MailGrabLog.txt

A debug-level log via Python's standard logging module. Overwritten (not appended) every run. Useful for seeing exactly why a particular URL was skipped (a specific HTTP error, a robots.txt block, a timeout) without scrolling back through console output.

_inputUrls.txt (or whatever --input points to)

Not an output file — this is the seed list you provide for batch mode. One URL per line. If it exists and is non-empty, and you haven't passed --url (which always wins), MailGrab automatically switches into batch mode and crawls every URL in it. See Quick Start.

A note on overwriting

By default, every run overwrites all four output files fresh. If you want to build up results across multiple runs instead, use --append or --resume — both work by merging with _results.json before deciding what to write.

Clone this wiki locally