Frame Watch keeps a live inventory of every iframe loading on your site and tells you the moment a new one appears. Built on the reports your visitors' browsers already send, so there is nothing to deploy beyond a header.
Embedded frames are how most sites handle the parts that matter most — the payment form, the sign-in widget, the consent banner, the support chat. Each one is a document from somebody else's origin, running its own code, with its own dependencies, changing on its own schedule. You cannot see inside it from your own page, and unless you are watching for it, you will not see when one is swapped, added, or pointed somewhere new.
The same-origin policy that keeps a third-party frame from reading your page also stops you reading it. Your own monitoring, your own error tracking, your own tests — none of them can see what is happening inside the frame your checkout depends on.
An iframe pointed at a new host renders exactly like the old one. A payment form served from a lookalike domain looks like a payment form. Without an inventory to compare against, a substituted frame is invisible from the outside.
Tag managers, ad networks and embedded widgets routinely insert frames of their own. A single approved embed can bring others with it, and those arrive without review, without a ticket, and without anyone on your team knowing they are there.
Frame Watch maintains a live list of every iframe observed on your site and alerts you when a new one shows up. The data comes from real browser sessions, so it covers the frames that only appear at checkout or behind a login.
Frame Watch records each iframe source your site loads, when it was first observed, when it was last seen, and how often it appears. No manual audit, no spreadsheet that goes stale the week after you build it — the inventory maintains itself from the reports your visitors' browsers already send.
Learn more about Frame Watch →When an iframe source appears that Frame Watch has not recorded before, it raises an alert with the source, the timestamp and the site it was seen on. You choose how sensitive that is: the alert threshold runs from one observation up to a hundred, so a busy site can wait for a pattern rather than hearing about every one-off.
Learn more about alert configuration →Each hostname is monitored separately, so your checkout and your marketing blog are tracked and alerted independently. Add exclusions to suppress URL prefixes you have already accounted for, route alerts to email or to a webhook, and keep the noise on the part of your estate where a new frame is genuinely worth a look.
Learn more about webhook alerts →One header. No code. Your iframe inventory starts populating from the first visitor.
30-day free trial · One header · No code · Cancel anytime
Frame Watch is not an alert firehose. It records distinct observations about the frames on your site, each with the source, the timestamps and the monitored site it belongs to, so a notification tells you something specific rather than something vague.
| What Frame Watch records | What it means |
|---|---|
| New iframe detected | A frame source is loading on your site that has not been observed before |
| First seen | When a given frame source entered your inventory |
| Last seen | Whether a frame is still in use, or quietly stopped loading |
| Observation frequency | How often the frame appears — separating a site-wide embed from a one-off |
| Monitored site | Which hostname the frame was seen on, so checkout and blog stay separate |
This is the difference between “something new is on the site” and knowing exactly which frame, on which host, first seen when.
Frame Watch reads the reports your visitors' browsers already send about what your pages load. Because the data comes from real sessions, it covers the frames a crawler would never reach — the ones that only render for signed-in users, in a specific region, or at the payment step.
You don't need a working CSP to start. A minimal report-only header is enough to begin building the inventory, and it blocks nothing.
Content-Security-Policy-Report-Only: default-src * 'unsafe-inline' 'unsafe-eval';
connect-src 'self'; form-action 'self';
report-uri https://your-subdomain.report-uri.com/r/d/csp/reportOnly
Already running a policy? Add your Report URI endpoint to the existing report-uri directive and Frame Watch begins populating from the reports you are already generating.
On most payment pages the card fields themselves live in an iframe from a payment service provider. PCI DSS 4.0.1 Requirement 6.4.3 asks you to know and justify what is loaded on those pages, and 11.6.1 asks you to detect unauthorised change to them. An iframe inventory with first-seen timestamps and a change log is exactly the sort of artefact both requirements are asking for.
Frame Watch covers the embedded documents. Script Watch covers the scripts, Data Watch covers where the page sends data, and the broader compliance evidence layer is set out on the PCI DSS Compliance page.
Frame Watch tells you which iframes are on your site and when a new one turns up. It does not look inside them, and it does not block anything from loading — it is the embedded-document inventory layer, and it works alongside the rest.
| Frame Watch does | Pairs with |
|---|---|
| Continuous iframe inventory | Script Watch for JavaScript — the same visibility for scripts rather than frames |
| Alerting on new frame sources | Data Watch for exfiltration monitoring — seeing where your pages send data |
| Per-host monitoring and exclusions | CSP for enforcement — restricting which frames are allowed to load at all |
| Historical audit trail | Threat Intelligence for IoC matching — telling you whether a new source is known bad |
Together, these form the client-side security visibility layer that sits between your CSP policy and your incident response process.