Baseline visit v1 schema · facts legacy-derived · descriptive report

www.duolingo.com

https://www.duolingo.com/

Sep 7, 2026, 4:46 AM UTC

complete; derived from status and warnings

Scan report ready for www.duolingo.com: 151 recorded request rows.

Comparison Reportv1 schema · facts legacy-derived · descriptive report

Brave-list blocking off/on comparison

https://www.duolingo.com/ (opens in a new tab)
ShareDownloads the No blocking visit's request CSV, source report and correction context in a ZIP. Follows the evidence switcher below.PDF + evidence (opens in a new tab)Downloads a ZIP containing the PDF for every recorded visit, exact source JSON, correction context and file hashes. The scanner renders it on request.

What this actually means

duolingo.com recorded 27 fewer third-party requests in the visit configured for Brave-list blocking.

The visit with no blocking made 151 requests; the visit configured to apply Brave's ad-block engine and default Shields filter lists (a simulation in this scanner's browser, not a live Brave-browser visit) recorded 27 fewer third-party requests. The blocker directly stopped 24 requests; the remaining difference may include follow-on requests that never started once their sources were blocked, plus run-to-run variance.

3tracking-service entities
136cross-site requests
1third-party cookie record

Plain-Language Findings

What this visit means

Unfamiliar terms are defined in the glossary
playwright-chromium

Worth checking

Bottom line: this visit has review-worthy signals

The scan observed signals a non-expert should not have to decode from raw request tables.

The cards below translate the evidence into plain language; severity reflects fixed reference thresholds, not measured population percentiles. The request log, domain table, and methodology remain below for verification.

151 requests observed in one controlled visit.

Worth checking

28 requests matched Brave Shields filter lists

28 requests matched the default filter lists of Brave Shields, the ad and tracker blocker built into the Brave browser, while loading normally.

Computed with Brave's own ad-block engine and default filter lists in classification mode: matched requests were not blocked by the scanner and remain in this report's observed request counts. Matching shows what Shields would target on this visit's traffic; an actual Shields visit blocks these and also prevents their follow-on requests, so this number is neither a measured block count nor the total effect.

The hand-curated service catalog separately matched 15 request rows in this visit.Show matched requests

Nothing observed

Lower values observed across comparable metrics in the Brave-list blocking attempt

With the scanner configured to apply Brave's ad-block engine and default Shields filter lists (a simulation in this scanner's browser, not a live Brave-browser visit; application was not verified), this paired visit showed 27 fewer third-party requests, 1 fewer third-party cookie and 15 fewer tracking-related service requests.

Services only seen in the unblocked visit: Google, Meta and Media.net. The blocking visit's engine directly blocked 24 requests; the remaining difference may include follow-on requests that never started once their sources were blocked. A single paired comparison can also reflect run-to-run variance (ad rotation, caching, experiments), so treat this as an observed difference, not a measured blocking rate.

Signed per-metric differences between the two visits; nothing is summed across metrics.Show matched requests

Worth checking

Consent tooling and requests to tracking-service entities appeared before any choice

www.duolingo.com sent a request to OneTrust, a consent management platform (the tooling that shows cookie banners), and the request log included 3 distinct catalogued tracking-related services before the scanner made any consent choice; 3 companies answered.

A request to the platform's loader proves the page attempted to fetch consent tooling; an observed response supports delivery, but neither fact proves a banner was visibly shown to this scanner. Banner display can vary by region and visit context. The scanner never clicks a banner in this mode, so this report records requests made before the scanner made a consent choice. It does not determine whether any request required consent or whether the site's behavior complied with applicable law. More tracking-service entities or requests may appear after "Accept" than this report captures, so the counts here are lower bounds for users who consent.

Consent platform detected via a request to cdn.cookielaw.org.

Context

Tracking companies the privacy policy does not appear to name

Media.net was sent requests during this visit, but the policy text matched none of the names this scan knows that company by.

