Privacy Policy

Last updated: 7 October 2026 · Applies to the Chrome and Firefox extension.

The short version

Shield AdBlock does not transmit browsing data. No analytics, no telemetry, no crash reporting, no account, and no Shield-generated tracking identifier. No browsing history or request data is sent anywhere, and the extension has no server.

$redirect substitutes that a page can observe (fetch/XHR) are inert data: URLs, so a site cannot read Shield’s Chrome id or Firefox per-install moz-extension UUID from Response.url / XMLHttpRequest.responseURL. Script redirects still use a packaged path — a script’s final URL is not page-readable — and remain a residual for detection via other means, not an identifier channel.

Everything it stores stays on your device. Out of the box it makes no network requests at all. The only way it ever contacts the network is if you turn on a filter list that has a source URL — and then it contacts that source and nothing else.

What is stored on your device

All of it lives in your browser’s local extension storage (chrome.storage.local) and never leaves your device. Shield does not use storage.sync, so none of this is uploaded to a Google or Mozilla account or synced between your machines.

StoredWhat it is
SettingsYour toggles — blocking on/off, cosmetic filtering, popup blocking, and so on.
Paused sitesHostnames you chose to pause Shield on, e.g. example.com.
Filter listsWhich lists you enabled, and any custom list URLs you added.
Remote-list cacheParsed supported rules, including Scriptlet instructions, downloaded from lists you enabled so they keep working offline.
Remote-list checksumsContent hashes used to detect whether a downloaded list changed.
Your custom rulesFilter text you typed or explicitly confirmed with Hide an element, stored verbatim.
CountersHow many requests were blocked (aggregate only — see below).

The counters do not record where you went

The statistics are aggregate-only — a total blocked count since install, a per-day count kept for the last 30 local calendar days, and a per-resource-type count. There is no list of sites you visited, and no per-domain breakdown. Blocks from a private window are not added to these durable aggregates when the extension can tell the window is private. On Chrome, a brief cold-worker race can leave a tab unmarked; those matches may still increment the aggregate counts (still no URLs or hostnames).

Paused sites are the exception worth naming

The list of sites you’ve paused Shield on is, by its nature, a short list of domains you visit. It stays on your device and only ever contains sites you explicitly paused — never sites you merely visited.

Network requests

By default: none. Every filter list that is switched on out of the box is bundled inside the extension package, so blocking works entirely offline.

If you enable a remote list — an optional regional/language list, or any custom list URL you add — Shield periodically downloads that list from the URL shown for it (by default, a check every 24 hours). Each list request goes only to that list’s own URL; carries no Shield-generated identifier, settings, or browsing data; and unavoidably reveals ordinary connection metadata to that host (including your IP address and the time you asked). Remote lists are opt-in; bundled defaults need no network.

Permissions, and why each is needed

None of these are used for analytics, profiling, or transmitting your browsing activity.

PermissionWhy
Access to all websitesAds can be on any site, so hiding code must run locally on any site. It reports nothing.
declarativeNetRequest (Chrome)Blocking. Shield hands rules to Chrome and Chrome matches them — the extension never sees those requests.
webRequest + webRequestBlocking (Firefox)Firefox backend matches requests in memory so authored semantics are not capped by DNR quotas. Request details are not persisted or transmitted (except the user-started Filtering Log described below).
storage, unlimitedStorageHolding filter rules and your settings on-device.
alarmsScheduling the update check for remote lists, if you enabled any.
webNavigationInspecting top-level popup navigation/opener URLs and, on Chromium only, transient picker document identity in memory.
scriptingRegistering pre-paint hiding CSS and the ten fixed packaged Scriptlets.
userScripts (Chrome)Running Scriptlet rules from lists you added or rules you wrote, only after a separate browser opt-in. The first Firefox (AMO) package omits this permission.

An honest note on Chrome vs Firefox

Protection State and safe V2 reports contain aggregate health, counts, and fixed failure codes — not visited hosts, page URLs, list bodies, or browsing history.

Hide an element

Hide an element is available on Chrome and Firefox. No selection data is uploaded. When you explicitly confirm a picker selection, Shield stores one local host##selector line with your custom rules. The selector is structural: selection does not read page text, form values, link URLs, or arbitrary attribute values. Picking sends no telemetry and creates no network request.

Guided breakage recovery

The optional Site not working? assistant opens a private extension page. It may temporarily pause protection only for the current hostname using a worker-local session that expires after ten minutes. It can generate and download a local JSON report. It does not upload, transmit, or telemetry-report the file, and it takes no screenshots. The hostname is absent by default and is included only when you opt in.

No remote code

Shield never downloads or executes JavaScript supplied by a list. Remote filter lists are data: text files parsed into bounded rules. If you separately enable Scriptlets from added lists, a supported rule may select one of ten fixed functions already packaged with Shield and pass it validated literal arguments. A list cannot supply a function body, load a module, select an unknown name, or use eval/Function.

Facebook home feed

On the Facebook home feed (facebook.com / www.facebook.com, paths / and /home.php only), Shield locally hides detected ads by default. It does not invoke Facebook’s Hide post control unless you explicitly enable that Protection setting. Shield sends no telemetry in either mode.

Third parties

Shield sends browsing data to no third party. Bundled filter lists (EasyList, EasyPrivacy) are static data files compiled into the package. If you enable a remote list, its disclosed source receives ordinary connection metadata (your IP address and the time of the download), but no browsing history, settings, or identifiers.

Children

The same policy applies to every user, regardless of age: Shield has no accounts, analytics, telemetry, or advertising profiles, and it does not transmit browsing data.

Your control

Changes

Material changes will be reflected here with a new “Last updated” date. The store-facing copy is this Pages URL.

Contact

Questions or a suspected inaccuracy in this document — public, no GitHub login: https://shieldadblock.com/support/ or support@shieldadblock.com.

Do not treat repository Issues as the public channel while the product repository is private.