-
-
Notifications
You must be signed in to change notification settings - Fork 5
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.
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
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).
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/contactIf 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.
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.txtfiles. -
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).
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.
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.
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.