ComplyMore
Built for the DPDPA, 2023 Data stays in ap-south-1 (Mumbai)

Cookie compliance you can show your work on.

ComplyMore scans your website, shows you every tracker it actually observed with the evidence behind it, and holds publishing until a person has decided the unclear cases. No dashboard green tick standing in for a legal opinion.

A five-page scan usually finishes in minutes. No script tag needed until you publish.

app.complymore.in / sites / kirana-cart.in / scans / latest Scan complete · 5 pages

Review queue

14 trackers observed on kirana-cart.in

9
Confirmed
3
Low confidence
2
Unrecognised
Illustrative output. Every row links to the page and request that produced it.
ObservedSuggested categoryConfidenceEvidence
_ga, _ga_*
Set-Cookie · google-analytics.com
Analytics High 4 of 5 pages
_fbp
Pixel · connect.facebook.net
Advertising High /, /cart
rzp_checkout_anon_id
XHR · api.razorpay.com · reclassification needs a written reason
Strictly necessary Medium /checkout
__mrkt_sid
localStorage · tags.mrkt-cdn.net
Not in the knowledge base Unrecognised /, /offers
wzrk_uuid
Script · clevertap-prod.com
Functional Low /account

2 findings need a decision. Unrecognised and low-confidence items block publishing until someone categorises them.

TODO · social proof

Customer logo wall goes here once there are customers who have agreed to be named. Placeholder is intentionally visible — see PRODUCT.md → Evidence on Hand.

Why it is built this way

Made to keep uncertainty visible, not to hide it.

A suggested category is a guess, and this product labels it as one. Anything the classifier is not sure about stays on screen, blocks publishing, and waits for a person who can be accountable for the decision.

Start a scan
GET /GET /cart POST /collectGET /px.gif GET /tags.js unrecognised host

Evidence, not inference

Up to five public pages, each in a fresh Chromium context. Set-Cookie headers, the cookie jar, localStorage and sessionStorage keys, scripts, iframes, pixels and XHR — captured with the page and request that produced them.

NecessaryAnalytics Advertising ? undecided ready to publish blocked

A human review gate

Every finding carries a suggested category, a confidence level and a plain-language rationale. Unrecognised and low-confidence items block publishing. Moving something into Strictly necessary requires a written reason that stays on the record.

v1 · 12 Jun v2 · 03 Jul v3 · 21 Aug live pointer

Nothing rewrites history

Publishing uploads an immutable payload, writes the version row, then moves the active pointer — in that order, so a failure at any step leaves the live banner untouched. Consent receipts are append-only, with no IP address and no user agent stored.

The flow

Register a site. Reach a reviewable result in one sitting.

Six steps, in order, each one refusing to skip ahead of the last. Select a step to see what it actually does.

The URL is normalised and checked before anything is fetched. Private, loopback, link-local, cloud-metadata and non-standard-port targets are refused with the specific reason, not a generic error.
Up to five public pages, each in a fresh browser context, queued and executed away from the app. Captures cookies, storage keys, scripts, iframes, pixels and requests — plus deterministic theme tokens from the entry page.
Suggested category, confidence level, plain-language rationale, per-page evidence. Unrecognised and low-confidence items block publishing until a person decides. Reclassifying into Strictly necessary needs a written reason.
Three presets generated from your site's own colours, fonts and button shape. Every solid foreground/background pair is checked against WCAG 2.2 AA, and a failure blocks publishing rather than shipping with a warning.
One async script tag in the head. Visitors fetch the config payload from the storage CDN, not from ComplyMore, so the banner does not depend on our app being up.
Append-only consent receipts with an integrity digest, exportable as CSV. No IP address, no user agent. Every consequential action in the workspace is written to an immutable audit event.
Banner preview · pre-consent state
Contrast · 2.9:1 on “Manage preferences” Fails AA · publishing blocked
Nothing runs before a choice is made. Reject optional leaves the tag jar empty; Accept all runs the tagged scripts in document order.

Install

One script tag, and an attribute on anything that tracks.

The banner SDK is framework-free with no build step. Tagged scripts do not execute until the matching category is consented to — the mechanism is the browser's own, not a monkey-patch.

index.html · <head>
<!-- one tag, async, nothing else -->
<script async
  src="https://cdn.complymore.in/sdk/complymore.js"
  data-cm-site="ste_8f21c4"></script>

The config payload is served from the storage CDN. Your banner keeps working even if the ComplyMore dashboard is down.

Blocking an optional script
<!-- will not run until "analytics" is consented -->
<script
  type="text/plain"
  data-cm-category="analytics"
  src="https://www.googletagmanager.com/gtag/js">
</script>

On consent, tagged scripts are activated in document order. On rejection, they are never inserted at all.

TODO · metrics

Stat band — median time to first publish, sites under management, receipts retained. Awaiting real telemetry. Do not estimate.

TODO · testimonials

Two or three customer quotes with name, role and company. Needs written permission on file before it ships.

Pricing

Not published yet.

Billing arrives in a later milestone. Until then the scan, review and publish flow is available to pilot organisations, and we would rather talk to you than guess what you need.

TODO · plans

Replace this section with the plan comparison once tiers, limits and prices are signed off (Milestone 5). Do not publish placeholder prices.

Get started

Find out what your site
is actually doing.

Register one site, run a scan, and read the findings before you decide anything. The first scan is enough to judge whether the approach fits.

Sign in with a magic link or Google. No card, no sales call in the way.