Skip to content

Privacy · updated 27 September 2026

What we keep, and for how long.

Specific, because vague is the same as hiding it. A report is deleted the moment it reaches your browser, the scan needs no account and an account holds scores rather than reports, and the site counts visits only if you say yes — but a scan does send the address you enter to Google. All of it is below, with who processes what.

Who holds this, and who to ask

the basics

Smart Capture Studio operates this site and the scanner behind it, and is the controller of the personal data described on this page. There is no parent company and no group — it is one product, run by the people who built it.

Anything on this page — a copy of what we hold, a deletion, a question you cannot find the answer to — goes to [email protected], and a person answers it. We aim to reply within a few days and will always be inside one month, which is the limit the GDPR sets.

What a scan stores

5 things
url

The URL you submitted

Held with the scan result so the report can show what was scanned.
results

The findings and the score

The output of the checks, including the raw result the report page renders.
ip

A one-way hash of your IP address

Used for one purpose: counting scans in the last hour so the five-per-hour limit can be enforced. The address itself is never stored — it is hashed with a secret that is regenerated every time the service restarts, which makes the stored value useless for identifying anyone. It is not used for analytics, profiling, or anything else.
signed in

Your account id, for an hour, if you scan while signed in

When you are signed in, the site sends your session with a scan so it runs on your organization’s plan rather than the free limits. The scanner asks Supabase who the session belongs to, looks up the plan, and counts the scan against your account id instead of a hash of your IP, in memory, for the same one-hour window. Nothing about it is written anywhere, and it is gone when the hour passes or the service restarts.
email

An email address, only if you give one

Submitted to unlock a crawl of more pages on a report. Nothing on the single-page report is withheld, and the scan works without ever giving an email. Unlike everything else here, an address you give is forwarded out of the scanner to Netlify Forms, where it is kept so we can contact you about the product. Netlify processes it on our behalf and does nothing else with it. We also use it once, immediately, for the thing you gave it for: when the crawl finishes we email you a link to the finished report. Sending that email means the address passes through Resend, our mail provider, who deliver it and do nothing else with it.
key

A hash of your API key, if you use one

A key is generated in your browser, shown once, and never sent to us. What we store is its SHA-256 and the first eight characters, which is enough to recognise the key when you present it and not enough to reconstruct it. We cannot show you a key again, and nobody who reached our database could use one. We also record roughly when a key was last used, so you can tell a live key from a dead one before revoking it.

How long it is kept

not long

A report is deleted the moment it reaches your browser. Scans live in the memory of the running process, are never written to a database, and the findings and the screenshot of your site are erased in the same request that hands them to you. After that the only copy is the one in your browser tab.

What briefly outlives it on our side is the address you scanned and the list of links found on it, because a crawl needs them if you unlock one. That goes as soon as the crawl finishes, and a scan nobody comes back for is swept within fifteen minutes.

The hashed rate-limit record lasts one hour, because that is the window the limit is measured over. The one thing we deliberately keep is an email address you chose to give, which is forwarded to Netlify Forms and held until you ask us to delete it.

A report you pressed Share on is the exception to all of the above: it is stored for 30 days and then deleted automatically. Sharing asks for your email address and will not store a report without one — a copy we keep for a month is a copy we keep for someone we can reach. Unlocking a crawl stores one the same way, because the report we email you has to exist somewhere for the link to open. Those two, and the two account settings below, are the only things that create a stored report. That copy lives in a database we run on Supabase, who host it on our behalf and do nothing else with it. It contains the report and nothing about you — no address, no IP, no email. The address you gave goes to our list, not into the report.

If you turn on keeping your own reports, available on a paid plan, your browser saves a copy of each report you open to your account. We still erase our copy the moment it reaches you — that does not change on any plan — so what is stored is the copy your browser already had, minus the screenshot. It is off until you turn it on, off again in any other browser until you turn it on there, and you can delete any of it, or all of it, from your account.

An owner of an account on a paid plan can also turn on keeping the report of every scheduled check. Then each scheduled re-scan of a watched site keeps its full report (again without the screenshot) alongside the ones your browser kept, within the same allowance; when that is full, the oldest report kept this way is deleted to make room, and one a person kept by hand never is. It is off until an owner turns it on, and the reports are deleted the same way as any other kept report.