Policies often disclose vendor categories rather than company names, so an unnamed vendor is a transparency gap worth reviewing, not automatically a violation. Named in the policy: Google and Meta.

Policy at https://www.duolingo.com/privacy; 0 checkable statements matched; 2 of 3 observed tracking companies named in the policy.

Worth checking

Catalogued service domains recorded responses during this visit

Google, Meta and Media.net appeared in the request log.

A catalog match identifies a maintainer-reviewed service/domain mapping; it does not establish why an individual request occurred, what it carried, or whether profiling happened. Functional catalog labels include analytics / tag management, advertising and social / advertising pixel. This scan could not identify 4 of the 18 third-party hosts recorded here, so it cannot say who operates them. That is a limit of identity coverage, not evidence about the site.

136 cross-site requests across 18 third-party hosts.Modest distinct tracking-service entities count.Show third-party requests

Context

Requests were dispatched to catalogued major-platform domains

This visit dispatched requests to catalogued domains for Google and Meta.

The domain matches identify services, not the requests' purpose, payload, or whether any profile linking occurred.

14 requests to these platforms.Show catalog-matched requests

Nothing observed

Google Analytics present, no remarketing signal

Google Analytics was observed, but no DoubleClick remarketing sync appeared in this visit.

Standard analytics collection was observed, without the stats.g.doubleclick.net advertising sync.

Google Analytics host observed; no stats.g.doubleclick.net request.Show catalog-matched requests

Context

Third-party cookies were present

1 third-party cookie showed up during the visit.

The scanner observed cookie metadata whose domain crossed the scanned site's registrable-domain boundary. This report does not retain cookie values or partition keys, so it does not establish whether a cookie was a persistent identifier or could recognize a visitor across sites.

17 cookies total in this report.Modest third-party cookies count.

Context

Input-monitoring signal involving a third-party script

Listener coverage that could observe typing-related input events was registered through call chains that included a third-party script.

This is a behavioral instrumentation signal from listener registration, stack-attributed script origins, and known-vendor requests: it shows the page was instrumented to observe interaction, not that anything was transmitted. Stack attribution records the script origins present in the bounded registration call chain; a cross-site origin in that chain does not by itself establish that the cross-site script registered the listener, because first-party code can register its own listeners through a helper served from elsewhere. A different registrable domain is also not by itself a different operator: sites commonly serve their own scripts from a separate asset domain, so the card says third party only when the catalog or reviewed ownership attributes an origin to another organization. On scanners that run the active keystroke-capture probe, actual transmission is tested separately (a synthetic value is typed, never real input, and no typed values are collected); treat this card as a review prompt rather than proof.

99 interaction-listener registrations with https://*.tupsrv.com/, https://cdn.cookielaw.org/ and https://*.facebook.net/, plus 3 others in the registration call chain and 36 input-listener registrations with https://*.tupsrv.com/, https://cdn.cookielaw.org/ and https://d35aaqx5ub95lt.cloudfront.net/, plus 2 others in the registration call chain

Nothing observed

No fingerprint-like API calls observed

The scan did not observe the instrumented high-entropy browser APIs.

This is an observation layer, not proof that fingerprinting is impossible.

0 API families recorded.

Brave Shields Comparison

No blocking → Brave-list blocking delta

