Skip to content
megapromotingLet's talk
Products onGDPR.md

Technical scan & privacy Public platform

What a site does with data, beyond the banner text.

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: the address scanning field and, alongside it, the example verdict with the seven checked chapters
ongdpr.md · the seven checked chapters and the verdict, on an illustrative example

onGDPR.md

From information to work done.

01

Observe

Examines the page behaviour before a consent choice is made.

02

Compare

Tests refusal and checks which requests and mechanisms remain active.

03

Explain

Organises the findings, evidence and limits into a report for the team.

Where it becomes useful.

Technical audit

Cookies, trackers and the behaviour of consent mechanisms.

Remediation preparation

Priority issues and information useful to those who maintain the website.

Aggregated research

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

What you can do with this project.

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.

01

The "Reject all" behavioural test — what makes a report different from a list of ticks

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.

02

Seven modules and 48 checks

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.

03

Banner detection that does not pretend to see everything

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.

04

A score you can reconstruct

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.

05

The hard rule for active breaches

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.

06

Polite robot behaviour

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

What enters the system. What needs to be checked.

Only the public surface, under the test conditions
The scan sees what a visitor sees: the public page, its network requests, cookies, the banner and the linked documents. It does not see internal processes, supplier contracts, the processing register, staff training or what happens behind a form after submission.
The technical–legal boundary is in the report data, not only in the footer
Each finding carries a classification: observed, inferred, needs context, untestable or error. Plus applicability, strength of evidence and a confidence between 0 and 1. A report therefore says not only what it found, but also how strongly each claim stands — and a “needs context” finding is a question for a lawyer, not an accusation.
Legal citations pass through a register
The 90 articles of Law No. 195/2024 sit in a register with the MD5 hash of the source document. An article number that is not in the register is not published. At the same time, a reference that the text attributes to another act — for example Regulation (EU) 2016/679 — is recognised as such and left out of the check, because rejecting a true claim is the bigger mistake: after that, nothing looks broken anymore.
Datasets with provenance
38 manually cleaned tracker hosts, each with owner, country and category — the main source. 46,863 domains extracted from EasyPrivacy, used only to answer the question “is this host a tracker?”, without metadata. 2,264 rows from Open Cookie Database for cookie names and purposes. All vendored, with the refresh script in the repository.
The assistant that explains the report cannot contradict it
On the report page there is a conversational assistant — that is a language model, unlike the engine. It explains what a finding means, but it does not recalculate the score and cannot change it. Every answer is automatically checked before it is shown: if it cites an article that is not confirmed in the text of the law, the answer is not shown at all.

From exploration to implementation

How we prepare a project with onGDPR.md.

01

We choose the addresses

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.

02

We read the report together with the technical team

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.

03

We define what is passed on to the lawyer

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.

04

We verify the fix under the same conditions

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.

Questions worth clarifying.

Does the report certify compliance with Law 195/2024?

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.

What exactly does the “Reject all” test do?

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.

Do you use artificial intelligence to give the score?

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.

Does a good score mean the organisation is fine?

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.

Does the scan affect my website?

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.

What can the scanner not see?

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.

How do you know the cited article exists?

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.

Does Law 195/2024 apply or is it still Law 133/2011?

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 website with a cookie banner and a refuse button

A use case, without client data or attributed commercial results.

Initial situation

The site’s public address. Nothing else — no access, no account, no code to place on the page.

How it works

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.

Rezultatul

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

onGDPR.md, in the context of your organisation.

Web presence assessment

Inventory of the behaviour of websites, cookies and external requests, as technical support for IT teams and data protection officers.

Private companies

We define a pilot around a real process: users, data, integrations, costs and acceptance criteria. Expansion follows after evaluating the result.

State institutions and companies

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 pilot

Part of an ecosystem.

What would you want to work better?

Tell us about your process. Together we decide what is worth building, what we can connect, and how we check the result.

Let's talk