If you create a badge from a shared report, we store the hostname, the score and the dates it was measured, and we keep them for as long as the badge is meant to work — a badge that expired would break the page displaying it. That record is the score and the site name and nothing else: no findings, no evidence, no page content, and nothing about you. The shared report it was made from still expires after 30 days.

If you ask us to watch a site, we store its address, your email address so we can tell you when the score drops, and the last score we measured. Not the reports: a scheduled scan is delivered and erased exactly like a manual one, and the score is the only thing kept, because a drop cannot be recognised without the number before it. Stop watching a site and the row goes with it.

Accounts are opened by invitation. If we invite you, we store your email address and the invitation. If you complete the registration form it links to, we store what you put on it — your name, your organisation, the website you want watched, and, if you gave them, your job title, a phone number and your message — so we can decide whether to open the account. If we open it, the registration stays with the account and is deleted with it. If we decline it or the invitation is withdrawn, we keep it so we do not invite you twice by mistake, and delete it when you ask.

An owner of an account can ask us to invite a colleague. We then hold that colleague’s email address and the role asked for, as an invitation, and it follows the same rules as any other invitation above. Please only give us the address of somebody who expects to hear from us.

To answer a support question, we can open a read-only view of your account — what your people see in Website Health. It changes nothing, and every time we open it is recorded in your account’s activity log, where everyone in your organisation can see it.

If you sign in, we store your email address and your scan history. The history is not your reports: for each site, it is the score, the six category scores, the identifiers of the checks that failed, and the hostname. No finding text, no evidence, no screenshot, no page content. It is enough to tell you what changed since last time and not enough to rebuild a report — reports are still delivered once and erased, and signing in does not change that. You can delete all of it from your account page, and deleting the account itself — also on that page, also immediate — takes the history, the watched sites, the kept reports, the API keys and the alert endpoint with it.

An account keeps an activity log: who changed what, and when — a site watched or its alerts changed, a check muted, an API key made or revoked, the webhook set, somebody added or their role changed, the plan changed. It names the person by the address they sign in with, and everyone in your organisation can read it; a change we make shows as Smart Capture Studio. It never holds a key, a webhook’s full address (only its host) or a report. It lives as long as your organisation does, and when somebody deletes their account their address is removed from every entry, by them or about them.

When something breaks, we keep an error report: what went wrong, where in our code, the page’s path (never its query string), and the browser’s user agent. Email addresses, tokens and anything that looks like a secret are stripped before it is stored. It holds no IP address and nothing that says who you are. The same error is counted rather than stored again, and an error nobody has seen for 90 days is deleted.

All of that, as a table

retention
report

Erased when it reaches you

A scan nobody comes back for is swept within fifteen minutes.
crawl seed

Until the crawl finishes, or fifteen minutes

The scanned address and the links found on it, kept only so an unlocked crawl has somewhere to start.
hashed ip

One hour

The window the five-per-hour limit is measured over. The same for the account id a signed-in scan is counted against.
shared

30 days, then deleted automatically

A report you pressed Share on, and the copy behind a report we emailed you.
badge

As long as the badge is meant to work

Hostname, score and the dates it was measured. Delete the badge and the record goes.
your email

Until you ask us to delete it

An address given to unlock a crawl, held on our list so we can contact you about the product. Not if you are signed in: a client’s crawl only emails the report, and adds nobody to a list.
registration

With the account, or until you ask

The invitation and what you put on the registration form. Opened into an account, it is deleted with the account. Declined or withdrawn, it is kept until you ask us to delete it.
account

Until you delete it

Your address, your registration, your score history, your watched sites, your kept reports, your API key hashes, your alert endpoint and your uptime monitors with their history. Deleting the account deletes all of it, in one database operation rather than a best-effort sweep.
activity

As long as your organisation exists

Who changed what in the account. Your address leaves every entry when you delete your account.
errors

90 days after last seen

A scrubbed error report: message, code location, page path and user agent. No IP, nothing that identifies you.
webhook

Until you remove it

An alert endpoint you configured, its signing secret, and whether the last delivery worked. If that endpoint is Slack, the alert is formatted for Slack and goes to whatever channel your incoming webhook points at — which is your choice rather than ours.
muted

Until you unmute it

