Privacy risk
Author Β· company Β· timestamps
Lossless
Visible content unchanged
Automation
CLI & batch scripts
1. Audit what's inside a DOCX
A DOCX is a ZIP archive. Core properties live in docProps/core.xml, app data in docProps/app.xml, custom properties in docProps/custom.xml.
# Peek into a copy (do not modify originals) cp "doc.docx" "copy.docx" && unzip -l "copy.docx" | sed -n '1,40p' # Extract properties for inspection unzip -p "copy.docx" docProps/core.xml | xmllint --format - unzip -p "copy.docx" docProps/custom.xml | xmllint --format -
2. Remove via Document Inspector
The fastest GUI method. Works on Word 2016+ and Microsoft 365.
File β Info β Check for Issues β Inspect Document
Remove All selected categories
- Open DOCX β File β Info β Check for Issues β Inspect Document.
- Tick: Document Properties and Personal Information, Comments, Revisions, Hidden Text.
- Click Remove All for each found category β Save As a clean copy.
3. PowerShell automation (Windows)
Uses Word COM automation β requires Word installed on the machine. Ideal for batch pipelines.
# Clear core & custom properties and remove comments/accept revisions
# Requires Word installed on the machine (COM automation)
$path = "C:\docs\input.docx"
$word = New-Object -ComObject Word.Application
$word.Visible = $false
$doc = $word.Documents.Open($path)
# Accept revisions & delete comments
$doc.AcceptAllRevisions()
foreach ($c in @($doc.Comments)) { $c.Delete() }
# Clear built-in properties
$props = $doc.BuiltInDocumentProperties
$props.Item("Author").Value = ""
$props.Item("Last Author").Value = ""
$props.Item("Company").Value = ""
$props.Item("Manager").Value = ""
$props.Item("Category").Value = ""
$props.Item("Keywords").Value = ""
$props.Item("Comments").Value = ""
$props.Item("Title").Value = ""
$props.Item("Subject").Value = ""
# Clear custom properties
$custom = $doc.CustomDocumentProperties
for ($i = $custom.Count; $i -ge 1; $i--) { $custom.Item($i).Delete() }
# Save as new file
$out = "C:\docs\clean.docx"
$doc.SaveAs([ref]$out)
$doc.Close()
$word.Quit()4. ExifTool: core & custom properties
ExifTool reads/writes OOXML properties inside DOCX. Use as a second pass after Document Inspector.
# Clear common properties exiftool -Title= -Subject= -Author= -Creator= -Company= -Manager= \ -Keywords= -Comments= -Category= -LastModifiedBy= \ -overwrite_original "doc.docx" # Clear custom + XMP properties exiftool -XMP:All= -overwrite_original "doc.docx" # Recursive folder cleanup exiftool -Title= -Subject= -Author= -Creator= -Company= -Manager= \ -Keywords= -Comments= -Category= -LastModifiedBy= \ -overwrite_original -r "./docs"
5. Tracked changes & comments
Accept all changes
Finalize content, remove revision history
Delete comments
Remove all reviewer annotations
Cleaning embedded image metadata too?
MetaRemover.com strips EXIF/GPS from photos in your browser β nothing uploaded to a server.
6. Embedded images (EXIF/GPS)
Photos inside a DOCX can retain GPS coordinates and camera details. Clean images before embedding, or extract and replace them in the final document.
# Clean image before inserting into Word exiftool -all= -tagsFromFile @ -icc_profile -overwrite_original "photo.jpg"
7. Verify cleanup
Always confirm the fields are actually gone before distributing.
# Inside Word: File β Info β verify Properties fields are blank # CLI cross-check with ExifTool: exiftool -G -a -s "clean.docx" | \ grep -Ei "Title|Author|Company|Manager|Keywords|Subject|LastModifiedBy|XMP" \ || echo "Common fields clear β" # Unpack and inspect XML directly unzip -p "clean.docx" docProps/core.xml | xmllint --format - unzip -p "clean.docx" docProps/custom.xml | xmllint --format -
8. CI / batch workflows
Automatically scrub every DOCX that lands in docs/ on push using GitHub Actions.
name: scrub-docx
on:
push:
paths: ["docs/**/*.docx"]
jobs:
clean:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install exiftool
run: sudo apt-get update && sudo apt-get install -y exiftool
- name: Clear properties
run: |
exiftool \
-Title= -Subject= -Author= -Creator= -Company= \
-Manager= -Keywords= -Comments= -Category= -LastModifiedBy= \
-overwrite_original -r docs/
- name: Audit
run: |
for f in $(git ls-files "docs/**/*.docx"); do
exiftool -G -a -s "$f" | \
grep -Ei "Title|Author|Company|Manager|Keywords|Subject|LastModifiedBy|XMP" \
|| echo "Clean: $f"
done9. FAQ
Privacy-first Β· browser-only
Publish clean files. Protect your team.
Run Document Inspector for DOCX properties. Use MetaRemover.com to strip EXIF/GPS from any embedded image before it ships.
Free Β· no sign-up required