ScrutoraCode, cloud & consent

Your privacy policy is a promise. Your code is the proof.

Scrutora reads the repository and draws the map: every personal-data field, every hop it makes, and every place it comes to rest.

Live tracea public banking platformpublic repository · requestPasswordReset()
PII · DATA ELEMENTemail4 sinks · 3 unprotected
Stored
Logged
Shared
Primary datastore
…/useradministration/domain/AppUserRepository.java:48parameterised
AppUser record · at rest
…/service/ForgotPasswordServiceImpl.java:64no encryption asserted
Application log
…/service/ForgotPasswordServiceImpl.java:50unmasked
Email provider
…/infrastructure/core/service/PlatformEmailService.java:69leaves your estate
01 · The test almost everyone failsa public banking platform scan

Someone asks you to delete their data. Can you?

Not whether your policy says you will. Whether code exists that would. Scrutora looks for the delete and export path behind every field you hold, and tells you which ones have none.

accessTokenaccount_noaadhaaremail_addressstreetlongitudedocument_keyzipclient_ipdobtotalCapitalizedIncomefullnamemiddlenamegendermobile_numbercitypasswordfirstnameagenational_idlastname

No code was found that deletes or exports 7 of these fields. If someone asked you to remove their data, you could not show that these would be included.

66.7%Erasure coverage
14Deletable in code
7No path found
02 · Where it actually goesRED = UNPROTECTED PATH

Most of your schema is travelling unprotected.

Every classified field, followed from the code that touches it to the log, store or third party it reaches. No questionnaire, no workshop. This is read out of the repository.

TRACKED DATAWHERE IT GOESaccountNumberemailfirstnamelastnamepassworddisplay_namemobile_noaccount_nodate_of_birthemail_addressfullnamegendermiddlenameageip_addressdocument_keyaccessTokennational_idstreetcitypostal_codelatitudelongitudeApplication logplaintext · 7 fieldsDatabase storeno encryption asserted · 8 fieldsEncrypted storesealed · 2 fieldsAt restdeclared · 6 fields
03 · How it works

Four passes over one graph, not four point tools.

01FIND
Read everything you ship

One pass over source, Terraform, Kubernetes, Dockerfiles and your dependency tree: 270+ rules across 12 languages and 11 IaC formats. Findings arrive as SARIF, in the tools your engineers already have open.

02MAP
Follow every field to where it lands

Each personal-data element is traced from the line that touches it to the store, log or sub-processor it reaches, then written straight into your Record of Processing.

03OPERATE
Grade the cloud you actually run

Findings from 3 cloud providers are graded against the same rule graph, plus what your live site loads in the browser before anyone clicks accept.

04PROVE
Hand over the evidence

Every finding already cites the exact obligation, across 26 frameworks. Violations become build failures instead of breach notifications.

04 · The receiptPII-001 · HIGH

Compliance is the proof, not the pitch.

Nobody buys a scanner to feel compliant. They buy it because something is wrong and they need it named, explained and fixed. Every finding opens into why it matters, the exact path the data took, and the change to make, with the clause attached at the end, where the auditor will look for it.

Finding detaildata-flow confirmed
PII-001
Personal data flows from a field access at line 45 to a log statement at line 50 without masking.
Why it matters

Personal data in logs exceeds the stated purpose of processing and breaches security-safeguard requirements.

Data flow trace (PII-001):
  line 45 parameter: email
  line 48 findActiveUserByEmail(email)
  line 50 log.debug(…) unmasked
How to fix

Mask or redact the address before logging. Replace line 50 with maskEmail(user.email).

DPDPA §6(1)DPDPA §8(5)Purpose limitation · Security safeguards
05 · Try itPUBLIC REPOSITORIES

Point it at a repository.

A public repository, read once and not kept. You get the data map: every personal-data field, where it lands, and who receives it. Or run the container on your own runner, and the source never reaches us.