Every file has a story.
MetaDetective reads it.
Metadata. Hidden inside every document, image, and file your targets publish. Authors. Software versions. GPS coordinates. Internal hostnames. Creation dates. All embedded. All exposed. MetaDetective surfaces it.
Powered by exiftool. 25+ fields extracted from documents, images, and media - authors, software, creation dates, internal hostnames, serial numbers, hyperlinks.
iPhone and iPad photos carry sub-meter GPS precision. MetaDetective now reads HEIC and HEIF natively - a direct line to geolocation from a single image file.
Crawl target sites directly - unlike Metagoofil, which only surfaces files through Google dorking (rate limits, CAPTCHAs, IP blocks, index-dependent results). No search engine in the middle. Multithreaded, configurable depth, rate-limited, extension-filtered.
DMS to decimal degrees conversion, Nominatim reverse geocoding with caching, direct map links. Physical location from a single file.
HTML for client reports. TXT for archiving. JSON for piping into jq, databases, or custom tooling. Structured. Predictable. Scriptable.
--parse-only Author Creator limits extraction to exactly what you need. Less noise. Faster output. Cleaner downstream pipelines.
--summary gives a statistical overview: identities, emails, GPS exposure, tools, date range. --timeline shows a chronological view of document creation and modification. --no-banner for clean pipeline output.
You set the pace: requests/second (--rate), --threads, crawl --depth, --extensions filters, --follow-extern, and a browser-realistic --user-agent (13 presets or your own).
Pass a path or a URL, MetaDetective figures out the rest: MetaDetective.py ./loot/ analyzes, MetaDetective.py https://target.com/ scrapes. The classic -d / -s -u flags still work, safeguards intact.
One file. Zero Python dependencies. Deploy anywhere Python 3 and exiftool are available.
# Fastest - one curl, no pip, no clone $ curl -O https://raw.githubusercontent.com/franckferman/MetaDetective/stable/src/MetaDetective/MetaDetective.py $ python3 MetaDetective.py -h # Install exiftool if needed $ sudo apt install libimage-exiftool-perl # Debian / Ubuntu / Kali $ sudo pacman -S perl-image-exiftool # Arch $ sudo emerge -av media-libs/exiftool # Gentoo $ brew install exiftool # macOS $ winget install OliverBetz.ExifTool # Windows
$ python3 -m venv MetaDetectiveEnv $ source MetaDetectiveEnv/bin/activate $ pip install MetaDetective $ metadetective -h
$ git clone https://github.com/franckferman/MetaDetective.git $ cd MetaDetective $ python3 src/MetaDetective/MetaDetective.py -h
$ docker pull franckferman/metadetective $ docker run --rm -it franckferman/metadetective -h # Mount a local directory $ docker run --rm -v $(pwd)/loot:/data franckferman/metadetective -d /data
# Just point at a folder - analysis mode is auto-detected $ python3 MetaDetective.py ./loot/ # PDF and DOCX only, filter noise $ python3 MetaDetective.py -d ./loot/ -t pdf docx -i admin anonymous # Per-file formatted display $ python3 MetaDetective.py -d ./loot/ --display all --format formatted
# JSON, targeted fields only $ python3 MetaDetective.py -d ./docs/ \ --parse-only Author Creator \ -e json -o ~/results/ # Pivot with jq $ jq '.unique.Author' ~/results/MetaDetective_Export-*.json
# Positional URL = scraping mode. Scan without downloading $ python3 MetaDetective.py https://target.com/ --scan # Download (defaults: ./loot/, depth 1), tune depth/threads $ python3 MetaDetective.py https://target.com/ \ --extensions pdf docx --depth 2 --threads 8
# iPhone photos - extract GPS $ python3 MetaDetective.py -d ./photos/ \ -t heic heif jpg \ --parse-only 'GPS Position' 'Map Link' # HTML report, coordinates kept off the wire (no Nominatim) $ python3 MetaDetective.py -f photo.heic -e html --no-geocode
# Scrape this very site - it hides a practice lab $ python3 MetaDetective.py https://franckferman.github.io/MetaDetective/ # Analyze what you recovered (identities, emails, GPS...) $ python3 MetaDetective.py ./loot/ --summary