How to strip template lineage and reviewer comments from client office files
- Step 1Accept track changes and resolve comments in Office first — The wiper removes comment STREAMS, but track-changes redlines live inside the document body (
word/document.xml) and are not touched. Open the deliverable and Review → Accept All Changes. Resolving comments in the UI is also good practice, but the wiper deletes the comment streams regardless of resolved state. - Step 2Delete internal-only content from the body — Hidden worksheets with cost breakdowns, speaker notes with internal pricing logic, or off-canvas objects are body content, not property streams, and survive the wipe. Remove them in Office before exporting — the wiper cleans metadata, not layout or hidden body content.
- Step 3Drop the deliverable onto the wiper — The picker accepts
.docx,.xlsx, and.pptxonly. Drag the report, model, or deck in. On the public browser path JSZip reads it locally — a confidential client file is never transmitted. Legacy.doc/.xls/.pptare rejected; Save As the modern format first. - Step 4Let it strip and repack — There are no options — the schema is empty by design. The tool removes the fixed list of
docProps/*, every Word/Excel/PowerPoint comment and people/persons/authors stream, and the embedded thumbnail, runs a wildcard sweep for numbered comment files, and repacks withgenerateAsync. VBA stays. - Step 5Read the removedEntries count for your delivery checklist — The result reports
removedEntries. A lightly used template might show 2–3; a deck the whole team commented on can show 8 or more. Record this on your QA checklist so you have an audit note that the file was scrubbed before delivery. - Step 6Verify, then deliver the -clean copy — Re-open the cleaned file and check File → Info → Properties — Author, Company, Template, and custom properties should be blank and the comments pane empty. Deliver that
-cleancopy. Do not open-and-save it again first; Office re-writes a minimalcore.xmlnaming the current user on the next save.
Internal fingerprint removed from a client deliverable
The streams this tool deletes and the internal information each one leaks to a client or a forwarded third party. A wildcard sweep also catches numbered comment streams.
| Stream removed | Internal info it leaks | Applies to |
|---|---|---|
docProps/app.xml | Agency Company name, the master Template name (exposes 'custom' as reused), Total Editing Time, application | All three (.docx / .xlsx / .pptx) |
docProps/core.xml | Studio account, freelancer name, Last Modified By — breaks white-label anonymity | All three |
docProps/custom.xml | Internal project code, billing reference, CRM opportunity ID stamped by add-ins | All three |
word/comments.xml + people.xml + threadedComments.xml | Candid internal notes ('pad this number') and junior-staff reviewer names | .docx |
xl/comments1.xml + xl/persons/person.xml | Cell-comment cost notes, assumptions flagged internally, the persons identity map | .xlsx |
ppt/commentAuthors.xml + ppt/comments/comment1.xml | Slide review comments and the author registry for the deal team | .pptx |
What stays — including what keeps the deliverable working
Content the wiper deliberately preserves or cannot reach. Handle the body-content rows in Office before exporting.
| Not removed | Why | What to do |
|---|---|---|
VBA macros (vbaProject.bin) | Preserved on purpose so an .xlsm model or macro template keeps working | Nothing — the deliverable still runs. Save as .xlsx/.docx in Office if you want it macro-free |
| Track changes / revision marks | Nodes inside the document body, not a property stream | Review → Accept/Reject All in Office before exporting |
| Hidden worksheets, speaker notes, off-canvas objects | Body content, not metadata files | Delete them in Office before wiping |
| Visible numbers, formulas, named ranges | Document content the client is meant to receive | Edit any internal-only ranges out manually |
| A PDF export of the deliverable | PDFs are not OOXML ZIPs and are rejected | Use pdf-history-sanitizer on the PDF |
Plan, limits, and output
The tool requires the Pro plan; file-size and batch caps follow the Security family tier limits.
| Property | Value | Notes |
|---|---|---|
| Minimum plan | Pro | A Free run returns Office Doc Property Wiper requires the pro plan. |
| File-size limit | Pro 100 MB · Pro-media 500 MB · Developer 2 GB | Oversize files error before processing naming the file and your plan limit |
| Batch files (Pro) | 5 in the picker | But the processor cleans the first selected file per run — see edge cases |
| Accepted input | .docx, .xlsx, .pptx | Legacy binary formats rejected |
| Output | Repacked file, original name + -clean, plus removedEntries | API path returns outputBase64 (mime application/octet-stream) |
| Audit log | Emitted | The run is recorded for dashboard/enterprise audit (no file content stored) |
Cookbook
Before/after structure from real agency deliverables. Project codes and staff names are anonymised; the entry paths are exactly what the tool acts on.
A 'bespoke' proposal that reuses the master template
A proposal built on the agency's standard pitch template. app.xml still names the template and the agency; custom.xml carries the CRM opportunity ID. The wipe removes the lineage so the client sees a clean, custom-looking document.
Before (unzip Acme-Proposal.docx): docProps/core.xml <- Last Modified By: studio@agency docProps/app.xml <- Company: Agency Co; Template: MasterPitch-v4.dotx; TotalTime: 95 docProps/custom.xml <- CRM_Opportunity=OPP-55120 word/comments.xml <- 'reuse from Globex deck' note After wipe (Acme-Proposal-clean.docx): docProps/core.xml REMOVED docProps/app.xml REMOVED <- template lineage gone docProps/custom.xml REMOVED <- CRM id gone word/comments.xml REMOVED <- internal note gone removedEntries: 4
A pricing model with internal cost comments and macros
An .xlsm pricing model with cell comments flagging internal cost assumptions and a billing reference in custom.xml. The macros must keep working, so vbaProject.bin is preserved while the comments and properties are stripped.
Before (unzip Pricing-Model.xlsm): docProps/core.xml <- Creator + Last Modified By docProps/custom.xml <- BillingRef=INV-2026-0331 xl/comments1.xml <- 'true cost is 40% lower' xl/persons/person.xml <- analyst identity map xl/vbaProject.bin <- pricing macros After wipe (Pricing-Model-clean.xlsm): docProps/core.xml REMOVED docProps/custom.xml REMOVED xl/comments1.xml REMOVED <- internal cost note gone xl/persons/person.xml REMOVED xl/vbaProject.bin PRESERVED <- macros still run removedEntries: 4
A pitch deck the deal team commented on
A PowerPoint with slide comments from the internal review and the embedded first-slide thumbnail. The wipe removes the comments, the author registry, and the preview.
Before (unzip Client-Deck.pptx): docProps/core.xml docProps/thumbnail.jpeg <- preview of slide 1 ppt/comments/comment1.xml <- 7 internal review comments ppt/commentAuthors.xml <- deal-team registry After wipe (Client-Deck-clean.pptx): docProps/core.xml REMOVED docProps/thumbnail.jpeg REMOVED ppt/comments/comment1.xml REMOVED ppt/commentAuthors.xml REMOVED removedEntries: 4
QA check before delivery
Add a one-line verification to your delivery checklist: rename the cleaned copy to .zip and confirm the internal streams are gone, then record the removedEntries count.
$ cp Acme-Proposal-clean.docx verify.zip $ unzip -l verify.zip | grep -E 'docProps|comments' (no core/app/custom.xml, no comments.xml) # Result panel reported: removedEntries: 4 inputBytes: 312900 outputBytes: 281440 # Note on QA checklist: 'metadata wiped, 4 streams removed'
Batch pre-delivery cleaning via the local runner
Because this tool is server-safe, an agency can run it through an @jadapps/runner on its own machine so confidential client files never reach JAD. The schema has no options.
# 1. Read the schema (empty options array):
GET /api/v1/tools/office-doc-property-wiper
-> { options: [], minTier: "pro", outputType: "blob" }
# 2. POST each deliverable to the local runner:
POST http://127.0.0.1:9789/v1/tools/office-doc-property-wiper/run
(multipart: Acme-Proposal.docx)
# 3. Runner returns the cleaned file as base64:
{
"outputBase64": "UEsDBBQA...",
"inputBytes": 312900,
"outputBytes": 281440,
"removedEntries": 4,
"mime": "application/octet-stream"
}Edge cases and what actually happens
Multiple deliverables selected at once
First file onlyThe picker allows multi-select (Pro allows up to 5 in a batch), but the browser processor cleans the first selected file per run and returns one -clean output. To scrub a folder of deliverables, run them one at a time, or script the local runner endpoint for true unattended batch cleaning.
Macros stopped working after the wipe
Cannot happenvbaProject.bin is not in the strip list — it is preserved on purpose so an .xlsm/.docm/.pptm deliverable keeps functioning. If a macro fails, the cause is elsewhere (a broken reference, security settings), not the wiper. If you want a macro-free copy, save as the non-macro format in Office.
Internal speaker notes or hidden sheets still in the file
Out of scopeSpeaker notes, hidden worksheets, and off-canvas objects are body content, not property streams, and survive the wipe. They can hold internal pricing logic. Delete them in Office before exporting — the wiper removes metadata files, not layout content.
Track changes carry junior-staff names
By designRevision marks live inside the document body and are deliberately not removed. A tracked edit names whoever made it. Accept or reject all changes in Office's Review tab before exporting; the comment streams are removed regardless, but redlines are not.
Legacy .doc / .xls / .ppt deliverable dropped
RejectedLegacy formats are binary OLE compound files, not OOXML ZIPs, and the accept filter excludes them. Open in Office and Save As the modern format first, which also gives a fresh, smaller set of property streams to remove.
File exceeds the plan size limit
Error: exceeds limitA file over your tier's cap fails before processing with a message like File "X.xlsx" is 142 MB — exceeds the 100 MB limit for your plan. Pro is 100 MB, Pro-media 500 MB, Developer 2 GB. A giant .xlsx usually means embedded media or a huge data range, neither of which this tool can shrink.
removedEntries comes back as 0
ExpectedZero means the deliverable had none of the targeted property or comment streams — common for a file already cleaned. It is not an error; the file is still repacked and saved with the -clean suffix.
Studio account reappears after editing the clean copy
ExpectedOffice writes a fresh, minimal docProps/core.xml naming the current user as Creator the next time you open and save the cleaned file. Wipe last, immediately before delivery, and do not open-and-save the cleaned copy afterwards.
Client expects a DLP classification banner
Removed — confirm firstIf your firm stamps a classification label into docProps/custom.xml, it is removed with the rest of that stream. Usually desirable before external sharing, but some client systems expect the banner. Confirm with your security team whether stripping the classification property is acceptable for the engagement.
Repacked file size differs from the original
ExpectedJSZip re-compresses surviving entries on repack, so outputBytes rarely matches the source byte-for-byte even beyond the removed streams. The deliverable opens identically in Office; the delta is ZIP recompression plus deleted XML, not content loss.
Frequently asked questions
Will the client be able to tell which template I reused?
Not after the wipe. The master Template name lives in docProps/app.xml, which is deleted entirely, along with the agency Company field and Total Editing Time. A client inspecting File → Properties on the cleaned deliverable sees blank fields, so a proposal built on your standard pitch template no longer advertises that lineage.
Does it remove internal comments?
Yes, across all three formats. Word comments.xml / commentsExtended.xml / people.xml / threadedComments.xml, Excel xl/comments1.xml / threaded comments / xl/persons/person.xml, and PowerPoint ppt/comments/comment1.xml / ppt/commentAuthors.xml are all deleted, plus a wildcard sweep for numbered comment files. Candid internal notes and junior-staff names do not reach the client.
Will my macros still work for the client?
Yes. vbaProject.bin is not in the strip list, so an .xlsm model or a macro-driven report template keeps working after the wipe. This is a metadata wiper, not a macro stripper. If you want a macro-free copy instead, save as the non-macro format (.xlsx/.docx/.pptx) in Office.
Can I stay anonymous on white-label work?
For the metadata, yes — docProps/core.xml (studio account, freelancer name, Last Modified By) and docProps/app.xml (agency Company) are both deleted, so the file does not name your studio. Remember that any name written into the body text, a footer, or speaker notes is content and survives; remove those manually.
Is the client's confidential file uploaded anywhere?
On the public website, no. JSZip unpacks, strips, and repacks the file in your browser, so a confidential client model never leaves your machine. The optional API path runs through an @jadapps/runner on your own machine, keeping batch cleaning on your network too. A counter of runs (no content) is recorded for audit.
Does it remove project codes or billing references?
Yes, if they are stored as custom document properties. docProps/custom.xml is deleted entirely, and CRM, billing, and project-tracking add-ins commonly stamp opportunity IDs and invoice references there. A code written into the body text is content and survives — remove that manually.
What about hidden worksheets with our cost breakdown?
Those survive — a hidden worksheet is body content, not a property stream, and the wiper removes metadata files only. Delete or unhide-and-clear hidden sheets, speaker notes, and off-canvas objects in Office before exporting the deliverable.
Can I clean a whole folder of deliverables at once?
The picker allows up to 5 files on Pro, but the browser processor cleans the first selected file per run. For a folder, run them one at a time, or use the local runner endpoint for true unattended batch processing — it returns each cleaned file as base64.
What plan and file size do I need?
The Pro plan or higher. File-size caps follow the Security family limits: Pro 100 MB, Pro-media 500 MB, Developer 2 GB per file. An oversize file errors before processing with a message naming the file and your plan's limit. Most deliverables are well under the Pro cap unless they embed large media.
Why does my name come back after I tweak the cleaned file?
Office writes a fresh, minimal docProps/core.xml naming the current user as Creator the next time you open and save the document. The wipe was correct when it ran. Make the wipe the last step before delivery and do not open-and-save the cleaned copy afterwards.
Is there an audit trail I can show a client?
The run emits an audit log (no file content stored) recorded for dashboard/enterprise audit, and the result panel reports a removedEntries count you can note on your QA checklist. For independent proof, copy the cleaned file to a .zip and confirm the property and comment streams are absent.
What about a PDF version of the deliverable?
PDFs are not OOXML ZIPs and are rejected here, and a PDF carries its own Author / Producer / XMP metadata. Run it through pdf-history-sanitizer. For audio or image assets, see audio-id3-ghoster and gps-geotag-remover. All share the browser-side, no-upload model.
Privacy first
Every JAD Security operation runs entirely in your browser. Files, passwords, and PGP private keys never leave your device — verified by zero outbound network requests during processing.