A check you asked us to stop alerting you about on one site: the check id, the site, and the note you wrote. Ids only, never finding text.
uptime

Checks for two days; totals for up to 400

If your plan includes uptime monitoring: each monitor’s settings (the address, and any request headers or body you add — stored as you typed them, so use a read-only token) until you delete it. Every individual check (when, from where, the status code and how long it took) for two days; hourly totals for 100 days; daily totals and resolved incidents for 400 days. An incident keeps what was seen when it opened: the status, a few response headers, the first 4,000 characters of the response, and, when one could be taken, a screenshot of the page from PageSpeed Insights.
site audit

The latest crawl's pages; summaries for 400 days

If your plan includes the site audit: each audit’s settings until you delete it, and for its latest finished crawl, every address it found with what we measured there (status, title, description, headings, canonical, word count, the issues and the evidence for them, values your own rules extracted). Starting a new crawl replaces the previous crawl’s pages once the changes between them are recorded; each crawl’s score, counts and list of changes are kept for 400 days. The text of your pages is not stored, only a fingerprint of it. A login you give an audit is stored where nobody can read it back — not you, not us through the product — and is used only by the crawler, only on your own site.
page changes

The last look, and a year of changes

For a page you watch: the text of the page (or the part you chose) as last seen, and each change as a list of lines added and removed, for 400 days.
speed

Measurements for 400 days

For a page you measure: the Lighthouse results and Google’s real-user figures on each run. If you add our real-user snippet to your site, each visit sends us the page’s path (with its query removed and numbers made anonymous), whether it was a phone or a desktop, and five timings. We keep no IP address, no full address, no identifier and no cookie, and store only daily totals: how many visits fell in each range of each timing. Past your plan’s monthly number, a visit is counted and not measured.
google

Until you disconnect

If an owner connects Google Search Console or Analytics: the Google account’s address, the properties chosen, a read-only access token stored where nobody can read it back, and the figures we copy once a day (clicks, impressions and positions by page and by search query; sessions and key events by day and landing page). Disconnecting withdraws our access at Google and deletes all of it.
ai visibility

Answers for 400 days

The questions you ask us to track, your brand and competitor names, and each answer the AI assistants gave, with the sources they cited.
ai crawlers

Daily counts for 400 days

If you send us your site’s requests for AI crawler analytics (through a Cloudflare Worker, a log drain or an uploaded access log), we look at each one once. A request from a known AI bot is counted by day, bot, path (query removed, long identifiers made anonymous) and the kind of answer your server gave; a visit from an AI assistant such as ChatGPT is counted by day, assistant and landing path. Everything else is counted as “ignored” and nothing more. A bot’s IP address is compared, in memory, with the addresses its company publishes, then discarded. We store no IP address, no browser or user agent string, no query string and no cookie. The access key is stored only as a fingerprint. Past your plan’s monthly number, a request is counted and not kept.
people

Until you remove them

Addresses you give us for alerts, the on-call rota and scheduled reports — often colleagues’ or clients’ addresses, which you are telling us on their behalf. They receive only what you set up: outage and recovery emails, certificate and domain warnings, and the weekly or monthly report.
status page

Until you delete it

A status page shows the names you chose for your monitors, whether each is up, their daily history and when past incidents started and ended. Never the address being checked, a status code or the cause of an incident. A public page can be seen by anyone with its address; a private one only with its link, whose key we keep only as a one-way hash.
engagement

For as long as we work together

If you are a client, we hold your organisation’s name, the plan it is on, which of our products it uses and the date the engagement runs to — and a record of the invoices we have issued you (number, amount, dates, and whether it has been paid), which your organisation’s members can see. This product stores no card details and takes no payments — the invoices themselves are sent and paid outside it, under the retention that tax rules set. There is no subscription record to outlive your account, because there are no subscriptions.
counters

Indefinitely, because they are bare numbers

“4,181 scans” and nothing else. No address, no domain, no email, no IP.

Why we are allowed to hold it

legal bases

Under the UK and EU GDPR, and the equivalents elsewhere, holding personal data needs a reason the law recognises. Ours are these, and there are only four.

contract

Doing the thing you asked for

