Turn messy HTML into meaningful diffs
Extract real changes from before and after snapshots, then generate concise AI summaries that actually explain what changed.
Start with trial balance. No subscription required.
Model-based pricing. Lower input cost. Output not charged.
Messy in. Structured out.
Pass before and after HTML — get back meaningful changes and a clear summary.
<html><body>
<div class="product" id="p-42">
<h1 class="title xl">
Widget Pro — $29.99
</h1>
<p class="desc">
Our best widget. Ships in 3-5 days.
Now with extra durability.
</p>
<button class="btn btn-blue">
Add to cart
</button>
<span class="stock">
In stock (42 units)
</span>
</div>
</body></html><html><body>
<div class="product" id="p-42">
<h1 class="title xl">
Widget Pro — $24.99
</h1>
<p class="desc">
Our best widget. Ships in 1-2 days.
Now with extra durability.
</p>
<button class="btn btn-green">
Add to cart
</button>
<span class="stock">
In stock (7 units)
</span>
</div>
</body></html>Summary
Price dropped from $29.99 to $24.99. Shipping time improved to 1–2 days. Button style changed. Stock reduced to 7 units.
Changes
- +Price: $29.99 → $24.99
- +Shipping: 3-5 days → 1-2 days
- +Button: btn-blue → btn-green
- +Stock: 42 units → 7 units
{
"changed": true,
"added": [],
"removed": [],
"modified": [
"price", "shipping",
"button_style", "stock"
]
}Why MessyDiffs?
MessyDiffs cuts through noisy HTML to surface the changes that matter, then summarizes them clearly.
Avoid sending full HTML snapshots to the model.
Raw HTML diffs are noisy.
Whitespace, attributes, and structure changes drown out real content changes.
Naive comparisons are hard to interpret.
Without filtering, you get a wall of changes with no signal about what actually matters.
MessyDiffs returns changes you can act on.
Structured diff output and concise AI summaries — focused on meaningful changes.
Why not call the model directly?
Naive vs MessyDiffs
See why MessyDiffs sits between raw HTML and your chosen model.
Naive approach
- Send full before and after HTML
- Pay full model input cost
- Pay to process everything, changed or not
- Noisy diffs and generic summaries
MessyDiffs
Recommended- Send before/after snapshots to MessyDiffs
- 50% of the selected model's input cost
- Focus on meaningful changes
- Summaries that highlight what actually changed
Output tokens are not charged.
Example: a 30k-token HTML comparison → half the input cost
Stop sending full HTML snapshots to the model.
How it works
Three steps from messy to meaningful.
Send before and after snapshots
POST your before/after HTML to the API. Any format — scraped pages, rendered output, template results.
MessyDiffs extracts meaningful changes
The engine strips noise, normalises structure, and identifies what actually changed — not just what looks different.
Get structured diff + AI summary
Receive a clean JSON diff with added/removed/modified fields, plus a concise natural-language summary.
Simple API, clean output
One endpoint. POST before and after. Get back structured changes.
curl -X POST https://api.messydiffs.com/v1/diff \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-haiku-4-5",
"before": "<html>...</html>",
"after": "<html>...</html>"
}'{
"changed": true,
"summary": "Price reduced from $29.99 to $24.99.
Shipping improved to 1-2 days.
Stock level dropped to 7 units.",
"added": [],
"removed": [],
"modified": [
{
"field": "price",
"before": "$29.99",
"after": "$24.99"
},
{
"field": "shipping_time",
"before": "3-5 days",
"after": "1-2 days"
}
]
}Public demo
Try the diff demo
See how MessyDiffs pulls out the changes that matter.
This demo uses a fixed example. Try your own snapshots and AI summaries in the app.
Simple, model-based pricing
No subscriptions. No surprises.
Choose a model
Pick Claude Haiku, GPT-4o mini, or another supported model.
Pay per request
Requests are charged at 50% of that model's input token cost. Pricing is based on the request you send.
Output tokens are not charged
The summary and diff output are free. No subscription required.
Built to reduce noise before AI sees it.
Example: Claude Haiku at $1/M input → MessyDiffs charges $0.50/M
Non-AI diff processing may incur a small fee.
Developer quickstart
Works with any HTTP client. No SDK required.
curl -X POST https://api.messydiffs.com/v1/diff \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-haiku-4-5",
"before": "<html>...</html>",
"after": "<html>...</html>"
}'const response = await fetch(
'https://api.messydiffs.com/v1/diff',
{
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'claude-haiku-4-5',
before: beforeHtml,
after: afterHtml,
}),
}
);
const { changed, summary, modified } = await response.json();using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", API_KEY);
var payload = new {
model = "claude-haiku-4-5",
before = beforeHtml,
after = afterHtml
};
var response = await client.PostAsJsonAsync(
"https://api.messydiffs.com/v1/diff",
payload
);
var result = await response.Content
.ReadFromJsonAsync<DiffResponse>();FAQ
Try MessyDiffs
Clean diffs. Better summaries. Lower cost.
Start with trial balance. No subscription required.