The screenshots are lying
Your onboarding flow gained a step in March. The docs still show February. Support answers drift to match the docs, not the product.
ScreenshotHotDog walks your real user flows, gives every step a permanent URL that always serves the current screenshot, and tells you when the shape of the flow changes.
Nobody files a ticket saying the screenshot on page twelve is four releases out of date. They just trust the docs slightly less, every month, forever.
Your onboarding flow gained a step in March. The docs still show February. Support answers drift to match the docs, not the product.
Ask five people what’s in the signup flow this month and you’ll get five answers, all confident, none complete.
Existing screenshot automation recaptures the shots a human defined once. Add a step and it will capture all the old ones, beautifully.
Three steps, and then you go back to your actual job.
Type “the event creation flow”. No selectors, no test scripts, no recording your screen while narrating. Plain English is the whole input.
A browser agent explores the flow, finds every step, and compiles what it saw into a deterministic script — a ranked list of anchors per step, not a brittle CSS selector. Then the agent leaves.
Pure Playwright. No model in the loop, so no drift and no surprise bill. The same bytes come out tonight as last night — unless your product actually changed.
Every step of every flow gets a permanent address. It isn’t a file you exported and will forget to re-export — it’s a promise we re-honour every night.
Drop it in your docs, your README, your Notion page, your help centre. Nothing in your workflow changes. The image just stops being wrong.
https://cdn.screenshothotdog.com/s/acme/event-create/step-4.png

We diff the accessibility tree and the step graph, not the pixels. So a change arrives as a sentence you can act on, not a red blob on an image.
Rename “Create event” to “New event” and you get a single
cta_renamed — not a step_removed plus a
step_added. That step also keeps its permanent URL, so
nothing in your docs breaks.
It’s a small distinction that decides everything: it’s the difference between an alert your team reads and an alert your team mutes in week two.
Naive pixel diffing fires on a rotating avatar, a relative timestamp, a font-rendering update. One hundred percent false positives, muted by Wednesday, and then you’re paying for a dead product.
So pixel diffing exists, and it stays quiet. The structural diff is the one that’s allowed to be loud.
Pinned viewport, DPR, locale, timezone and fonts. Frozen clock, seeded randomness, animations killed, third-party widgets blocked, cookie banners declined. Every capture taken twice and hash-compared.
Measured on our seven-page fixture site, with a deliberately ticking clock on every page. These are our own engineering numbers, not a customer benchmark — we’ll publish customer numbers when we have customers.
Stop re-shooting the same forty images every release. Paste a URL, and the page you wrote in January is still accurate in November.
A nightly, structural answer to “did anything about this journey change, and was it on purpose?” — without owning another test suite.
Macros and help-centre articles that show the product as it is today, so you stop apologising for your own screenshots.
We’d rather tell you than have you find out on day three. Here is the honest state of the thing.
Invite the whole docs team. We charge for what we run, not for who reads it.
Public pages only. Kick the tyres, no card.
For a docs team that’s tired of re-shooting.
When someone other than docs starts caring.
Bigger surface area, procurement-shaped needs.
Annual billing gets you two months free. Prices in GBP, excluding VAT. Flows are counted per project, and you can move them around whenever you like.
Early access is opening to a small first group of teams. Tell us what product you’d point it at and we’ll get you in.