Running the scan you submitted, emailing you the report you unlocked, reviewing a registration you sent us, keeping the history an account exists to keep, and giving you the plan you are on. Without this we cannot provide the service you came for.
interests

Keeping a free service usable and not abused

The hashed rate-limit record, the aggregate counters, and blocking a target that is being used to probe somebody’s internal network. We have weighed this against your privacy and kept the data minimal on purpose: a hash with a secret that dies on restart, and counters with nothing in them but integers.
interests

Telling you about the product, if you gave us an address

An address given to unlock a crawl goes on our list. You can object at any time and we will remove it — one email, no form, and it does not affect anything else you can do here.
consent

Analytics, and nothing else

Google Analytics loads only if you say yes, and you can withdraw that below as easily as you gave it. Nothing else on this site asks for consent, because nothing else needs it.

Your rights over it

all of them

Wherever you are, you can ask us for a copy of what we hold about you, to correct it, to delete it, to hand it over in a portable format, to restrict what we do with it, or to object to it. Where we rely on consent you can withdraw it, and withdrawing it does not make what we did before unlawful.

Most of it you can do yourself, immediately, without asking us: Settings downloads everything your organisation’s account holds as one file (a portable copy, built in your browser), the account pages delete your history, your watched sites, your kept reports and your API keys, and deleting the account takes all of it with you. For anything else, write to [email protected]. We do not charge for it, we do not make you prove your identity beyond controlling the address in question, and we do not treat you differently for asking.

There is no automated decision-making here. A health score is arithmetic over a published set of checks, about a website rather than a person, and nothing about you is profiled, scored or used to decide anything.

If you think we have got this wrong, you can complain to your data protection authority — in the UK the Information Commissioner’s Office, in the EU your national regulator. We would rather you told us first, but it is your right either way.

Who processes it for us

6 companies

We run on other people’s infrastructure, and it would be dishonest to describe what we keep without naming who it sits with. Each of these acts on our instructions and does nothing else with it. This list changes when our infrastructure does, and the date at the top of the page moves with it.

netlify

Hosts this website, and holds addresses given to unlock a crawl

The site you are reading, and the form submissions behind “unlock”.
render

Runs the scan API

Where a scan actually happens. Reports live in that process’s memory and are erased on delivery; nothing is written to a disk there.
supabase

The database, sign-in, and uptime checks from other regions

Shared reports, badges, and — if you have an account — your address, your history, your watched sites, your kept reports and your API key hashes. Those belong to your client rather than to you personally, so anybody else we have added to the same client can see them — and each of you can see the others’ sign-in addresses and roles on the Organization page, so you know who else is in the account, and the activity log of who changed what. On an account nobody else has been added to, which is every account by default, that is only you. It also holds the error reports described above, which only we can read. When an uptime check fails, Supabase’s edge functions repeat that one request from other regions (the United States, Europe and Asia), and send back only what the site answered. If your organisation signs in with single sign-on, your identity provider tells Supabase your name and address, and nothing else is shared.
resend

Sends the emails we send

The report link when a crawl finishes, the alert when a watched site’s score drops, the monthly summary of what was checked, uptime alerts, escalations and scheduled reports to the addresses you set up, and — if we invite you — the invitation and the note that your account is ready. The reminder that an engagement is ending goes to us, not to you, because it is a reminder to send an invoice.
google

PageSpeed Insights, the Chrome UX Report, Search Console and Analytics

The first two receive the address you scanned or measure and nothing about you. If an owner connects Google, we read your Search Console and Analytics figures with the access you gave. Our own Analytics on this site is separate, measures this site only, and does not load unless you accept it.
ai assistants

Anthropic, OpenAI, Google and Perplexity, for AI visibility

If your plan includes AI visibility, the questions you set up are sent to the assistants you chose (Claude, ChatGPT, Gemini, Perplexity) under our accounts, exactly as you wrote them. They receive the question and nothing about you or your visitors.
cloudflare

Public DNS lookups

Asked about a scanned domain’s public TXT records, for the SPF, DMARC and DKIM checks. Carries nothing about you.
yours

And an endpoint of your own, if you configure one

An Agency account can have score-drop alerts POSTed to a URL it chooses, and any account with uptime monitoring can add Slack, Microsoft Teams or a webhook for outages. Where that goes and who runs it is your decision rather than ours; what we send is the site or monitor, what changed (scores and check ids, or the cause of an outage and when it started), signed so you can verify it came from us. Remove the channel and we stop.
transfers

