Free tool
HTML diff.
Two versions of a report, a template or an export, and the only question that matters is what actually changed. Paste both, and the differences show line by line — with minified markup normalized first, so an indentation change does not bury the one number that moved.
Differences
| 1 | 1 | <section class="summary"> | |
| 2 | − | <h2>Q3 pipeline</h2> | |
| 3 | − | <p>Pipeline closed the quarter at <strong>$9.55M</strong>, up 11% on Q2.</p> | |
| 2 | + | <h2>Q3 pipeline (final)</h2> | |
| 3 | + | <p>Pipeline closed the quarter at <strong>$9.61M</strong>, up 12% on Q2.</p> | |
| 4 | 4 | <ul> | |
| 5 | 5 | <li>EMEA: $2.78M</li> | |
| 6 | − | <li>APAC: $1.94M</li> | |
| 6 | + | <li>APAC: $1.99M</li> | |
| 7 | 7 | <li>LATAM: $0.62M</li> | |
| 8 | + | <li>North America: $4.22M</li> | |
| 8 | 9 | </ul> | |
| 9 | − | <p class="note">Numbers are provisional until the close on the 5th.</p> | |
| 10 | 10 | </section> | |
| 11 | 11 |
Turns the comparison into a link you can send to whoever has to approve it — they comment on the exact line they are questioning instead of screenshotting it back at you. Free, no card.
Why a generic text diff isn't enough for HTML
Markup arrives in whatever shape the thing that produced it felt like: a build step emits one line, a formatter emits four hundred, a model emits something in between. Run those through a plain line differ and every line is reported as changed, which tells you nothing. Normalizing both sides with the same formatter first collapses that noise, so what is left is the edit you were looking for.
What it compares
- HTML, and anything else line-shaped — Markdown, CSV, JSON, XML, SVG, plain text, log output.
- Whole documents. The identical head and tail are matched first, so only the region that differs is compared and a one-line change in a long file is instant.
- Line numbers for both sides, so a difference here maps onto the line in your editor.
- Unchanged stretches collapsed to three lines of context — the same convention
git diffuses. - Output as a unified patch, which is what a code review tool,
git applyor another agent expects to be handed.
Diffs you did not have to make yourself
This page compares two things you already have. If the document is published on Comma instead, the comparison is automatic: every re-publish keeps the previous version as a revision, and readers see what changed since they last looked without anyone saving a file called final-v3.html. A routine that rebuilds the report on a schedule produces that history on its own, and an agent can read it back over the MCP server.
Questions
- How do I compare two HTML files?
- Paste one version into each pane, or drop an .html file onto either of them. The differences are highlighted as you type — removed lines in red, added lines in green — with the unchanged stretches collapsed so you only read what moved. Nothing installs and nothing uploads.
- One file is minified and the other isn't. Will everything show as changed?
- Not with “Normalize HTML” on, which is the default. Both sides are re-indented with the same formatter before they are compared, so a one-line build artefact and its pretty-printed source line up and only the real differences remain.
- Does it diff the rendered page or the markup?
- The markup, line by line. That is the right level when you want to know exactly what changed — an attribute, a number in a cell, a whole section — rather than whether two screenshots look alike.
- Can I compare plain text, Markdown, CSV or JSON too?
- Yes. The comparison is line-based and content-agnostic; turn off “Normalize HTML” and it is a plain text diff. Anything you can paste, it will compare.
- What do “ignore whitespace” and “ignore case” do?
- Ignore whitespace compares lines with leading, trailing and repeated spaces collapsed, so a re-indent alone is not reported as a change. Ignore case compares without regard to letter case. Both affect matching only — the lines are always displayed exactly as you pasted them.
- How large a file can it handle?
- Whole documents. The common beginning and end are matched first and only the differing region goes through the comparison, so two near-identical 10,000-line files are fast. Two entirely unrelated very large files are the slow case, and the result is capped rather than freezing the tab.
- Are my files uploaded anywhere?
- No. Both sides are read and compared in your browser. They only leave your machine if you click “Publish this diff” and create a report.
Related: HTML formatter · HTML viewer · HTML to Markdown · all free tools · report types