No blocking: 10,724msBrave-list blocking: 10,782ms
Some deltas are not comparable across these two visits and are not shown.
  • Other detector and causal-path deltas (each visit's own evidence still renders below): v1 never recorded detector versions, so fingerprinting and pixel deltas cannot be proven to come from matching instrumentation.
  • The Shields-number delta (each visit's own evidence still renders below): The two visits measured different Shields quantities (filter-list matches vs engine-blocked requests), which must never share a delta.
  • Fingerprinting deltas (each visit's own evidence still renders below): At least one visit did not complete the fingerprint measurement, so no exact cross-visit delta is shown.
  • Ad-pixel deltas (each visit's own evidence still renders below): At least one visit did not complete the pixel measurement, so no exact cross-visit delta is shown.
Requests-35No blocking: 151 · Brave-list blocking: 116
Third-party requests-27No blocking: 136 · Brave-list blocking: 109
Third-party domains-12No blocking: 18 · Brave-list blocking: 6
Cookies-8No blocking: 17 · Brave-list blocking: 9
Third-party cookies-1No blocking: 1 · Brave-list blocking: 0
Storage keys-4No blocking: 5 · Brave-list blocking: 1
Catalog-matched requests-15No blocking: 15 · Brave-list blocking: 0

Every signed change is Brave-list blocking minus No blocking. A positive or negative direction is descriptive, not a judgment that the result is better or worse.

Cookie and storage count deltas include every observation. Name-level lists show only reviewed names; unreviewed names are not itemized because they can contain identifiers.

Largest per-domain request-count changes

*.duolingo.comfirst partyNo blocking: 9 · Brave-list blocking: 1Show No blocking requests · Show Brave-list blocking requests-8
cdn.cookielaw.orgunlabeled third partyNo blocking: 6 · Brave-list blocking: 2Show No blocking requests · Show Brave-list blocking requests-4
www.googletagmanager.comGoogle · analytics / tag managementNo blocking: 4 · Brave-list blocking: 0Show No blocking requests · Show Brave-list blocking requests-4
*.*.doubleclick.netGoogle · advertisingNo blocking: 3 · Brave-list blocking: 0Show No blocking requests · Show Brave-list blocking requests-3
*.tupsrv.comunlabeled third partyNo blocking: 3 · Brave-list blocking: 0Show No blocking requests · Show Brave-list blocking requests-3
www.google.comunlabeled third partyNo blocking: 3 · Brave-list blocking: 0Show No blocking requests · Show Brave-list blocking requests-3
*.facebook.netMeta · social / advertising pixelNo blocking: 2 · Brave-list blocking: 0Show No blocking requests · Show Brave-list blocking requests-2
www.google-analytics.comGoogle · analytics / tag managementNo blocking: 2 · Brave-list blocking: 0Show No blocking requests · Show Brave-list blocking requests-2
*.media.netMedia.net · advertisingNo blocking: 1 · Brave-list blocking: 0Show No blocking requests · Show Brave-list blocking requests-1
*.onetrust.comunlabeled third partyNo blocking: 1 · Brave-list blocking: 0Show No blocking requests · Show Brave-list blocking requests-1
ad.doubleclick.netGoogle · advertisingNo blocking: 1 · Brave-list blocking: 0Show No blocking requests · Show Brave-list blocking requests-1
analytics.google.comGoogle · analytics / tag managementNo blocking: 1 · Brave-list blocking: 0Show No blocking requests · Show Brave-list blocking requests-1
analytics.tupsrv.comunlabeled third partyNo blocking: 1 · Brave-list blocking: 0Show No blocking requests · Show Brave-list blocking requests-1
www.googleadservices.comGoogle · advertisingNo blocking: 1 · Brave-list blocking: 0Show No blocking requests · Show Brave-list blocking requests-1

Domains only with Brave-list blocking

No domain changes observed.

Domains only with No blocking

www.googletagmanager.comGoogle · analytics / tag management · Show No blocking requests4
*.*.doubleclick.netGoogle · advertising · Show No blocking requests3
*.tupsrv.comunlabeled · Show No blocking requests3
www.google.comunlabeled · Show No blocking requests3
*.facebook.netMeta · social / advertising pixel · Show No blocking requests2
www.google-analytics.comGoogle · analytics / tag management · Show No blocking requests2
*.media.netMedia.net · advertising · Show No blocking requests1
*.onetrust.comunlabeled · Show No blocking requests1
ad.doubleclick.netGoogle · advertising · Show No blocking requests1
analytics.google.comGoogle · analytics / tag management · Show No blocking requests1
analytics.tupsrv.comunlabeled · Show No blocking requests1
www.googleadservices.comGoogle · advertising · Show No blocking requests1

Visible cookie names only with Brave-list blocking

No visible cookie-name changes to show; privacy-filtered names are not itemized.

Visible cookie names only with No blocking

test_cookie.doubleclick.netthird-party
_fbp.duolingo.comfirst-party
_ga.duolingo.comfirst-party
_gcl_au.duolingo.comfirst-party
_gid.duolingo.comfirst-party
OptanonConsent.duolingo.comfirst-party

Visible storage keys only with Brave-list blocking

No visible storage-key changes to show; privacy-filtered keys are not itemized.

Visible storage keys only with No blocking

No visible storage-key changes to show; privacy-filtered keys are not itemized.

Entities only with Brave-list blocking

No entity changes observed.

Entities only with No blocking

Google6 domains12
Meta1 domain2
Media.net1 domain1

Measurement limits

7 conditions affect how this evidence reads

This report

  • Brave-list blocking comparison runs should be collected under matched crawl conditions, and the blocking run is a simulation with Brave's engine and default lists in this scanner's browser, not a live Brave visit. Differences can still reflect timing, experiments, cache state, consent state, or bot detection.
  • The two visits ran in randomized order; the "No blocking" visit ran first.

Both visits

  • Each visit in this report is one automated, headless Chromium visit from a fixed en-US / UTC profile, with no scrolling, clicking, or consent interaction. Sites can behave differently for real users, browsers, regions, accounts, or network locations.
  • Counts are a lower bound: trackers that load only after interaction or consent are not observed; Service Workers are blocked, and Web Worker or WebSocket traffic may be incomplete. Service labels use a US-biased hand-curated catalog, so regional services may be under-labeled. Cookie and storage figures are an end-of-visit snapshot, with storage keys read from the top frame only.
  • The page did not reach network idle before the scan window ended.
  • Read the site's privacy policy (https://www.duolingo.com/privacy) and compared its text against this visit's observed behavior. Policy checks are an automated text match with the matched sentences quoted, not a legal reading.

Brave-list blocking visit only

  • Brave Shields block simulation was enabled; matching requests were aborted before loading and are not included in request totals.

This versioned report is currently retained in the public corpus. Follow the currently retained site history, repeat the same public route when it is available, or request a transparent evidence correction.

Report ID
20260907-39f13c17c084bff23d1d0b56657a3544
Site
www.duolingo.com
Latest visit
Schema
v1 schema · facts legacy-derived · descriptive report
Verify recorded provenance

Baseline visit

Started
Run quality
complete; derived from status and warnings
Scanner
playwright-chromium
Browser
151.0.7922.34
Redaction
not recorded by this schema
Provenance
Exact build and instrument digests were not recorded by this legacy schema.

Variant visit

Started
Run quality
complete; derived from status and warnings
Scanner
playwright-chromium
Browser
151.0.7922.34
Redaction
not recorded by this schema
Provenance
Exact build and instrument digests were not recorded by this legacy schema.

Recorded provenance is self-reported measurement metadata, not a cryptographic attestation. The public versioned report JSON contains the retained public evidence; see the methodology for interpretation and retention limits.

This report covers what the scanner measures, not everything a site can do. 16 browser surfaces are not instrumented at all (Every page except the one that was scanned; Anything that only loads after scrolling or interaction; Why a request happened, as a causal chain; and 13 others), 3 capabilities are declined by policy, and 3 are outside what any single visit can see. Their absence from this report is not evidence that they did not occur. Read the published coverage boundary.

Detector accuracy is unmeasured. No calibration study currently publishes a precision or recall for the detectors on this page, so a detector match here is a recorded observation, not a calibrated classification. How detector accuracy is measured.

Approved use boundary: This report is investigative evidence that requires independent corroboration. It is not a standalone legal determination and not the sole exhibit in a legal proceeding. Recorded in this project's release manifest on .