Observe
Examines the page behaviour before a consent choice is made.
Technical scan & privacy Public platform
onGDPR.md checks the public surface of a website: cookies, trackers, forms and information documents. The report links the findings to the observed evidence and shows what could not be verified.

onGDPR.md
Examines the page behaviour before a consent choice is made.
Tests refusal and checks which requests and mechanisms remain active.
Organises the findings, evidence and limits into a report for the team.
Cookies, trackers and the behaviour of consent mechanisms.
Priority issues and information useful to those who maintain the website.
Analyses on website behaviour, with the methodology and limits published.
The technical scan supports compliance preparation. It is not a legal certification and does not replace a full analysis of an organisation's processes.
onGDPR.md in detail
A site's privacy policy says what should happen. onGDPR.md measures what actually happens: what loads before the visitor has time to choose anything, what remains active after they click "Reject all", what the information document says or does not say and where the data goes. You enter an address, you receive a score from 0 to 100, a verdict and findings with evidence.
The engine is deterministic. There is no language model in the scoring path: the same inputs give the same result, and each finding refers to an article from Law 195/2024 checked in a register of the law's 90 articles. An article we cannot confirm in the text of the law is not printed.
Law no. 195/2024 has been in force since 23 August 2026 and repeals Law 133/2011. Sanctions go up to 2,000,000 lei or 2% of turnover, and the authority is CNPDCP. The applicable regime is not assumed in code, but calculated from the scan date.
The scanner finds the banner, actually clicks the reject control, and then listens to network traffic for three seconds. A tracker counts as a breach only if it was already loading before any consent and continues to load after rejection without a rejected-consent signal. A site that runs Google Consent Mode v2 correctly, with consent denied by default, is not punished for its cookie-less pings — this rule was added explicitly so as not to contradict the check that rewards exactly that behaviour.
Transport — forced HTTPS, HSTS, CSP, mixed content, cookie attributes, security headers. Cookies — trackers and non-essential cookies before consent, tracking storage. CMP — banner presence, refusal control, equal weight between acceptance and refusal, pre-ticked options, withdrawal of consent and the behavioural test. Policy — twelve content elements, from purposes and legal basis to CNPDCP and the date of the last update. Forms, jurisdiction and the identity of the controller complete the list.
Eighteen known CMP selectors, each with its source cited, plus a generic heuristic for hand-written banners — very common in small companies in Moldova — which reads the computed styles from the live page, not the static HTML. The traversal enters open shadow-DOM and iframes, because some banners live there entirely. Closed shadow-roots remain invisible by design: we state this openly and have a test that holds the claim in place.
Cookies 0.25, consent mechanism 0.20, policy 0.20, transport 0.15, forms 0.08, jurisdiction 0.07, controller identity 0.05 — the sum is exactly 1.0. A failed finding reduces its category proportionally to severity: critical 1.0, high 0.6, medium 0.3, low 0.15; a warning costs half. Above 80 is compliant, above 50 is risk, below — non-compliant.
A single failed critical finding forces the verdict “non-compliant” and caps the score at 49, regardless of what the weighted formula would say. The reason is simple: trackers that load before consent, or a reject button that does not stop anything, are happening right now to every visitor. An impeccable policy must not be able to raise the average above that.
A 45-second budget per scan. A custom user-agent, which identifies itself and links to the page that explains the scan and how to refuse it. The target site’s robots.txt is respected by default, with a separate read, capped at 8 seconds, so that a slow robots.txt does not eat into the audit budget. Before any request, a guard blocks internal addresses, the local network and the cloud infrastructure metadata endpoint.
Data and operation
From exploration to implementation
The homepage shows the default behaviour, but forms, campaign pages and embedded content areas often have other trackers. We determine which addresses matter and under what conditions they are tested.
The findings are written so they can be acted on by whoever maintains the site: which host, which cookie, which header, which policy element is missing. We separate what is observed from what requires context from inside the organisation.
The score is not a legal opinion and does not calculate any fine. The legal basis for processing, contracts with processors, the processing register and the impact assessment are legal and organisational decisions. The report lays the groundwork with evidence; the lawyer draws the conclusion.
After changes, the exact same scenario is repeated. A comparison only makes sense between two scans done the same way — otherwise a site is compared with a day, not with itself.
No. It is a technical measurement of the public surface of the site, with evidence and the limits of each finding. Many obligations under the law — the legal basis for processing, contracts with processors, the processing register, the impact assessment, informing employees — cannot be observed from the outside and do not appear in the report. The score is not a legal opinion and does not calculate any fine.
The scanner finds the banner, clicks the reject button and listens to network requests for another three seconds. A tracker is flagged only if it was already loading before consent and continues after rejection, without a rejection signal in the request. It is the only check in the engine that needs a live, interactive browser, not a static picture of the page — and that is why the scan takes seconds, not milliseconds.
No. The engine is deterministic: the same inputs give the same score, and every weight and every threshold is in a single constants file, not scattered through the code. There is an assistant that explains the report, and that is a language model — but it does not recalculate anything, and if it cites an article that we do not confirm in the text of the law, its answer is not shown.
No. It means the tested public surface behaves well in the tested scenarios. An organisation can have an impeccable website and a non-existent processing register. The reverse works better: a poor score almost certainly shows a real issue, because the checks that cut deepest — trackers before consent, refusal that does not stop anything — describe something that is happening right now to every visitor.
It is a single visit, like that of an ordinary visitor, with a maximum budget of 45 seconds. The user agent identifies itself and links to the page that explains the scan and how to refuse it, and the site’s robots.txt is respected by default. No forms are submitted, no accounts are created and no authentication is attempted.
A banner hidden inside a closed shadow root is invisible by design — we state that and have a test that keeps us to it. We do not see what happens after authentication, what the server does with the data from a submitted form, where it goes next or what the contracts provide. The report says what it could observe and what it could not, and when the page did not render correctly it keeps the verdict instead of inventing one.
There is a register with the 90 articles of Law 195/2024, with the MD5 fingerprint of the source document. An article that is not in the register is not printed. And if a text attributes a reference to another act — for example Regulation (EU) 2016/679 — it is recognised as such, not declared invented. The two errors are not symmetrical: a true citation that is rejected disappears without anything seeming broken.
195/2024, from 23 August 2026. The code does not assume this, it calculates it from the scan date: before that date, 133/2011 was active and 195/2024 was reported as preparation; after, the reverse. An old report thus remains readable in its own regime, without claiming that it said something else.
Illustrative example
A use case, without client data or attributed commercial results.
The site’s public address. Nothing else — no access, no account, no code to place on the page.
The address passes through the anti-SSRF guard, then robots.txt. A real Chromium loads the page and everything requested before any interaction is recorded. The banner is searched for — among 18 selectors of known CMPs, then heuristically, including in open shadow DOM and in iframes. The refuse button is pressed and the network is listened to for another three seconds. In parallel, the other six modules run: headers, cookies, policy, forms, jurisdiction, operator.
A score from 0 to 100, a verdict and the findings with evidence for each, the legal article checked in the register and the classification — observed, inferred, needs context, untestable. If a tracker fired before consent and continued after refusal, the verdict is non-compliant and the score is capped at 49, no matter how good the policy is.
What is required:A public address that is accessible and does not block the bot in robots.txt. The report covers the surface and the tested scenarios; internal processes, contracts and processing grounds remain a separate legal assessment.
Collaboration possibilities
Inventory of the behaviour of websites, cookies and external requests, as technical support for IT teams and data protection officers.
We define a pilot around a real process: users, data, integrations, costs and acceptance criteria. Expansion follows after evaluating the result.
We establish the requirements for accessibility, hosting, data protection and interoperability. Any connection to AGE or STISC services requires validation of eligibility, access and approvals.
These are adaptation scenarios, not statements about existing contracts or partnerships. The proposed functions are confirmed within the project scope.
Discuss a pilotsesizari.md organises reports about public space: location, category, description and the relevant material.
Public platformMEGA QR includes a code generator and an optical transfer tool.
Public instrumentMegaforms explores collecting answers through conversational forms, including spoken answers and transcription.
Development & demonstrationsTell us about your process. Together we decide what is worth building, what we can connect, and how we check the result.