Most of them are in the United States

So data about you may be processed outside your country, including outside the UK and EEA. Each of them commits to the standard contractual clauses or an equivalent approved transfer mechanism, and the amount of personal data that reaches any of them is small on purpose — for most of what this product does, the answer is an address you typed and nothing else.

How it is kept safe

specifics
transit

Everything is over HTTPS

The site, the API, and every call between them and the services above.
reports

A report is never written to disk

It exists in memory for the length of the scan and is erased when it reaches you. The strongest protection for a record is not holding it.
secrets

Keys that can read everything stay on the server

The database key that bypasses row-level security lives only in the scan API and never reaches a browser. Your own rows are protected by row-level security, so one account cannot read another’s even through a bug in our code.
hashing

Your IP and your API key are both one-way

The IP with a secret that is regenerated on every restart; the key with SHA-256. Neither stored value can be turned back into the thing it came from.
breach

If something goes wrong, we will say so

If a breach happens that puts anybody at risk, we will tell the people affected and the relevant regulator without undue delay, and within 72 hours where the law requires it. We will say what happened rather than what it resembles.

Two things worth stating plainly

no small print
children

This is not for children

The scanner is a tool for people who run websites. It is not directed at children, we do not knowingly create accounts for anyone under 16, and if we learn we have one we delete it.
california

We do not sell or share personal information

Not in the ordinary sense and not in the specific sense the California Consumer Privacy Act uses, which includes sharing for cross-context behavioural advertising. We have never done it, there is no mechanism in the product that could, and we run no advertising. California residents have the rights set out above; asking for them changes nothing about what you can do here.

Who can see a report

you

Only the browser that ran the scan

A report is delivered once and then deleted, so the link is not a shareable document — opened anywhere else there is nothing left to serve. To show a report to someone, export it as a PDF from the report page.
tab

It lives in that tab, not on our servers

Your browser keeps the report in session storage, which it clears when the tab closes. We cannot read that copy and it is never sent back to us.
history

Signing in does not put a report on our servers

An account keeps the score and the list of failing check ids so the next scan can tell you what changed. The report itself is still delivered once and erased. Without an account the same record is kept in your browser instead, and never reaches us at all.

Who else sees the address you scan

3 services

A scan does not stay entirely between your browser and us. To measure things that need a real rendering engine, we ask Google to load the address you entered, and we ask a public DNS resolver about its domain. We send the address and nothing else — no email, no IP, nothing that identifies you.

google

Google PageSpeed Insights and the Chrome UX Report

The address you enter is sent to Google, who load the page on their own infrastructure and return a Lighthouse report: Core Web Vitals, a screenshot, and how real Chrome users have experienced that address. This is what the “Verified by Google Lighthouse” and real-user panels in the report are built from. Google handle that request under their own privacy policy.
dns

Cloudflare or Google public DNS

To check SPF, DMARC and DKIM we look up the domain’s public TXT records over DNS-over-HTTPS, asking Cloudflare first and Google if Cloudflare does not answer. That is a lookup of public DNS records for the domain, and carries nothing about you.
rdap

rdap.org, for a monitored domain's expiry date

If you monitor a site’s uptime, once a day we ask rdap.org — a public directory that forwards to the domain’s registry — when the domain’s registration expires. That sends the domain name and nothing about you. The same daily look asks Cloudflare’s public DNS for the domain’s address and mail records, to notice when they change.
scanned

The site you scanned

As before, the site itself sees ordinary web requests from our scanner, which identifies itself in its user agent. A monitored site also sees our uptime checker, every few minutes, identifying itself the same way, and an audited site sees our audit crawler (SCSAuditBot, or the crawler you chose to imitate) visiting its pages, following robots.txt unless you told it not to.

How we measure this site

only if you agree

This site can count visits with Google Analytics 4, so we can tell which pages people actually use. It is the only third-party script on the site, and it measures this site — it has nothing to do with the site you scan, and it is never injected into it.

It does not load until you say yes. We ask once, in a bar at the bottom of the page. Until you accept there is no Google script on the page at all — nothing is deferred, nothing is queued, and nothing is sent. Declining costs one click, same as accepting, and you can change your mind here at any time. Your answer is kept in your browser’s local storage rather than a cookie, so refusing does not set the thing you refused.

