Security and data
Validiscan’s application stores its database and files in Supabase’s Frankfurt region, in the EU, and each customer sees only its own organization’s data. The application is built but not yet in operation, so this page describes how it is built, as of 6 October 2026.
Last updated:
On this page: 8 answers
Is the Validiscan application in operation?
Not yet. Validiscan’s application, with a console where Validiscan does the work and a portal for customers, is built but not in operation, and its address, app.validiscan.com, is not online. This page describes how it is built and set up as of 6 October 2026.
Details: the console, the portal, and what this page describes
Not yet. Validiscan’s application, with a console where Validiscan does the work and a portal for customers, is built but not in operation: its address, app.validiscan.com, is not online.
This page describes how the application is built and set up as of 6 October 2026. Where a part is not set up yet, the page says so.
Where is my shop’s data stored?
Validiscan’s application stores its database, user accounts and files with Supabase, a US company, in Supabase’s Frankfurt region (eu-central-1). Storage is in the EU, but not everything stays there: when AI drafting is switched on for a shop, an excerpt of the failing code goes to Anthropic, a US company.
| Data | Where it is kept or sent | When |
|---|---|---|
| Database: user accounts, organizations, shops, scans, findings, fixes, deliveries, free check summaries, the audit log | Supabase, Frankfurt region (eu-central-1) | Always |
| Files: screenshots, page HTML, raw test results, evidence packages, patch bundles, uploaded theme exports, evidence of manual checks | Supabase Storage, Frankfurt region, with no public access | Always |
| A fix delivered as a pull request | Your GitHub repository, on a new branch | When fixes are delivered by pull request |
| A fix delivered as a theme copy | An unpublished theme in your Shopify store | When fixes are delivered to Shopify |
| An excerpt of the failing code | Anthropic, a US company, through its API | Only for ASSISTED fixes, on a shop where AI drafting is switched on |
| Emails from the application: names, email addresses, shop names, counts, links | The email provider is not decided yet | For invitations, notices about finished scans, deliveries and evidence packages, and regression protection digests |
| The running application and its temporary working files | A server that is not set up yet | Once the application is in operation |
Details: the files, the links to them, and where the fixes end up
Validiscan’s application stores its database, its user accounts and its files with Supabase, in Supabase’s Frankfurt region (eu-central-1). Supabase is a US company; the data itself is stored in Frankfurt. Storage is in the EU, but not everything stays there: when AI drafting is switched on for a shop, an excerpt of the failing code goes to Anthropic, a US company, as described below.
The files are screenshots of scanned pages, page HTML, raw test results, evidence packages, patch bundles, theme exports uploaded in the portal, and files Validiscan attaches as evidence of its manual checks. They are kept in private storage with no public links. The application creates a link to a file only at the moment someone with access opens or downloads it, and the link stops working after 60 seconds.
The fixes themselves end up on your own platform: as a pull request in your GitHub repository, or as an unpublished copy of your theme in your Shopify store. A patch bundle is kept in the application’s storage, and Validiscan sends it to your developer.
Who can see my shop’s data?
In Validiscan’s application, each customer sees only the data of its own organization. Validiscan’s staff see all projects; today that is one person, William Quaade Rasmussen. Row-level security in the database enforces this, and access tokens are encrypted before they are stored.
-
Enforced in the database.
Every table of the application has row-level security: the database itself decides which rows an account may read, not only the pages of the application.
-
Two roles for customers.
In a customer’s organization, an admin can invite colleagues and ask for a verification scan. A viewer can see the organization’s data in the portal but change nothing.
-
Access tokens are encrypted.
A Shopify Theme Access password, a GitHub token or the password of a protected staging shop is encrypted with AES-256-GCM before it is stored.
-
A record of every change.
Every change a user makes in the application is written to an audit log, with who made it and when.
-
Logs without secrets.
The application’s logs leave out passwords, tokens, keys, cookies and request bodies.
Details: the database rules, the two customer roles, encrypted tokens, the audit log and the logs
In Validiscan’s application, each customer sees only the data of its own organization. Validiscan’s staff see all projects; today that is one person, William Quaade Rasmussen.
- Enforced in the database. Every table of the application has row-level security: the database itself decides which rows an account may read, not only the pages of the application. Automated database tests check that one customer cannot read another customer’s data.
- Two roles for customers. In a customer’s organization, an admin can invite colleagues and ask for a verification scan. A viewer can see the organization’s data in the portal but change nothing.
- Access tokens are encrypted. A Shopify Theme Access password, a GitHub token or the password of a protected staging shop is encrypted with AES-256-GCM before it is stored. The application shows only that a token exists. No account in the application can read it back, a staff account included; only the application’s background worker decrypts it, when a job uses it.
- A record of every change. Every change a user makes in the application is written to an audit log, with who made it and when. Only Validiscan’s staff can read the audit log.
- Logs without secrets. The application’s logs leave out passwords, tokens, keys, cookies and request bodies.
Is AI used on my shop’s code?
Validiscan’s application uses AI only to draft fixes of tier ASSISTED, and AI drafting is off by default: Validiscan switches it on for a shop only after the customer has agreed in writing. A model of Anthropic, a US company, writes each draft, and Validiscan reviews every draft before delivery.
- Service
- Anthropic’s API (Anthropic PBC, a US company)
- Used for
- Drafts of ASSISTED fixes, each requested by Validiscan for a specific finding
- Default
- Off; switched on for a shop only after the customer has agreed in writing
- Sent for each draft
- The failing rule with the shop’s platform, the catalogue’s advice, up to five failing elements with their HTML as rendered and the path and template of their page, the path of the theme file and up to 200 lines of it
- Never sent
- Screenshots, passwords or tokens, customer or account data, anything from other shops; an element’s HTML can still contain your shop’s own links or visible text
- Checks
- A draft that changes a file other than the one it was shown, creates or deletes a file, or has a diff longer than 400 lines is rejected; Validiscan reviews every draft before delivery, and you or your developer review the change again
Details: who requests a draft, what the application sends, and how a draft is checked
Validiscan’s application uses AI only to draft fixes of tier ASSISTED, and only on a shop where AI drafting is switched on. It is off by default. Validiscan switches it on for a shop only after the customer has agreed in writing, and only Validiscan’s staff can change the setting. Even then, the application drafts nothing with AI on its own after a scan: each draft is requested by Validiscan for a specific finding.
A draft is written by a model of Anthropic (Anthropic PBC, a US company), through Anthropic’s API. For each draft, the application sends:
- the rule that fails: its id, title, impact and WCAG success criteria, and the shop’s platform;
- the rule catalogue’s advice on how to fix it;
- up to five failing elements, each with its CSS selector, the failure summary, its HTML as rendered (at most 2,000 characters) and the path and template of its page, but not the page’s full address;
- the path of the theme file the failure was traced to, and up to 200 numbered lines of that file around the code it was traced to.
The application sends no screenshots, no passwords or tokens, no customer or account data, and nothing from other shops. An element’s HTML can still contain your shop’s own links or visible text.
What comes back is a proposed change with an explanation. The application rejects a draft that changes any file other than the one it was shown, creates or deletes a file, or whose diff is longer than 400 lines, and it checks that the change applies cleanly and passes a syntax check. A draft that fails these checks is never delivered. Validiscan reviews every draft before delivery, and you or your developer review the change again before you merge or publish it.
How long is data kept?
By default, Validiscan’s application deletes a scan’s screenshots, page HTML and raw test results 365 days after the page was scanned, unless an evidence package is built from that scan. Project records are not deleted automatically; how long they are kept after a project ends is not settled yet.
| Data | Kept | Deleted by |
|---|---|---|
| Screenshots, page HTML and raw test results of scanned pages, with the HTML excerpts of their findings | 365 days after the page was scanned (the default setting) | A cleanup job that runs every day |
| The same, for a scan an evidence package is built from | As long as the evidence package exists | By hand |
| The raw result of a free check | 365 days after the check (the default setting) | The daily cleanup job |
| Finished background jobs, including the addresses an email was sent to | 30 days after the job finished | The daily cleanup job |
| Project records: organizations, accounts, shops, scans with their page addresses and titles, findings, fixes, deliveries, evidence packages and their files, patch bundles, uploaded theme exports, evidence of manual checks, free check summaries, the audit log | Not deleted automatically | By hand, on request |
| Encrypted access tokens: Shopify Theme Access passwords, GitHub tokens and passwords of protected staging shops | Not deleted automatically | By hand, on request |
| Database backups | 7 days | Supabase |
Details: deleting data on request, ending Shopify access yourself, and backups
By default, Validiscan’s application deletes the screenshots, page HTML and raw test results of a scan 365 days after the page was scanned, unless an evidence package is built from that scan. Project records are not deleted automatically.
How long project records are kept after a project ends is not settled yet. You can ask Validiscan to delete them, or a stored access token, by writing to info@validiscan.com. On Shopify you can also end the access yourself: as of 6 October 2026, Shopify’s documentation says that deleting the password in the Theme Access app revokes the access. The database is backed up every day and each backup is kept for 7 days, so data deleted from the database can remain in a backup for up to 7 days.
What does the crawler do on a shop it checks for free?
For a free check, ValidiscanBot loads at most 15 public pages in its browser, after plain requests to choose them, follows robots.txt and waits at least 1 s between the requests it starts itself, with one known exception. It never signs in, adds a product to a cart, opens the checkout or sends forms.
- Pages in its browser
- At most 15, each at desktop size and at phone size; plain requests to choose them come first
- Gap between the requests it starts itself
- At least 1 s, longer if robots.txt asks, up to 10 s
- One known exception
- A redirect answering a page load in the browser is followed at once, without the gap and without checking robots.txt
- User agent
-
ValidiscanBot/1.0 (+https://validiscan.com; info@validiscan.com)The phone pass adds the word Mobile - Never
- Signs in, adds a product to a cart, opens the checkout, sends forms
- Kept when the application runs it
- A summary, not deleted automatically; the raw result, deleted 365 days after the check by default
Details: how it names itself, robots.txt, the known exception, personal data, and what the application keeps
For a free check, ValidiscanBot loads at most 15 public pages of the shop in its browser, each at desktop size and at phone size. To choose those pages it first makes plain requests for the home page, robots.txt, sitemaps and candidate pages, so it makes more requests than it loads pages. It follows the shop’s robots.txt and leaves a gap of at least 1 s between the requests it starts itself, with one known exception described below. The files a page loads itself, such as styles, scripts and images, load as in any browser. It never signs in, never adds a product to a cart, never opens the checkout and sends no forms.
- It names itself. Every request carries
ValidiscanBot/1.0 (+https://validiscan.com; info@validiscan.com). In the phone-size pass the same string ends in the word Mobile. - It reads robots.txt before the other pages. Its first request is for the home page, to see whether the shop answers. Then it reads robots.txt. If robots.txt disallows the home page for ValidiscanBot, or the server answers the request for it with a server error (5xx), with 429 (too many requests) or not at all, the check stops there.
- It waits longer if robots.txt asks. A longer Crawl-delay in robots.txt is followed, up to 10 s.
- One known exception. When the shop answers a page load in the browser with a redirect, the browser follows it at once, without the gap and without checking robots.txt. Validiscan has recorded this as a known gap in its scanner.
- It reads only what is public. Personal data reaches the scan only where the shop’s public pages show it, for example a name in a product review or in the imprint.
When the application runs a free check, it keeps a summary: the number of pages tested and of failures by impact, the platform and any accessibility overlay it detected, and up to five failures, each with the rule, a page address, the CSS selector and the failing element’s HTML, cut to 300 characters. The summary is not deleted automatically. The raw result keeps the findings with their page addresses and element HTML, but no page HTML, screenshots or raw test output; by default it is deleted 365 days after the check.
ValidiscanBot: what it requests and how to block itWhen does Validiscan run a full scan of a customer’s shop?
Validiscan’s application starts a full scan of a shop only when the shop owner’s permission is recorded. A full scan goes further than the free check: it adds one product to the cart and opens the first checkout step, without completing a purchase and without entering payment data.
- Starts only with
- The shop owner’s permission, recorded with the time and the name of the person at Validiscan who recorded it
- Without it
- No full scan starts, the portal refuses a verification scan, and regression protection skips its run
- Cart and checkout
- One product added to the cart and the first checkout step opened; no purchase, no payment data
- To withdraw it
- Write to Validiscan
Details: how the permission is recorded, what happens without it, and how to withdraw it
Validiscan’s application starts a full scan of a shop only when the shop owner’s permission is recorded. A full scan goes further than the free check: it adds one product to the cart and opens the first checkout step, without completing a purchase and without entering payment data.
Validiscan records the permission in the application, with the time and the name of the person at Validiscan who recorded it. Without a recorded permission, no full scan starts, the portal refuses a request for a verification scan, and regression protection skips its run. To withdraw the permission, write to Validiscan.
How a project runs, step by stepHow do I report a security problem or ask about my data?
Write to info@validiscan.com. The email reaches William Quaade Rasmussen, who runs Validiscan. What this website itself does with personal data is in the privacy notice for validiscan.com.
Details: the address, and the privacy notice for this website
Write to info@validiscan.com. The email reaches William Quaade Rasmussen, who runs Validiscan. What this website itself does with personal data is in the privacy notice for validiscan.com.
Start with a free check of your shop.
Send your shop’s address. Validiscan scans it and replies with every failure the scan can prove, with the page and the code.
Request a free checkOr write to info@validiscan.com.
What the free check covers, and what it leaves out- You send
- your shop’s address
- Pages scanned
- up to 15
- You get
- every failure the scan can prove, with the page and the code
- On your shop
- public pages only; no login, nothing bought, no forms sent
- What it is not
- a full audit