Full checker, method, and sources
Pre-consent tracker check
Observe resource hosts, readable cookie names, and Global Privacy Control on your own website before interacting with consent controls.
Free. No signup. Your entries stay in this browser.
Run the check on your own website
Drag this link to your bookmarks bar. Open your own page, then run the bookmark. Some browsers or site policies block bookmarklets.
Read or copy the console snippet
(function trackerSnapshot() {
const resources = performance.getEntriesByType("resource");
const hosts = /* @__PURE__ */ new Map();
for (const resource of resources) try {
const url = new URL(resource.name);
if (["http:", "https:"].includes(url.protocol) && url.hostname !== location.hostname) hosts.set(url.hostname, (hosts.get(url.hostname) ?? 0) + 1);
} catch {}
const names = document.cookie.split(";").map((cookie) => cookie.trim().split("=")[0]).filter(Boolean);
const gpc = navigator.globalPrivacyControl;
const summary = [
"BCT pre-consent observation",
`Page origin ${location.origin}`,
`GPC ${gpc === true ? "enabled" : gpc === false ? "disabled" : "not exposed"}`,
`Other resource hosts ${hosts.size}`,
...[...hosts].sort().map(([host, count]) => `${host} (${count} requests)`),
`Readable cookie names ${names.length}`,
names.join(", ") || "None observed",
"Run on a fresh page before any consent interaction. This is the current observation, not a record of previous consent.",
"Other hosts are not proof of tracking. Subdomains can be first-party. HttpOnly cookies, server-side tracking, cleared timing entries, and later interactions are outside this check."
].join("\n");
const panel = document.createElement("dialog");
panel.setAttribute("aria-label", "Pre-consent tracker observation");
panel.style.cssText = "max-width:min(90vw,780px);max-height:85vh;background:white;color:#090d14;padding:24px;border:1px solid #697386;border-radius:8px;font:16px/1.5 system-ui;overflow:auto";
const heading = document.createElement("h2");
heading.textContent = "Pre-consent tracker observation";
const text = document.createElement("pre");
text.textContent = summary;
text.style.cssText = "white-space:pre-wrap;overflow-wrap:anywhere;font:inherit";
const copy = document.createElement("button");
copy.textContent = "Copy summary";
copy.style.cssText = "font:inherit;padding:10px;margin-right:12px";
copy.onclick = async () => {
try {
await navigator.clipboard.writeText(summary);
copy.textContent = "Summary copied";
} catch {
copy.textContent = "Select the text above to copy";
}
};
const close = document.createElement("button");
close.textContent = "Close";
close.style.cssText = "font:inherit;padding:10px";
close.onclick = () => {
panel.close();
panel.remove();
};
panel.append(heading, text, copy, close);
document.body.append(panel);
panel.showModal();
return {
hosts: [...hosts],
cookieNames: names,
gpc: gpc ?? null,
summary
};
})()