From a10b53645c116984e1cf691c3af7f74feffba05b Mon Sep 17 00:00:00 2001
From: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Date: Wed, 19 Aug 2026 00:07:17 +0200
Subject: [PATCH] docs: migrate ads metric documentation to dedicated directory
and clean up privacy reference documentation
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
---
.../docs/reference/custom-metrics/ads.mdx | 446 ------------------
.../reference/custom-metrics/other/ads.mdx | 370 +++++++++++++++
.../{other.mdx => other/index.mdx} | 2 +-
.../docs/reference/custom-metrics/privacy.mdx | 229 ++++-----
4 files changed, 455 insertions(+), 592 deletions(-)
delete mode 100644 src/content/docs/reference/custom-metrics/ads.mdx
create mode 100644 src/content/docs/reference/custom-metrics/other/ads.mdx
rename src/content/docs/reference/custom-metrics/{other.mdx => other/index.mdx} (97%)
diff --git a/src/content/docs/reference/custom-metrics/ads.mdx b/src/content/docs/reference/custom-metrics/ads.mdx
deleted file mode 100644
index f4856a4..0000000
--- a/src/content/docs/reference/custom-metrics/ads.mdx
+++ /dev/null
@@ -1,446 +0,0 @@
----
-title: Ads custom metric
-description: Reference docs for the feature struct
----
-
-_Appears in: [`custom_metrics.other`](/reference/custom-metrics/other/) struct_\
-_As: [`ads`](/reference/custom-metrics/other/#ads)_
-
-
-An example of the decoded object from `https://www.amazon.com/` page crawl
-```json
-{
- "ads": {
- "present": true,
- "status": 200,
- "redirected": false,
- "account_count": 1,
- "account_types": {
- "direct": {
- "domains": [
- "placeholder.example.com"
- ],
- "account_count": 1,
- "domain_count": 1
- },
- "reseller": {
- "domains": [],
- "account_count": 0,
- "domain_count": 0
- }
- },
- "line_count": 10,
- "variables": [],
- "variable_count": 0
- },
- "app_ads": {
- "present": true,
- "status": 200,
- "redirected": false,
- "account_count": 1,
- "account_types": {
- "direct": {
- "domains": [
- "placeholder.example.com"
- ],
- "account_count": 1,
- "domain_count": 1
- },
- "reseller": {
- "domains": [],
- "account_count": 0,
- "domain_count": 0
- }
- },
- "line_count": 10,
- "variables": [],
- "variable_count": 0
- },
- "sellers": {
- "present": true,
- "redirected": true,
- "status": 200,
- "seller_count": 2732,
- "seller_types": {
- "publisher": {
- "domains": [
- "cumuli.com",
- "realself.com",
- "trendscatchers.io",
- ...
- ],
- "seller_count": 2199,
- "domain_count": 1923
- },
- "intermediary": {
- "domains": [
- "bidsxchange.com",
- "vuukle.com",
- "vdo.ai",
- ...
- ],
- "seller_count": 232,
- "domain_count": 172
- },
- "both": {
- "domains": [
- "gourmetads.com",
- "freestar.com",
- "shinez.io",
- ...
- ],
- "seller_count": 148,
- "domain_count": 134
- }
- },
- "passthrough_count": 0,
- "confidential_count": 2
- }
-}
-```
-
-
-## Schema
-
-### `ads`
-
-Type: `object`
-
-Contains information about the ads.txt file.
-
-#### `ads.present`
-
-Type: `boolean`
-
-Indicates if the ads.txt file is present.
-
-#### `ads.status`
-
-Type: `integer`
-
-HTTP status code of the ads.txt file response.
-
-#### `ads.redirected`
-
-Type: `boolean`
-
-Indicates if the ads.txt file request was redirected.
-
-#### `ads.redirected_to`
-
-Type: `string`
-
-URL to which the ads.txt resource was redirected.
-
-#### `ads.account_count`
-
-Type: `integer`
-
-Number of advertising accounts listed in the ads.txt file.
-
-#### `ads.account_types`
-
-Type: `object`
-
-Types of accounts (direct or reseller) listed in the ads.txt file.
-
-#### `ads.account_types.direct`
-
-Type: `object`
-
-Information about direct advertising accounts.
-
-##### `ads.account_types.direct.domains`
-
-Type: `array`
-
-List of domains with direct advertising accounts.
-
-##### `ads.account_types.direct.account_count`
-
-Type: `integer`
-
-Number of direct advertising accounts.
-
-##### `ads.account_types.direct.domain_count`
-
-Type: `integer`
-
-Number of unique domains with direct advertising accounts.
-
-#### `ads.account_types.reseller`
-
-Type: `object`
-
-Information about reseller advertising accounts.
-
-##### `ads.account_types.reseller.domains`
-
-Type: `array`
-
-List of domains with reseller advertising accounts.
-
-##### `ads.account_types.reseller.account_count`
-
-Type: `integer`
-
-Number of reseller advertising accounts.
-
-##### `ads.account_types.reseller.domain_count`
-
-Type: `integer`
-
-Number of unique domains with reseller advertising accounts.
-
-#### `ads.line_count`
-
-Type: `integer`
-
-Total number of lines in the ads.txt file.
-
-#### `ads.variables`
-
-Type: `array`
-
-List of variables found in the ads.txt file.
-
-#### `ads.variable_count`
-
-Type: `integer`
-
-Number of variables found in the ads.txt file.
-
-### `app_ads`
-
-Type: `object`
-
-Contains information about the app-ads.txt file.
-
-#### `app_ads.present`
-
-Type: `boolean`
-
-Indicates if the app-ads.txt file is present.
-
-#### `app_ads.status`
-
-Type: `integer`
-
-HTTP status code of the app-ads.txt file response.
-
-#### `app_ads.redirected`
-
-Type: `boolean`
-
-Indicates if the app-ads.txt file request was redirected.
-
-#### `app_ads.redirected_to`
-
-Type: `string`
-
-URL to which the app-ads.txt resource was redirected.
-
-#### `app_ads.account_count`
-
-Type: `integer`
-
-Number of advertising accounts listed in the app-ads.txt file.
-
-#### `app_ads.account_types`
-
-Type: `object`
-
-Types of accounts (direct or reseller) listed in the app-ads.txt file.
-
-#### `app_ads.account_types.direct`
-
-Type: `object`
-
-Information about direct advertising accounts.
-
-##### `app_ads.account_types.direct.domains`
-
-Type: `array`
-
-List of domains with direct advertising accounts.
-
-##### `app_ads.account_types.direct.account_count`
-
-Type: `integer`
-
-Number of direct advertising accounts.
-
-##### `app_ads.account_types.direct.domain_count`
-
-Type: `integer`
-
-Number of unique domains with direct advertising accounts.
-
-#### `app_ads.account_types.reseller`
-
-Type: `object`
-
-Information about reseller advertising accounts.
-
-##### `app_ads.account_types.reseller.domains`
-
-Type: `array`
-
-List of domains with reseller advertising accounts.
-
-##### `app_ads.account_types.reseller.account_count`
-
-Type: `integer`
-
-Number of reseller advertising accounts.
-
-##### `app_ads.account_types.reseller.domain_count`
-
-Type: `integer`
-
-Number of unique domains with reseller advertising accounts.
-
-#### `app_ads.line_count`
-
-Type: `integer`
-
-Total number of lines in the app-ads.txt file.
-
-#### `app_ads.variables`
-
-Type: `array`
-
-List of variables found in the app-ads.txt file.
-
-#### `app_ads.variable_count`
-
-Type: `integer`
-
-Number of variables found in the app-ads.txt file.
-
-### `sellers`
-
-Type: `object`
-
-Contains information about the sellers.json file.
-
-#### `sellers.present`
-
-Type: `boolean`
-
-Indicates if the sellers.json file is present.
-
-#### `sellers.status`
-
-Type: `integer`
-
-HTTP status code of the sellers.json file response.
-
-#### `sellers.redirected`
-
-Type: `boolean`
-
-Indicates if the sellers.json file request was redirected.
-
-#### `sellers.redirected_to`
-
-Type: `string`
-
-URL to which the sellers.json resource was redirected.
-
-#### `sellers.seller_count`
-
-Type: `integer`
-
-Number of sellers listed in the sellers.json file.
-
-#### `sellers.seller_types`
-
-Type: `object`
-
-Types of sellers (publisher, intermediary, both) listed in the sellers.json file.
-
-#### `sellers.seller_types.publisher`
-
-Type: `object`
-
-Information about publisher sellers.
-
-##### `sellers.seller_types.publisher.domains`
-
-Type: `array`
-
-List of domains associated with publisher sellers.
-
-##### `sellers.seller_types.publisher.seller_count`
-
-Type: `integer`
-
-Number of publisher sellers.
-
-##### `sellers.seller_types.publisher.domain_count`
-
-Type: `integer`
-
-Number of unique domains associated with publisher sellers.
-
-#### `sellers.seller_types.intermediary`
-
-Type: `object`
-
-Information about intermediary sellers.
-
-##### `sellers.seller_types.intermediary.domains`
-
-Type: `array`
-
-List of domains associated with intermediary sellers.
-
-##### `sellers.seller_types.intermediary.seller_count`
-
-Type: `integer`
-
-Number of intermediary sellers.
-
-##### `sellers.seller_types.intermediary.domain_count`
-
-Type: `integer`
-
-Number of unique domains associated with intermediary sellers.
-
-#### `sellers.seller_types.both`
-
-Type: `object`
-
-Information about sellers who are both publishers and intermediaries.
-
-##### `sellers.seller_types.both.domains`
-
-Type: `array`
-
-List of domains associated with sellers who are both publishers and intermediaries.
-
-##### `sellers.seller_types.both.seller_count`
-
-Type: `integer`
-
-Number of sellers who are both publishers and intermediaries.
-
-##### `sellers.seller_types.both.domain_count`
-
-Type: `integer`
-
-Number of unique domains associated with sellers who are both publishers and intermediaries.
-
-#### `sellers.passthrough_count`
-
-Type: `integer`
-
-Number of passthrough sellers listed in the sellers.json file.
-
-#### `sellers.confidential_count`
-
-Type: `integer`
-
-Number of confidential sellers listed in the sellers.json file.
-
diff --git a/src/content/docs/reference/custom-metrics/other/ads.mdx b/src/content/docs/reference/custom-metrics/other/ads.mdx
new file mode 100644
index 0000000..74f33b8
--- /dev/null
+++ b/src/content/docs/reference/custom-metrics/other/ads.mdx
@@ -0,0 +1,370 @@
+---
+title: Ads custom metric
+description: Reference docs for the ads custom metric
+---
+
+_Appears in: [`custom_metrics.other`](/reference/custom-metrics/other/) struct_\
+_As: [`ads`](/reference/custom-metrics/other/#ads)_
+
+## Schema
+
+### `ads`
+
+Type: `object`
+
+Contains information about the ads.txt file. See [IAB Ads.txt Specification](https://github.com/InteractiveAdvertisingBureau/Supply-Chain-Validation/blob/main/ads.txt%20v1.1.md).
+
+#### `ads.present`
+
+Type: `boolean`
+
+Indicates if the ads.txt or app-ads.txt file is present.
+
+#### `ads.status`
+
+Type: `integer`
+
+HTTP status code of the ads.txt file response.
+
+#### `ads.redirected`
+
+Type: `boolean`
+
+Indicates if the ads.txt file request was redirected.
+
+#### `ads.redirected_to`
+
+Type: `string`
+
+URL to which the ads.txt resource was redirected.
+
+#### `ads.account_count`
+
+Type: `integer`
+
+Number of advertising accounts listed in the ads.txt file.
+
+#### `ads.account_types`
+
+Type: `object`
+
+Types of accounts (direct or reseller) listed in the ads.txt file.
+
+##### `ads.account_types.direct`
+
+Type: `object`
+
+Information about direct advertising accounts.
+
+###### `ads.account_types.direct.domains`
+
+Type: `array`
+
+List of domains with advertising accounts of this type.
+
+###### `ads.account_types.direct.account_count`
+
+Type: `integer`
+
+Number of advertising accounts of this type.
+
+###### `ads.account_types.direct.domain_count`
+
+Type: `integer`
+
+Number of unique domains with advertising accounts of this type.
+
+##### `ads.account_types.reseller`
+
+Type: `object`
+
+Information about reseller advertising accounts.
+
+###### `ads.account_types.reseller.domains`
+
+Type: `array`
+
+List of domains with advertising accounts of this type.
+
+###### `ads.account_types.reseller.account_count`
+
+Type: `integer`
+
+Number of advertising accounts of this type.
+
+###### `ads.account_types.reseller.domain_count`
+
+Type: `integer`
+
+Number of unique domains with advertising accounts of this type.
+
+#### `ads.line_count`
+
+Type: `integer`
+
+Total number of lines in the ads.txt file.
+
+#### `ads.variables`
+
+Type: `array`
+
+List of variables found in the ads.txt file.
+
+#### `ads.variable_count`
+
+Type: `integer`
+
+Number of variables found in the ads.txt file.
+
+#### `ads.error`
+
+Type: `string`
+
+Error message if fetch or parse failed.
+
+### `app_ads`
+
+Type: `object`
+
+Contains information about the app-ads.txt file. See [IAB App-Ads.txt Specification](https://github.com/InteractiveAdvertisingBureau/Supply-Chain-Validation/blob/main/app-ads.txt.md).
+
+#### `app_ads.present`
+
+Type: `boolean`
+
+Indicates if the ads.txt or app-ads.txt file is present.
+
+#### `app_ads.status`
+
+Type: `integer`
+
+HTTP status code of the ads.txt file response.
+
+#### `app_ads.redirected`
+
+Type: `boolean`
+
+Indicates if the ads.txt file request was redirected.
+
+#### `app_ads.redirected_to`
+
+Type: `string`
+
+URL to which the ads.txt resource was redirected.
+
+#### `app_ads.account_count`
+
+Type: `integer`
+
+Number of advertising accounts listed in the ads.txt file.
+
+#### `app_ads.account_types`
+
+Type: `object`
+
+Types of accounts (direct or reseller) listed in the ads.txt file.
+
+##### `app_ads.account_types.direct`
+
+Type: `object`
+
+Information about direct advertising accounts.
+
+###### `app_ads.account_types.direct.domains`
+
+Type: `array`
+
+List of domains with advertising accounts of this type.
+
+###### `app_ads.account_types.direct.account_count`
+
+Type: `integer`
+
+Number of advertising accounts of this type.
+
+###### `app_ads.account_types.direct.domain_count`
+
+Type: `integer`
+
+Number of unique domains with advertising accounts of this type.
+
+##### `app_ads.account_types.reseller`
+
+Type: `object`
+
+Information about reseller advertising accounts.
+
+###### `app_ads.account_types.reseller.domains`
+
+Type: `array`
+
+List of domains with advertising accounts of this type.
+
+###### `app_ads.account_types.reseller.account_count`
+
+Type: `integer`
+
+Number of advertising accounts of this type.
+
+###### `app_ads.account_types.reseller.domain_count`
+
+Type: `integer`
+
+Number of unique domains with advertising accounts of this type.
+
+#### `app_ads.line_count`
+
+Type: `integer`
+
+Total number of lines in the ads.txt file.
+
+#### `app_ads.variables`
+
+Type: `array`
+
+List of variables found in the ads.txt file.
+
+#### `app_ads.variable_count`
+
+Type: `integer`
+
+Number of variables found in the ads.txt file.
+
+#### `app_ads.error`
+
+Type: `string`
+
+Error message if fetch or parse failed.
+
+### `sellers`
+
+Type: `object`
+
+Contains information about the sellers.json file. See [IAB Sellers.json Specification](https://github.com/InteractiveAdvertisingBureau/Supply-Chain-Validation/blob/main/sellers-json.md).
+
+#### `sellers.present`
+
+Type: `boolean`
+
+Indicates if the sellers.json file is present.
+
+#### `sellers.status`
+
+Type: `integer`
+
+HTTP status code of the sellers.json file response.
+
+#### `sellers.redirected`
+
+Type: `boolean`
+
+Indicates if the sellers.json file request was redirected.
+
+#### `sellers.redirected_to`
+
+Type: `string`
+
+URL to which the sellers.json resource was redirected.
+
+#### `sellers.seller_count`
+
+Type: `integer`
+
+Number of sellers listed in the sellers.json file.
+
+#### `sellers.seller_types`
+
+Type: `object`
+
+Types of sellers (publisher, intermediary, both) listed in the sellers.json file.
+
+##### `sellers.seller_types.publisher`
+
+Type: `object`
+
+Information about publisher sellers.
+
+###### `sellers.seller_types.publisher.domains`
+
+Type: `array`
+
+List of domains associated with this seller type.
+
+###### `sellers.seller_types.publisher.seller_count`
+
+Type: `integer`
+
+Number of sellers of this type.
+
+###### `sellers.seller_types.publisher.domain_count`
+
+Type: `integer`
+
+Number of unique domains associated with this seller type.
+
+##### `sellers.seller_types.intermediary`
+
+Type: `object`
+
+Information about intermediary sellers.
+
+###### `sellers.seller_types.intermediary.domains`
+
+Type: `array`
+
+List of domains associated with this seller type.
+
+###### `sellers.seller_types.intermediary.seller_count`
+
+Type: `integer`
+
+Number of sellers of this type.
+
+###### `sellers.seller_types.intermediary.domain_count`
+
+Type: `integer`
+
+Number of unique domains associated with this seller type.
+
+##### `sellers.seller_types.both`
+
+Type: `object`
+
+Information about sellers who are both publishers and intermediaries.
+
+###### `sellers.seller_types.both.domains`
+
+Type: `array`
+
+List of domains associated with this seller type.
+
+###### `sellers.seller_types.both.seller_count`
+
+Type: `integer`
+
+Number of sellers of this type.
+
+###### `sellers.seller_types.both.domain_count`
+
+Type: `integer`
+
+Number of unique domains associated with this seller type.
+
+#### `sellers.passthrough_count`
+
+Type: `integer`
+
+Number of passthrough sellers listed in the sellers.json file.
+
+#### `sellers.confidential_count`
+
+Type: `integer`
+
+Number of confidential sellers listed in the sellers.json file.
+
+#### `sellers.error`
+
+Type: `string`
+
+Error message if fetch or parse failed.
+
diff --git a/src/content/docs/reference/custom-metrics/other.mdx b/src/content/docs/reference/custom-metrics/other/index.mdx
similarity index 97%
rename from src/content/docs/reference/custom-metrics/other.mdx
rename to src/content/docs/reference/custom-metrics/other/index.mdx
index f090056..ebdeb8a 100644
--- a/src/content/docs/reference/custom-metrics/other.mdx
+++ b/src/content/docs/reference/custom-metrics/other/index.mdx
@@ -10,7 +10,7 @@ _As: [`other`](/reference/structs/custom-metrics/#other)_
### `ads`
-Advertising technology and usage. See the [ads](/reference/custom-metrics/ads/) custom metric for more information.
+Advertising technology and usage. See the [ads](/reference/custom-metrics/other/ads/) custom metric for more information.
### `almanac`
diff --git a/src/content/docs/reference/custom-metrics/privacy.mdx b/src/content/docs/reference/custom-metrics/privacy.mdx
index 9c17847..d858170 100644
--- a/src/content/docs/reference/custom-metrics/privacy.mdx
+++ b/src/content/docs/reference/custom-metrics/privacy.mdx
@@ -6,288 +6,227 @@ description: Reference docs for the privacy custom metric
_Appears in: [`custom_metrics`](/reference/structs/custom-metrics/) struct_\
_As: [`privacy`](/reference/structs/custom-metrics/#privacy)_
-
-An example of the decoded object from `https://www.google.com/` page crawl
-```json
-{
- "privacy_wording_links": [
- {
- "text": "Privacy"
- }
- ],
- "iab_tcf_v1": {
- "present": false,
- "data": null,
- "compliant_setup": null
- },
- "iab_tcf_v2": {
- "present": false,
- "data": null,
- "compliant_setup": null
- },
- "iab_usp": {
- "present": false,
- "privacy_string": null
- },
- "navigator_doNotTrack": false,
- "navigator_globalPrivacyControl": false,
- "document_permissionsPolicy": false,
- "document_featurePolicy": false,
- "referrerPolicy": {
- "entire_document_policy": "origin",
- "individual_requests": null,
- "link_relations": null
- },
- "media_devices": {
- "navigator_mediaDevices_enumerateDevices": false,
- "navigator_mediaDevices_getUserMedia": true,
- "navigator_mediaDevices_getDisplayMedia": false
- },
- "geolocation": {
- "navigator_geolocation_getCurrentPosition": false,
- "navigator_geolocation_watchPosition": false
- },
- "fingerprinting": {
- "counts": {
- "prefers-contrast": 4,
- "forced-colors": 15,
- "devicememory": 1,
- "hardwareconcurrency": 2,
- "localstorage": 5,
- "screen.width": 7,
- "screen.height": 5,
- "sessionstorage": 1,
- "gettimezoneoffset": 5,
- "maxtouchpoints": 5,
- "ontouchstart": 5,
- "navigator.vendor": 1,
- "getchanneldata": 4,
- "navigator.platform": 1
- },
- "likelyFingerprintingScripts": [
- "https://www.google.com/",
- "https://www.gstatic.com/og/_/js/k=og.qtm.en_US.ftxzKLuybBw.2019.O/rt=j/m=qabr,q_d,qcwid,qapid,qald,q_dg/exm=qaaw,qadd,qaid,qein,qhaw,qhba,qhbr,qhch,qhga,qhid,qhin/d=1/ed=1/rs=AA2YrTsOEv0aSAP39vut5xzjLXfdU4aRbQ",
- ...
- ]
- },
- "request_hostnames_with_cname": {
- "ogs.google.com": [
- "www3.l.google.com"
- ],
- "apis.google.com": [
- "plus.l.google.com"
- ]
- },
- "ccpa_link": {
- "hasCCPALink": false,
- "CCPALinkPhrases": []
- }
-}
-```
-
-
## Schema
-### `privacy_wording_links`
-
-Type: `array