cookies

If you accept, it sets cookies

Google Analytics stores a first-party cookie so a returning visitor is not counted twice. Withdraw consent above and we expire those cookies and stop sending anything. Nothing on this site needs them to work, and the scanner behaves identically without them.
pages

What it records

Which page was viewed, when, where you arrived from, and the broad device and browser you used. Google derive an approximate location from your IP address.
never

Report pages are not measured

Analytics is switched off on every report page — both the report the scanner sends you to and a shared /r/ link someone gave you. A shared link is readable for 30 days by anyone holding it, and it is not going to sit in an analytics dashboard because you opened it. No page view, no address, no id.
never

What it never sees

Nothing you type into the scanner. We send the page’s address without its query string precisely so that a scan started from a link — which carries the site you are scanning in the address bar — cannot leak through. The URL you submit, the findings, the score and the screenshot are never sent to Analytics, and no email address ever is.

What we do not do

none of it
never

No session recording or fingerprinting

Nothing on this site records your screen, replays your session, or tries to fingerprint your browser. The page counting described above, if you agreed to it, is the whole of it. The scanner does not inject anything into the pages it scans either — it used to load a measurement script from a public CDN into every page it visited, and no longer does.
never

No third-party error-reporting service either

When something on this site breaks, the error goes to your browser’s console and to our own error tracking, described above: the message, where in our code, the page’s path and your browser’s user agent, with addresses and tokens stripped first. No third party watches for exceptions, and nothing collects what you had typed when it happened.
counts

We do count how often the scanner ran

Not analytics in the sense above, but worth saying plainly: the API keeps running totals of how many scans started, finished or failed, so we can tell when something is broken. They are bare numbers. No address, no domain, no email and no IP goes into them, and there is nothing in them that could be traced back to a person or a scan. These totals used to reset whenever the service restarted; they now carry over, which makes them more useful to us and no more revealing about you, because a counter that says “4,181 scans” says nothing about who ran any of them.
history

Your own scan history stays in your browser

If you scan the same site twice, the report can show you what changed since last time. That history is written to your browser’s local storage and is never sent to us — we cannot read it, and it is not part of any report. Clearing it is a button on the report page, and clearing your browser storage removes it too.
never

No advertising cookies

The site runs no ads, is in no ad network, and sets no cookie for advertising or retargeting. The Google Analytics cookies described above are set only if you agreed to them, measure traffic to this site, and are not used to follow you anywhere else.
never

No selling or renting of email addresses

An address given to unlock a report is used to unlock that report and to contact you about this product. It is never sold or rented. The only company that sees it is Netlify, which stores the form submission for us and acts on our instructions alone.
never

No password, and no account you have to make

Sign-in is a link emailed to you, so there is no password to store, leak or reset. The free scan needs no account and always will: everything the scanner does for a visitor it does for somebody signed out. Accounts are opened by invitation, for clients.
never

No tracking between the site and the scanner

Signed out, nothing connects a scan you ran to an account, a visit, or another scan. The rate-limit hash is not an identifier, the counters are integers, and analytics never sees a scanned address. Signed in, the scanner knows your account id for the hour it counts your scans, and nothing else — the score history your account keeps is sent by your browser, through our server, not recorded by the scanner.

When this page changes

The date at the top moves whenever it does, and the rule this project holds itself to is written into the file: a change to what the code stores and a change to this page go in the same commit. A privacy page describing a previous version of the product is worse than none.

If a change materially affects you — a new processor, a longer retention, a new category of data — we will tell anyone with an account by email before it takes effect, rather than relying on you to re-read this page.

Scanning a site you do not own

The scanner requests pages the way any browser would, identifying itself in its user agent, and stays within a strict budget: the entered page free under a sixty-second budget, up to ten more if a crawl is unlocked under ninety, following only same-origin links. On the free scan it reads the page and a capped sample of the stylesheets, scripts and images it declares. It does not attempt to log in, submit forms, or reach anything a normal visitor could not.

If you operate a site and want it excluded, or you want a report deleted, or you want an email address you gave us erased, write to [email protected] with the URL or the report link.