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. Inputs and results stay in your 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.

BCT tracker observation

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
	};
})()

Paste only the host and cookie-name summary from the bookmarklet. Never paste cookie values or customer records.

Method and sources

Method version October 24, 2026.

  1. The bookmarklet reads existing Resource Timing entries and groups HTTP or HTTPS resource requests whose hostname differs from the current hostname.
  2. It reads cookie names accessible through document.cookie and the browser-exposed Global Privacy Control value. It excludes cookie values from the summary.
  3. The result appears in a local dialog. Copying is optional. The snippet makes no network request and sends nothing to BCT.

What this check cannot establish

Need a manual website review?

Website Privacy & Tracking Review. Up to ten public pages and one consent setup. Website behavior and agreed evidence only.

Read the underlying legal reference before applying a rule.

Add this checker to your website

This iframe opens the browser tool. It does not scan the embedding page or send your form entries to a server.

<iframe src="https://businesscompliancetools.com/embed/pre-consent-tracker-check/" title="Pre-consent tracker check" width="100%" height="900" loading="lazy" referrerpolicy="no-referrer"></iframe>

Open the compact checker. Shared inputs use URL fragments, which remain visible to anyone receiving the link.