SPB Git forge

spb/websensor

Public
33commits 1branches 0releases
3.4 MBsize
maindefault branch
10 days agolast push
TypeScript 55.4% Python 43.2% SQL 1.2%

registry: 22 site-class fragments (2 681 organizations, 4 052 validated sensors) + 10 new connector families

- config/sources.d/*.yaml merged on top of the founding file by apps/engine/src/seeds.ts (`extend: true`
  adds sensors to an existing source); classes: open source, central banks & finance, energy/climate/weather,
  telecom & internet infra, retail/consumer/travel, gaming & entertainment, universities & research,
  international orgs/NGOs/standards, sports, crypto, transport/aviation/space, consumer safety/food/agri,
  housing/labour/open data, enterprise SaaS, health systems & medtech, politics/elections/courts, SEC EDGAR
  (254 issuers), package registries, web posture, OpenAPI, status JSON, documents & data
- connectors: package (10 registries), edgar, statusjson (Instatus/incident.io/Status.io), openapi, csv, pdf
  (unpdf), dns, tls, headers, rdap (IANA bootstrap); fetcher keepAllHeaders
- heuristics: connector-class priors + event types api_change, dns_change, domain_registration_change,
  crawler_policy_change; 8-K items → earnings/leadership_change/breach/acquisition
- registry validator without DB (apps/engine/src/validate.ts, --probe), generators gen-edgar.py,
  gen-web-posture.py, prune-fragment.py; docs/registry/AUTHORING.md + docs/connectors/*.md (16)
- SSRF: NAT64 addresses judged by the embedded IPv4 (IPv6-only hotspots)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed 16 days ago (Sep 8, 2026) parent c4c4aa0

19 changed files +19,898 −61

modified CLAUDE.md +30 −9
@@ -19,23 +19,40 @@ design is `docs/PRODUCT-BRIEF.md`; this file is the working guide for the code.
19 19 bodies, canonical representations and full diffs live there, never in Postgres. Interface ready for S3/MinIO.
20 20 - `packages/connectors` — connector SDK (`WebSensorConnector.fetch/normalize`), safe fetcher (conditional GET,
21 21 manual redirects validated per hop, HTTP/2→1.1 pin on NGHTTP2 errors, browser-UA second attempt on
22 − 403/resets, size + time limits), connectors: `http` (HTML/JSON/text/HEAD), `rss` (RSS/Atom/RDF/JSON Feed),
23 − `sitemap` (index + news), `statuspage` (Atlassian v2 summary), `github` (releases/tags/commits Atom,
24 − advisories REST), `jsonlist` (keyed records from any JSON API; `{now-2h}` placeholders), `discovery`
25 − (robots sitemaps, `<link rel=alternate>`, well-known feed paths, linked status pages — every candidate is
26 − fetched and parsed), `scrapfly` (fallback, budgeted, only when `fallback.scrapfly` is set on the source).
22 + 403/resets, size + time limits, `keepAllHeaders`), 16 connector families: `http` (HTML/JSON/text/HEAD), `rss`
23 + (RSS/Atom/RDF/JSON Feed), `sitemap` (index + news), `statuspage` (Atlassian v2 summary), `statusjson` (Instatus /
24 + incident.io / Status.io), `github` (releases/tags/commits Atom, advisories REST), `jsonlist` (keyed records from
25 + any JSON API; `{now-2h}` placeholders), `package` (npm/PyPI/crates/RubyGems/NuGet/Packagist/Hex/Go proxy/Homebrew/
26 + Docker Hub version streams), `edgar` (SEC submissions → filings, 8-K items decoded), `openapi` (API contract
27 + fingerprints), `csv` (open-data rows, `tail`), `pdf` (pdf.js text via unpdf), `dns` (A/AAAA/NS/MX/TXT/CAA/SOA/DMARC),
28 + `tls` (certificate identity, chain, ALPN, expiry), `headers` (security/infra response headers), `rdap` (registrar,
29 + EPP status, expiry via IANA bootstrap), `discovery` (robots sitemaps, `<link rel=alternate>`, well-known feed
30 + paths, linked status pages — every candidate is fetched and parsed), `scrapfly` (fallback, budgeted, only when
31 + `fallback.scrapfly` is set on the source). `dns://` and `tls://` sensor URLs are accepted (host only).
27 32 - `apps/engine` — scheduler (`FOR UPDATE SKIP LOCKED` claims, global + per-host concurrency), pipeline
28 33 (fetch → normalize → snapshot → diff → heuristics → change → event: entities, novelty, LLM interpretation,
29 34 clustering, importance/confidence, silent-change detection, publish to Redis), registry sync from
30 − `config/sources.yaml`, discovery, connector health rollups, Prometheus metrics on :8262. CLI: `src/cli.ts`
31 − (`sync`, `discover`, `probe <domain>`, `run-once <sensor>`, `run-due [n]`).
35 + `config/sources.yaml` + `config/sources.d/`, discovery, connector health rollups, Prometheus metrics on :8262.
36 + CLI: `src/cli.ts` (`sync`, `discover`, `probe <domain>`, `run-once <sensor>`, `run-due [n]`); `src/validate.ts`
37 + (registry validator, see below).
32 38 - `apps/api` — Fastify gateway (:8260): REST `/api/v1/*`, WebSocket `/api/v1/live` (Redis pub/sub fan-out,
33 39 channels `events:*`, `entity:*`, `source:*`, `watchlist:*`), `/api/v1/feed.rss`, `/api/health` `/api/ready` `/api/metrics`, apex→www
34 40 redirect, and a reverse proxy to the Next.js app for everything else.
35 41 - `apps/web` — Next.js 16 frontend (:8261, loopback). Pages: live, breaking, explore, sources, entities,
36 42 timelines, silent changes, watchlists, alerts, event detail with diff viewer, health, API docs.
37 −- `config/sources.yaml` — the 271-organization registry (incl. governments and news media; news sources run with `llm: false`, heuristics only) (sources, curated sensors, product entities, discovery
38 − flags, fallbacks). `docs/connectors/*.md` document each connector family.
43 +- `config/sources.yaml` — the founding 271-organization registry (incl. governments and news media; news sources
44 + run with `llm: false`, heuristics only) + `config/sources.d/*.yaml` fragments, one per **site class** (open source,
45 + central banks & finance, energy/climate/weather, telecom & internet infrastructure, retail/consumer/travel,
46 + gaming & entertainment, universities & research, international orgs/NGOs/standards, sports, crypto,
47 + transport/aviation/space, consumer safety/food/agri, housing/labour/open data, enterprise SaaS, health systems &
48 + medtech, politics/elections/courts, EDGAR filings, package registries, web posture, OpenAPI, status JSON,
49 + documents & data). Fragments are merged by `apps/engine/src/seeds.ts` in file-name order; an entry with
50 + `extend: true` adds sensors/products/aliases to a source declared earlier. Authoring guide + connector
51 + cheat-sheet: `docs/registry/AUTHORING.md`; `docs/connectors/*.md` document each connector family.
52 +- Registry validator (no DB): `node node_modules/tsx/dist/cli.mjs apps/engine/src/validate.ts [fragment.yaml] [--all]
53 + [--source id] [--connector key] [--json report.json]` runs every curated sensor through its connector and prints
54 + OK/WARN/FAIL; `--probe <domain>` is a discovery dry-run. `scripts/prune-fragment.py` removes FAIL/WARN sensors from
55 + a fragment using the JSON report; `scripts/gen-web-posture.py` regenerates the web-posture fragment.
39 56
40 57 ## Rules
41 58 - Every URL the engine touches — seeds, discovered candidates, redirects, Scrapfly targets — goes through
@@ -53,6 +70,10 @@ design is `docs/PRODUCT-BRIEF.md`; this file is the working guide for the code.
53 70 - Never label inference as fact: events carry `evidence_label` (OBSERVED / INFERRED / CONFIRMED / UNCONFIRMED)
54 71 and the interpretation keeps `observed` and `inferred` apart. Silent changes are flagged, never asserted as
55 72 "unannounced" without checking recent announcement-type events of the same source.
73 +- Every sensor in the registry has been fetched and parsed successfully by the validator before being committed;
74 + a fragment that fails validation is not merged. Never add sensors to the registry without running it.
75 +- SSRF policy: NAT64 addresses (`64:ff9b::/96`) are judged by the embedded IPv4 address (IPv6-only networks with
76 + 464XLAT resolve every IPv4-only host that way), not blocked wholesale.
56 77 - Do not add sensors that are blocked with 403 by design (Akamai/Cloudflare bot management) unless the source
57 78 has `fallback.scrapfly: true` and a tier ≥ C; Scrapfly is a budgeted fallback, not the foundation.
58 79 - All timestamps UTC. Ids are prefixed (`src_`, `sen_`, `snap_`, `chg_`, `evt_`, `clu_`, `ent_`…).
modified README.md +15 −3
@@ -13,9 +13,21 @@ Sources → Sensors/Connectors → Fetch (conditional) → Snapshot (immutable)
13 13 → Redis stream → WebSocket gateway → www.websensor.io
14 14 ```
15 15
16 −- 271 organizations (tech, cloud, cyber, finance, government, health, science, automotive, commerce, internet, 26 governments/public institutions, 45 news media), ~370 curated sensors at launch (`config/sources.yaml`), plus validated discovery.
17 −- Connector families: HTTP (HTML/JSON/HEAD), RSS/Atom/JSON Feed, sitemaps, Statuspage, GitHub, JSON APIs
18 − (CISA KEV, NVD, Federal Register, USGS, HIBP, Google Cloud incidents…), Scrapfly fallback.
16 +- **2 681 organizations, 4 052 curated sensors** (2026-09-08), every one fetched and parsed by the registry validator
17 + before being committed: the founding 271 (`config/sources.yaml`) plus 22 site-class fragments in
18 + `config/sources.d/` — open source, central banks & finance, energy/climate/weather, telecom & internet
19 + infrastructure, retail/consumer/travel, gaming & entertainment, universities & research, international
20 + organizations/NGOs/standards, sports, crypto, transport/aviation/space, consumer safety/food/agriculture,
21 + housing/labour/open data, enterprise SaaS, health systems & medtech, politics/elections/courts, SEC EDGAR filings
22 + (254 issuers), package registries, web posture (robots.txt, TLS, DNS, headers, RDAP), OpenAPI contracts, status
23 + JSON pages, documents & data files — plus validated discovery.
24 +- **16 connector families**: HTTP (HTML/JSON/HEAD), RSS/Atom/JSON Feed, sitemaps, Statuspage, Instatus/incident.io/
25 + Status.io (`statusjson`), GitHub, JSON APIs (`jsonlist`), package registries (npm, PyPI, crates.io, RubyGems, NuGet,
26 + Packagist, Hex, Go proxy, Homebrew, Docker Hub), SEC EDGAR submissions (8-K items decoded), OpenAPI/Swagger
27 + contract fingerprints, CSV/TSV time series (FRED, ECB, NOAA…), PDF text (pdf.js), DNS records, TLS certificates,
28 + HTTP security headers, RDAP registration — and a budgeted Scrapfly fallback.
29 +- Authoring guide and connector cheat-sheet: `docs/registry/AUTHORING.md`; validator:
30 + `node node_modules/tsx/dist/cli.mjs apps/engine/src/validate.ts <fragment.yaml>` (no database needed).
19 31 - Every event is auditable: event → change → snapshot A/B → fetch run → sensor → source, with raw evidence.
20 32 - Observed vs inferred is always labelled; silent (unannounced) changes are flagged.
21 33
modified apps/engine/src/config.ts +2 −0
@@ -8,6 +8,8 @@ export const config = {
8 8 databaseUrl: env.DATABASE_URL ?? "postgres://localhost:5432/websensor",
9 9 redisUrl: env.REDIS_URL ?? "redis://127.0.0.1:6379",
10 10 sourcesFile: env.WS_SOURCES_FILE ?? "./config/sources.yaml",
11 + /** fragments merged on top of sourcesFile (sorted by file name; `extend: true` entries add sensors to existing sources) */
12 + sourcesDir: env.WS_SOURCES_DIR ?? "./config/sources.d",
11 13 entitiesFile: env.WS_ENTITIES_FILE ?? "./config/entities.yaml",
12 14 fetchConcurrency: Number(env.WS_FETCH_CONCURRENCY ?? 16),
13 15 perHostConcurrency: Number(env.WS_PER_HOST_CONCURRENCY ?? 2),
modified apps/engine/src/registry.ts +8 −49
@@ -1,7 +1,4 @@
1 −import { readFileSync } from "node:fs";
2 −import YAML from "yaml";
3 −import { z } from "zod";
4 −import { SENSOR_TYPES, TIERS, newId, slugify, sourceImportanceFromTier } from "@websensor/core";
1 +import { newId, slugify, sourceImportanceFromTier } from "@websensor/core";
5 2 import { db, discoveryCandidates, entities, entityAliases, eq, sensors, sourceEntities, sources, sql, textArray } from "@websensor/db";
6 3 import { discoverDomain } from "@websensor/connectors";
7 4 import { config, log } from "./config";
@@ -11,52 +8,14 @@ import { config, log } from "./config";
11 8 * Booleans under `discover:` only allow discovery; every candidate is validated by a real
12 9 * fetch+parse before becoming a sensor.
13 10 */
14 −const sensorSchema = z.object({
15 − id: z.string().optional(),
16 − name: z.string(),
17 − url: z.string().url(),
18 − type: z.enum(SENSOR_TYPES),
19 − connector: z.string().default("http"),
20 − tier: z.enum(TIERS).optional(),
21 − interval: z.number().int().positive().optional(),
22 − weight: z.number().positive().optional(),
23 − config: z.record(z.string(), z.unknown()).default({}),
24 −});
11 +export type { SourceSeed } from "./seeds";
12 +import { loadSeedsDetailed, type SourceSeed } from "./seeds";
25 13
26 −const sourceSchema = z.object({
27 − id: z.string(),
28 − name: z.string(),
29 − domain: z.string(),
30 − homepage: z.string().url().optional(),
31 − description: z.string().optional(),
32 − categories: z.array(z.string()).default([]),
33 − tier: z.enum(TIERS).default("B"),
34 − weight: z.number().positive().default(1),
35 − entity_type: z.string().default("organization"),
36 − aliases: z.array(z.string()).default([]),
37 − products: z.array(z.object({ id: z.string().optional(), name: z.string(), type: z.string().default("product"), aliases: z.array(z.string()).default([]) })).default([]),
38 − discover: z.object({ rss: z.boolean().optional(), sitemap: z.boolean().optional(), status: z.boolean().optional(), pages: z.boolean().optional() }).default({}),
39 − fallback: z.object({ firecrawl: z.boolean().optional(), scrapfly: z.boolean().optional() }).default({}),
40 − sensors: z.array(sensorSchema).default([]),
41 − notes: z.string().optional(),
42 − enabled: z.boolean().default(true),
43 − /** false = heuristics only (high-volume feeds such as news wires) */
44 − llm: z.boolean().default(true),
45 −});
46 −export type SourceSeed = z.infer<typeof sourceSchema>;
47 −
48 −export function loadSeeds(file = config.sourcesFile): SourceSeed[] {
49 − const raw = YAML.parse(readFileSync(file, "utf8")) as { sources: unknown[] };
50 − const out: SourceSeed[] = [];
51 − for (const s of raw.sources) {
52 − const parsed = sourceSchema.safeParse(s);
53 − if (!parsed.success) {
54 − log.error({ issues: parsed.error.issues, source: (s as { id?: string }).id }, "invalid source seed");
55 − continue;
56 − }
57 − out.push(parsed.data);
58 − }
59 − return out;
14 +export function loadSeeds(file = config.sourcesFile, dir = config.sourcesDir): SourceSeed[] {
15 + const { seeds, issues, files } = loadSeedsDetailed(file, dir);
16 + for (const i of issues) log.error({ file: i.file, source: i.source, issue: i.message }, "invalid source seed");
17 + log.info({ files: files.length, sources: seeds.length, sensors: seeds.reduce((n, s) => n + s.sensors.length, 0) }, "registry seeds loaded");
18 + return seeds;
60 19 }
61 20
62 21 export async function syncRegistry(seeds = loadSeeds()): Promise<{ sources: number; sensors: number }> {
added apps/engine/src/seeds.ts +152 −0
@@ -0,0 +1,152 @@
1 +import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
2 +import { join } from "node:path";
3 +import YAML from "yaml";
4 +import { z } from "zod";
5 +import { SENSOR_TYPES, TIERS } from "@websensor/core";
6 +
7 +/**
8 + * Source registry seeds. `config/sources.yaml` is the founding file; every `config/sources.d/*.yaml`
9 + * (sorted by name) is merged on top. A fragment entry may carry `extend: true` to add sensors,
10 + * products and aliases to a source declared earlier (same `id`) instead of redefining it — used to
11 + * attach connector-class sensors (EDGAR filings, TLS/DNS posture, package registries…) to existing
12 + * organizations without touching the founding file.
13 + *
14 + * This module has no database dependency so that the validator CLI can load seeds anywhere.
15 + */
16 +export const sensorSchema = z.object({
17 + id: z.string().optional(),
18 + name: z.string(),
19 + url: z.string().url(),
20 + type: z.enum(SENSOR_TYPES),
21 + connector: z.string().default("http"),
22 + tier: z.enum(TIERS).optional(),
23 + interval: z.number().int().positive().optional(),
24 + weight: z.number().positive().optional(),
25 + config: z.record(z.string(), z.unknown()).default({}),
26 +});
27 +export type SensorSeed = z.infer<typeof sensorSchema>;
28 +
29 +export const productSchema = z.object({ id: z.string().optional(), name: z.string(), type: z.string().default("product"), aliases: z.array(z.string()).default([]) });
30 +
31 +export const sourceSchema = z.object({
32 + id: z.string().regex(/^[a-z0-9][a-z0-9-]*$/, "id must be kebab-case"),
33 + name: z.string(),
34 + domain: z.string(),
35 + homepage: z.string().url().optional(),
36 + description: z.string().optional(),
37 + categories: z.array(z.string()).default([]),
38 + tier: z.enum(TIERS).default("B"),
39 + weight: z.number().positive().default(1),
40 + entity_type: z.string().default("organization"),
41 + aliases: z.array(z.string()).default([]),
42 + products: z.array(productSchema).default([]),
43 + discover: z.object({ rss: z.boolean().optional(), sitemap: z.boolean().optional(), status: z.boolean().optional(), pages: z.boolean().optional() }).default({}),
44 + fallback: z.object({ firecrawl: z.boolean().optional(), scrapfly: z.boolean().optional() }).default({}),
45 + sensors: z.array(sensorSchema).default([]),
46 + notes: z.string().optional(),
47 + enabled: z.boolean().default(true),
48 + /** false = heuristics only (high-volume feeds such as news wires) */
49 + llm: z.boolean().default(true),
50 + /** fragment-only: merge into an already declared source instead of redefining it */
51 + extend: z.boolean().default(false),
52 +});
53 +export type SourceSeed = z.infer<typeof sourceSchema>;
54 +
55 +/** Partial schema for `extend: true` entries — only `id` is required. */
56 +const extendSchema = z.object({
57 + id: z.string(),
58 + extend: z.literal(true),
59 + aliases: z.array(z.string()).default([]),
60 + products: z.array(productSchema).default([]),
61 + sensors: z.array(sensorSchema).default([]),
62 + categories: z.array(z.string()).default([]),
63 + fallback: z.object({ firecrawl: z.boolean().optional(), scrapfly: z.boolean().optional() }).optional(),
64 + notes: z.string().optional(),
65 +});
66 +
67 +export interface SeedIssue {
68 + file: string;
69 + source: string | undefined;
70 + message: string;
71 +}
72 +
73 +export interface LoadedSeeds {
74 + seeds: SourceSeed[];
75 + issues: SeedIssue[];
76 + files: string[];
77 + /** source id → files that declared or extended it */
78 + origins: Map<string, string[]>;
79 +}
80 +
81 +export function listSeedFiles(file: string, dir: string): string[] {
82 + const files = existsSync(file) ? [file] : [];
83 + if (existsSync(dir) && statSync(dir).isDirectory()) {
84 + for (const f of readdirSync(dir).sort()) if (/\.ya?ml$/.test(f) && !f.startsWith("_") && !f.startsWith(".")) files.push(join(dir, f));
85 + }
86 + return files;
87 +}
88 +
89 +export function loadSeedsDetailed(file: string, dir: string): LoadedSeeds {
90 + const files = listSeedFiles(file, dir);
91 + const byId = new Map<string, SourceSeed>();
92 + const origins = new Map<string, string[]>();
93 + const issues: SeedIssue[] = [];
94 + const touch = (id: string, f: string): void => {
95 + const arr = origins.get(id) ?? [];
96 + if (!arr.includes(f)) arr.push(f);
97 + origins.set(id, arr);
98 + };
99 + for (const f of files) {
100 + let raw: { sources?: unknown[] };
101 + try {
102 + raw = (YAML.parse(readFileSync(f, "utf8")) ?? {}) as { sources?: unknown[] };
103 + } catch (e) {
104 + issues.push({ file: f, source: undefined, message: `YAML parse error: ${(e as Error).message}` });
105 + continue;
106 + }
107 + for (const s of raw.sources ?? []) {
108 + const id = (s as { id?: string })?.id;
109 + if ((s as { extend?: boolean })?.extend === true) {
110 + const parsed = extendSchema.safeParse(s);
111 + if (!parsed.success) {
112 + issues.push({ file: f, source: id, message: parsed.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; ") });
113 + continue;
114 + }
115 + const base = byId.get(parsed.data.id);
116 + if (!base) {
117 + issues.push({ file: f, source: id, message: "extend: true but no source with this id was declared before this file" });
118 + continue;
119 + }
120 + touch(base.id, f);
121 + base.aliases = [...new Set([...base.aliases, ...parsed.data.aliases])];
122 + base.products = [...base.products, ...parsed.data.products.filter((p) => !base.products.some((q) => q.name === p.name))];
123 + base.categories = [...new Set([...base.categories, ...parsed.data.categories])];
124 + base.sensors = [...base.sensors, ...parsed.data.sensors.filter((n) => !base.sensors.some((o) => o.url === n.url))];
125 + if (parsed.data.fallback) base.fallback = { ...base.fallback, ...parsed.data.fallback };
126 + if (parsed.data.notes) base.notes = [base.notes, parsed.data.notes].filter(Boolean).join(" ");
127 + continue;
128 + }
129 + const parsed = sourceSchema.safeParse(s);
130 + if (!parsed.success) {
131 + issues.push({ file: f, source: id, message: parsed.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; ") });
132 + continue;
133 + }
134 + if (byId.has(parsed.data.id)) {
135 + issues.push({ file: f, source: parsed.data.id, message: "duplicate source id (use extend: true to add sensors to an existing source)" });
136 + continue;
137 + }
138 + byId.set(parsed.data.id, parsed.data);
139 + touch(parsed.data.id, f);
140 + }
141 + }
142 + // Sensor-level sanity: duplicate URLs inside a source.
143 + for (const s of byId.values()) {
144 + const seen = new Set<string>();
145 + for (const sen of s.sensors) {
146 + const k = sen.url.replace(/\/$/, "");
147 + if (seen.has(k)) issues.push({ file: "-", source: s.id, message: `duplicate sensor url ${sen.url}` });
148 + seen.add(k);
149 + }
150 + }
151 + return { seeds: [...byId.values()], issues, files, origins };
152 +}
added apps/engine/src/validate.ts +175 −0
@@ -0,0 +1,175 @@
1 +import { writeFileSync } from "node:fs";
2 +import { resolve } from "node:path";
3 +import type { SensorEndpoint, Tier } from "@websensor/core";
4 +import { closeDispatcher, discoverDomain, getConnector, NormalizeError } from "@websensor/connectors";
5 +import { loadSeedsDetailed, type SourceSeed } from "./seeds";
6 +
7 +/**
8 + * Registry validator — no database. Loads the seeds (founding file + fragments), then runs every
9 + * curated sensor through its connector (fetch + normalize) exactly as the engine would, and prints
10 + * one line per sensor:
11 + *
12 + * OK 200 list items=42 openai_news_feed https://…
13 + * WARN 200 text thin acme_pricing https://… (JS shell / interstitial)
14 + * FAIL 403 - - foo_blog_feed https://… http_403
15 + *
16 + * Usage (from the repo root):
17 + * node node_modules/tsx/dist/cli.mjs apps/engine/src/validate.ts [fragment.yaml…] [--all]
18 + * [--source id[,id…]] [--connector key] [--concurrency 8] [--json report.json] [--quiet]
19 + * node node_modules/tsx/dist/cli.mjs apps/engine/src/validate.ts --probe <domain> (discovery dry-run, no DB)
20 + *
21 + * Without a file argument the founding file is validated; with fragment paths only the sources
22 + * declared or extended by those fragments are checked (the whole registry is still loaded so that
23 + * `extend: true` resolves). Exit code 1 when any sensor FAILs or any seed is invalid.
24 + */
25 +interface Result {
26 + source: string;
27 + sensor: string;
28 + connector: string;
29 + type: string;
30 + url: string;
31 + status: "OK" | "WARN" | "FAIL";
32 + http: number;
33 + mode?: string;
34 + items?: number;
35 + note: string;
36 + ms: number;
37 +}
38 +
39 +function arg(name: string, def?: string): string | undefined {
40 + const i = process.argv.indexOf(`--${name}`);
41 + return i >= 0 ? process.argv[i + 1] : def;
42 +}
43 +const flag = (name: string): boolean => process.argv.includes(`--${name}`);
44 +
45 +async function checkSensor(src: SourceSeed, sen: SourceSeed["sensors"][number]): Promise<Result> {
46 + const t0 = Date.now();
47 + const id = sen.id ?? `${src.id}_${sen.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "")}`;
48 + const base: Omit<Result, "status" | "http" | "note" | "ms"> = { source: src.id, sensor: id, connector: sen.connector, type: sen.type, url: sen.url };
49 + let connector;
50 + try {
51 + connector = getConnector(sen.connector);
52 + } catch (e) {
53 + return { ...base, status: "FAIL", http: 0, note: (e as Error).message, ms: 0 };
54 + }
55 + const endpoint: SensorEndpoint = { id, sourceId: src.id, name: sen.name, url: sen.url, type: sen.type, tier: (sen.tier ?? src.tier) as Tier, connector: sen.connector, config: sen.config, etag: null, lastModified: null, state: null };
56 + const obs = await connector.fetch(endpoint);
57 + if (obs.error) return { ...base, status: "FAIL", http: obs.meta.status, note: `${obs.error.code}: ${obs.error.message.slice(0, 160)}`, ms: Date.now() - t0 };
58 + if (obs.meta.status >= 400) return { ...base, status: "FAIL", http: obs.meta.status, note: `http_${obs.meta.status}${obs.meta.finalUrl !== sen.url ? " → " + obs.meta.finalUrl : ""}`, ms: Date.now() - t0 };
59 + try {
60 + const norm = await connector.normalize(endpoint, obs);
61 + const items = norm.items?.length;
62 + const thin = Boolean((norm.extra as { thin?: boolean } | undefined)?.thin);
63 + let status: Result["status"] = "OK";
64 + let note = "";
65 + if (norm.mode === "list" && (items ?? 0) === 0) {
66 + status = "WARN";
67 + note = "empty list";
68 + } else if (thin || norm.extractionConfidence < 0.5) {
69 + status = "WARN";
70 + note = `thin (confidence ${norm.extractionConfidence})`;
71 + } else if (norm.mode === "text" && (norm.text?.length ?? 0) < (sen.type === "FILE" ? 20 : 200)) {
72 + status = "WARN";
73 + note = `short text (${norm.text?.length ?? 0} chars)`;
74 + }
75 + if (["http", "rss", "sitemap", "statuspage", "github", "jsonlist", "statusjson", "openapi", "csv", "pdf", "headers"].includes(sen.connector) && obs.meta.finalUrl && obs.meta.finalUrl.replace(/\/$/, "") !== sen.url.replace(/\/$/, "")) note = `${note ? note + "; " : ""}redirect → ${obs.meta.finalUrl}`;
76 + return { ...base, status, http: obs.meta.status, mode: norm.mode, items, note, ms: Date.now() - t0 };
77 + } catch (e) {
78 + const msg = e instanceof NormalizeError ? `${e.code}: ${e.message}` : (e as Error).message;
79 + return { ...base, status: "FAIL", http: obs.meta.status, note: msg.slice(0, 200), ms: Date.now() - t0 };
80 + }
81 +}
82 +
83 +async function main(): Promise<void> {
84 + const probe = arg("probe");
85 + if (probe) {
86 + const r = await discoverDomain(probe, { probePages: true });
87 + if (!r.length) console.log(`no validated endpoint found for ${probe}`);
88 + for (const e of r) console.log(`${e.type.padEnd(10)} ${e.connector.padEnd(10)} ${e.value.toFixed(2)} ${String(e.itemCount ?? "").padStart(5)} ${e.url} (${e.evidence}${e.title ? " · " + e.title : ""})`);
89 + return;
90 + }
91 + const files = process.argv.slice(2).filter((a) => !a.startsWith("--") && /\.ya?ml$/.test(a) && (process.argv[process.argv.indexOf(a) - 1] ?? "").startsWith("--") === false);
92 + const baseFile = process.env.WS_SOURCES_FILE ?? "./config/sources.yaml";
93 + const dir = process.env.WS_SOURCES_DIR ?? "./config/sources.d";
94 + const loaded = loadSeedsDetailed(baseFile, dir);
95 + for (const i of loaded.issues) console.error(`SEED ${i.file} ${i.source ?? "-"}: ${i.message}`);
96 +
97 + const wanted = new Set(files.map((f) => resolve(f)));
98 + const onlySources = arg("source")?.split(",").filter(Boolean);
99 + const onlyConnector = arg("connector");
100 + let targets = loaded.seeds;
101 + if (!flag("all") && wanted.size) targets = targets.filter((s) => (loaded.origins.get(s.id) ?? []).some((f) => wanted.has(resolve(f))));
102 + else if (!flag("all") && !wanted.size) targets = targets.filter((s) => (loaded.origins.get(s.id) ?? []).some((f) => resolve(f) === resolve(baseFile)));
103 + if (onlySources) targets = targets.filter((s) => onlySources.includes(s.id));
104 +
105 + // For fragment validation, only the sensors that the fragment contributed are relevant.
106 + const jobs: { src: SourceSeed; sen: SourceSeed["sensors"][number] }[] = [];
107 + for (const src of targets) for (const sen of src.sensors) if (!onlyConnector || sen.connector === onlyConnector) jobs.push({ src, sen });
108 + if (wanted.size && !flag("all")) {
109 + const fragmentUrls = new Set<string>();
110 + const YAML = (await import("yaml")).default;
111 + const { readFileSync } = await import("node:fs");
112 + for (const f of wanted) {
113 + const raw = YAML.parse(readFileSync(f, "utf8")) as { sources?: { sensors?: { url: string }[] }[] };
114 + for (const s of raw.sources ?? []) for (const sen of s.sensors ?? []) fragmentUrls.add(sen.url);
115 + }
116 + for (let i = jobs.length - 1; i >= 0; i--) if (!fragmentUrls.has(jobs[i]!.sen.url)) jobs.splice(i, 1);
117 + }
118 +
119 + const concurrency = Number(arg("concurrency", "8"));
120 + const quiet = flag("quiet");
121 + const results: Result[] = [];
122 + // Per-host politeness: never more than 2 in flight for the same host.
123 + const inflight = new Map<string, number>();
124 + const host = (u: string): string => {
125 + try {
126 + return new URL(u).hostname;
127 + } catch {
128 + return u;
129 + }
130 + };
131 + const queue = [...jobs];
132 + await Promise.all(
133 + Array.from({ length: concurrency }, async () => {
134 + while (queue.length) {
135 + const idx = queue.findIndex((j) => (inflight.get(host(j.sen.url)) ?? 0) < 2);
136 + if (idx < 0) {
137 + await new Promise((r) => setTimeout(r, 150));
138 + continue;
139 + }
140 + const job = queue.splice(idx, 1)[0]!;
141 + const h = host(job.sen.url);
142 + inflight.set(h, (inflight.get(h) ?? 0) + 1);
143 + try {
144 + const r = await checkSensor(job.src, job.sen);
145 + results.push(r);
146 + if (!quiet || r.status !== "OK") console.log(`${r.status.padEnd(5)} ${String(r.http).padStart(3)} ${(r.mode ?? "-").padEnd(4)} ${(r.items !== undefined ? `items=${r.items}` : "-").padEnd(10)} ${r.sensor.padEnd(52).slice(0, 52)} ${r.url}${r.note ? ` (${r.note})` : ""}`);
147 + } finally {
148 + inflight.set(h, (inflight.get(h) ?? 1) - 1);
149 + }
150 + }
151 + }),
152 + );
153 +
154 + const ok = results.filter((r) => r.status === "OK").length;
155 + const warn = results.filter((r) => r.status === "WARN").length;
156 + const fail = results.filter((r) => r.status === "FAIL").length;
157 + const byConnector = new Map<string, { ok: number; warn: number; fail: number }>();
158 + for (const r of results) {
159 + const c = byConnector.get(r.connector) ?? { ok: 0, warn: 0, fail: 0 };
160 + c[r.status.toLowerCase() as "ok" | "warn" | "fail"]++;
161 + byConnector.set(r.connector, c);
162 + }
163 + console.log(`\n${targets.length} sources · ${results.length} sensors → OK ${ok} · WARN ${warn} · FAIL ${fail}`);
164 + for (const [c, n] of [...byConnector.entries()].sort()) console.log(` ${c.padEnd(12)} ok ${String(n.ok).padStart(4)} warn ${String(n.warn).padStart(3)} fail ${String(n.fail).padStart(3)}`);
165 + const out = arg("json");
166 + if (out) writeFileSync(out, JSON.stringify({ generatedAt: new Date().toISOString(), sources: targets.length, results }, null, 2));
167 + if (fail > 0 || loaded.issues.length > 0) process.exitCode = 1;
168 +}
169 +
170 +main()
171 + .catch((e) => {
172 + console.error(e);
173 + process.exitCode = 1;
174 + })
175 + .finally(() => closeDispatcher());
added config/sources.d/10-open-source.yaml +1404 −0
@@ -0,0 +1,1404 @@
1 +# config/sources.d/10-open-source.yaml — open-source foundations, languages, frameworks, Linux/BSD
2 +# distributions and developer tools (2026-09-08). Every sensor below was fetched and parsed by
3 +# `apps/engine/src/validate.ts` before being written; GitHub release/tag Atom feeds are the backbone,
4 +# with the project's own news/blog feed and status page when one exists. Sources whose release stream
5 +# is a firehose (canaries, nightlies, per-package monorepo tags) carry `llm: false`.
6 +sources:
7 + # ───────────────────────── Foundations ─────────────────────────
8 + - id: linux-foundation
9 + name: Linux Foundation
10 + domain: linuxfoundation.org
11 + homepage: https://www.linuxfoundation.org
12 + categories: [open-source, developer, ngo]
13 + tier: B
14 + weight: 1.2
15 + aliases: [lf, the linux foundation]
16 + discover: { rss: true, sitemap: true }
17 + sensors:
18 + - { name: blog feed, url: "https://www.linuxfoundation.org/blog/rss.xml", type: RSS, connector: rss, tier: B }
19 + - id: cncf
20 + name: Cloud Native Computing Foundation
21 + domain: cncf.io
22 + homepage: https://www.cncf.io
23 + categories: [open-source, developer, cloud]
24 + tier: B
25 + weight: 1.2
26 + aliases: [cncf, cloud native computing foundation]
27 + discover: { rss: true, sitemap: true }
28 + sensors:
29 + - { name: news feed, url: "https://www.cncf.io/feed/", type: RSS, connector: rss, tier: B }
30 + - id: apache
31 + name: Apache Software Foundation
32 + domain: apache.org
33 + homepage: https://www.apache.org
34 + categories: [open-source, developer]
35 + tier: B
36 + weight: 1.2
37 + aliases: [asf, apache software foundation, apache foundation]
38 + discover: { rss: true, sitemap: false }
39 + sensors:
40 + - { name: news feed, url: "https://news.apache.org/feed/", type: RSS, connector: rss, tier: B }
41 + - id: eclipse
42 + name: Eclipse Foundation
43 + domain: eclipse.org
44 + homepage: https://www.eclipse.org
45 + categories: [open-source, developer]
46 + tier: B
47 + aliases: [eclipse foundation]
48 + products:
49 + - { name: Eclipse IDE, type: software, aliases: [eclipse ide] }
50 + - { name: Jakarta EE, type: software, aliases: [jakarta ee] }
51 + discover: { rss: true }
52 + sensors:
53 + - { name: newsroom feed, url: "https://newsroom.eclipse.org/rss.xml", type: RSS, connector: rss, tier: B }
54 + - { name: blog feed, url: "https://blogs.eclipse.org/blog/feed", type: RSS, connector: rss, tier: C }
55 + - id: openjs
56 + name: OpenJS Foundation
57 + domain: openjsf.org
58 + categories: [open-source, developer]
59 + tier: C
60 + aliases: [openjs foundation, openjsf]
61 + discover: { rss: true, sitemap: true, pages: true }
62 + notes: "No feed; blog is a Next.js shell. Sitemap is the only server-side signal."
63 + sensors:
64 + - { name: sitemap, url: "https://openjsf.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
65 + - id: rust-foundation
66 + name: Rust Foundation
67 + domain: rustfoundation.org
68 + categories: [open-source, developer]
69 + tier: B
70 + aliases: [rust foundation]
71 + discover: { rss: true }
72 + sensors:
73 + - { name: news feed, url: "https://rustfoundation.org/feed/", type: RSS, connector: rss, tier: B }
74 + - id: openssf
75 + name: Open Source Security Foundation
76 + domain: openssf.org
77 + categories: [open-source, developer, cyber]
78 + tier: B
79 + aliases: [openssf, open source security foundation]
80 + products:
81 + - { name: Sigstore, type: software }
82 + - { name: OpenSSF Scorecard, type: software, aliases: [scorecard] }
83 + discover: { rss: true }
84 + sensors:
85 + - { name: blog feed, url: "https://openssf.org/feed/", type: RSS, connector: rss, tier: B }
86 + - id: python
87 + extend: true
88 + aliases: [python software foundation, psf]
89 + sensors:
90 + - { name: psf blog feed, url: "https://pyfound.blogspot.com/feeds/posts/default?max-results=25", type: ATOM, connector: rss, tier: B }
91 +
92 + # ───────────────────────── BSD ─────────────────────────
93 + - id: freebsd
94 + name: FreeBSD
95 + domain: freebsd.org
96 + homepage: https://www.freebsd.org
97 + categories: [open-source, developer, infrastructure]
98 + tier: B
99 + weight: 1.1
100 + aliases: [freebsd project, freebsd foundation]
101 + discover: { rss: true }
102 + sensors:
103 + - { name: news feed, url: "https://www.freebsd.org/news/feed.xml", type: RSS, connector: rss, tier: B }
104 + - { name: security advisories feed, url: "https://www.freebsd.org/security/feed.xml", type: RSS, connector: rss, tier: A }
105 + - id: openbsd
106 + name: OpenBSD
107 + domain: openbsd.org
108 + homepage: https://www.openbsd.org
109 + categories: [open-source, developer, infrastructure, cyber]
110 + tier: B
111 + weight: 1.1
112 + aliases: [openbsd project]
113 + discover: { rss: false, pages: true }
114 + notes: "No official feed; the per-release errata page (7.9 as of 2026-09) is server-rendered — bump the number at each release. Undeadly is the community OpenBSD Journal."
115 + sensors:
116 + - { name: errata 7.9, url: "https://www.openbsd.org/errata79.html", type: HTML, connector: http, tier: B }
117 + - { name: openbsd journal feed, url: "https://undeadly.org/cgi?action=rss", type: RSS, connector: rss, tier: C }
118 + - id: netbsd
119 + name: NetBSD
120 + domain: netbsd.org
121 + homepage: https://www.netbsd.org
122 + categories: [open-source, developer, infrastructure]
123 + tier: C
124 + aliases: [netbsd project, netbsd foundation]
125 + discover: { rss: true }
126 + sensors:
127 + - { name: news feed, url: "https://www.netbsd.org/changes/rss-netbsd.xml", type: RSS, connector: rss, tier: C }
128 +
129 + # ───────────────────────── Linux distributions ─────────────────────────
130 + - id: linux-kernel
131 + name: Linux Kernel
132 + domain: kernel.org
133 + homepage: https://www.kernel.org
134 + categories: [open-source, developer, infrastructure]
135 + tier: A
136 + weight: 1.4
137 + aliases: [linux, the linux kernel, kernel.org, linux kernel organization]
138 + discover: { rss: true }
139 + sensors:
140 + - { name: releases api, url: "https://www.kernel.org/releases.json", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: releases, keyField: version, titleTemplate: "Linux {version} ({moniker})", dateField: released.isodate, urlField: source, compareFields: [version, released.isodate, iseol] } }
141 + - { name: releases feed, url: "https://www.kernel.org/feeds/kdist.xml", type: RSS, connector: rss, tier: A }
142 + - id: debian
143 + name: Debian
144 + domain: debian.org
145 + homepage: https://www.debian.org
146 + categories: [open-source, developer, infrastructure]
147 + tier: A
148 + weight: 1.3
149 + aliases: [debian project, debian gnu/linux]
150 + discover: { rss: true }
151 + sensors:
152 + - { name: news feed, url: "https://www.debian.org/News/news", type: RSS, connector: rss, tier: A }
153 + - { name: security advisories feed, url: "https://www.debian.org/security/dsa-long", type: RSS, connector: rss, tier: S }
154 + - id: ubuntu
155 + name: Ubuntu / Canonical
156 + domain: ubuntu.com
157 + categories: [open-source, developer, infrastructure, cloud]
158 + tier: A
159 + weight: 1.3
160 + aliases: [canonical, ubuntu linux]
161 + products:
162 + - { name: Ubuntu, type: software }
163 + - { name: Snapcraft, type: software, aliases: [snap] }
164 + - { name: LXD, type: software }
165 + discover: { rss: true, status: true }
166 + sensors:
167 + - { name: blog feed, url: "https://ubuntu.com/blog/feed", type: RSS, connector: rss, tier: B }
168 + - { name: security notices feed, url: "https://ubuntu.com/security/notices/rss.xml", type: RSS, connector: rss, tier: S, config: { maxItems: 60 } }
169 + - { name: canonical blog feed, url: "https://canonical.com/blog/feed", type: RSS, connector: rss, tier: B }
170 + - id: fedora
171 + name: Fedora Project
172 + domain: fedoraproject.org
173 + categories: [open-source, developer]
174 + tier: B
175 + aliases: [fedora, fedora linux]
176 + discover: { rss: true }
177 + sensors:
178 + - { name: fedora magazine feed, url: "https://fedoramagazine.org/feed/", type: RSS, connector: rss, tier: B }
179 + - id: red-hat
180 + name: Red Hat
181 + domain: redhat.com
182 + homepage: https://www.redhat.com
183 + categories: [open-source, enterprise, cloud, infrastructure]
184 + tier: A
185 + weight: 1.3
186 + aliases: [redhat, rhel]
187 + products:
188 + - { name: Red Hat Enterprise Linux, type: software, aliases: [rhel] }
189 + - { name: OpenShift, type: software }
190 + - { name: Ansible Automation Platform, type: software }
191 + discover: { rss: true, status: true }
192 + sensors:
193 + - { name: status, url: "https://status.redhat.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
194 + - { name: blog feed, url: "https://www.redhat.com/en/rss/blog", type: RSS, connector: rss, tier: B }
195 + - id: arch-linux
196 + name: Arch Linux
197 + domain: archlinux.org
198 + categories: [open-source, developer]
199 + tier: B
200 + aliases: [arch, archlinux]
201 + discover: { rss: true }
202 + sensors:
203 + - { name: news feed, url: "https://archlinux.org/feeds/news/", type: RSS, connector: rss, tier: B }
204 + - { name: security advisories feed, url: "https://security.archlinux.org/advisory/feed.atom", type: ATOM, connector: rss, tier: A }
205 + - id: alpine
206 + name: Alpine Linux
207 + domain: alpinelinux.org
208 + categories: [open-source, developer, infrastructure]
209 + tier: B
210 + aliases: [alpine, alpine linux]
211 + discover: { rss: true }
212 + sensors:
213 + - { name: news feed, url: "https://alpinelinux.org/atom.xml", type: ATOM, connector: rss, tier: B }
214 + - id: nixos
215 + name: NixOS
216 + domain: nixos.org
217 + categories: [open-source, developer, packages]
218 + tier: B
219 + aliases: [nix, nixpkgs, nixos foundation]
220 + products:
221 + - { name: Nix, type: software }
222 + - { name: Nixpkgs, type: software }
223 + discover: { rss: true }
224 + sensors:
225 + - { name: announcements feed, url: "https://nixos.org/blog/announcements-rss.xml", type: RSS, connector: rss, tier: B }
226 + - { name: discourse announcements feed, url: "https://discourse.nixos.org/c/announcements/8.rss", type: RSS, connector: rss, tier: B }
227 + - { name: nix releases, url: "https://github.com/NixOS/nix/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: NixOS/nix, kind: releases } }
228 + - id: opensuse
229 + name: openSUSE
230 + domain: opensuse.org
231 + homepage: https://www.opensuse.org
232 + categories: [open-source, developer]
233 + tier: B
234 + aliases: [opensuse project, tumbleweed, leap]
235 + discover: { rss: true }
236 + sensors:
237 + - { name: news feed, url: "https://news.opensuse.org/feed.xml", type: RSS, connector: rss, tier: B }
238 + - id: suse
239 + name: SUSE
240 + domain: suse.com
241 + homepage: https://www.suse.com
242 + categories: [open-source, enterprise, infrastructure]
243 + tier: B
244 + aliases: [suse linux, sles]
245 + products:
246 + - { name: SUSE Linux Enterprise Server, type: software, aliases: [sles] }
247 + - { name: Rancher, type: software }
248 + discover: { rss: true }
249 + sensors:
250 + - { name: blog feed, url: "https://www.suse.com/c/feed/", type: RSS, connector: rss, tier: B }
251 +
252 + # ───────────────────────── Desktop environments ─────────────────────────
253 + - id: gnome
254 + name: GNOME
255 + domain: gnome.org
256 + homepage: https://www.gnome.org
257 + categories: [open-source, developer]
258 + tier: C
259 + aliases: [gnome foundation, gnome project]
260 + discover: { rss: true, sitemap: true }
261 + notes: "Foundation site has no feed; Planet GNOME aggregates developer blogs."
262 + sensors:
263 + - { name: planet gnome feed, url: "https://planet.gnome.org/rss20.xml", type: RSS, connector: rss, tier: C, config: { maxItems: 60 } }
264 + - id: kde
265 + name: KDE
266 + domain: kde.org
267 + categories: [open-source, developer]
268 + tier: B
269 + aliases: [kde community, kde e.v., plasma]
270 + products:
271 + - { name: KDE Plasma, type: software, aliases: [plasma] }
272 + discover: { rss: true }
273 + sensors:
274 + - { name: announcements feed, url: "https://kde.org/announcements/index.xml", type: RSS, connector: rss, tier: B }
275 + - { name: news feed, url: "https://kde.org/index.xml", type: RSS, connector: rss, tier: B }
276 +
277 + # ───────────────────────── Core toolchain & libraries ─────────────────────────
278 + - id: git
279 + name: Git
280 + domain: git-scm.com
281 + categories: [open-source, developer]
282 + tier: B
283 + weight: 1.2
284 + aliases: [git scm]
285 + discover: { rss: true }
286 + sensors:
287 + - { name: tags, url: "https://github.com/git/git/tags.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: git/git, kind: tags } }
288 + - id: curl
289 + name: curl
290 + domain: curl.se
291 + categories: [open-source, developer, infrastructure, cyber]
292 + tier: B
293 + weight: 1.2
294 + aliases: [libcurl, curl project]
295 + discover: { rss: true }
296 + sensors:
297 + - { name: releases, url: "https://github.com/curl/curl/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: curl/curl, kind: releases } }
298 + - { name: vulnerabilities api, url: "https://curl.se/docs/vuln.json", type: REST_API, connector: jsonlist, tier: A, config: { keyField: id, titleTemplate: "{id}: {summary}", urlField: database_specific.www, dateField: published, summaryField: details, compareFields: [summary, database_specific.severity], maxItems: 100 } }
299 + - { name: daniel stenberg blog feed, url: "https://daniel.haxx.se/blog/feed/", type: RSS, connector: rss, tier: C }
300 + - id: openssl
301 + name: OpenSSL
302 + domain: openssl-library.org
303 + categories: [open-source, developer, infrastructure, cyber]
304 + tier: A
305 + weight: 1.3
306 + aliases: [openssl project, openssl library]
307 + discover: { rss: true }
308 + sensors:
309 + - { name: releases, url: "https://github.com/openssl/openssl/releases.atom", type: GITHUB_RELEASE, connector: github, tier: A, config: { repo: openssl/openssl, kind: releases } }
310 + - { name: news feed, url: "https://openssl-library.org/news/index.xml", type: RSS, connector: rss, tier: A, config: { maxItems: 50 } }
311 + - id: openssh
312 + name: OpenSSH
313 + domain: openssh.com
314 + homepage: https://www.openssh.com
315 + categories: [open-source, developer, infrastructure, cyber]
316 + tier: A
317 + weight: 1.2
318 + aliases: [openssh portable]
319 + discover: { rss: false, pages: true }
320 + sensors:
321 + - { name: portable tags, url: "https://github.com/openssh/openssh-portable/tags.atom", type: GITHUB_RELEASE, connector: github, tier: A, config: { repo: openssh/openssh-portable, kind: tags } }
322 + - { name: release notes, url: "https://www.openssh.org/releasenotes.html", type: HTML, connector: http, tier: B }
323 + - id: llvm
324 + name: LLVM Project
325 + domain: llvm.org
326 + categories: [open-source, developer]
327 + tier: B
328 + weight: 1.1
329 + aliases: [llvm, clang]
330 + products:
331 + - { name: Clang, type: software }
332 + - { name: LLDB, type: software }
333 + discover: { rss: true }
334 + sensors:
335 + - { name: releases, url: "https://github.com/llvm/llvm-project/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: llvm/llvm-project, kind: releases } }
336 + - { name: discourse announcements feed, url: "https://discourse.llvm.org/c/announce/46.rss", type: RSS, connector: rss, tier: B }
337 + - id: gcc
338 + name: GCC
339 + domain: gcc.gnu.org
340 + categories: [open-source, developer]
341 + tier: C
342 + aliases: [gnu compiler collection, gnu gcc]
343 + discover: { rss: false, pages: true }
344 + notes: "No feed; the gcc-mirror tags feed is dominated by basepoints. Releases page is server-rendered."
345 + sensors:
346 + - { name: releases page, url: "https://gcc.gnu.org/releases.html", type: HTML, connector: http, tier: C }
347 +
348 + # ───────────────────────── Web frameworks ─────────────────────────
349 + - id: react
350 + name: React
351 + domain: react.dev
352 + categories: [open-source, developer]
353 + tier: A
354 + weight: 1.3
355 + aliases: [reactjs, react.js]
356 + discover: { rss: true }
357 + sensors:
358 + - { name: blog feed, url: "https://react.dev/rss.xml", type: RSS, connector: rss, tier: A }
359 + - { name: releases, url: "https://github.com/react/react/releases.atom", type: GITHUB_RELEASE, connector: github, tier: A, config: { repo: react/react, kind: releases } }
360 + - id: nextjs
361 + name: Next.js
362 + domain: nextjs.org
363 + categories: [open-source, developer]
364 + tier: A
365 + weight: 1.2
366 + aliases: [next.js, next js, nextjs]
367 + llm: false
368 + discover: { rss: true }
369 + notes: "Releases feed is dominated by daily canaries — heuristics only."
370 + sensors:
371 + - { name: blog feed, url: "https://nextjs.org/feed.xml", type: RSS, connector: rss, tier: A }
372 + - { name: releases, url: "https://github.com/vercel/next.js/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: vercel/next.js, kind: releases } }
373 + - id: vue
374 + name: Vue.js
375 + domain: vuejs.org
376 + categories: [open-source, developer]
377 + tier: B
378 + weight: 1.1
379 + aliases: [vue, vuejs]
380 + discover: { rss: true }
381 + sensors:
382 + - { name: blog feed, url: "https://blog.vuejs.org/feed.rss", type: RSS, connector: rss, tier: B }
383 + - { name: releases, url: "https://github.com/vuejs/core/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: vuejs/core, kind: releases } }
384 + - id: angular
385 + name: Angular
386 + domain: angular.dev
387 + categories: [open-source, developer]
388 + tier: B
389 + weight: 1.1
390 + aliases: [angularjs]
391 + discover: { rss: true }
392 + sensors:
393 + - { name: blog feed, url: "https://blog.angular.dev/feed", type: RSS, connector: rss, tier: B }
394 + - { name: releases, url: "https://github.com/angular/angular/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: angular/angular, kind: releases } }
395 + - id: svelte
396 + name: Svelte
397 + domain: svelte.dev
398 + categories: [open-source, developer]
399 + tier: B
400 + aliases: [sveltekit, svelte kit]
401 + llm: false
402 + discover: { rss: true }
403 + notes: "Monorepo releases feed mixes every package — heuristics only."
404 + sensors:
405 + - { name: blog feed, url: "https://svelte.dev/blog/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 40 } }
406 + - { name: releases, url: "https://github.com/sveltejs/svelte/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: sveltejs/svelte, kind: releases } }
407 + - id: astro
408 + name: Astro
409 + domain: astro.build
410 + categories: [open-source, developer]
411 + tier: B
412 + aliases: [astro build, withastro]
413 + llm: false
414 + discover: { rss: true }
415 + sensors:
416 + - { name: blog feed, url: "https://astro.build/rss.xml", type: RSS, connector: rss, tier: B }
417 + - { name: releases, url: "https://github.com/withastro/astro/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: withastro/astro, kind: releases } }
418 + - id: django
419 + name: Django
420 + domain: djangoproject.com
421 + homepage: https://www.djangoproject.com
422 + categories: [open-source, developer]
423 + tier: B
424 + weight: 1.1
425 + aliases: [django software foundation, dsf]
426 + discover: { rss: true }
427 + sensors:
428 + - { name: weblog feed, url: "https://www.djangoproject.com/rss/weblog/", type: RSS, connector: rss, tier: A }
429 + - { name: tags, url: "https://github.com/django/django/tags.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: django/django, kind: tags } }
430 + - id: flask
431 + name: Flask / Pallets
432 + domain: palletsprojects.com
433 + categories: [open-source, developer]
434 + tier: B
435 + aliases: [pallets, pallets projects, werkzeug, jinja]
436 + products:
437 + - { name: Werkzeug, type: software }
438 + - { name: Jinja, type: software }
439 + discover: { rss: true }
440 + sensors:
441 + - { name: blog feed, url: "https://palletsprojects.com/blog/feed.xml", type: ATOM, connector: rss, tier: B }
442 + - { name: releases, url: "https://github.com/pallets/flask/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: pallets/flask, kind: releases } }
443 + - id: fastapi
444 + name: FastAPI
445 + domain: fastapi.tiangolo.com
446 + categories: [open-source, developer]
447 + tier: B
448 + aliases: [fast api]
449 + discover: { rss: false }
450 + sensors:
451 + - { name: releases, url: "https://github.com/fastapi/fastapi/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: fastapi/fastapi, kind: releases } }
452 + - id: rails
453 + name: Ruby on Rails
454 + domain: rubyonrails.org
455 + categories: [open-source, developer]
456 + tier: B
457 + weight: 1.1
458 + aliases: [rails, ror]
459 + discover: { rss: true }
460 + sensors:
461 + - { name: blog feed, url: "https://rubyonrails.org/feed.xml", type: ATOM, connector: rss, tier: B }
462 + - { name: releases, url: "https://github.com/rails/rails/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: rails/rails, kind: releases } }
463 + - id: laravel
464 + name: Laravel
465 + domain: laravel.com
466 + categories: [open-source, developer]
467 + tier: B
468 + aliases: [laravel framework]
469 + discover: { rss: true }
470 + sensors:
471 + - { name: blog feed, url: "https://laravel.com/feed", type: RSS, connector: rss, tier: B }
472 + - { name: framework releases, url: "https://github.com/laravel/framework/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: laravel/framework, kind: releases } }
473 + - id: spring
474 + name: Spring
475 + domain: spring.io
476 + categories: [open-source, developer, enterprise]
477 + tier: B
478 + weight: 1.1
479 + aliases: [spring framework, spring boot, pivotal spring]
480 + products:
481 + - { name: Spring Boot, type: software }
482 + - { name: Spring Framework, type: software }
483 + discover: { rss: true }
484 + sensors:
485 + - { name: blog feed, url: "https://spring.io/blog.atom", type: RSS, connector: rss, tier: B }
486 + - { name: spring boot releases, url: "https://github.com/spring-projects/spring-boot/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: spring-projects/spring-boot, kind: releases } }
487 +
488 + # ───────────────────────── Languages & runtimes ─────────────────────────
489 + - id: dotnet
490 + name: .NET
491 + domain: dotnet.microsoft.com
492 + categories: [open-source, developer, enterprise]
493 + tier: A
494 + weight: 1.2
495 + aliases: [dotnet, .net core, asp.net, c#]
496 + products:
497 + - { name: ASP.NET Core, type: software, aliases: [asp.net] }
498 + - { name: C#, type: software, aliases: [csharp] }
499 + discover: { rss: true }
500 + sensors:
501 + - { name: releases index api, url: "https://builds.dotnet.microsoft.com/dotnet/release-metadata/releases-index.json", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: releases-index, keyField: channel-version, titleTemplate: ".NET {channel-version} → {latest-release} ({support-phase})", dateField: latest-release-date, urlField: releases.json, compareFields: [latest-release, latest-release-date, support-phase, security] } }
502 + - { name: dotnet blog feed, url: "https://devblogs.microsoft.com/dotnet/feed/", type: RSS, connector: rss, tier: B }
503 + - { name: runtime releases, url: "https://github.com/dotnet/runtime/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: dotnet/runtime, kind: releases } }
504 + - id: typescript
505 + name: TypeScript
506 + domain: typescriptlang.org
507 + homepage: https://www.typescriptlang.org
508 + categories: [open-source, developer]
509 + tier: A
510 + weight: 1.2
511 + aliases: [ts, typescript language]
512 + discover: { rss: true }
513 + sensors:
514 + - { name: blog feed, url: "https://devblogs.microsoft.com/typescript/feed/", type: RSS, connector: rss, tier: A }
515 + - { name: releases, url: "https://github.com/microsoft/TypeScript/releases.atom", type: GITHUB_RELEASE, connector: github, tier: A, config: { repo: microsoft/TypeScript, kind: releases } }
516 + - id: kotlin
517 + name: Kotlin
518 + domain: kotlinlang.org
519 + categories: [open-source, developer]
520 + tier: B
521 + weight: 1.1
522 + aliases: [kotlin language, kotlin foundation]
523 + discover: { rss: true }
524 + notes: "The GitHub releases feed is dominated by dev builds; the Kotlin blog carries the real releases."
525 + sensors:
526 + - { name: blog feed, url: "https://blog.jetbrains.com/kotlin/feed/", type: RSS, connector: rss, tier: B }
527 + - id: jetbrains
528 + name: JetBrains
529 + domain: jetbrains.com
530 + homepage: https://www.jetbrains.com
531 + categories: [developer, technology]
532 + tier: B
533 + weight: 1.1
534 + aliases: [intellij, jetbrains ides]
535 + products:
536 + - { name: IntelliJ IDEA, type: software, aliases: [intellij] }
537 + - { name: PyCharm, type: software }
538 + - { name: WebStorm, type: software }
539 + - { name: JetBrains AI Assistant, type: product, aliases: [junie] }
540 + discover: { rss: true, status: true }
541 + sensors:
542 + - { name: blog feed, url: "https://blog.jetbrains.com/feed/", type: RSS, connector: rss, tier: B }
543 + - id: swift
544 + name: Swift.org
545 + domain: swift.org
546 + homepage: https://www.swift.org
547 + categories: [open-source, developer]
548 + tier: B
549 + weight: 1.1
550 + aliases: [swift language, swift programming language]
551 + discover: { rss: true }
552 + notes: "GitHub releases feed is flooded by nightly development snapshots; the swift.org feed announces releases."
553 + sensors:
554 + - { name: blog feed, url: "https://www.swift.org/atom.xml", type: ATOM, connector: rss, tier: B }
555 + - id: deno
556 + name: Deno
557 + domain: deno.com
558 + categories: [open-source, developer, cloud]
559 + tier: B
560 + aliases: [deno land, deno deploy]
561 + products:
562 + - { name: Deno Deploy, type: service }
563 + discover: { rss: true, status: true }
564 + sensors:
565 + - { name: blog feed, url: "https://deno.com/feed", type: ATOM, connector: rss, tier: B }
566 + - { name: releases, url: "https://github.com/denoland/deno/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: denoland/deno, kind: releases } }
567 + - id: bun
568 + name: Bun
569 + domain: bun.sh
570 + categories: [open-source, developer]
571 + tier: B
572 + aliases: [bun runtime, oven]
573 + discover: { rss: true }
574 + sensors:
575 + - { name: blog feed, url: "https://bun.sh/rss.xml", type: RSS, connector: rss, tier: B }
576 + - { name: releases, url: "https://github.com/oven-sh/bun/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: oven-sh/bun, kind: releases } }
577 + - id: zig
578 + name: Zig
579 + domain: ziglang.org
580 + categories: [open-source, developer]
581 + tier: C
582 + aliases: [zig language, zig software foundation]
583 + discover: { rss: true }
584 + sensors:
585 + - { name: news feed, url: "https://ziglang.org/news/index.xml", type: RSS, connector: rss, tier: C }
586 + - { name: tags, url: "https://github.com/ziglang/zig/tags.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: ziglang/zig, kind: tags } }
587 + - id: julia
588 + name: Julia
589 + domain: julialang.org
590 + categories: [open-source, developer, science]
591 + tier: C
592 + aliases: [julia language, julialang]
593 + discover: { rss: true }
594 + sensors:
595 + - { name: blog feed, url: "https://julialang.org/feed.xml", type: RSS, connector: rss, tier: C }
596 + - { name: releases, url: "https://github.com/JuliaLang/julia/releases.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: JuliaLang/julia, kind: releases } }
597 + - id: r-project
598 + name: R Project
599 + domain: r-project.org
600 + homepage: https://www.r-project.org
601 + categories: [open-source, developer, statistics, science]
602 + tier: C
603 + aliases: [r, r language, r foundation, cran]
604 + discover: { rss: true }
605 + sensors:
606 + - { name: blog feed, url: "https://blog.r-project.org/index.xml", type: RSS, connector: rss, tier: C }
607 +
608 + # ───────────────────────── AI / ML / data science ─────────────────────────
609 + - id: jupyter
610 + name: Project Jupyter
611 + domain: jupyter.org
612 + categories: [open-source, developer, ai, science]
613 + tier: B
614 + aliases: [jupyter, jupyterlab, jupyter notebook]
615 + products:
616 + - { name: JupyterLab, type: software }
617 + discover: { rss: true }
618 + sensors:
619 + - { name: blog feed, url: "https://blog.jupyter.org/feed", type: RSS, connector: rss, tier: B }
620 + - { name: jupyterlab tags, url: "https://github.com/jupyterlab/jupyterlab/tags.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: jupyterlab/jupyterlab, kind: tags } }
621 + - { name: notebook releases, url: "https://github.com/jupyter/notebook/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: jupyter/notebook, kind: releases } }
622 + - id: pytorch
623 + name: PyTorch
624 + domain: pytorch.org
625 + categories: [open-source, developer, ai]
626 + tier: A
627 + weight: 1.3
628 + aliases: [pytorch foundation, torch]
629 + discover: { rss: true }
630 + notes: "GitHub releases feed is polluted by viable/strict CI tags; the blog announces releases."
631 + sensors:
632 + - { name: blog feed, url: "https://pytorch.org/blog/feed/", type: RSS, connector: rss, tier: A }
633 + - id: tensorflow
634 + name: TensorFlow
635 + domain: tensorflow.org
636 + homepage: https://www.tensorflow.org
637 + categories: [open-source, developer, ai]
638 + tier: B
639 + weight: 1.1
640 + aliases: [tf, keras]
641 + discover: { rss: true }
642 + sensors:
643 + - { name: blog feed, url: "https://blog.tensorflow.org/feeds/posts/default?max-results=25", type: ATOM, connector: rss, tier: B }
644 + - { name: releases, url: "https://github.com/tensorflow/tensorflow/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: tensorflow/tensorflow, kind: releases } }
645 + - id: jax
646 + name: JAX
647 + domain: jax.dev
648 + homepage: https://docs.jax.dev
649 + categories: [open-source, developer, ai]
650 + tier: B
651 + aliases: [jax ml, google jax]
652 + discover: { rss: false }
653 + sensors:
654 + - { name: releases, url: "https://github.com/jax-ml/jax/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: jax-ml/jax, kind: releases } }
655 + - { name: changelog, url: "https://docs.jax.dev/en/latest/changelog.html", type: HTML, connector: http, tier: B }
656 + - id: langchain
657 + name: LangChain
658 + domain: langchain.com
659 + homepage: https://www.langchain.com
660 + categories: [open-source, developer, ai]
661 + tier: B
662 + weight: 1.1
663 + aliases: [langgraph, langsmith]
664 + products:
665 + - { name: LangGraph, type: software }
666 + - { name: LangSmith, type: service }
667 + llm: false
668 + discover: { rss: true, status: true }
669 + notes: "Monorepo releases feed publishes every package tag — heuristics only."
670 + sensors:
671 + - { name: blog feed, url: "https://www.langchain.com/blog/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 40 } }
672 + - { name: releases, url: "https://github.com/langchain-ai/langchain/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: langchain-ai/langchain, kind: releases } }
673 + - { name: langsmith pricing, url: "https://www.langchain.com/pricing", type: HTML, connector: http, tier: C }
674 + - id: vllm
675 + name: vLLM
676 + domain: vllm.ai
677 + categories: [open-source, developer, ai]
678 + tier: B
679 + aliases: [vllm project]
680 + discover: { rss: true }
681 + notes: "Blog has no feed (Next.js)."
682 + sensors:
683 + - { name: releases, url: "https://github.com/vllm-project/vllm/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: vllm-project/vllm, kind: releases } }
684 + - id: ollama
685 + name: Ollama
686 + domain: ollama.com
687 + categories: [open-source, developer, ai]
688 + tier: B
689 + weight: 1.1
690 + discover: { rss: true, pages: true }
691 + notes: "Blog has no feed; the blog index is server-rendered."
692 + sensors:
693 + - { name: releases, url: "https://github.com/ollama/ollama/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: ollama/ollama, kind: releases } }
694 + - { name: blog index, url: "https://ollama.com/blog", type: HTML, connector: http, tier: B }
695 +
696 + # ───────────────────────── Infrastructure, DevOps, cloud native ─────────────────────────
697 + - id: ansible
698 + name: Ansible
699 + domain: ansible.com
700 + homepage: https://www.ansible.com
701 + categories: [open-source, developer, infrastructure]
702 + tier: B
703 + weight: 1.1
704 + aliases: [ansible core, ansible community]
705 + discover: { rss: true }
706 + sensors:
707 + - { name: community news feed, url: "https://forum.ansible.com/c/news/5.rss", type: RSS, connector: rss, tier: B }
708 + - { name: releases, url: "https://github.com/ansible/ansible/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: ansible/ansible, kind: releases } }
709 + - id: opentofu
710 + name: OpenTofu
711 + domain: opentofu.org
712 + categories: [open-source, developer, infrastructure, cloud]
713 + tier: B
714 + aliases: [open tofu]
715 + discover: { rss: true }
716 + sensors:
717 + - { name: blog feed, url: "https://opentofu.org/blog/rss.xml", type: RSS, connector: rss, tier: B }
718 + - { name: releases, url: "https://github.com/opentofu/opentofu/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: opentofu/opentofu, kind: releases } }
719 + - id: pulumi
720 + name: Pulumi
721 + domain: pulumi.com
722 + homepage: https://www.pulumi.com
723 + categories: [open-source, developer, infrastructure, cloud]
724 + tier: B
725 + aliases: [pulumi cloud]
726 + llm: false
727 + discover: { rss: true, status: true }
728 + notes: "Releases feed mixes pkg/ and sdk/ tags several times a week — heuristics only."
729 + sensors:
730 + - { name: status, url: "https://status.pulumi.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
731 + - { name: blog feed, url: "https://www.pulumi.com/blog/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 40 } }
732 + - { name: releases, url: "https://github.com/pulumi/pulumi/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: pulumi/pulumi, kind: releases } }
733 + - id: prometheus
734 + name: Prometheus
735 + domain: prometheus.io
736 + categories: [open-source, developer, infrastructure, cloud]
737 + tier: B
738 + weight: 1.1
739 + aliases: [prometheus monitoring]
740 + discover: { rss: true }
741 + sensors:
742 + - { name: blog feed, url: "https://prometheus.io/blog/feed.xml", type: ATOM, connector: rss, tier: B }
743 + - { name: releases, url: "https://github.com/prometheus/prometheus/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: prometheus/prometheus, kind: releases } }
744 + - id: istio
745 + name: Istio
746 + domain: istio.io
747 + categories: [open-source, developer, infrastructure, cloud]
748 + tier: B
749 + aliases: [istio service mesh]
750 + discover: { rss: true }
751 + sensors:
752 + - { name: news feed, url: "https://istio.io/latest/news/feed.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 40 } }
753 + - { name: releases, url: "https://github.com/istio/istio/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: istio/istio, kind: releases } }
754 + - id: envoy
755 + name: Envoy Proxy
756 + domain: envoyproxy.io
757 + homepage: https://www.envoyproxy.io
758 + categories: [open-source, developer, infrastructure, cloud]
759 + tier: B
760 + aliases: [envoy, envoyproxy]
761 + discover: { rss: true }
762 + notes: "Medium blog (blog.envoyproxy.io) does not resolve from the engine."
763 + sensors:
764 + - { name: releases, url: "https://github.com/envoyproxy/envoy/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: envoyproxy/envoy, kind: releases } }
765 + - id: helm
766 + name: Helm
767 + domain: helm.sh
768 + categories: [open-source, developer, infrastructure, cloud, packages]
769 + tier: B
770 + aliases: [helm charts]
771 + discover: { rss: true }
772 + sensors:
773 + - { name: blog feed, url: "https://helm.sh/blog/index.xml", type: RSS, connector: rss, tier: B }
774 + - { name: releases, url: "https://github.com/helm/helm/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: helm/helm, kind: releases } }
775 + - id: argo
776 + name: Argo Project
777 + domain: argoproj.github.io
778 + categories: [open-source, developer, infrastructure, cloud]
779 + tier: B
780 + aliases: [argo, argo cd, argocd, argo workflows]
781 + products:
782 + - { name: Argo CD, type: software, aliases: [argocd] }
783 + - { name: Argo Workflows, type: software }
784 + discover: { rss: true }
785 + sensors:
786 + - { name: blog feed, url: "https://blog.argoproj.io/feed", type: RSS, connector: rss, tier: B }
787 + - { name: argo cd releases, url: "https://github.com/argoproj/argo-cd/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: argoproj/argo-cd, kind: releases } }
788 + - id: nginx
789 + name: NGINX
790 + domain: nginx.org
791 + categories: [open-source, developer, infrastructure]
792 + tier: A
793 + weight: 1.2
794 + aliases: [nginx open source, f5 nginx]
795 + discover: { rss: true }
796 + sensors:
797 + - { name: releases, url: "https://github.com/nginx/nginx/releases.atom", type: GITHUB_RELEASE, connector: github, tier: A, config: { repo: nginx/nginx, kind: releases } }
798 + - { name: blog feed, url: "https://blog.nginx.org/feed", type: RSS, connector: rss, tier: B }
799 + - id: apache-httpd
800 + name: Apache HTTP Server
801 + domain: httpd.apache.org
802 + categories: [open-source, developer, infrastructure, cyber]
803 + tier: A
804 + weight: 1.1
805 + aliases: [apache httpd, httpd, apache web server]
806 + discover: { rss: false, pages: true }
807 + sensors:
808 + - { name: tags, url: "https://github.com/apache/httpd/tags.atom", type: GITHUB_RELEASE, connector: github, tier: A, config: { repo: apache/httpd, kind: tags } }
809 + - { name: 2.4 vulnerabilities, url: "https://httpd.apache.org/security/vulnerabilities_24.html", type: HTML, connector: http, tier: A }
810 + - id: caddy
811 + name: Caddy
812 + domain: caddyserver.com
813 + categories: [open-source, developer, infrastructure]
814 + tier: B
815 + aliases: [caddy server, caddy web server]
816 + discover: { rss: true }
817 + sensors:
818 + - { name: releases, url: "https://github.com/caddyserver/caddy/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: caddyserver/caddy, kind: releases } }
819 + - id: haproxy
820 + name: HAProxy
821 + domain: haproxy.org
822 + homepage: https://www.haproxy.org
823 + categories: [open-source, developer, infrastructure]
824 + tier: B
825 + aliases: [haproxy technologies]
826 + discover: { rss: true }
827 + sensors:
828 + - { name: tags, url: "https://github.com/haproxy/haproxy/tags.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: haproxy/haproxy, kind: tags } }
829 + - { name: haproxy technologies blog feed, url: "https://www.haproxy.com/feed", type: RSS, connector: rss, tier: C }
830 +
831 + # ───────────────────────── Databases & data platforms ─────────────────────────
832 + - id: sqlite
833 + name: SQLite
834 + domain: sqlite.org
835 + homepage: https://www.sqlite.org
836 + categories: [open-source, developer, infrastructure]
837 + tier: B
838 + weight: 1.2
839 + aliases: [sqlite3]
840 + discover: { rss: false, pages: true }
841 + notes: "No feed; GitHub mirror tags are dominated by bug-* branches. Server-rendered news/changes pages instead."
842 + sensors:
843 + - { name: news page, url: "https://www.sqlite.org/news.html", type: HTML, connector: http, tier: B }
844 + - { name: release history, url: "https://www.sqlite.org/changes.html", type: HTML, connector: http, tier: C }
845 + - id: mariadb
846 + name: MariaDB
847 + domain: mariadb.org
848 + categories: [open-source, developer, infrastructure]
849 + tier: B
850 + weight: 1.1
851 + aliases: [mariadb foundation, mariadb server]
852 + discover: { rss: true }
853 + sensors:
854 + - { name: foundation blog feed, url: "https://mariadb.org/feed/", type: RSS, connector: rss, tier: B }
855 + - { name: server tags, url: "https://github.com/MariaDB/server/tags.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: MariaDB/server, kind: tags } }
856 + - id: clickhouse
857 + name: ClickHouse
858 + domain: clickhouse.com
859 + categories: [open-source, developer, infrastructure, cloud]
860 + tier: B
861 + weight: 1.1
862 + aliases: [clickhouse cloud]
863 + discover: { rss: true, status: true }
864 + sensors:
865 + - { name: status, url: "https://status.clickhouse.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
866 + - { name: blog feed, url: "https://clickhouse.com/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 40 } }
867 + - { name: releases, url: "https://github.com/ClickHouse/ClickHouse/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: ClickHouse/ClickHouse, kind: releases } }
868 + - id: duckdb
869 + name: DuckDB
870 + domain: duckdb.org
871 + categories: [open-source, developer, infrastructure]
872 + tier: B
873 + weight: 1.1
874 + aliases: [duckdb labs, duckdb foundation, motherduck]
875 + discover: { rss: true }
876 + sensors:
877 + - { name: blog feed, url: "https://duckdb.org/feed.xml", type: ATOM, connector: rss, tier: B }
878 + - { name: releases, url: "https://github.com/duckdb/duckdb/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: duckdb/duckdb, kind: releases } }
879 + - id: neo4j
880 + name: Neo4j
881 + domain: neo4j.com
882 + categories: [open-source, developer, infrastructure, enterprise]
883 + tier: B
884 + aliases: [neo4j aura, cypher]
885 + discover: { rss: true, status: true }
886 + sensors:
887 + - { name: blog feed, url: "https://neo4j.com/blog/feed/", type: RSS, connector: rss, tier: B, config: { maxItems: 40 } }
888 + - { name: tags, url: "https://github.com/neo4j/neo4j/tags.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: neo4j/neo4j, kind: tags } }
889 + - id: cassandra
890 + name: Apache Cassandra
891 + domain: cassandra.apache.org
892 + categories: [open-source, developer, infrastructure]
893 + tier: B
894 + aliases: [cassandra]
895 + discover: { rss: false, pages: true }
896 + sensors:
897 + - { name: tags, url: "https://github.com/apache/cassandra/tags.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: apache/cassandra, kind: tags } }
898 + - { name: blog index, url: "https://cassandra.apache.org/_/blog.html", type: HTML, connector: http, tier: C }
899 + - id: kafka
900 + name: Apache Kafka
901 + domain: kafka.apache.org
902 + categories: [open-source, developer, infrastructure]
903 + tier: B
904 + weight: 1.1
905 + aliases: [kafka]
906 + discover: { rss: false, pages: true }
907 + sensors:
908 + - { name: releases, url: "https://github.com/apache/kafka/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: apache/kafka, kind: releases } }
909 + - { name: blog index, url: "https://kafka.apache.org/blog", type: HTML, connector: http, tier: C }
910 + - id: rabbitmq
911 + name: RabbitMQ
912 + domain: rabbitmq.com
913 + homepage: https://www.rabbitmq.com
914 + categories: [open-source, developer, infrastructure]
915 + tier: B
916 + aliases: [rabbit mq]
917 + discover: { rss: true }
918 + sensors:
919 + - { name: blog feed, url: "https://www.rabbitmq.com/blog/rss.xml", type: RSS, connector: rss, tier: B }
920 + - { name: server releases, url: "https://github.com/rabbitmq/rabbitmq-server/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: rabbitmq/rabbitmq-server, kind: releases } }
921 + - id: airflow
922 + name: Apache Airflow
923 + domain: airflow.apache.org
924 + categories: [open-source, developer, infrastructure]
925 + tier: B
926 + aliases: [airflow]
927 + llm: false
928 + discover: { rss: false, pages: true }
929 + notes: "Releases feed is dominated by provider packages — heuristics only."
930 + sensors:
931 + - { name: releases, url: "https://github.com/apache/airflow/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: apache/airflow, kind: releases } }
932 + - { name: blog index, url: "https://airflow.apache.org/blog/", type: HTML, connector: http, tier: C }
933 + - id: dbt
934 + name: dbt Labs
935 + domain: getdbt.com
936 + homepage: https://www.getdbt.com
937 + categories: [open-source, developer, infrastructure, enterprise]
938 + tier: B
939 + aliases: [dbt, dbt core, dbt cloud]
940 + products:
941 + - { name: dbt Core, type: software }
942 + - { name: dbt Cloud, type: service }
943 + discover: { rss: true, status: true }
944 + sensors:
945 + - { name: status, url: "https://status.getdbt.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
946 + - { name: blog feed, url: "https://www.getdbt.com/blog/feed.xml", type: RSS, connector: rss, tier: B }
947 + - { name: dbt core releases, url: "https://github.com/dbt-labs/dbt-core/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: dbt-labs/dbt-core, kind: releases } }
948 +
949 + # ───────────────────────── Applications & CMS ─────────────────────────
950 + - id: blender
951 + name: Blender
952 + domain: blender.org
953 + homepage: https://www.blender.org
954 + categories: [open-source, developer, entertainment]
955 + tier: B
956 + aliases: [blender foundation]
957 + discover: { rss: true }
958 + sensors:
959 + - { name: news feed, url: "https://www.blender.org/feed/", type: RSS, connector: rss, tier: B }
960 + - { name: tags, url: "https://github.com/blender/blender/tags.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: blender/blender, kind: tags } }
961 + - id: vlc
962 + name: VideoLAN / VLC
963 + domain: videolan.org
964 + homepage: https://www.videolan.org
965 + categories: [open-source, developer, consumer-tech]
966 + tier: C
967 + aliases: [videolan, vlc media player]
968 + discover: { rss: false }
969 + notes: "videolan.org answers 418 to bots; releases are followed on the project GitLab tags feed."
970 + sensors:
971 + - { name: vlc tags, url: "https://code.videolan.org/videolan/vlc/-/tags?format=atom", type: ATOM, connector: rss, tier: C }
972 + - id: libreoffice
973 + name: LibreOffice / The Document Foundation
974 + domain: libreoffice.org
975 + homepage: https://www.libreoffice.org
976 + categories: [open-source, developer, consumer-tech]
977 + tier: B
978 + aliases: [the document foundation, tdf, libre office]
979 + discover: { rss: true }
980 + sensors:
981 + - { name: tdf blog feed, url: "https://blog.documentfoundation.org/feed/", type: RSS, connector: rss, tier: B }
982 + - { name: core tags, url: "https://github.com/LibreOffice/core/tags.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: LibreOffice/core, kind: tags } }
983 + - id: wordpress
984 + name: WordPress
985 + domain: wordpress.org
986 + categories: [open-source, developer, internet]
987 + tier: A
988 + weight: 1.3
989 + aliases: [wordpress.org, wp]
990 + discover: { rss: true }
991 + sensors:
992 + - { name: news feed, url: "https://wordpress.org/news/feed/", type: RSS, connector: rss, tier: A }
993 + - { name: releases feed, url: "https://wordpress.org/news/category/releases/feed/", type: RSS, connector: rss, tier: A }
994 + - { name: tags, url: "https://github.com/WordPress/WordPress/tags.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: WordPress/WordPress, kind: tags } }
995 + - id: drupal
996 + name: Drupal
997 + domain: drupal.org
998 + homepage: https://www.drupal.org
999 + categories: [open-source, developer, internet]
1000 + tier: B
1001 + weight: 1.1
1002 + aliases: [drupal association]
1003 + discover: { rss: true }
1004 + sensors:
1005 + - { name: security advisories feed, url: "https://www.drupal.org/security/all/rss.xml", type: RSS, connector: rss, tier: A }
1006 + - { name: news feed, url: "https://www.drupal.org/rss.xml", type: RSS, connector: rss, tier: B }
1007 + - { name: tags, url: "https://github.com/drupal/drupal/tags.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: drupal/drupal, kind: tags } }
1008 + - id: joomla
1009 + name: Joomla
1010 + domain: joomla.org
1011 + homepage: https://www.joomla.org
1012 + categories: [open-source, developer, internet]
1013 + tier: B
1014 + aliases: [joomla!, open source matters]
1015 + discover: { rss: true }
1016 + sensors:
1017 + - { name: announcements feed, url: "https://www.joomla.org/announcements.feed?type=rss", type: RSS, connector: rss, tier: B }
1018 + - { name: security centre feed, url: "https://developer.joomla.org/security-centre.feed?type=rss", type: RSS, connector: rss, tier: A }
1019 + - { name: releases, url: "https://github.com/joomla/joomla-cms/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: joomla/joomla-cms, kind: releases } }
1020 + - id: ghost
1021 + name: Ghost
1022 + domain: ghost.org
1023 + categories: [open-source, developer, internet, media]
1024 + tier: B
1025 + aliases: [ghost cms, ghost foundation]
1026 + discover: { rss: true }
1027 + sensors:
1028 + - { name: changelog feed, url: "https://ghost.org/changelog/rss/", type: RSS, connector: rss, tier: B }
1029 + - { name: releases, url: "https://github.com/TryGhost/Ghost/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: TryGhost/Ghost, kind: releases } }
1030 + - id: matrix
1031 + name: Matrix.org
1032 + domain: matrix.org
1033 + categories: [open-source, developer, internet, standards]
1034 + tier: B
1035 + aliases: [matrix protocol, matrix.org foundation, element, synapse]
1036 + products:
1037 + - { name: Synapse, type: software }
1038 + - { name: Element, type: product }
1039 + discover: { rss: true }
1040 + sensors:
1041 + - { name: blog feed, url: "https://matrix.org/atom.xml", type: ATOM, connector: rss, tier: B, config: { maxItems: 40 } }
1042 + - { name: synapse releases, url: "https://github.com/element-hq/synapse/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: element-hq/synapse, kind: releases } }
1043 + - id: signal
1044 + name: Signal
1045 + domain: signal.org
1046 + categories: [open-source, consumer-tech, cyber]
1047 + tier: B
1048 + weight: 1.2
1049 + aliases: [signal messenger, signal foundation]
1050 + discover: { rss: true }
1051 + sensors:
1052 + - { name: blog feed, url: "https://signal.org/blog/rss.xml", type: RSS, connector: rss, tier: B }
1053 + - { name: android releases, url: "https://github.com/signalapp/Signal-Android/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: signalapp/Signal-Android, kind: releases } }
1054 + - id: tor-project
1055 + name: Tor Project
1056 + domain: torproject.org
1057 + homepage: https://www.torproject.org
1058 + categories: [open-source, cyber, internet, ngo]
1059 + tier: B
1060 + weight: 1.2
1061 + aliases: [tor, tor browser, the tor project]
1062 + products:
1063 + - { name: Tor Browser, type: software }
1064 + discover: { rss: true }
1065 + sensors:
1066 + - { name: blog feed, url: "https://blog.torproject.org/feed.xml", type: ATOM, connector: rss, tier: B }
1067 + - { name: tor tags, url: "https://gitlab.torproject.org/tpo/core/tor/-/tags?format=atom", type: ATOM, connector: rss, tier: B }
1068 + - id: wireshark
1069 + name: Wireshark
1070 + domain: wireshark.org
1071 + homepage: https://www.wireshark.org
1072 + categories: [open-source, developer, cyber]
1073 + tier: B
1074 + aliases: [wireshark foundation]
1075 + discover: { rss: false, pages: true }
1076 + notes: "Astro site without feeds; security advisories page is server-rendered."
1077 + sensors:
1078 + - { name: tags, url: "https://github.com/wireshark/wireshark/tags.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: wireshark/wireshark, kind: tags } }
1079 + - { name: security advisories, url: "https://www.wireshark.org/security/", type: HTML, connector: http, tier: A }
1080 + - id: qemu
1081 + name: QEMU
1082 + domain: qemu.org
1083 + homepage: https://www.qemu.org
1084 + categories: [open-source, developer, infrastructure]
1085 + tier: B
1086 + aliases: [qemu project]
1087 + discover: { rss: true }
1088 + sensors:
1089 + - { name: blog feed, url: "https://www.qemu.org/feed.xml", type: ATOM, connector: rss, tier: B }
1090 + - { name: tags, url: "https://github.com/qemu/qemu/tags.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: qemu/qemu, kind: tags } }
1091 + - id: proxmox
1092 + name: Proxmox
1093 + domain: proxmox.com
1094 + homepage: https://www.proxmox.com
1095 + categories: [open-source, developer, infrastructure, enterprise]
1096 + tier: B
1097 + aliases: [proxmox ve, pve, proxmox server solutions]
1098 + products:
1099 + - { name: Proxmox VE, type: software, aliases: [pve] }
1100 + - { name: Proxmox Backup Server, type: software, aliases: [pbs] }
1101 + discover: { rss: true }
1102 + sensors:
1103 + - { name: press releases feed, url: "https://www.proxmox.com/en/about/company-details/press-releases?format=feed&type=rss", type: RSS, connector: rss, tier: B }
1104 + - { name: pve roadmap, url: "https://pve.proxmox.com/wiki/Roadmap", type: HTML, connector: http, tier: C }
1105 + - id: home-assistant
1106 + name: Home Assistant
1107 + domain: home-assistant.io
1108 + homepage: https://www.home-assistant.io
1109 + categories: [open-source, consumer-tech, developer]
1110 + tier: B
1111 + weight: 1.1
1112 + aliases: [hass, nabu casa, open home foundation]
1113 + discover: { rss: true, status: true }
1114 + sensors:
1115 + - { name: status, url: "https://status.home-assistant.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1116 + - { name: blog feed, url: "https://www.home-assistant.io/atom.xml", type: ATOM, connector: rss, tier: B }
1117 + - { name: core releases, url: "https://github.com/home-assistant/core/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: home-assistant/core, kind: releases } }
1118 + - id: obs-studio
1119 + name: OBS Studio
1120 + domain: obsproject.com
1121 + categories: [open-source, consumer-tech, media]
1122 + tier: B
1123 + aliases: [obs, obs project, open broadcaster software]
1124 + discover: { rss: true }
1125 + sensors:
1126 + - { name: blog feed, url: "https://obsproject.com/blog/rss", type: RSS, connector: rss, tier: B }
1127 + - { name: releases, url: "https://github.com/obsproject/obs-studio/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: obsproject/obs-studio, kind: releases } }
1128 +
1129 + # ───────────────────────── Developer tools & editors ─────────────────────────
1130 + - id: jenkins
1131 + name: Jenkins
1132 + domain: jenkins.io
1133 + homepage: https://www.jenkins.io
1134 + categories: [open-source, developer, infrastructure, cyber]
1135 + tier: B
1136 + weight: 1.1
1137 + aliases: [jenkins ci]
1138 + discover: { rss: true }
1139 + sensors:
1140 + - { name: security advisories feed, url: "https://www.jenkins.io/security/advisories/rss.xml", type: RSS, connector: rss, tier: A }
1141 + - { name: changelog feed, url: "https://www.jenkins.io/changelog/rss.xml", type: RSS, connector: rss, tier: B }
1142 + - { name: blog feed, url: "https://www.jenkins.io/rss.xml", type: ATOM, connector: rss, tier: B }
1143 + - id: homebrew
1144 + name: Homebrew
1145 + domain: brew.sh
1146 + categories: [open-source, developer, packages]
1147 + tier: B
1148 + aliases: [brew]
1149 + discover: { rss: true }
1150 + sensors:
1151 + - { name: blog feed, url: "https://brew.sh/atom.xml", type: ATOM, connector: rss, tier: B }
1152 + - { name: releases, url: "https://github.com/Homebrew/brew/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: Homebrew/brew, kind: releases } }
1153 + - id: neovim
1154 + name: Neovim
1155 + domain: neovim.io
1156 + categories: [open-source, developer]
1157 + tier: B
1158 + aliases: [nvim]
1159 + discover: { rss: true }
1160 + sensors:
1161 + - { name: news feed, url: "https://neovim.io/news.xml", type: RSS, connector: rss, tier: B }
1162 + - { name: releases, url: "https://github.com/neovim/neovim/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: neovim/neovim, kind: releases } }
1163 + - id: vim
1164 + name: Vim
1165 + domain: vim.org
1166 + homepage: https://www.vim.org
1167 + categories: [open-source, developer]
1168 + tier: C
1169 + aliases: [vi improved]
1170 + llm: false
1171 + discover: { rss: false }
1172 + notes: "Patch tags land several times a day — heuristics only."
1173 + sensors:
1174 + - { name: tags, url: "https://github.com/vim/vim/tags.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: vim/vim, kind: tags } }
1175 + - id: microsoft
1176 + extend: true
1177 + aliases: [vs code, visual studio code]
1178 + products:
1179 + - { name: Visual Studio Code, type: software, aliases: [vs code, vscode] }
1180 + sensors:
1181 + - { name: vs code releases, url: "https://github.com/microsoft/vscode/releases.atom", type: GITHUB_RELEASE, connector: github, tier: A, config: { repo: microsoft/vscode, kind: releases } }
1182 + - { name: vs code updates feed, url: "https://code.visualstudio.com/feed.xml", type: ATOM, connector: rss, tier: B }
1183 + - id: zed
1184 + name: Zed
1185 + domain: zed.dev
1186 + categories: [open-source, developer, ai]
1187 + tier: B
1188 + aliases: [zed editor, zed industries]
1189 + discover: { rss: true }
1190 + notes: "GitHub releases feed is flooded by nightlies; zed.dev publishes a stable-releases feed."
1191 + sensors:
1192 + - { name: stable releases feed, url: "https://zed.dev/stable-releases.rss", type: RSS, connector: rss, tier: B }
1193 + - { name: blog feed, url: "https://zed.dev/blog.rss", type: RSS, connector: rss, tier: B, config: { maxItems: 40 } }
1194 + - id: godot
1195 + name: Godot Engine
1196 + domain: godotengine.org
1197 + categories: [open-source, developer, gaming]
1198 + tier: B
1199 + weight: 1.1
1200 + aliases: [godot, godot foundation]
1201 + discover: { rss: true }
1202 + sensors:
1203 + - { name: news feed, url: "https://godotengine.org/rss.xml", type: RSS, connector: rss, tier: B }
1204 + - { name: releases, url: "https://github.com/godotengine/godot/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: godotengine/godot, kind: releases } }
1205 + - id: electron
1206 + name: Electron
1207 + domain: electronjs.org
1208 + homepage: https://www.electronjs.org
1209 + categories: [open-source, developer]
1210 + tier: B
1211 + aliases: [electronjs]
1212 + llm: false
1213 + discover: { rss: true }
1214 + notes: "Releases feed publishes nightlies daily — heuristics only."
1215 + sensors:
1216 + - { name: blog feed, url: "https://www.electronjs.org/blog/rss.xml", type: RSS, connector: rss, tier: B }
1217 + - { name: releases, url: "https://github.com/electron/electron/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: electron/electron, kind: releases } }
1218 + - id: tauri
1219 + name: Tauri
1220 + domain: tauri.app
1221 + homepage: https://v2.tauri.app
1222 + categories: [open-source, developer]
1223 + tier: C
1224 + aliases: [tauri apps]
1225 + llm: false
1226 + discover: { rss: true }
1227 + notes: "Monorepo releases feed publishes every crate/package tag — heuristics only."
1228 + sensors:
1229 + - { name: blog feed, url: "https://v2.tauri.app/blog/rss.xml", type: RSS, connector: rss, tier: C }
1230 + - { name: releases, url: "https://github.com/tauri-apps/tauri/releases.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: tauri-apps/tauri, kind: releases } }
1231 + - id: flutter
1232 + name: Flutter
1233 + domain: flutter.dev
1234 + categories: [open-source, developer]
1235 + tier: B
1236 + weight: 1.1
1237 + aliases: [flutter sdk, dart]
1238 + products:
1239 + - { name: Dart, type: software }
1240 + llm: false
1241 + discover: { rss: true }
1242 + notes: "Releases feed publishes beta cherry-picks continuously — heuristics only."
1243 + sensors:
1244 + - { name: blog feed, url: "https://medium.com/feed/flutter", type: RSS, connector: rss, tier: B }
1245 + - { name: releases, url: "https://github.com/flutter/flutter/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: flutter/flutter, kind: releases } }
1246 + - id: react-native
1247 + name: React Native
1248 + domain: reactnative.dev
1249 + categories: [open-source, developer]
1250 + tier: B
1251 + weight: 1.1
1252 + aliases: [rn]
1253 + discover: { rss: true }
1254 + sensors:
1255 + - { name: blog feed, url: "https://reactnative.dev/blog/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 40 } }
1256 + - { name: releases, url: "https://github.com/react/react-native/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: react/react-native, kind: releases } }
1257 + - id: expo
1258 + name: Expo
1259 + domain: expo.dev
1260 + categories: [open-source, developer, cloud]
1261 + tier: B
1262 + aliases: [expo go, eas]
1263 + products:
1264 + - { name: EAS, type: service, aliases: [expo application services] }
1265 + discover: { rss: true, status: true }
1266 + notes: "expo/expo has neither GitHub releases nor tags feeds; changelog + blog + status instead."
1267 + sensors:
1268 + - { name: status, url: "https://status.expo.dev/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1269 + - { name: changelog feed, url: "https://expo.dev/changelog/rss.xml", type: RSS, connector: rss, tier: B }
1270 + - { name: blog feed, url: "https://expo.dev/blog/rss.xml", type: RSS, connector: rss, tier: B }
1271 + - id: tailwind
1272 + name: Tailwind CSS
1273 + domain: tailwindcss.com
1274 + categories: [open-source, developer]
1275 + tier: B
1276 + aliases: [tailwind, tailwind labs]
1277 + discover: { rss: true }
1278 + sensors:
1279 + - { name: blog feed, url: "https://tailwindcss.com/feeds/feed.xml", type: RSS, connector: rss, tier: B }
1280 + - { name: releases, url: "https://github.com/tailwindlabs/tailwindcss/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: tailwindlabs/tailwindcss, kind: releases } }
1281 + - id: vite
1282 + name: Vite
1283 + domain: vite.dev
1284 + categories: [open-source, developer]
1285 + tier: B
1286 + aliases: [vitejs, void zero, rolldown]
1287 + llm: false
1288 + discover: { rss: true }
1289 + notes: "Monorepo releases feed mixes plugins and betas — heuristics only."
1290 + sensors:
1291 + - { name: blog feed, url: "https://vite.dev/blog.rss", type: RSS, connector: rss, tier: B }
1292 + - { name: releases, url: "https://github.com/vitejs/vite/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: vitejs/vite, kind: releases } }
1293 + - id: webpack
1294 + name: webpack
1295 + domain: webpack.js.org
1296 + categories: [open-source, developer]
1297 + tier: C
1298 + discover: { rss: true }
1299 + sensors:
1300 + - { name: blog feed, url: "https://medium.com/feed/webpack", type: RSS, connector: rss, tier: C }
1301 + - { name: releases, url: "https://github.com/webpack/webpack/releases.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: webpack/webpack, kind: releases } }
1302 + - id: esbuild
1303 + name: esbuild
1304 + domain: esbuild.github.io
1305 + categories: [open-source, developer]
1306 + tier: C
1307 + discover: { rss: false }
1308 + sensors:
1309 + - { name: releases, url: "https://github.com/evanw/esbuild/releases.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: evanw/esbuild, kind: releases } }
1310 + - id: rollup
1311 + name: Rollup
1312 + domain: rollupjs.org
1313 + categories: [open-source, developer]
1314 + tier: C
1315 + aliases: [rollup.js]
1316 + discover: { rss: false }
1317 + sensors:
1318 + - { name: releases, url: "https://github.com/rollup/rollup/releases.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: rollup/rollup, kind: releases } }
1319 + - id: babel
1320 + name: Babel
1321 + domain: babeljs.io
1322 + categories: [open-source, developer]
1323 + tier: C
1324 + aliases: [babel js]
1325 + discover: { rss: true }
1326 + sensors:
1327 + - { name: blog feed, url: "https://babeljs.io/blog/rss.xml", type: RSS, connector: rss, tier: C, config: { maxItems: 30 } }
1328 + - { name: releases, url: "https://github.com/babel/babel/releases.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: babel/babel, kind: releases } }
1329 + - id: eslint
1330 + name: ESLint
1331 + domain: eslint.org
1332 + categories: [open-source, developer]
1333 + tier: B
1334 + discover: { rss: true }
1335 + sensors:
1336 + - { name: blog feed, url: "https://eslint.org/feed.xml", type: ATOM, connector: rss, tier: B }
1337 + - { name: releases, url: "https://github.com/eslint/eslint/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: eslint/eslint, kind: releases } }
1338 + - id: prettier
1339 + name: Prettier
1340 + domain: prettier.io
1341 + categories: [open-source, developer]
1342 + tier: C
1343 + discover: { rss: true }
1344 + sensors:
1345 + - { name: blog feed, url: "https://prettier.io/blog/rss.xml", type: RSS, connector: rss, tier: C, config: { maxItems: 30 } }
1346 + - { name: releases, url: "https://github.com/prettier/prettier/releases.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: prettier/prettier, kind: releases } }
1347 + - id: pnpm
1348 + name: pnpm
1349 + domain: pnpm.io
1350 + categories: [open-source, developer, packages]
1351 + tier: B
1352 + discover: { rss: true }
1353 + sensors:
1354 + - { name: blog feed, url: "https://pnpm.io/blog/rss.xml", type: RSS, connector: rss, tier: C }
1355 + - { name: releases, url: "https://github.com/pnpm/pnpm/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: pnpm/pnpm, kind: releases } }
1356 + - id: yarn
1357 + name: Yarn
1358 + domain: yarnpkg.com
1359 + categories: [open-source, developer, packages]
1360 + tier: C
1361 + aliases: [yarn berry, yarnpkg]
1362 + discover: { rss: false }
1363 + sensors:
1364 + - { name: releases, url: "https://github.com/yarnpkg/berry/releases.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: yarnpkg/berry, kind: releases } }
1365 + - id: bazel
1366 + name: Bazel
1367 + domain: bazel.build
1368 + categories: [open-source, developer]
1369 + tier: C
1370 + aliases: [bazelbuild]
1371 + discover: { rss: true }
1372 + sensors:
1373 + - { name: blog feed, url: "https://blog.bazel.build/feed.xml", type: RSS, connector: rss, tier: C }
1374 + - { name: releases, url: "https://github.com/bazelbuild/bazel/releases.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: bazelbuild/bazel, kind: releases } }
1375 + - id: cmake
1376 + name: CMake / Kitware
1377 + domain: cmake.org
1378 + categories: [open-source, developer]
1379 + tier: C
1380 + aliases: [kitware]
1381 + discover: { rss: true }
1382 + sensors:
1383 + - { name: releases, url: "https://github.com/Kitware/CMake/releases.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: Kitware/CMake, kind: releases } }
1384 + - { name: kitware blog feed, url: "https://www.kitware.com/feed/", type: RSS, connector: rss, tier: C }
1385 + - id: gradle
1386 + name: Gradle
1387 + domain: gradle.org
1388 + categories: [open-source, developer]
1389 + tier: C
1390 + aliases: [gradle build tool, develocity]
1391 + discover: { rss: true }
1392 + notes: "blog.gradle.org has no feed in 2026."
1393 + sensors:
1394 + - { name: releases, url: "https://github.com/gradle/gradle/releases.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: gradle/gradle, kind: releases } }
1395 + - id: maven
1396 + name: Apache Maven
1397 + domain: maven.apache.org
1398 + categories: [open-source, developer, packages]
1399 + tier: C
1400 + aliases: [maven]
1401 + discover: { rss: false, pages: true }
1402 + sensors:
1403 + - { name: releases, url: "https://github.com/apache/maven/releases.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: apache/maven, kind: releases } }
1404 + - { name: release history, url: "https://maven.apache.org/docs/history.html", type: HTML, connector: http, tier: C }
added config/sources.d/11-central-banks-finance.yaml +1724 −0
@@ -0,0 +1,1724 @@
1 +# config/sources.d/11-central-banks-finance.yaml — central banks worldwide, financial regulators & supervisors,
2 +# exchanges & market infrastructure, rating agencies & index providers, major banks & asset managers, fintech &
3 +# payments, insurance. Authored 2026-09-08; every sensor below was fetched and parsed by
4 +# apps/engine/src/validate.ts (OK only). Blocked or client-rendered sites are recorded in `notes:`.
5 +# Categories: [finance] + central-bank | regulator | exchange | banking | insurance | payments.
6 +sources:
7 + # ───────────────────────── A · Central banks & monetary authorities ─────────────────────────
8 + - id: rba
9 + name: Reserve Bank of Australia
10 + domain: rba.gov.au
11 + homepage: https://www.rba.gov.au
12 + categories: [finance, central-bank, government]
13 + tier: A
14 + weight: 1.2
15 + aliases: [reserve bank of australia, rba]
16 + discover: { rss: false }
17 + sensors:
18 + - { name: media releases feed, url: "https://www.rba.gov.au/rss/rss-cb-media-releases.xml", type: RSS, connector: rss, tier: A }
19 + - { name: speeches feed, url: "https://www.rba.gov.au/rss/rss-cb-speeches.xml", type: RSS, connector: rss, tier: B }
20 + - { name: bulletin feed, url: "https://www.rba.gov.au/rss/rss-cb-bulletin.xml", type: RSS, connector: rss, tier: C }
21 + - id: rbnz
22 + name: Reserve Bank of New Zealand
23 + domain: rbnz.govt.nz
24 + homepage: https://www.rbnz.govt.nz
25 + categories: [finance, central-bank, government]
26 + tier: A
27 + aliases: [reserve bank of new zealand, te pūtea matua, rbnz]
28 + discover: { rss: false }
29 + notes: "Only /feeds/news is open; /rss and the monetary-policy/publications feeds answer 403."
30 + sensors:
31 + - { name: news feed, url: "https://www.rbnz.govt.nz/feeds/news", type: RSS, connector: rss, tier: A }
32 + - id: snb
33 + name: Swiss National Bank
34 + domain: snb.ch
35 + homepage: https://www.snb.ch/en/
36 + categories: [finance, central-bank, government]
37 + tier: A
38 + weight: 1.2
39 + aliases: [swiss national bank, schweizerische nationalbank, banque nationale suisse, snb, bns]
40 + discover: { rss: false }
41 + sensors:
42 + - { name: press releases feed, url: "https://www.snb.ch/public/rss/en/adhoc", type: RSS, connector: rss, tier: A }
43 + - { name: monetary policy feed, url: "https://www.snb.ch/public/rss/en/mopo", type: RSS, connector: rss, tier: A }
44 + - { name: news feed, url: "https://www.snb.ch/public/rss/en/news", type: RSS, connector: rss, tier: B }
45 + - id: riksbank
46 + name: Sveriges Riksbank
47 + domain: riksbank.se
48 + homepage: https://www.riksbank.se/en-gb/
49 + categories: [finance, central-bank, government]
50 + tier: A
51 + aliases: [riksbank, sveriges riksbank, riksbanken]
52 + discover: { rss: false }
53 + sensors:
54 + - { name: press releases feed, url: "https://www.riksbank.se/en-gb/rss/press-releases/", type: RSS, connector: rss, tier: A }
55 + - { name: speeches feed, url: "https://www.riksbank.se/en-gb/rss/speeches/", type: RSS, connector: rss, tier: B }
56 + - id: norges-bank
57 + name: Norges Bank
58 + domain: norges-bank.no
59 + homepage: https://www.norges-bank.no/en/
60 + categories: [finance, central-bank, government]
61 + tier: A
62 + aliases: [norges bank, central bank of norway]
63 + discover: { rss: false }
64 + sensors:
65 + - { name: press releases feed, url: "https://www.norges-bank.no/en/rss-feeds/Press-releases---Norges-Bank/", type: RSS, connector: rss, tier: A }
66 + - { name: speeches feed, url: "https://www.norges-bank.no/en/rss-feeds/Speeches---Norges-Bank/", type: RSS, connector: rss, tier: B }
67 + - id: danmarks-nationalbank
68 + name: Danmarks Nationalbank
69 + domain: nationalbanken.dk
70 + homepage: https://www.nationalbanken.dk/en
71 + categories: [finance, central-bank, government]
72 + tier: B
73 + aliases: [danmarks nationalbank, nationalbanken, central bank of denmark]
74 + discover: { rss: false, sitemap: true }
75 + notes: "No public RSS (the /en/rss-feeds page only links to Teams/Outlook help); sitemap index + server-rendered news page."
76 + sensors:
77 + - { name: sitemap, url: "https://www.nationalbanken.dk/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
78 + - { name: news and knowledge, url: "https://www.nationalbanken.dk/en/news-and-knowledge", type: HTML, connector: http, tier: B }
79 + - id: bank-of-korea
80 + name: Bank of Korea
81 + domain: bok.or.kr
82 + homepage: https://www.bok.or.kr/eng/main/main.do
83 + categories: [finance, central-bank, government]
84 + tier: A
85 + aliases: [bank of korea, bok, 한국은행]
86 + discover: { rss: false }
87 + sensors:
88 + - { name: press releases feed, url: "https://www.bok.or.kr/eng/bbs/E0000634/news.rss?menuNo=400069", type: RSS, connector: rss, tier: A, config: { maxItems: 60 } }
89 + - id: pboc
90 + name: People's Bank of China
91 + domain: pbc.gov.cn
92 + homepage: https://www.pbc.gov.cn/en/3688006/index.html
93 + categories: [finance, central-bank, government]
94 + tier: A
95 + weight: 1.3
96 + aliases: [people's bank of china, pboc, pbc, 中国人民银行]
97 + discover: { rss: false }
98 + notes: "No RSS; the English press-release index is server-rendered HTML."
99 + sensors:
100 + - { name: press releases, url: "https://www.pbc.gov.cn/en/3688110/3688172/index.html", type: HTML, connector: http, tier: A }
101 + - id: rbi
102 + name: Reserve Bank of India
103 + domain: rbi.org.in
104 + homepage: https://www.rbi.org.in
105 + categories: [finance, central-bank, government]
106 + tier: A
107 + weight: 1.2
108 + aliases: [reserve bank of india, rbi]
109 + discover: { rss: false }
110 + sensors:
111 + - { name: press releases feed, url: "https://www.rbi.org.in/pressreleases_rss.xml", type: RSS, connector: rss, tier: A }
112 + - { name: notifications feed, url: "https://www.rbi.org.in/notifications_rss.xml", type: RSS, connector: rss, tier: A }
113 + - { name: speeches feed, url: "https://www.rbi.org.in/speeches_rss.xml", type: RSS, connector: rss, tier: B }
114 + - id: banco-central-do-brasil
115 + name: Banco Central do Brasil
116 + domain: bcb.gov.br
117 + homepage: https://www.bcb.gov.br/en
118 + categories: [finance, central-bank, government]
119 + tier: A
120 + aliases: [banco central do brasil, bcb, central bank of brazil, copom]
121 + discover: { rss: false }
122 + sensors:
123 + - { name: news feed, url: "https://www.bcb.gov.br/api/feed/sitebcb/sitefeeds/noticias", type: ATOM, connector: rss, tier: A }
124 + - { name: press notes api, url: "https://www.bcb.gov.br/api/servico/sitebcb/notasimprensa?quantidade=30", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: conteudo, keyField: Id, titleField: titulo, dateField: dataPublicacao, urlTemplate: "https://www.bcb.gov.br/detalhenoticia/{key}/nota" } }
125 + - id: sarb
126 + name: South African Reserve Bank
127 + domain: resbank.co.za
128 + homepage: https://www.resbank.co.za/en/home
129 + categories: [finance, central-bank, government]
130 + tier: A
131 + aliases: [south african reserve bank, sarb]
132 + discover: { rss: false }
133 + sensors:
134 + - { name: publications feed, url: "https://www.resbank.co.za/bin/sarb/solr/publications/rss", type: RSS, connector: rss, tier: A }
135 + - id: bank-indonesia
136 + name: Bank Indonesia
137 + domain: bi.go.id
138 + homepage: https://www.bi.go.id/en/default.aspx
139 + categories: [finance, central-bank, government]
140 + tier: B
141 + aliases: [bank indonesia, bi]
142 + discover: { rss: false }
143 + notes: "RSS endpoints redirect to a 404 page; SharePoint news-release list is server-rendered."
144 + sensors:
145 + - { name: news releases, url: "https://www.bi.go.id/en/publikasi/ruang-media/news-release/default.aspx", type: HTML, connector: http, tier: B }
146 + - id: bsp
147 + name: Bangko Sentral ng Pilipinas
148 + domain: bsp.gov.ph
149 + homepage: https://www.bsp.gov.ph
150 + categories: [finance, central-bank, government]
151 + tier: B
152 + aliases: [bangko sentral ng pilipinas, bsp, central bank of the philippines]
153 + discover: { rss: false, sitemap: true }
154 + notes: "SharePoint media-release list is client-rendered (83 chars of text); the sitemap index is used instead."
155 + sensors:
156 + - { name: sitemap, url: "https://www.bsp.gov.ph/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
157 + - id: cbrt
158 + name: Central Bank of the Republic of Türkiye
159 + domain: tcmb.gov.tr
160 + homepage: https://www.tcmb.gov.tr/wps/wcm/connect/EN/TCMB+EN
161 + categories: [finance, central-bank, government]
162 + tier: A
163 + aliases: [cbrt, tcmb, central bank of turkey, türkiye cumhuriyet merkez bankası]
164 + discover: { rss: false }
165 + sensors:
166 + - { name: press releases feed, url: "https://www.tcmb.gov.tr/wps/wcm/connect/EN/TCMB+EN/Bottom+Menu/Other/RSS/Press+Releases", type: ATOM, connector: rss, tier: A }
167 + - { name: mpc decisions feed, url: "https://www.tcmb.gov.tr/wps/wcm/connect/EN/TCMB+EN/Bottom+Menu/Other/RSS/MPC+Decisions", type: ATOM, connector: rss, tier: A }
168 + - id: bank-of-israel
169 + name: Bank of Israel
170 + domain: boi.org.il
171 + homepage: https://www.boi.org.il/en/
172 + categories: [finance, central-bank, government]
173 + tier: B
174 + aliases: [bank of israel, boi, בנק ישראל]
175 + discover: { rss: false, sitemap: true }
176 + notes: "No RSS; the press-release listing is client-rendered, so the sitemap is the change signal."
177 + sensors:
178 + - { name: sitemap, url: "https://boi.org.il/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
179 + - id: central-bank-of-ireland
180 + name: Central Bank of Ireland
181 + domain: centralbank.ie
182 + homepage: https://www.centralbank.ie
183 + categories: [finance, central-bank, regulator, government]
184 + tier: A
185 + aliases: [central bank of ireland, banc ceannais na héireann, cbi]
186 + discover: { rss: false }
187 + sensors:
188 + - { name: news and media feed, url: "https://www.centralbank.ie/feeds/news-media-feed", type: RSS, connector: rss, tier: A }
189 + - id: banque-de-france
190 + name: Banque de France
191 + domain: banque-france.fr
192 + homepage: https://www.banque-france.fr/en
193 + categories: [finance, central-bank, government]
194 + tier: A
195 + aliases: [banque de france, bdf]
196 + discover: { rss: false, sitemap: true }
197 + notes: "rss.xml answers 403; the sitemap index and the server-rendered news pages are used instead."
198 + sensors:
199 + - { name: news, url: "https://www.banque-france.fr/en/news", type: HTML, connector: http, tier: A }
200 + - { name: sitemap, url: "https://www.banque-france.fr/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 4000, maxChildren: 6 } }
201 + - id: bundesbank
202 + name: Deutsche Bundesbank
203 + domain: bundesbank.de
204 + homepage: https://www.bundesbank.de/en
205 + categories: [finance, central-bank, government]
206 + tier: A
207 + weight: 1.2
208 + aliases: [deutsche bundesbank, bundesbank, buba]
209 + discover: { rss: false }
210 + sensors:
211 + - { name: latest feed, url: "https://www.bundesbank.de/service/rss/en/633306/feed.rss", type: RSS, connector: rss, tier: A }
212 + - { name: speeches feed, url: "https://www.bundesbank.de/service/rss/en/633296/feed.rss", type: RSS, connector: rss, tier: B }
213 + - { name: discussion papers feed, url: "https://www.bundesbank.de/service/rss/en/633292/feed.rss", type: RSS, connector: rss, tier: C }
214 + - id: banca-d-italia
215 + name: Banca d'Italia
216 + domain: bancaditalia.it
217 + homepage: https://www.bancaditalia.it/homepage/index.html?com.dotmarketing.htmlpage.language=1
218 + categories: [finance, central-bank, government]
219 + tier: A
220 + aliases: [banca d'italia, bank of italy, bankitalia]
221 + discover: { rss: false }
222 + notes: "No RSS on the main site (alert.bancaditalia.it is a separate alert service); server-rendered press-release index."
223 + sensors:
224 + - { name: press releases, url: "https://www.bancaditalia.it/media/comunicati/index.html", type: HTML, connector: http, tier: A }
225 + - id: banco-de-espana
226 + name: Banco de España
227 + domain: bde.es
228 + homepage: https://www.bde.es/wbe/en/
229 + categories: [finance, central-bank, government]
230 + tier: A
231 + aliases: [banco de españa, banco de espana, bank of spain, bde]
232 + discover: { rss: false }
233 + sensors:
234 + - { name: news feed, url: "https://www.bde.es/wbe/en/inicio/rss/rss-noticias/", type: RSS, connector: rss, tier: A }
235 + - { name: regulation feed, url: "https://www.bde.es/wbe/en/inicio/rss/rss-normativa/", type: RSS, connector: rss, tier: B }
236 + - { name: statistics feed, url: "https://www.bde.es/wbe/en/inicio/rss/rss-estadisticas/", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
237 + - id: dnb
238 + name: De Nederlandsche Bank
239 + domain: dnb.nl
240 + homepage: https://www.dnb.nl/en/
241 + categories: [finance, central-bank, regulator, government]
242 + tier: A
243 + aliases: [de nederlandsche bank, dutch central bank, dnb]
244 + discover: { rss: false }
245 + sensors:
246 + - { name: news feed, url: "https://www.dnb.nl/en/rss/13039/4612", type: RSS, connector: rss, tier: A }
247 + - id: nbb
248 + name: National Bank of Belgium
249 + domain: nbb.be
250 + homepage: https://www.nbb.be/en
251 + categories: [finance, central-bank, government]
252 + tier: B
253 + aliases: [national bank of belgium, banque nationale de belgique, nationale bank van belgië, nbb, bnb]
254 + discover: { rss: false, sitemap: true }
255 + notes: "No RSS; server-rendered news page + sitemap index."
256 + sensors:
257 + - { name: news and events, url: "https://www.nbb.be/en/news-events", type: HTML, connector: http, tier: B }
258 + - { name: sitemap, url: "https://www.nbb.be/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
259 + - id: cnb
260 + name: Czech National Bank
261 + domain: cnb.cz
262 + homepage: https://www.cnb.cz/en/
263 + categories: [finance, central-bank, government]
264 + tier: A
265 + aliases: [czech national bank, česká národní banka, cnb, čnb]
266 + discover: { rss: false }
267 + sensors:
268 + - { name: press releases feed, url: "https://www.cnb.cz/en/.content/rss-feed/rss-feed_tz.xml", type: RSS, connector: rss, tier: A }
269 + - { name: cnblog feed, url: "https://www.cnb.cz/en/.content/rss-feed/rss-feed_00023.rss", type: RSS, connector: rss, tier: C }
270 + - id: nbp
271 + name: Narodowy Bank Polski
272 + domain: nbp.pl
273 + homepage: https://nbp.pl/en/
274 + categories: [finance, central-bank, government]
275 + tier: B
276 + aliases: [narodowy bank polski, national bank of poland, nbp]
277 + discover: { rss: false, sitemap: false }
278 + notes: "BLOCKED 2026-09-08: nbp.pl answers 403 to the bot UA on every path (homepage, /en/feed/); the fetcher's browser-UA retry is refused too. Listed for entity linking only."
279 + - id: mnb
280 + name: Magyar Nemzeti Bank
281 + domain: mnb.hu
282 + homepage: https://www.mnb.hu/en
283 + categories: [finance, central-bank, government]
284 + tier: B
285 + aliases: [magyar nemzeti bank, hungarian national bank, mnb]
286 + discover: { rss: false }
287 + notes: "/en/rss requires login; server-rendered press-release page used."
288 + sensors:
289 + - { name: press releases, url: "https://www.mnb.hu/en/pressroom/press-releases", type: HTML, connector: http, tier: B }
290 + - id: hkma
291 + name: Hong Kong Monetary Authority
292 + domain: hkma.gov.hk
293 + homepage: https://www.hkma.gov.hk/eng/
294 + categories: [finance, central-bank, regulator, government]
295 + tier: A
296 + weight: 1.2
297 + aliases: [hong kong monetary authority, hkma, 香港金融管理局]
298 + discover: { rss: false }
299 + sensors:
300 + - { name: press releases feed, url: "https://www.hkma.gov.hk/eng/other-information/rss/rss_press-release.xml", type: RSS, connector: rss, tier: A, config: { maxItems: 60 } }
301 + - { name: speeches feed, url: "https://www.hkma.gov.hk/eng/other-information/rss/rss_speeches.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 40 } }
302 + - { name: circulars feed, url: "https://www.hkma.gov.hk/eng/other-information/rss/rss_circulars.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
303 + - id: mas
304 + name: Monetary Authority of Singapore
305 + domain: mas.gov.sg
306 + homepage: https://www.mas.gov.sg
307 + categories: [finance, central-bank, regulator, government]
308 + tier: A
309 + weight: 1.2
310 + aliases: [monetary authority of singapore, mas]
311 + discover: { rss: false }
312 + notes: "No RSS (every /rss path returns the 850 KB SPA shell); the news listing is server-rendered."
313 + sensors:
314 + - { name: news, url: "https://www.mas.gov.sg/news", type: HTML, connector: http, tier: A }
315 + - id: sama
316 + name: Saudi Central Bank
317 + domain: sama.gov.sa
318 + homepage: https://www.sama.gov.sa/en-US/Pages/default.aspx
319 + categories: [finance, central-bank, government]
320 + tier: B
321 + aliases: [saudi central bank, sama, saudi arabian monetary authority, البنك المركزي السعودي]
322 + discover: { rss: false, sitemap: false }
323 + notes: "NOT COVERED 2026-09-08: sama.gov.sa is a client-rendered SPA (every path returns a 256-char shell); old SharePoint news pages 404. Listed for entity linking only."
324 + - id: cbn
325 + name: Central Bank of Nigeria
326 + domain: cbn.gov.ng
327 + homepage: https://www.cbn.gov.ng
328 + categories: [finance, central-bank, government]
329 + tier: B
330 + aliases: [central bank of nigeria, cbn]
331 + discover: { rss: false, sitemap: true }
332 + notes: "Press-release and news pages are client-rendered shells; the sitemap (208 URLs) is used instead."
333 + sensors:
334 + - { name: sitemap, url: "https://www.cbn.gov.ng/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
335 + - id: bank-negara-malaysia
336 + name: Bank Negara Malaysia
337 + domain: bnm.gov.my
338 + homepage: https://www.bnm.gov.my
339 + categories: [finance, central-bank, government]
340 + tier: A
341 + aliases: [bank negara malaysia, bnm, central bank of malaysia]
342 + discover: { rss: false }
343 + notes: "Liferay asset-publisher Atom feed for press releases; the speeches feed redirects to a login page."
344 + sensors:
345 + - { name: press releases feed, url: "https://www.bnm.gov.my/press-release-2020?p_p_id=com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet_INSTANCE_ZHckDJtILsio&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=getRSS&p_p_cacheability=cacheLevelPage", type: ATOM, connector: rss, tier: A }
346 + - id: bank-of-thailand
347 + name: Bank of Thailand
348 + domain: bot.or.th
349 + homepage: https://www.bot.or.th/en/home.html
350 + categories: [finance, central-bank, government]
351 + tier: B
352 + aliases: [bank of thailand, bot, ธนาคารแห่งประเทศไทย]
353 + discover: { rss: false, sitemap: false }
354 + notes: "NOT COVERED 2026-09-08: bot.or.th news pages are client-rendered (142 chars of text), no RSS, no sitemap.xml. Listed for entity linking only."
355 + # ───────────────────────── B · Financial regulators & supervisors ─────────────────────────
356 + - id: esma
357 + name: ESMA
358 + domain: esma.europa.eu
359 + homepage: https://www.esma.europa.eu
360 + categories: [finance, regulator, government]
361 + tier: A
362 + weight: 1.2
363 + aliases: [european securities and markets authority, esma]
364 + discover: { rss: false }
365 + sensors:
366 + - { name: news feed, url: "https://www.esma.europa.eu/rss.xml", type: RSS, connector: rss, tier: A }
367 + - id: eba
368 + name: European Banking Authority
369 + domain: eba.europa.eu
370 + homepage: https://www.eba.europa.eu
371 + categories: [finance, regulator, government]
372 + tier: A
373 + aliases: [european banking authority, eba]
374 + discover: { rss: false }
375 + sensors:
376 + - { name: news feed, url: "https://eba.europa.eu/rss.xml", type: RSS, connector: rss, tier: A }
377 + - id: eiopa
378 + name: EIOPA
379 + domain: eiopa.europa.eu
380 + homepage: https://www.eiopa.europa.eu
381 + categories: [finance, regulator, insurance, government]
382 + tier: B
383 + aliases: [european insurance and occupational pensions authority, eiopa]
384 + discover: { rss: false }
385 + sensors:
386 + - { name: news feed, url: "https://www.eiopa.europa.eu/node/4816/rss_en", type: RSS, connector: rss, tier: B }
387 + - id: fca
388 + name: Financial Conduct Authority
389 + domain: fca.org.uk
390 + homepage: https://www.fca.org.uk
391 + categories: [finance, regulator, government]
392 + tier: A
393 + weight: 1.2
394 + aliases: [financial conduct authority, fca]
395 + discover: { rss: false }
396 + sensors:
397 + - { name: news feed, url: "https://www.fca.org.uk/news/rss.xml", type: RSS, connector: rss, tier: A }
398 + - id: bank-of-england
399 + extend: true
400 + aliases: [prudential regulation authority, pra]
401 + sensors:
402 + - { name: publications feed, url: "https://www.bankofengland.co.uk/rss/publications", type: RSS, connector: rss, tier: A, config: { maxItems: 50 } }
403 + - { name: speeches feed, url: "https://www.bankofengland.co.uk/rss/speeches", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
404 + - id: bafin
405 + name: BaFin
406 + domain: bafin.de
407 + homepage: https://www.bafin.de/EN/
408 + categories: [finance, regulator, government]
409 + tier: A
410 + aliases: [bafin, bundesanstalt für finanzdienstleistungsaufsicht, federal financial supervisory authority]
411 + discover: { rss: false }
412 + notes: "Only German-language feeds exist (the EN RSS node is a 404)."
413 + sensors:
414 + - { name: press releases feed, url: "https://www.bafin.de/DE/service/rss/_function/RSS_Presse.xml", type: RSS, connector: rss, tier: A }
415 + - { name: supervisory measures feed, url: "https://www.bafin.de/DE/service/rss/_function/RSS_Massnahmen.xml", type: RSS, connector: rss, tier: A }
416 + - id: amf-france
417 + name: Autorité des marchés financiers (France)
418 + domain: amf-france.org
419 + homepage: https://www.amf-france.org/en
420 + categories: [finance, regulator, government]
421 + tier: A
422 + aliases: [amf france, autorité des marchés financiers, amf]
423 + discover: { rss: false }
424 + sensors:
425 + - { name: press releases feed, url: "https://www.amf-france.org/en/flux-rss/display/23", type: RSS, connector: rss, tier: A, config: { maxItems: 60 } }
426 + - { name: alerts and warnings feed, url: "https://www.amf-france.org/en/flux-rss/display/28", type: RSS, connector: rss, tier: A, config: { maxItems: 60 } }
427 + - { name: regulation feed, url: "https://www.amf-france.org/en/flux-rss/display/31", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
428 + - id: amf-quebec
429 + name: Autorité des marchés financiers (Québec)
430 + domain: lautorite.qc.ca
431 + homepage: https://lautorite.qc.ca/en/
432 + categories: [finance, regulator, government]
433 + tier: B
434 + aliases: [autorité des marchés financiers du québec, amf québec, amf quebec, lautorite]
435 + discover: { rss: false, sitemap: false }
436 + notes: "BLOCKED 2026-09-08: lautorite.qc.ca answers 403 to bots and to a browser UA on every path (RSS, news releases). Listed for entity linking only."
437 + - id: osfi
438 + name: OSFI
439 + domain: osfi-bsif.gc.ca
440 + homepage: https://www.osfi-bsif.gc.ca/en
441 + categories: [finance, regulator, government]
442 + tier: A
443 + aliases: [office of the superintendent of financial institutions, bureau du surintendant des institutions financières, osfi, bsif]
444 + discover: { rss: false }
445 + sensors:
446 + - { name: news feed, url: "https://www.osfi-bsif.gc.ca/en/rss.xml", type: RSS, connector: rss, tier: A }
447 + - id: osc
448 + name: Ontario Securities Commission
449 + domain: osc.ca
450 + homepage: https://www.osc.ca/en
451 + categories: [finance, regulator, government]
452 + tier: B
453 + aliases: [ontario securities commission, osc]
454 + discover: { rss: false, sitemap: true }
455 + notes: "rss.xml answers 403 and the news listing is client-rendered; the sitemap index is the change signal."
456 + sensors:
457 + - { name: sitemap, url: "https://www.osc.ca/en/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
458 + - id: csa-acvm
459 + name: Canadian Securities Administrators
460 + domain: securities-administrators.ca
461 + homepage: https://www.securities-administrators.ca
462 + categories: [finance, regulator, government]
463 + tier: B
464 + aliases: [canadian securities administrators, autorités canadiennes en valeurs mobilières, csa, acvm]
465 + discover: { rss: false, sitemap: false }
466 + notes: "BLOCKED 2026-09-08: every path returns an HTTP 307 WAF interstitial without a Location header. Listed for entity linking only."
467 + - id: ciro
468 + name: CIRO
469 + domain: ciro.ca
470 + homepage: https://www.ciro.ca
471 + categories: [finance, regulator]
472 + tier: B
473 + aliases: [canadian investment regulatory organization, organisme canadien de réglementation des investissements, ciro, ocri, iiroc, mfda]
474 + discover: { rss: false }
475 + sensors:
476 + - { name: news feed, url: "https://www.ciro.ca/rss.xml", type: RSS, connector: rss, tier: B }
477 + - id: asic
478 + name: ASIC
479 + domain: asic.gov.au
480 + homepage: https://www.asic.gov.au
481 + categories: [finance, regulator, government]
482 + tier: A
483 + aliases: [australian securities and investments commission, asic]
484 + discover: { rss: false, sitemap: true }
485 + notes: "No RSS and the media-release index is client-rendered; the sitemap (10 k URLs) is the change signal."
486 + sensors:
487 + - { name: sitemap, url: "https://www.asic.gov.au/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
488 + - id: apra
489 + name: APRA
490 + domain: apra.gov.au
491 + homepage: https://www.apra.gov.au
492 + categories: [finance, regulator, government]
493 + tier: B
494 + aliases: [australian prudential regulation authority, apra]
495 + discover: { rss: false }
496 + sensors:
497 + - { name: news feed, url: "https://www.apra.gov.au/rss.xml", type: RSS, connector: rss, tier: B }
498 + - id: sfc-hk
499 + name: Securities and Futures Commission (Hong Kong)
500 + domain: sfc.hk
501 + homepage: https://www.sfc.hk/en/
502 + categories: [finance, regulator, government]
503 + tier: A
504 + aliases: [securities and futures commission, sfc, sfc hong kong, 證監會]
505 + discover: { rss: false }
506 + sensors:
507 + - { name: press releases feed, url: "https://www.sfc.hk/en/RSS-Feeds/Press-releases", type: RSS, connector: rss, tier: A }
508 + - { name: circulars feed, url: "https://www.sfc.hk/en/RSS-Feeds/Circulars", type: RSS, connector: rss, tier: B }
509 + - id: sebi
510 + name: SEBI
511 + domain: sebi.gov.in
512 + homepage: https://www.sebi.gov.in
513 + categories: [finance, regulator, government]
514 + tier: A
515 + aliases: [securities and exchange board of india, sebi]
516 + discover: { rss: false }
517 + sensors:
518 + - { name: news feed, url: "https://www.sebi.gov.in/sebirss.xml", type: RSS, connector: rss, tier: A }
519 + - id: jfsa
520 + name: Financial Services Agency (Japan)
521 + domain: fsa.go.jp
522 + homepage: https://www.fsa.go.jp/en/
523 + categories: [finance, regulator, government]
524 + tier: A
525 + aliases: [financial services agency, jfsa, fsa japan, 金融庁]
526 + discover: { rss: false }
527 + sensors:
528 + - { name: english news feed, url: "https://www.fsa.go.jp/fsaEnNewsList_rss2.xml", type: RSS, connector: rss, tier: A }
529 + - { name: japanese news feed, url: "https://www.fsa.go.jp/fsaNewsListAll_rss2.xml", type: RSS, connector: rss, tier: B }
530 + - id: finma
531 + name: FINMA
532 + domain: finma.ch
533 + homepage: https://www.finma.ch/en/
534 + categories: [finance, regulator, government]
535 + tier: A
536 + aliases: [swiss financial market supervisory authority, finma]
537 + discover: { rss: false }
538 + sensors:
539 + - { name: news feed, url: "https://www.finma.ch/rss/news", type: RSS, connector: rss, tier: A, config: { maxItems: 50 } }
540 + - id: consob
541 + name: CONSOB
542 + domain: consob.it
543 + homepage: https://www.consob.it/web/consob-and-its-activities/home
544 + categories: [finance, regulator, government]
545 + tier: B
546 + aliases: [consob, commissione nazionale per le società e la borsa]
547 + discover: { rss: false, sitemap: false }
548 + notes: "BLOCKED 2026-09-08: press-release pages redirect to a Radware bot-manager challenge (validate.perfdrive.com); no RSS. Listed for entity linking only."
549 + - id: iosco
550 + name: IOSCO
551 + domain: iosco.org
552 + homepage: https://www.iosco.org
553 + categories: [finance, regulator, international]
554 + tier: B
555 + aliases: [international organization of securities commissions, iosco]
556 + discover: { rss: false }
557 + notes: "Homepage answers 403 to bots but the RSS feed is open."
558 + sensors:
559 + - { name: news feed, url: "https://www.iosco.org/rss/rss.xml", type: RSS, connector: rss, tier: B }
560 + - id: fsb
561 + name: Financial Stability Board
562 + domain: fsb.org
563 + homepage: https://www.fsb.org
564 + categories: [finance, regulator, international]
565 + tier: A
566 + aliases: [financial stability board, fsb]
567 + discover: { rss: false }
568 + sensors:
569 + - { name: news feed, url: "https://www.fsb.org/feed/", type: RSS, connector: rss, tier: A }
570 + - { name: press feed, url: "https://www.fsb.org/press/feed/", type: RSS, connector: rss, tier: A }
571 + - id: fatf
572 + name: FATF
573 + domain: fatf-gafi.org
574 + homepage: https://www.fatf-gafi.org/en/home.html
575 + categories: [finance, regulator, international]
576 + tier: B
577 + aliases: [financial action task force, fatf, gafi, groupe d'action financière]
578 + discover: { rss: false, sitemap: false }
579 + notes: "BLOCKED 2026-09-08: Cloudflare challenge (\"Just a moment…\") on every path for bot and browser UAs. Listed for entity linking only."
580 + - id: iais
581 + name: IAIS
582 + domain: iais.org
583 + homepage: https://www.iais.org
584 + categories: [finance, regulator, insurance, international]
585 + tier: C
586 + aliases: [international association of insurance supervisors, iais, iaisweb]
587 + discover: { rss: false, sitemap: true }
588 + notes: "WordPress feeds redirect to the homepage or 403; sitemap index + server-rendered news page."
589 + sensors:
590 + - { name: news and events, url: "https://www.iais.org/news-and-events/", type: HTML, connector: http, tier: C }
591 + - { name: sitemap, url: "https://www.iais.org/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2500 } }
592 + - id: bis
593 + extend: true
594 + aliases: [basel committee, bcbs, basel committee on banking supervision]
595 + sensors:
596 + - { name: central bankers speeches feed, url: "https://www.bis.org/doclist/cbspeeches.rss", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
597 + - id: ncua
598 + name: NCUA
599 + domain: ncua.gov
600 + homepage: https://ncua.gov
601 + categories: [finance, regulator, government]
602 + tier: B
603 + aliases: [national credit union administration, ncua]
604 + discover: { rss: false }
605 + notes: "No RSS (rss.xml 404); server-rendered press-release listing."
606 + sensors:
607 + - { name: press releases, url: "https://ncua.gov/news/press-releases", type: HTML, connector: http, tier: B }
608 + - id: cfpb
609 + name: CFPB
610 + domain: consumerfinance.gov
611 + homepage: https://www.consumerfinance.gov
612 + categories: [finance, regulator, government]
613 + tier: A
614 + aliases: [consumer financial protection bureau, cfpb]
615 + discover: { rss: false }
616 + sensors:
617 + - { name: newsroom feed, url: "https://www.consumerfinance.gov/about-us/newsroom/feed/", type: RSS, connector: rss, tier: A }
618 + - id: fincen
619 + name: FinCEN
620 + domain: fincen.gov
621 + homepage: https://www.fincen.gov
622 + categories: [finance, regulator, government]
623 + tier: A
624 + aliases: [financial crimes enforcement network, fincen]
625 + discover: { rss: false }
626 + notes: "No RSS; server-rendered news listing."
627 + sensors:
628 + - { name: news, url: "https://www.fincen.gov/news", type: HTML, connector: http, tier: A }
629 + # ───────────────────────── C · Exchanges & market infrastructure ─────────────────────────
630 + - id: lseg
631 + name: LSEG
632 + domain: lseg.com
633 + homepage: https://www.lseg.com/en
634 + categories: [finance, exchange]
635 + tier: A
636 + weight: 1.2
637 + aliases: [london stock exchange group, london stock exchange, lse, ftse russell, lch, refinitiv]
638 + products:
639 + - { name: FTSE Russell, type: index, aliases: [ftse 100, russell 2000] }
640 + - { name: LCH, type: service, aliases: [lch clearnet] }
641 + discover: { rss: false, sitemap: true }
642 + notes: "No RSS; the press-release listing is client-rendered (lch.com/resources/press-releases redirects there), so the sitemap index is the change signal."
643 + sensors:
644 + - { name: sitemap, url: "https://www.lseg.com/en/sitemap-index.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000, maxChildren: 8 } }
645 + - id: euronext
646 + name: Euronext
647 + domain: euronext.com
648 + homepage: https://www.euronext.com/en
649 + categories: [finance, exchange]
650 + tier: A
651 + aliases: [euronext, euronext paris, euronext amsterdam, euronext brussels, euronext lisbon, euronext milan, oslo børs]
652 + discover: { rss: false }
653 + sensors:
654 + - { name: press releases feed, url: "https://www.euronext.com/en/about/media/euronext-press-releases/releases.rss", type: RSS, connector: rss, tier: A }
655 + - id: deutsche-boerse
656 + name: Deutsche Börse Group
657 + domain: deutsche-boerse.com
658 + homepage: https://www.deutsche-boerse.com/dbg-en/
659 + categories: [finance, exchange]
660 + tier: A
661 + aliases: [deutsche börse, deutsche boerse, frankfurt stock exchange, xetra, eurex]
662 + products:
663 + - { name: Eurex, type: service }
664 + - { name: Xetra, type: service }
665 + discover: { rss: false }
666 + notes: "No RSS; server-rendered media pages."
667 + sensors:
668 + - { name: news stories, url: "https://www.deutsche-boerse.com/dbg-en/media/news-stories", type: HTML, connector: http, tier: A }
669 + - id: six-group
670 + name: SIX
671 + domain: six-group.com
672 + homepage: https://www.six-group.com/en/home.html
673 + categories: [finance, exchange]
674 + tier: B
675 + aliases: [six group, six swiss exchange, swiss stock exchange]
676 + discover: { rss: false }
677 + notes: "No RSS (only the exfeed.com data product); server-rendered media-release listing."
678 + sensors:
679 + - { name: media releases, url: "https://www.six-group.com/en/newsroom/media-releases.html", type: HTML, connector: http, tier: B }
680 + - id: jpx
681 + name: Japan Exchange Group
682 + domain: jpx.co.jp
683 + homepage: https://www.jpx.co.jp/english/
684 + categories: [finance, exchange]
685 + tier: A
686 + aliases: [japan exchange group, jpx, tokyo stock exchange, tse, osaka exchange, 日本取引所グループ]
687 + products:
688 + - { name: Tokyo Stock Exchange, type: service, aliases: [tse] }
689 + discover: { rss: false }
690 + sensors:
691 + - { name: jpx news feed, url: "https://www.jpx.co.jp/english/rss/jpx-news.xml", type: RSS, connector: rss, tier: A }
692 + - { name: markets news feed, url: "https://www.jpx.co.jp/english/rss/markets_news.xml", type: RSS, connector: rss, tier: A, config: { maxItems: 40 } }
693 + - id: hkex
694 + name: Hong Kong Exchanges and Clearing
695 + domain: hkex.com.hk
696 + homepage: https://www.hkex.com.hk/?sc_lang=en
697 + categories: [finance, exchange]
698 + tier: A
699 + aliases: [hkex, hong kong exchanges and clearing, hong kong stock exchange, 香港交易所]
700 + discover: { rss: false }
701 + notes: "RSS index page removed (404); server-rendered news-release listing."
702 + sensors:
703 + - { name: news releases, url: "https://www.hkex.com.hk/News/News-Release?sc_lang=en", type: HTML, connector: http, tier: A }
704 + - id: sgx
705 + name: Singapore Exchange
706 + domain: sgx.com
707 + homepage: https://www.sgx.com
708 + categories: [finance, exchange]
709 + tier: B
710 + aliases: [singapore exchange, sgx]
711 + discover: { rss: false, sitemap: true }
712 + notes: "Media-release pages are a client-rendered SPA; the sitemap is the change signal."
713 + sensors:
714 + - { name: sitemap, url: "https://www.sgx.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
715 + - id: asx
716 + name: ASX
717 + domain: asx.com.au
718 + homepage: https://www.asx.com.au
719 + categories: [finance, exchange]
720 + tier: B
721 + aliases: [australian securities exchange, asx]
722 + discover: { rss: false, sitemap: true }
723 + notes: "Media-release listing is client-rendered (404 for the static path); sitemap used."
724 + sensors:
725 + - { name: sitemap, url: "https://www.asx.com.au/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
726 + - id: b3
727 + name: B3
728 + domain: b3.com.br
729 + homepage: https://www.b3.com.br/en_us/
730 + categories: [finance, exchange]
731 + tier: B
732 + aliases: [b3, brasil bolsa balcão, bovespa, bm&fbovespa]
733 + discover: { rss: false }
734 + sensors:
735 + - { name: news, url: "https://www.b3.com.br/en_us/news/", type: HTML, connector: http, tier: B }
736 + - id: bme
737 + name: BME
738 + domain: bolsasymercados.es
739 + homepage: https://www.bolsasymercados.es/bme-exchange/en/Home
740 + categories: [finance, exchange]
741 + tier: C
742 + aliases: [bme, bolsas y mercados españoles, bolsa de madrid]
743 + discover: { rss: false, sitemap: true }
744 + sensors:
745 + - { name: sitemap, url: "https://www.bolsasymercados.es/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
746 + - id: cme-group
747 + name: CME Group
748 + domain: cmegroup.com
749 + homepage: https://www.cmegroup.com
750 + categories: [finance, exchange]
751 + tier: A
752 + weight: 1.2
753 + aliases: [cme group, cme, chicago mercantile exchange, cbot, nymex, comex]
754 + discover: { rss: false, sitemap: false }
755 + notes: "BLOCKED 2026-09-08: Akamai answers 403 to bot and browser UAs on every path (media room, RSS). Listed for entity linking only."
756 + - id: ice
757 + name: Intercontinental Exchange
758 + domain: ice.com
759 + homepage: https://www.ice.com
760 + categories: [finance, exchange]
761 + tier: B
762 + aliases: [intercontinental exchange, ice, ice futures]
763 + discover: { rss: false }
764 + notes: "IR site ir.theice.com (Q4) answers 403; the insights listing on ice.com is server-rendered."
765 + sensors:
766 + - { name: insights, url: "https://www.ice.com/insights", type: HTML, connector: http, tier: B }
767 + - id: cboe
768 + name: Cboe Global Markets
769 + domain: cboe.com
770 + homepage: https://www.cboe.com
771 + categories: [finance, exchange]
772 + tier: A
773 + aliases: [cboe, cboe global markets, chicago board options exchange, cboe canada, neo exchange, vix]
774 + products:
775 + - { name: Cboe Canada, type: service, aliases: [neo exchange] }
776 + - { name: VIX, type: index, aliases: [cboe volatility index] }
777 + discover: { rss: false }
778 + notes: "IR site ir.cboe.com (Q4) answers 403; the insights RSS is open."
779 + sensors:
780 + - { name: insights feed, url: "https://www.cboe.com/insights/rss/", type: RSS, connector: rss, tier: A }
781 + - id: dtcc
782 + name: DTCC
783 + domain: dtcc.com
784 + homepage: https://www.dtcc.com
785 + categories: [finance, exchange, infrastructure]
786 + tier: B
787 + aliases: [dtcc, depository trust & clearing corporation]
788 + discover: { rss: false, sitemap: false }
789 + notes: "BLOCKED 2026-09-08: 403 to bot and browser UAs on every path. Listed for entity linking only."
790 + - id: euroclear
791 + name: Euroclear
792 + domain: euroclear.com
793 + homepage: https://www.euroclear.com
794 + categories: [finance, exchange, infrastructure]
795 + tier: B
796 + aliases: [euroclear]
797 + discover: { rss: false, sitemap: false }
798 + notes: "BLOCKED 2026-09-08: 403 error page to bot and browser UAs on every path. Listed for entity linking only."
799 + - id: clearstream
800 + name: Clearstream
801 + domain: clearstream.com
802 + homepage: https://www.clearstream.com/clearstream-en
803 + categories: [finance, exchange, infrastructure]
804 + tier: B
805 + aliases: [clearstream]
806 + discover: { rss: false }
807 + sensors:
808 + - { name: newsroom, url: "https://www.clearstream.com/clearstream-en/newsroom", type: HTML, connector: http, tier: B }
809 + - id: swift-network
810 + name: SWIFT
811 + domain: swift.com
812 + homepage: https://www.swift.com
813 + categories: [finance, payments, infrastructure]
814 + tier: B
815 + aliases: [swift, society for worldwide interbank financial telecommunication]
816 + discover: { rss: false, sitemap: false }
817 + notes: "NOT REACHABLE 2026-09-08: swift.com never completes an HTTP response to our client (connection stalls on every path, bot or browser UA). Listed for entity linking only."
818 + - id: tmx
819 + extend: true
820 + aliases: [montréal exchange, montreal exchange, bourse de montréal, mx]
821 + products:
822 + - { name: Montréal Exchange, type: service, aliases: [bourse de montréal, mx] }
823 + sensors:
824 + - { name: mx press releases feed, url: "http://feeds.feedburner.com/MxPressReleases", type: RSS, connector: rss, tier: B }
825 + - { name: mx circulars feed, url: "http://feeds.feedburner.com/MxCirculars", type: RSS, connector: rss, tier: B }
826 + # ───────────────────────── D · Rating agencies & index providers ─────────────────────────
827 + - id: sp-global
828 + name: S&P Global
829 + domain: spglobal.com
830 + homepage: https://www.spglobal.com
831 + categories: [finance]
832 + tier: A
833 + weight: 1.2
834 + aliases: [s&p global, s&p, standard & poor's, s&p global ratings, s&p dow jones indices, s&p 500]
835 + discover: { rss: false, sitemap: false }
836 + notes: "BLOCKED 2026-09-08: Akamai 403 on spglobal.com, spdji RSS and the Q4 IR site. Listed for entity linking only."
837 + - id: moodys
838 + name: Moody's
839 + domain: moodys.com
840 + homepage: https://www.moodys.com
841 + categories: [finance]
842 + tier: A
843 + aliases: [moody's, moodys, moody's ratings, moody's investors service]
844 + discover: { rss: false, sitemap: false }
845 + notes: "NOT COVERED 2026-09-08: newsroom paths redirect to events.moodys.com or /error, ratings pages require login, Q4 IR site answers 403. Listed for entity linking only."
846 + - id: fitch-ratings
847 + name: Fitch Ratings
848 + domain: fitchratings.com
849 + homepage: https://www.fitchratings.com
850 + categories: [finance]
851 + tier: A
852 + aliases: [fitch ratings, fitch]
853 + discover: { rss: false, sitemap: true }
854 + notes: "Research/press listings are client-rendered (Next.js shell); sitemap index used."
855 + sensors:
856 + - { name: sitemap, url: "https://www.fitchratings.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000, maxChildren: 5 } }
857 + - id: morningstar-dbrs
858 + name: Morningstar DBRS
859 + domain: dbrs.morningstar.com
860 + homepage: https://dbrs.morningstar.com
861 + categories: [finance]
862 + tier: B
863 + aliases: [morningstar dbrs, dbrs, dbrs morningstar, morningstar]
864 + discover: { rss: false, sitemap: false }
865 + notes: "NOT COVERED 2026-09-08: single-page app (every path, incl. sitemap.xml, returns the 35 KB JS shell). Listed for entity linking only."
866 + - id: msci
867 + name: MSCI
868 + domain: msci.com
869 + homepage: https://www.msci.com
870 + categories: [finance]
871 + tier: B
872 + aliases: [msci, msci world, msci emerging markets]
873 + discover: { rss: false, sitemap: true }
874 + notes: "Newsroom/press pages 404 or client-rendered; Q4 IR site unreachable; sitemap used."
875 + sensors:
876 + - { name: sitemap, url: "https://www.msci.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 4000 } }
877 + # ───────────────────────── E · Major banks & asset managers ─────────────────────────
878 + - id: jpmorgan-chase
879 + name: JPMorgan Chase
880 + domain: jpmorganchase.com
881 + homepage: https://www.jpmorganchase.com
882 + categories: [finance, banking]
883 + tier: A
884 + weight: 1.3
885 + aliases: [jpmorgan chase, jpmorgan, jp morgan, chase, j.p. morgan]
886 + discover: { rss: false }
887 + notes: "Q4 IR host is unreachable; the newsroom listing on the corporate site is server-rendered."
888 + sensors:
889 + - { name: newsroom, url: "https://www.jpmorganchase.com/newsroom", type: HTML, connector: http, tier: A }
890 + - id: goldman-sachs
891 + name: Goldman Sachs
892 + domain: goldmansachs.com
893 + homepage: https://www.goldmansachs.com
894 + categories: [finance, banking]
895 + tier: A
896 + weight: 1.2
897 + aliases: [goldman sachs, goldman]
898 + discover: { rss: false, sitemap: false }
899 + notes: "BLOCKED 2026-09-08: Akamai 'Access Denied' (403) on every path for bot and browser UAs. Listed for entity linking only."
900 + - id: morgan-stanley
901 + name: Morgan Stanley
902 + domain: morganstanley.com
903 + homepage: https://www.morganstanley.com
904 + categories: [finance, banking]
905 + tier: A
906 + aliases: [morgan stanley]
907 + discover: { rss: false, sitemap: false }
908 + notes: "NOT REACHABLE 2026-09-08: connections to www.morganstanley.com stall for the bot UA and bounce (302 loop) for a browser UA. Listed for entity linking only."
909 + - id: bank-of-america
910 + name: Bank of America
911 + domain: bankofamerica.com
912 + homepage: https://www.bankofamerica.com
913 + categories: [finance, banking]
914 + tier: A
915 + weight: 1.2
916 + aliases: [bank of america, bofa, merrill, merrill lynch]
917 + discover: { rss: false }
918 + sensors:
919 + - { name: press releases, url: "https://newsroom.bankofamerica.com/content/newsroom/press-releases.html", type: HTML, connector: http, tier: A }
920 + - id: citigroup
921 + name: Citigroup
922 + domain: citigroup.com
923 + homepage: https://www.citigroup.com/global
924 + categories: [finance, banking]
925 + tier: A
926 + weight: 1.2
927 + aliases: [citigroup, citi, citibank]
928 + discover: { rss: false, sitemap: true }
929 + notes: "News listing is client-rendered; the global sitemap is the change signal."
930 + sensors:
931 + - { name: sitemap, url: "https://www.citigroup.com/global/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 4000 } }
932 + - id: wells-fargo
933 + name: Wells Fargo
934 + domain: wellsfargo.com
935 + homepage: https://www.wellsfargo.com
936 + categories: [finance, banking]
937 + tier: B
938 + aliases: [wells fargo]
939 + discover: { rss: false, sitemap: true }
940 + notes: "Newsroom (newsroom.wf.com, Q4) answers 403; corporate sitemap index used."
941 + sensors:
942 + - { name: sitemap, url: "https://www.wellsfargo.com/seo-sitemap/wellsfargositemap_index.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
943 + - id: hsbc
944 + name: HSBC
945 + domain: hsbc.com
946 + homepage: https://www.hsbc.com
947 + categories: [finance, banking]
948 + tier: A
949 + weight: 1.2
950 + aliases: [hsbc, hsbc holdings]
951 + discover: { rss: false }
952 + sensors:
953 + - { name: news, url: "https://www.hsbc.com/news-and-views/news", type: HTML, connector: http, tier: A }
954 + - id: barclays
955 + name: Barclays
956 + domain: home.barclays
957 + homepage: https://home.barclays
958 + categories: [finance, banking]
959 + tier: B
960 + aliases: [barclays, barclays plc]
961 + discover: { rss: false, sitemap: true }
962 + notes: "Press-release listing is client-rendered (257 chars); sitemap used."
963 + sensors:
964 + - { name: sitemap, url: "https://home.barclays/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 4000 } }
965 + - id: bnp-paribas
966 + name: BNP Paribas
967 + domain: bnpparibas.com
968 + homepage: https://group.bnpparibas/en/
969 + categories: [finance, banking]
970 + tier: A
971 + aliases: [bnp paribas, bnp]
972 + discover: { rss: false, sitemap: false }
973 + notes: "BLOCKED 2026-09-08: group.bnpparibas and bnpparibas.com answer 403 to bots on every path (press releases, RSS). Listed for entity linking only."
974 + - id: ubs
975 + name: UBS
976 + domain: ubs.com
977 + homepage: https://www.ubs.com/global/en.html
978 + categories: [finance, banking]
979 + tier: A
980 + weight: 1.2
981 + aliases: [ubs, ubs group, credit suisse]
982 + discover: { rss: false }
983 + sensors:
984 + - { name: media, url: "https://www.ubs.com/global/en/media.html", type: HTML, connector: http, tier: A }
985 + - id: deutsche-bank
986 + name: Deutsche Bank
987 + domain: db.com
988 + homepage: https://www.db.com
989 + categories: [finance, banking]
990 + tier: A
991 + aliases: [deutsche bank, db]
992 + discover: { rss: false }
993 + sensors:
994 + - { name: media, url: "https://www.db.com/media/index?language_id=1&kid2=newsroom-w.redirect-en.shortcut", type: HTML, connector: http, tier: A }
995 + - id: santander
996 + name: Banco Santander
997 + domain: santander.com
998 + homepage: https://www.santander.com/en/home
999 + categories: [finance, banking]
1000 + tier: A
1001 + aliases: [santander, banco santander]
1002 + discover: { rss: false }
1003 + sensors:
1004 + - { name: press releases feed, url: "https://www.santander.com/content/santander-corporate/san-global/en/sala-de-comunicacion/notas-de-prensa.sitefeed.rss.xml", type: RSS, connector: rss, tier: A }
1005 + - { name: stories feed, url: "https://www.santander.com/content/santander-corporate/san-global/en/stories.sitefeed.rss.xml", type: RSS, connector: rss, tier: C }
1006 + - id: rbc
1007 + name: RBC
1008 + domain: rbc.com
1009 + homepage: https://www.rbc.com
1010 + categories: [finance, banking]
1011 + tier: A
1012 + weight: 1.2
1013 + aliases: [rbc, royal bank of canada, banque royale]
1014 + discover: { rss: false, sitemap: true }
1015 + sensors:
1016 + - { name: newsroom, url: "https://www.rbc.com/newsroom/news/index.html", type: HTML, connector: http, tier: A }
1017 + - { name: sitemap, url: "https://www.rbc.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B }
1018 + - id: td-bank
1019 + name: TD Bank Group
1020 + domain: td.com
1021 + homepage: https://www.td.com
1022 + categories: [finance, banking]
1023 + tier: A
1024 + weight: 1.2
1025 + aliases: [td, td bank, td bank group, toronto-dominion bank, banque td]
1026 + discover: { rss: false }
1027 + notes: "newsroom.td.com redirects to stories.td.com; no RSS."
1028 + sensors:
1029 + - { name: news, url: "https://stories.td.com/ca/en/news", type: HTML, connector: http, tier: A }
1030 + - id: bmo
1031 + name: BMO Financial Group
1032 + domain: bmo.com
1033 + homepage: https://www.bmo.com
1034 + categories: [finance, banking]
1035 + tier: A
1036 + aliases: [bmo, bank of montreal, banque de montréal, bmo financial group]
1037 + discover: { rss: false }
1038 + sensors:
1039 + - { name: newsroom, url: "https://newsroom.bmo.com/", type: HTML, connector: http, tier: A }
1040 + - id: scotiabank
1041 + name: Scotiabank
1042 + domain: scotiabank.com
1043 + homepage: https://www.scotiabank.com
1044 + categories: [finance, banking]
1045 + tier: A
1046 + aliases: [scotiabank, bank of nova scotia, banque scotia, bns]
1047 + discover: { rss: false }
1048 + sensors:
1049 + - { name: news, url: "https://www.scotiabank.com/ca/en/about/news.html", type: HTML, connector: http, tier: A }
1050 + - id: cibc
1051 + name: CIBC
1052 + domain: cibc.com
1053 + homepage: https://www.cibc.com
1054 + categories: [finance, banking]
1055 + tier: A
1056 + aliases: [cibc, canadian imperial bank of commerce, banque cibc]
1057 + discover: { rss: false }
1058 + sensors:
1059 + - { name: media room, url: "https://cibc.mediaroom.com/", type: HTML, connector: http, tier: A }
1060 + - id: national-bank-of-canada
1061 + name: National Bank of Canada
1062 + domain: nbc.ca
1063 + homepage: https://www.nbc.ca
1064 + categories: [finance, banking]
1065 + tier: B
1066 + aliases: [national bank of canada, national bank, banque nationale, banque nationale du canada, nbc, bnc]
1067 + discover: { rss: false, sitemap: true }
1068 + notes: "News pages 404/client-rendered; the English sitemap is the change signal."
1069 + sensors:
1070 + - { name: sitemap, url: "https://www.nbc.ca/sitemap-en.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
1071 + - id: desjardins
1072 + name: Desjardins
1073 + domain: desjardins.com
1074 + homepage: https://www.desjardins.com/en/
1075 + categories: [finance, banking, insurance]
1076 + tier: A
1077 + aliases: [desjardins, mouvement desjardins, desjardins group]
1078 + discover: { rss: false, sitemap: true }
1079 + sensors:
1080 + - { name: news and press releases, url: "https://www.desjardins.com/en/news.html", type: HTML, connector: http, tier: A }
1081 + - { name: sitemap, url: "https://www.desjardins.com/en/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 4000 } }
1082 + - id: blackrock
1083 + name: BlackRock
1084 + domain: blackrock.com
1085 + homepage: https://www.blackrock.com
1086 + categories: [finance, banking]
1087 + tier: A
1088 + weight: 1.2
1089 + aliases: [blackrock, ishares]
1090 + discover: { rss: false, sitemap: false }
1091 + notes: "BLOCKED 2026-09-08: 403 on the newsroom, RSS and Q4 IR paths for bot and browser UAs. Listed for entity linking only."
1092 + - id: vanguard
1093 + name: Vanguard
1094 + domain: vanguard.com
1095 + homepage: https://investor.vanguard.com
1096 + categories: [finance, banking]
1097 + tier: C
1098 + aliases: [vanguard, the vanguard group]
1099 + discover: { rss: false, sitemap: true }
1100 + notes: "Corporate pressroom 404; investor sitemap index used."
1101 + sensors:
1102 + - { name: sitemap, url: "https://www.vanguard.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
1103 + - id: fidelity
1104 + name: Fidelity Investments
1105 + domain: fidelity.com
1106 + homepage: https://www.fidelity.com
1107 + categories: [finance, banking]
1108 + tier: C
1109 + aliases: [fidelity, fidelity investments]
1110 + discover: { rss: false }
1111 + notes: "newsroom.fidelity.com answers a 202 bot challenge; the fidelity.com news index is server-rendered."
1112 + sensors:
1113 + - { name: news, url: "https://www.fidelity.com/news/", type: HTML, connector: http, tier: C }
1114 + - id: state-street
1115 + name: State Street
1116 + domain: statestreet.com
1117 + homepage: https://www.statestreet.com
1118 + categories: [finance, banking]
1119 + tier: C
1120 + aliases: [state street, state street corporation, spdr]
1121 + discover: { rss: false, sitemap: true }
1122 + notes: "newsroom.statestreet.com and the Q4 IR site answer 403; US sitemap used."
1123 + sensors:
1124 + - { name: sitemap, url: "https://www.statestreet.com/us/en/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
1125 + - id: brookfield
1126 + name: Brookfield
1127 + domain: brookfield.com
1128 + homepage: https://www.brookfield.com
1129 + categories: [finance, banking]
1130 + tier: B
1131 + aliases: [brookfield, brookfield corporation, brookfield asset management]
1132 + discover: { rss: false, sitemap: true }
1133 + sensors:
1134 + - { name: news, url: "https://www.brookfield.com/views-news/news", type: HTML, connector: http, tier: B }
1135 + - { name: sitemap, url: "https://www.brookfield.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
1136 + - id: cdpq
1137 + name: La Caisse (CDPQ)
1138 + domain: lacaisse.com
1139 + homepage: https://www.lacaisse.com/en
1140 + categories: [finance, banking]
1141 + tier: A
1142 + aliases: [cdpq, la caisse, caisse de dépôt et placement du québec, caisse de depot]
1143 + discover: { rss: false }
1144 + notes: "cdpq.com redirects to lacaisse.com (rebranded La Caisse)."
1145 + sensors:
1146 + - { name: news feed, url: "https://www.lacaisse.com/en/rss.xml", type: RSS, connector: rss, tier: A }
1147 + - { name: nouvelles feed, url: "https://www.lacaisse.com/fr/rss.xml", type: RSS, connector: rss, tier: B }
1148 + - id: cpp-investments
1149 + name: CPP Investments
1150 + domain: cppinvestments.com
1151 + homepage: https://www.cppinvestments.com
1152 + categories: [finance, banking]
1153 + tier: B
1154 + aliases: [cpp investments, canada pension plan investment board, cppib, investissements rpc]
1155 + discover: { rss: false, sitemap: false }
1156 + notes: "BLOCKED 2026-09-08: every path (newsroom, /feed/) returns a 202 JavaScript bot challenge. Listed for entity linking only."
1157 + - id: psp-investments
1158 + name: PSP Investments
1159 + domain: investpsp.com
1160 + homepage: https://www.investpsp.com/en/
1161 + categories: [finance, banking]
1162 + tier: C
1163 + aliases: [psp investments, public sector pension investment board, investissements psp]
1164 + discover: { rss: false }
1165 + sensors:
1166 + - { name: news hub, url: "https://www.investpsp.com/en/news/", type: HTML, connector: http, tier: C }
1167 + - id: otpp
1168 + name: Ontario Teachers' Pension Plan
1169 + domain: otpp.com
1170 + homepage: https://www.otpp.com/en-ca/
1171 + categories: [finance, banking]
1172 + tier: C
1173 + aliases: [ontario teachers' pension plan, ontario teachers, otpp]
1174 + discover: { rss: false, sitemap: true }
1175 + sensors:
1176 + - { name: news and insights, url: "https://www.otpp.com/en-ca/about-us/news-and-insights/", type: HTML, connector: http, tier: C }
1177 + - id: nbim
1178 + name: Norges Bank Investment Management
1179 + domain: nbim.no
1180 + homepage: https://www.nbim.no/en/
1181 + categories: [finance, banking]
1182 + tier: B
1183 + aliases: [norges bank investment management, nbim, norway oil fund, government pension fund global]
1184 + discover: { rss: false }
1185 + sensors:
1186 + - { name: press releases, url: "https://www.nbim.no/en/news-and-insights/the-press/press-releases", type: HTML, connector: http, tier: B }
1187 + - id: gic
1188 + name: GIC
1189 + domain: gic.com.sg
1190 + homepage: https://www.gic.com.sg
1191 + categories: [finance, banking]
1192 + tier: C
1193 + aliases: [gic, gic private limited, government of singapore investment corporation]
1194 + discover: { rss: false }
1195 + sensors:
1196 + - { name: newsroom, url: "https://www.gic.com.sg/newsroom/", type: HTML, connector: http, tier: C }
1197 + - id: temasek
1198 + name: Temasek
1199 + domain: temasek.com.sg
1200 + homepage: https://www.temasek.com.sg/en/index
1201 + categories: [finance, banking]
1202 + tier: C
1203 + aliases: [temasek, temasek holdings]
1204 + discover: { rss: false, sitemap: false }
1205 + notes: "BLOCKED 2026-09-08: 403 on the news room and every other path for bot UAs. Listed for entity linking only."
1206 + - id: berkshire-hathaway
1207 + name: Berkshire Hathaway
1208 + domain: berkshirehathaway.com
1209 + homepage: https://www.berkshirehathaway.com
1210 + categories: [finance, banking, insurance]
1211 + tier: B
1212 + aliases: [berkshire hathaway, berkshire]
1213 + discover: { rss: false, sitemap: false }
1214 + notes: "NOT REACHABLE 2026-09-08: www.berkshirehathaway.com:443 connect timeout from our client on every attempt (static site, likely IP-filtered). Listed for entity linking only."
1215 + # ───────────────────────── F · Fintech & payments ─────────────────────────
1216 + - id: wise
1217 + name: Wise
1218 + domain: wise.com
1219 + categories: [finance, payments]
1220 + tier: S
1221 + aliases: [wise, transferwise]
1222 + products:
1223 + - { name: Wise Platform, type: API }
1224 + discover: { rss: false, status: true }
1225 + sensors:
1226 + - { name: status, url: "https://status.wise.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1227 + - { name: newsroom, url: "https://newsroom.wise.com/en-NAM/", type: HTML, connector: http, tier: B }
1228 + - { name: pricing canada, url: "https://wise.com/ca/pricing/", type: HTML, connector: http, tier: C }
1229 + - id: revolut
1230 + name: Revolut
1231 + domain: revolut.com
1232 + homepage: https://www.revolut.com
1233 + categories: [finance, payments, banking]
1234 + tier: B
1235 + aliases: [revolut]
1236 + discover: { rss: false, sitemap: false }
1237 + notes: "BLOCKED 2026-09-08: /news answers 403, the blog is a client-rendered shell and status.revolut.com does not resolve. Listed for entity linking only."
1238 + - id: klarna
1239 + name: Klarna
1240 + domain: klarna.com
1241 + homepage: https://www.klarna.com
1242 + categories: [finance, payments]
1243 + tier: S
1244 + aliases: [klarna]
1245 + discover: { rss: false, status: true }
1246 + sensors:
1247 + - { name: status, url: "https://status.klarna.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1248 + - { name: press, url: "https://www.klarna.com/international/press/", type: HTML, connector: http, tier: B }
1249 + - id: adyen
1250 + name: Adyen
1251 + domain: adyen.com
1252 + homepage: https://www.adyen.com
1253 + categories: [finance, payments]
1254 + tier: A
1255 + aliases: [adyen]
1256 + discover: { rss: false, sitemap: true }
1257 + notes: "status.adyen.com is not an Atlassian page (HTML only); press page is server-rendered."
1258 + sensors:
1259 + - { name: press and media, url: "https://www.adyen.com/press-and-media", type: HTML, connector: http, tier: B }
1260 + - { name: pricing, url: "https://www.adyen.com/pricing", type: HTML, connector: http, tier: C }
1261 + - id: interac
1262 + name: Interac
1263 + domain: interac.ca
1264 + homepage: https://www.interac.ca/en/
1265 + categories: [finance, payments]
1266 + tier: A
1267 + aliases: [interac, interac e-transfer, virement interac]
1268 + products:
1269 + - { name: Interac e-Transfer, type: service, aliases: [e-transfer, virement interac] }
1270 + - { name: Interac Debit, type: service }
1271 + discover: { rss: false }
1272 + sensors:
1273 + - { name: news feed, url: "https://www.interac.ca/en/feed/", type: RSS, connector: rss, tier: A }
1274 + - id: payments-canada
1275 + name: Payments Canada
1276 + domain: payments.ca
1277 + homepage: https://www.payments.ca
1278 + categories: [finance, payments, infrastructure]
1279 + tier: A
1280 + aliases: [payments canada, paiements canada, lynx, real-time rail, rtr]
1281 + products:
1282 + - { name: Real-Time Rail, type: service, aliases: [rtr] }
1283 + - { name: Lynx, type: service }
1284 + discover: { rss: false }
1285 + sensors:
1286 + - { name: news feed, url: "https://www.payments.ca/rss.xml", type: RSS, connector: rss, tier: A }
1287 + - id: plaid
1288 + name: Plaid
1289 + domain: plaid.com
1290 + categories: [finance, payments, developer]
1291 + tier: S
1292 + aliases: [plaid]
1293 + products:
1294 + - { name: Plaid API, type: API }
1295 + discover: { rss: false, status: true }
1296 + sensors:
1297 + - { name: status, url: "https://status.plaid.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1298 + - { name: blog feed, url: "https://plaid.com/blog/rss.xml", type: RSS, connector: rss, tier: B }
1299 + - { name: docs changelog, url: "https://plaid.com/docs/changelog/", type: HTML, connector: http, tier: A }
1300 + - id: affirm
1301 + name: Affirm
1302 + domain: affirm.com
1303 + homepage: https://www.affirm.com
1304 + categories: [finance, payments]
1305 + tier: S
1306 + aliases: [affirm]
1307 + discover: { rss: false, status: true, sitemap: true }
1308 + notes: "Press redirects to the Q4 IR host (unreachable); status page + sitemap."
1309 + sensors:
1310 + - { name: status, url: "https://status.affirm.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1311 + - { name: sitemap, url: "https://www.affirm.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
1312 + - id: sofi
1313 + name: SoFi
1314 + domain: sofi.com
1315 + homepage: https://www.sofi.com
1316 + categories: [finance, banking, payments]
1317 + tier: B
1318 + aliases: [sofi, sofi technologies]
1319 + discover: { rss: false, sitemap: false }
1320 + notes: "BLOCKED 2026-09-08: sofi.com answers 403 on every path and sofistatus.statuspage.io/api/v2/summary.json answers 401. Listed for entity linking only."
1321 + - id: robinhood
1322 + name: Robinhood
1323 + domain: robinhood.com
1324 + categories: [finance, payments, crypto]
1325 + tier: S
1326 + aliases: [robinhood, robinhood markets]
1327 + discover: { rss: false, status: true, sitemap: true }
1328 + notes: "newsroom.robinhood.com answers 403, the on-site newsroom is client-rendered and the sitemap index is empty; status page only."
1329 + sensors:
1330 + - { name: status, url: "https://status.robinhood.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1331 + - id: interactive-brokers
1332 + name: Interactive Brokers
1333 + domain: interactivebrokers.com
1334 + homepage: https://www.interactivebrokers.com
1335 + categories: [finance, payments]
1336 + tier: A
1337 + aliases: [interactive brokers, ibkr, ib]
1338 + discover: { rss: false, sitemap: true }
1339 + sensors:
1340 + - { name: system status, url: "https://www.interactivebrokers.com/en/software/systemStatus.php", type: HTML, connector: http, tier: A }
1341 + - { name: sitemap, url: "https://www.interactivebrokers.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
1342 + - id: charles-schwab
1343 + name: Charles Schwab
1344 + domain: schwab.com
1345 + homepage: https://www.schwab.com
1346 + categories: [finance, banking]
1347 + tier: B
1348 + aliases: [charles schwab, schwab, td ameritrade]
1349 + discover: { rss: false, sitemap: false }
1350 + notes: "BLOCKED 2026-09-08: pressroom.aboutschwab.com answers 403; schwab.com pages return a 216-char bot-check shell. Listed for entity linking only."
1351 + - id: wealthsimple
1352 + name: Wealthsimple
1353 + domain: wealthsimple.com
1354 + homepage: https://www.wealthsimple.com
1355 + categories: [finance, payments, banking]
1356 + tier: S
1357 + aliases: [wealthsimple]
1358 + discover: { rss: false, status: true }
1359 + sensors:
1360 + - { name: status, url: "https://status.wealthsimple.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1361 + - { name: newsroom, url: "https://newsroom.wealthsimple.com/", type: HTML, connector: http, tier: B }
1362 + - { name: pricing, url: "https://www.wealthsimple.com/fr-ca/pricing", type: HTML, connector: http, tier: C }
1363 + - id: questrade
1364 + name: Questrade
1365 + domain: questrade.com
1366 + homepage: https://www.questrade.com
1367 + categories: [finance, banking]
1368 + tier: C
1369 + aliases: [questrade]
1370 + discover: { rss: false, sitemap: false }
1371 + notes: "BLOCKED 2026-09-08: news pages answer 403 to bots; no status page found. Listed for entity linking only."
1372 + - id: nuvei
1373 + name: Nuvei
1374 + domain: nuvei.com
1375 + homepage: https://www.nuvei.com
1376 + categories: [finance, payments]
1377 + tier: C
1378 + aliases: [nuvei]
1379 + discover: { rss: false, sitemap: true }
1380 + notes: "Newsroom and IR RSS 404; sitemap used."
1381 + sensors:
1382 + - { name: sitemap, url: "https://www.nuvei.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1383 + - id: lightspeed
1384 + name: Lightspeed Commerce
1385 + domain: lightspeedhq.com
1386 + homepage: https://www.lightspeedhq.com
1387 + categories: [finance, payments, commerce]
1388 + tier: S
1389 + aliases: [lightspeed, lightspeed commerce, lightspeed pos]
1390 + discover: { rss: false, status: true }
1391 + sensors:
1392 + - { name: status, url: "https://status.lightspeedhq.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1393 + - { name: news feed, url: "https://www.lightspeedhq.com/news/feed/", type: RSS, connector: rss, tier: B }
1394 + - id: marqeta
1395 + name: Marqeta
1396 + domain: marqeta.com
1397 + homepage: https://www.marqeta.com
1398 + categories: [finance, payments, developer]
1399 + tier: S
1400 + aliases: [marqeta]
1401 + discover: { rss: false, status: true }
1402 + sensors:
1403 + - { name: status, url: "https://status.marqeta.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1404 + - { name: newsroom, url: "https://www.marqeta.com/newsroom", type: HTML, connector: http, tier: B }
1405 + - id: checkout-com
1406 + name: Checkout.com
1407 + domain: checkout.com
1408 + homepage: https://www.checkout.com
1409 + categories: [finance, payments, developer]
1410 + tier: A
1411 + aliases: [checkout.com, checkout]
1412 + discover: { rss: false }
1413 + notes: "status.checkout.com answers 403 to bots; blog RSS + server-rendered newsroom."
1414 + sensors:
1415 + - { name: blog feed, url: "https://www.checkout.com/blog/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 40 } }
1416 + - { name: newsroom, url: "https://www.checkout.com/newsroom", type: HTML, connector: http, tier: B }
1417 + - id: worldpay
1418 + name: Worldpay
1419 + domain: worldpay.com
1420 + homepage: https://www.worldpay.com
1421 + categories: [finance, payments]
1422 + tier: S
1423 + aliases: [worldpay]
1424 + discover: { rss: false, status: true, sitemap: true }
1425 + sensors:
1426 + - { name: status, url: "https://status.worldpay.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1427 + - { name: sitemap, url: "https://www.worldpay.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
1428 + - id: fiserv
1429 + name: Fiserv
1430 + domain: fiserv.com
1431 + homepage: https://www.fiserv.com
1432 + categories: [finance, payments]
1433 + tier: C
1434 + aliases: [fiserv, clover, first data]
1435 + discover: { rss: false, sitemap: true }
1436 + notes: "newsroom.fiserv.com (Q4) never answers our client; corporate sitemap used."
1437 + sensors:
1438 + - { name: sitemap, url: "https://www.fiserv.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1439 + - id: fis
1440 + name: FIS
1441 + domain: fisglobal.com
1442 + homepage: https://www.fisglobal.com
1443 + categories: [finance, payments]
1444 + tier: B
1445 + aliases: [fis, fidelity national information services, fis global]
1446 + discover: { rss: false, sitemap: true }
1447 + sensors:
1448 + - { name: media room, url: "https://www.fisglobal.com/about-us/media-room", type: HTML, connector: http, tier: B }
1449 + - { name: sitemap, url: "https://www.fisglobal.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1450 + - id: global-payments
1451 + name: Global Payments
1452 + domain: globalpayments.com
1453 + homepage: https://www.globalpayments.com
1454 + categories: [finance, payments]
1455 + tier: C
1456 + aliases: [global payments, tsys]
1457 + discover: { rss: false, sitemap: false }
1458 + notes: "BLOCKED 2026-09-08: newsroom and IR RSS answer 403/404 to bots. Listed for entity linking only."
1459 + - id: moneris
1460 + name: Moneris
1461 + domain: moneris.com
1462 + homepage: https://www.moneris.com
1463 + categories: [finance, payments]
1464 + tier: S
1465 + aliases: [moneris]
1466 + discover: { rss: false, status: true, sitemap: true }
1467 + sensors:
1468 + - { name: status, url: "https://status.moneris.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1469 + - { name: news, url: "https://www.moneris.com/en/media-room/news", type: HTML, connector: http, tier: B }
1470 + - { name: news sitemap, url: "https://www.moneris.com/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
1471 + - id: airwallex
1472 + name: Airwallex
1473 + domain: airwallex.com
1474 + homepage: https://www.airwallex.com
1475 + categories: [finance, payments]
1476 + tier: S
1477 + aliases: [airwallex]
1478 + discover: { rss: false, status: true }
1479 + sensors:
1480 + - { name: status, url: "https://status.airwallex.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1481 + - id: brex
1482 + name: Brex
1483 + domain: brex.com
1484 + homepage: https://www.brex.com
1485 + categories: [finance, payments]
1486 + tier: S
1487 + aliases: [brex]
1488 + discover: { rss: false, status: true }
1489 + sensors:
1490 + - { name: status, url: "https://status.brex.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1491 + - id: chime
1492 + name: Chime
1493 + domain: chime.com
1494 + homepage: https://www.chime.com
1495 + categories: [finance, banking, payments]
1496 + tier: S
1497 + aliases: [chime, chime financial]
1498 + discover: { rss: false, status: true }
1499 + sensors:
1500 + - { name: status, url: "https://status.chime.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1501 + - id: payoneer
1502 + name: Payoneer
1503 + domain: payoneer.com
1504 + homepage: https://www.payoneer.com
1505 + categories: [finance, payments]
1506 + tier: S
1507 + aliases: [payoneer]
1508 + discover: { rss: false, status: true }
1509 + sensors:
1510 + - { name: status, url: "https://status.payoneer.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1511 + - id: gocardless
1512 + name: GoCardless
1513 + domain: gocardless.com
1514 + homepage: https://gocardless.com
1515 + categories: [finance, payments]
1516 + tier: S
1517 + aliases: [gocardless]
1518 + discover: { rss: false, status: true }
1519 + sensors:
1520 + - { name: status, url: "https://www.gocardless-status.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1521 + - id: monzo
1522 + name: Monzo
1523 + domain: monzo.com
1524 + categories: [finance, banking]
1525 + tier: S
1526 + aliases: [monzo, monzo bank]
1527 + discover: { rss: false, status: true }
1528 + sensors:
1529 + - { name: status, url: "https://monzo.statuspage.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1530 + - id: truelayer
1531 + name: TrueLayer
1532 + domain: truelayer.com
1533 + categories: [finance, payments, developer]
1534 + tier: S
1535 + aliases: [truelayer]
1536 + discover: { rss: false, status: true }
1537 + sensors:
1538 + - { name: status, url: "https://status.truelayer.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1539 + - id: mercury
1540 + name: Mercury
1541 + domain: mercury.com
1542 + categories: [finance, banking]
1543 + tier: S
1544 + aliases: [mercury, mercury bank]
1545 + discover: { rss: false, status: true }
1546 + sensors:
1547 + - { name: status, url: "https://status.mercury.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1548 + - id: block
1549 + extend: true
1550 + aliases: [cash app]
1551 + products:
1552 + - { name: Cash App, type: product, aliases: [cashapp] }
1553 + sensors:
1554 + - { name: cash app status, url: "https://status.cash.app/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1555 + # ───────────────────────── G · Insurance ─────────────────────────
1556 + - id: allianz
1557 + name: Allianz
1558 + domain: allianz.com
1559 + homepage: https://www.allianz.com
1560 + categories: [finance, insurance]
1561 + tier: A
1562 + aliases: [allianz, allianz se, pimco]
1563 + discover: { rss: false, sitemap: false }
1564 + notes: "BLOCKED 2026-09-08: press pages and RSS answer 403 to bots. Listed for entity linking only."
1565 + - id: axa
1566 + name: AXA
1567 + domain: axa.com
1568 + homepage: https://www.axa.com
1569 + categories: [finance, insurance]
1570 + tier: A
1571 + aliases: [axa, axa group]
1572 + discover: { rss: false }
1573 + sensors:
1574 + - { name: news feed, url: "https://www.axa.com/rss", type: RSS, connector: rss, tier: A, config: { maxItems: 40 } }
1575 + - id: manulife
1576 + name: Manulife
1577 + domain: manulife.com
1578 + homepage: https://www.manulife.com
1579 + categories: [finance, insurance]
1580 + tier: A
1581 + aliases: [manulife, manulife financial, john hancock, financière manuvie]
1582 + discover: { rss: false, sitemap: false }
1583 + notes: "BLOCKED 2026-09-08: news pages and RSS answer 403 to bots. Listed for entity linking only."
1584 + - id: sun-life
1585 + name: Sun Life
1586 + domain: sunlife.com
1587 + homepage: https://www.sunlife.com
1588 + categories: [finance, insurance]
1589 + tier: A
1590 + aliases: [sun life, sun life financial, financière sun life]
1591 + discover: { rss: false }
1592 + sensors:
1593 + - { name: newsroom, url: "https://www.sunlife.com/en/newsroom/", type: HTML, connector: http, tier: A }
1594 + - id: intact-financial
1595 + name: Intact Financial
1596 + domain: intactfc.com
1597 + homepage: https://www.intactfc.com
1598 + categories: [finance, insurance]
1599 + tier: B
1600 + aliases: [intact financial, intact, intact insurance, intact assurance]
1601 + discover: { rss: false, sitemap: false }
1602 + notes: "BLOCKED 2026-09-08: the Q4-hosted site answers 405 to bots on news and RSS paths. Listed for entity linking only."
1603 + - id: aviva
1604 + name: Aviva
1605 + domain: aviva.com
1606 + homepage: https://www.aviva.com
1607 + categories: [finance, insurance]
1608 + tier: B
1609 + aliases: [aviva, aviva plc]
1610 + discover: { rss: false, sitemap: false }
1611 + notes: "BLOCKED 2026-09-08: newsroom and RSS answer 403 to bots. Listed for entity linking only."
1612 + - id: zurich-insurance
1613 + name: Zurich Insurance Group
1614 + domain: zurich.com
1615 + homepage: https://www.zurich.com
1616 + categories: [finance, insurance]
1617 + tier: B
1618 + aliases: [zurich insurance, zurich insurance group, zurich]
1619 + discover: { rss: false, sitemap: true }
1620 + notes: "News-release page is a client-rendered shell (847 bytes); sitemap used."
1621 + sensors:
1622 + - { name: sitemap, url: "https://www.zurich.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
1623 + - id: chubb
1624 + name: Chubb
1625 + domain: chubb.com
1626 + homepage: https://www.chubb.com
1627 + categories: [finance, insurance]
1628 + tier: B
1629 + aliases: [chubb, chubb limited]
1630 + discover: { rss: false, sitemap: true }
1631 + sensors:
1632 + - { name: news, url: "https://news.chubb.com/", type: HTML, connector: http, tier: B }
1633 + - { name: sitemap, url: "https://www.chubb.com/sitemapindex.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 10 } }
1634 + - id: aig
1635 + name: AIG
1636 + domain: aig.com
1637 + homepage: https://www.aig.com
1638 + categories: [finance, insurance]
1639 + tier: B
1640 + aliases: [aig, american international group]
1641 + discover: { rss: false, sitemap: true }
1642 + sensors:
1643 + - { name: newsroom, url: "https://www.aig.com/newsroom", type: HTML, connector: http, tier: B }
1644 + - { name: news sitemap, url: "https://www.aig.com/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B }
1645 + - id: metlife
1646 + name: MetLife
1647 + domain: metlife.com
1648 + homepage: https://www.metlife.com
1649 + categories: [finance, insurance]
1650 + tier: B
1651 + aliases: [metlife]
1652 + discover: { rss: false, sitemap: true }
1653 + sensors:
1654 + - { name: newsroom, url: "https://www.metlife.com/about-us/newsroom/", type: HTML, connector: http, tier: B }
1655 + - { name: sitemap, url: "https://www.metlife.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1656 + - id: prudential-financial
1657 + name: Prudential Financial
1658 + domain: prudential.com
1659 + homepage: https://www.prudential.com
1660 + categories: [finance, insurance]
1661 + tier: C
1662 + aliases: [prudential financial, prudential, pgim]
1663 + discover: { rss: false, sitemap: false }
1664 + notes: "NOT COVERED 2026-09-08: news.prudential.com is a 1 KB client-rendered shell (RSS path too); no sitemap discovered. Listed for entity linking only."
1665 + - id: swiss-re
1666 + name: Swiss Re
1667 + domain: swissre.com
1668 + homepage: https://www.swissre.com
1669 + categories: [finance, insurance]
1670 + tier: B
1671 + aliases: [swiss re, swiss reinsurance]
1672 + discover: { rss: false, sitemap: false }
1673 + notes: "BLOCKED 2026-09-08: press-release page and sitemap.xml answer 403 to the connector (Akamai). Listed for entity linking only."
1674 + - id: munich-re
1675 + name: Munich Re
1676 + domain: munichre.com
1677 + homepage: https://www.munichre.com/en.html
1678 + categories: [finance, insurance]
1679 + tier: B
1680 + aliases: [munich re, münchener rück, munich reinsurance]
1681 + discover: { rss: false, sitemap: true }
1682 + sensors:
1683 + - { name: media relations, url: "https://www.munichre.com/en/company/media-relations.html", type: HTML, connector: http, tier: B }
1684 + - { name: sitemap, url: "https://www.munichre.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 10 } }
1685 + - id: lloyds-of-london
1686 + name: Lloyd's of London
1687 + domain: lloyds.com
1688 + homepage: https://www.lloyds.com
1689 + categories: [finance, insurance]
1690 + tier: B
1691 + aliases: [lloyd's of london, lloyd's, lloyds of london]
1692 + discover: { rss: false }
1693 + sensors:
1694 + - { name: press releases, url: "https://www.lloyds.com/insights/media-centre/press-releases", type: HTML, connector: http, tier: B }
1695 + - id: great-west-lifeco
1696 + name: Great-West Lifeco
1697 + domain: greatwestlifeco.com
1698 + homepage: https://www.greatwestlifeco.com
1699 + categories: [finance, insurance]
1700 + tier: C
1701 + aliases: [great-west lifeco, great west lifeco, canada life, empower]
1702 + discover: { rss: false, sitemap: true }
1703 + notes: "News-release page 404; sitemap index used."
1704 + sensors:
1705 + - { name: sitemap, url: "https://www.greatwestlifeco.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1706 + - id: ia-financial
1707 + name: iA Financial Group
1708 + domain: ia.ca
1709 + homepage: https://ia.ca
1710 + categories: [finance, insurance]
1711 + tier: C
1712 + aliases: [ia financial group, ia groupe financier, industrial alliance, industrielle alliance]
1713 + discover: { rss: false, sitemap: false }
1714 + notes: "NOT COVERED 2026-09-08: newsroom listing is client-rendered (350 chars) and the sitemap index resolves to zero URLs (children time out). Listed for entity linking only."
1715 + - id: fairfax-financial
1716 + name: Fairfax Financial
1717 + domain: fairfax.ca
1718 + homepage: https://www.fairfax.ca
1719 + categories: [finance, insurance]
1720 + tier: B
1721 + aliases: [fairfax financial, fairfax, fairfax financial holdings]
1722 + discover: { rss: false }
1723 + sensors:
1724 + - { name: news feed, url: "https://www.fairfax.ca/feed/", type: RSS, connector: rss, tier: B }
added config/sources.d/12-energy-climate-weather.yaml +1542 −0
@@ -0,0 +1,1542 @@
1 +# config/sources.d/12-energy-climate-weather.yaml — energy agencies & regulators, grid/system operators,
2 +# oil & gas, pipelines, utilities, renewables & equipment, nuclear & new energy, weather & hazard agencies,
3 +# climate bodies & analysts. Written 2026-09-08; every sensor below passed apps/engine/src/validate.ts.
4 +# Blocked organizations (403 bot management, client-rendered news, no feed) are kept only with `notes:`.
5 +sources:
6 + # ───────────────────────── A · Energy agencies & regulators ─────────────────────────
7 + - id: eia
8 + name: U.S. Energy Information Administration
9 + domain: eia.gov
10 + homepage: https://www.eia.gov
11 + categories: [energy, statistics, government]
12 + tier: A
13 + weight: 1.4
14 + aliases: [eia, energy information administration]
15 + products:
16 + - { name: Today in Energy, type: product }
17 + - { name: Short-Term Energy Outlook, type: product, aliases: [steo] }
18 + - { name: Weekly Petroleum Status Report, type: product, aliases: [wpsr] }
19 + discover: { rss: true, sitemap: false }
20 + sensors:
21 + - { name: today in energy feed, url: "https://www.eia.gov/rss/todayinenergy.xml", type: RSS, connector: rss, tier: A }
22 + - { name: press releases feed, url: "https://www.eia.gov/rss/press_rss.xml", type: RSS, connector: rss, tier: B }
23 + - { name: this week in petroleum feed, url: "https://www.eia.gov/petroleum/weekly/includes/week_in_petroleum_rss.xml", type: RSS, connector: rss, tier: B }
24 + - id: iea
25 + name: International Energy Agency
26 + domain: iea.org
27 + homepage: https://www.iea.org
28 + categories: [energy, international]
29 + tier: B
30 + weight: 1.3
31 + aliases: [iea]
32 + products:
33 + - { name: World Energy Outlook, type: product, aliases: [weo] }
34 + - { name: Oil Market Report, type: product, aliases: [omr] }
35 + discover: { rss: false, sitemap: false, pages: true }
36 + notes: "news.rss and sitemap.xml return 403 (bot management); only the server-rendered news index is reachable."
37 + sensors:
38 + - { name: news index, url: "https://www.iea.org/news", type: HTML, connector: http, tier: B }
39 + - id: opec
40 + name: OPEC
41 + domain: opec.org
42 + homepage: https://www.opec.org
43 + categories: [energy, international]
44 + tier: B
45 + weight: 1.3
46 + aliases: [organization of the petroleum exporting countries, opec+]
47 + products:
48 + - { name: Monthly Oil Market Report, type: product, aliases: [momr] }
49 + discover: { rss: false, sitemap: false }
50 + notes: "press_releases.rss, sitemap.xml and every HTML page answer 403 to non-browser clients — kept for entity linking only."
51 + - id: irena
52 + name: International Renewable Energy Agency
53 + domain: irena.org
54 + homepage: https://www.irena.org
55 + categories: [energy, international]
56 + tier: C
57 + aliases: [irena]
58 + discover: { rss: false, sitemap: true }
59 + notes: "No RSS; /News answers 403 to bots. Sitemap only."
60 + sensors:
61 + - { name: sitemap, url: "https://www.irena.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
62 + - id: ferc
63 + name: Federal Energy Regulatory Commission
64 + domain: ferc.gov
65 + homepage: https://www.ferc.gov
66 + categories: [energy, government]
67 + tier: B
68 + weight: 1.2
69 + aliases: [ferc]
70 + discover: { rss: false, sitemap: false }
71 + notes: "rss.xml, sitemap.xml and news pages return 403 (Akamai) even with a browser UA — no sensor possible without a fallback budget."
72 + - id: nerc
73 + name: North American Electric Reliability Corporation
74 + domain: nerc.com
75 + homepage: https://www.nerc.com
76 + categories: [energy, standards]
77 + tier: B
78 + weight: 1.1
79 + aliases: [nerc]
80 + discover: { rss: false, sitemap: true }
81 + sensors:
82 + - { name: sitemap, url: "https://www.nerc.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 4000 } }
83 + - { name: newsroom, url: "https://www.nerc.com/newsroom", type: HTML, connector: http, tier: B }
84 + - id: us-nrc
85 + name: U.S. Nuclear Regulatory Commission
86 + domain: nrc.gov
87 + homepage: https://www.nrc.gov
88 + categories: [energy, government]
89 + tier: B
90 + weight: 1.2
91 + aliases: [nrc, nuclear regulatory commission]
92 + discover: { rss: false, sitemap: false }
93 + notes: "All feeds (public-involve/rss) and news pages return 403 to non-browser clients — kept for entity linking only."
94 + - id: cer
95 + name: Canada Energy Regulator
96 + domain: cer-rec.gc.ca
97 + homepage: https://www.cer-rec.gc.ca
98 + categories: [energy, government]
99 + tier: B
100 + aliases: [cer, régie de l'énergie du canada, rec]
101 + discover: { rss: false, sitemap: false, pages: true }
102 + notes: "rss/news-eng.xml returns 403; the What's New archive is server-rendered."
103 + sensors:
104 + - { name: what's new, url: "https://www.cer-rec.gc.ca/en/about/news-room/whats-new/", type: HTML, connector: http, tier: B }
105 + - id: regie-energie-quebec
106 + name: Régie de l'énergie du Québec
107 + domain: regie-energie.qc.ca
108 + homepage: https://www.regie-energie.qc.ca
109 + categories: [energy, government]
110 + tier: B
111 + aliases: [régie de l'énergie, regie de l'energie]
112 + discover: { rss: true, sitemap: true, pages: true }
113 + sensors:
114 + - { name: nouvelles et décisions, url: "https://www.regie-energie.qc.ca/fr/nouvelles", type: HTML, connector: http, tier: B }
115 + - { name: communiqués de presse, url: "https://www.regie-energie.qc.ca/fr/la-regie/publications-documentation/communiques-de-presse-de-la-regie", type: HTML, connector: http, tier: C }
116 + - id: ofgem
117 + name: Ofgem
118 + domain: ofgem.gov.uk
119 + homepage: https://www.ofgem.gov.uk
120 + categories: [energy, government]
121 + tier: B
122 + aliases: [office of gas and electricity markets]
123 + discover: { rss: false, sitemap: true }
124 + notes: "rss.xml is empty and the news index is client-rendered; the paginated sitemap is the usable endpoint."
125 + sensors:
126 + - { name: sitemap, url: "https://www.ofgem.gov.uk/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 4000, maxChildren: 10 } }
127 + - id: acer-energy
128 + name: ACER — EU Agency for the Cooperation of Energy Regulators
129 + domain: acer.europa.eu
130 + homepage: https://www.acer.europa.eu
131 + categories: [energy, government, international]
132 + tier: B
133 + aliases: [acer]
134 + discover: { rss: true, sitemap: true }
135 + sensors:
136 + - { name: news feed, url: "https://www.acer.europa.eu/rss.xml", type: RSS, connector: rss, tier: B }
137 + - id: bundesnetzagentur
138 + name: Bundesnetzagentur
139 + domain: bundesnetzagentur.de
140 + homepage: https://www.bundesnetzagentur.de
141 + categories: [energy, telecom, government]
142 + tier: B
143 + aliases: [bnetza, federal network agency]
144 + discover: { rss: true }
145 + sensors:
146 + - { name: aktuelles feed, url: "https://bundesnetzagentur.de/rss/news", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
147 + - id: cre-france
148 + name: Commission de régulation de l'énergie
149 + domain: cre.fr
150 + homepage: https://www.cre.fr
151 + categories: [energy, government]
152 + tier: B
153 + aliases: [cre]
154 + discover: { rss: false, sitemap: true, pages: true }
155 + sensors:
156 + - { name: actualités, url: "https://www.cre.fr/actualites/toute-lactualite.html", type: HTML, connector: http, tier: B }
157 + - { name: sitemap, url: "https://www.cre.fr/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
158 + - id: aer-alberta
159 + name: Alberta Energy Regulator
160 + domain: aer.ca
161 + homepage: https://www.aer.ca
162 + categories: [energy, government]
163 + tier: B
164 + aliases: [aer, alberta energy regulator]
165 + discover: { rss: false, sitemap: false }
166 + notes: "Every path (including /rss) answers 403 to non-browser clients — no sensor."
167 +
168 + # ───────────────────────── B · Grid & system operators ─────────────────────────
169 + - id: ercot
170 + name: ERCOT
171 + domain: ercot.com
172 + homepage: https://www.ercot.com
173 + categories: [energy, infrastructure]
174 + tier: A
175 + weight: 1.2
176 + aliases: [electric reliability council of texas, texas grid]
177 + discover: { rss: false, sitemap: true, pages: true }
178 + sensors:
179 + - { name: news releases, url: "https://www.ercot.com/news/releases", type: HTML, connector: http, tier: A }
180 + - { name: sitemap, url: "https://www.ercot.com/static-assets/data/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 5000 } }
181 + - id: caiso
182 + name: California ISO
183 + domain: caiso.com
184 + homepage: https://www.caiso.com
185 + categories: [energy, infrastructure]
186 + tier: A
187 + weight: 1.2
188 + aliases: [caiso, california independent system operator]
189 + discover: { rss: false, sitemap: true, pages: true }
190 + sensors:
191 + - { name: news, url: "https://www.caiso.com/about/news", type: HTML, connector: http, tier: A }
192 + - id: pjm
193 + name: PJM Interconnection
194 + domain: pjm.com
195 + homepage: https://www.pjm.com
196 + categories: [energy, infrastructure]
197 + tier: A
198 + weight: 1.2
199 + aliases: [pjm]
200 + products:
201 + - { name: Inside Lines, type: product }
202 + discover: { rss: true, sitemap: true }
203 + sensors:
204 + - { name: inside lines feed, url: "https://insidelines.pjm.com/feed/", type: RSS, connector: rss, tier: A }
205 + - { name: sitemap, url: "https://www.pjm.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
206 + - id: miso
207 + name: MISO — Midcontinent Independent System Operator
208 + domain: misoenergy.org
209 + homepage: https://www.misoenergy.org
210 + categories: [energy, infrastructure]
211 + tier: B
212 + aliases: [miso]
213 + discover: { rss: false, sitemap: false }
214 + notes: "Cloudflare bot management: every path answers 403 to non-browser clients."
215 + - id: nyiso
216 + name: New York ISO
217 + domain: nyiso.com
218 + homepage: https://www.nyiso.com
219 + categories: [energy, infrastructure]
220 + tier: B
221 + aliases: [nyiso, new york independent system operator]
222 + discover: { rss: false, sitemap: true, pages: true }
223 + sensors:
224 + - { name: press releases, url: "https://www.nyiso.com/press", type: HTML, connector: http, tier: B }
225 + - id: iso-ne
226 + name: ISO New England
227 + domain: iso-ne.com
228 + homepage: https://www.iso-ne.com
229 + categories: [energy, infrastructure]
230 + tier: B
231 + aliases: [iso-ne, iso new england]
232 + products:
233 + - { name: ISO Newswire, type: product }
234 + discover: { rss: true, sitemap: true, pages: true }
235 + sensors:
236 + - { name: iso newswire feed, url: "https://isonewswire.com/feed/", type: RSS, connector: rss, tier: B }
237 + - { name: press releases, url: "https://www.iso-ne.com/about/news-media/press-releases", type: HTML, connector: http, tier: B }
238 + - id: spp
239 + name: Southwest Power Pool
240 + domain: spp.org
241 + homepage: https://www.spp.org
242 + categories: [energy, infrastructure]
243 + tier: B
244 + aliases: [spp]
245 + discover: { rss: false, sitemap: true, pages: true }
246 + sensors:
247 + - { name: newsroom, url: "https://www.spp.org/newsroom", type: HTML, connector: http, tier: B }
248 + - id: ieso
249 + name: IESO — Independent Electricity System Operator (Ontario)
250 + domain: ieso.ca
251 + homepage: https://www.ieso.ca
252 + categories: [energy, infrastructure]
253 + tier: B
254 + weight: 1.1
255 + aliases: [ieso, ontario grid operator]
256 + discover: { rss: false, sitemap: true, pages: true }
257 + sensors:
258 + - { name: news releases, url: "https://www.ieso.ca/en/Corporate-IESO/Media/News-Releases", type: HTML, connector: http, tier: B }
259 + - { name: news sitemap, url: "https://ieso.ca/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 4000 } }
260 + - id: aeso
261 + name: Alberta Electric System Operator
262 + domain: aeso.ca
263 + homepage: https://www.aeso.ca
264 + categories: [energy, infrastructure]
265 + tier: B
266 + aliases: [aeso]
267 + discover: { rss: true, sitemap: true, pages: true }
268 + sensors:
269 + - { name: news feed, url: "https://www.aeso.ca/rss/", type: RSS, connector: rss, tier: B }
270 + - { name: newsroom, url: "https://www.aeso.ca/aeso/newsroom/", type: HTML, connector: http, tier: B }
271 + - id: hydro-quebec
272 + name: Hydro-Québec
273 + domain: hydroquebec.com
274 + homepage: https://www.hydroquebec.com
275 + categories: [energy, infrastructure]
276 + tier: A
277 + weight: 1.3
278 + aliases: [hydro quebec, hydro-québec, hq]
279 + discover: { rss: true, sitemap: true, pages: true }
280 + sensors:
281 + - { name: newsroom feed, url: "https://news.hydroquebec.com/news/rss/5/salle-de-nouvelles", type: RSS, connector: rss, tier: A, config: { maxItems: 50 } }
282 + - { name: sitemap, url: "https://hydroquebec.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 4000 } }
283 + - id: neso
284 + name: NESO — National Energy System Operator (GB)
285 + domain: neso.energy
286 + homepage: https://www.neso.energy
287 + categories: [energy, infrastructure]
288 + tier: A
289 + weight: 1.1
290 + aliases: [neso, national energy system operator, national grid eso]
291 + discover: { rss: true, sitemap: true, pages: true }
292 + sensors:
293 + - { name: news feed, url: "https://www.neso.energy/rss.xml", type: RSS, connector: rss, tier: A }
294 + - { name: news and events, url: "https://www.neso.energy/news", type: HTML, connector: http, tier: B }
295 + - id: national-grid
296 + name: National Grid
297 + domain: nationalgrid.com
298 + homepage: https://www.nationalgrid.com
299 + categories: [energy, infrastructure]
300 + tier: B
301 + weight: 1.1
302 + aliases: [national grid plc]
303 + discover: { rss: false, sitemap: false }
304 + notes: "rss.xml answers 403 to the engine fetcher (bot management) — no sensor."
305 + - id: rte
306 + name: RTE — Réseau de Transport d'Électricité
307 + domain: rte-france.com
308 + homepage: https://www.rte-france.com
309 + categories: [energy, infrastructure]
310 + tier: B
311 + weight: 1.1
312 + aliases: [rte, rte france]
313 + discover: { rss: false, sitemap: true, pages: true }
314 + sensors:
315 + - { name: newsroom, url: "https://www.rte-france.com/newsroom", type: HTML, connector: http, tier: B }
316 + - { name: sitemap, url: "https://www.rte-france.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
317 + - id: entsoe
318 + name: ENTSO-E
319 + domain: entsoe.eu
320 + homepage: https://www.entsoe.eu
321 + categories: [energy, infrastructure, international]
322 + tier: B
323 + weight: 1.2
324 + aliases: [entso-e, european network of transmission system operators for electricity]
325 + discover: { rss: true, sitemap: true }
326 + sensors:
327 + - { name: news feed, url: "https://www.entsoe.eu/rss/news.xml", type: RSS, connector: rss, tier: B }
328 + - { name: position papers feed, url: "https://www.entsoe.eu/rss/positions.xml", type: RSS, connector: rss, tier: C }
329 + - id: aemo
330 + name: AEMO — Australian Energy Market Operator
331 + domain: aemo.com.au
332 + homepage: https://www.aemo.com.au
333 + categories: [energy, infrastructure]
334 + tier: B
335 + aliases: [aemo]
336 + discover: { rss: false, sitemap: false }
337 + notes: "403 (bot management) on every path including /newsroom and /rss — no sensor."
338 + - id: elia
339 + name: Elia Group
340 + domain: elia.be
341 + homepage: https://www.elia.be
342 + categories: [energy, infrastructure]
343 + tier: C
344 + aliases: [elia]
345 + discover: { rss: false, sitemap: false }
346 + notes: "403 on every path to non-browser clients — no sensor."
347 + - id: tennet
348 + name: TenneT
349 + domain: tennet.eu
350 + homepage: https://www.tennet.eu
351 + categories: [energy, infrastructure]
352 + tier: B
353 + aliases: [tennet tso]
354 + discover: { rss: false, sitemap: true, pages: true }
355 + notes: "/rss returns 403; the news index is server-rendered."
356 + sensors:
357 + - { name: news, url: "https://www.tennet.eu/news", type: HTML, connector: http, tier: B }
358 + - id: 50hertz
359 + name: 50Hertz
360 + domain: 50hertz.com
361 + homepage: https://www.50hertz.com
362 + categories: [energy, infrastructure]
363 + tier: C
364 + aliases: [50 hertz]
365 + discover: { rss: false, sitemap: false }
366 + notes: "Site redirected every probe to a maintenance error page (wartung.50hertz.com) on 2026-09-08 — no sensor; re-probe later."
367 + - id: amprion
368 + name: Amprion
369 + domain: amprion.net
370 + homepage: https://www.amprion.net
371 + categories: [energy, infrastructure]
372 + tier: C
373 + discover: { rss: false, sitemap: true }
374 + sensors:
375 + - { name: sitemap (en), url: "https://www.amprion.net/Sitemap-EN.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
376 + - id: terna
377 + name: Terna
378 + domain: terna.it
379 + homepage: https://www.terna.it
380 + categories: [energy, infrastructure]
381 + tier: B
382 + aliases: [terna spa]
383 + discover: { rss: false, sitemap: false }
384 + notes: "Press-release index is client-rendered (thin) and no feed or sitemap was found — no sensor."
385 + - id: red-electrica
386 + name: Red Eléctrica (Redeia)
387 + domain: ree.es
388 + homepage: https://www.ree.es
389 + categories: [energy, infrastructure]
390 + tier: B
391 + aliases: [ree, redeia, red electrica]
392 + discover: { rss: true, sitemap: true }
393 + sensors:
394 + - { name: noticias feed, url: "https://www.ree.es/es/rss.xml", type: RSS, connector: rss, tier: B }
395 + - id: energinet
396 + name: Energinet
397 + domain: energinet.dk
398 + homepage: https://energinet.dk
399 + categories: [energy, infrastructure]
400 + tier: C
401 + discover: { rss: false, sitemap: true, pages: true }
402 + notes: "News index is client-rendered (thin); sitemap only."
403 + sensors:
404 + - { name: sitemap, url: "https://www.energinet.dk/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
405 + - id: statnett
406 + name: Statnett
407 + domain: statnett.no
408 + homepage: https://www.statnett.no
409 + categories: [energy, infrastructure]
410 + tier: C
411 + discover: { rss: true, sitemap: true }
412 + sensors:
413 + - { name: news feed, url: "https://www.statnett.no/rss", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
414 + - id: svenska-kraftnat
415 + name: Svenska kraftnät
416 + domain: svk.se
417 + homepage: https://www.svk.se
418 + categories: [energy, infrastructure]
419 + tier: C
420 + aliases: [svk, svenska kraftnat]
421 + discover: { rss: false, sitemap: true }
422 + sensors:
423 + - { name: sitemap, url: "https://www.svk.se/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
424 + - id: fingrid
425 + name: Fingrid
426 + domain: fingrid.fi
427 + homepage: https://www.fingrid.fi
428 + categories: [energy, infrastructure]
429 + tier: C
430 + discover: { rss: false, sitemap: true, pages: true }
431 + sensors:
432 + - { name: news (en), url: "https://www.fingrid.fi/en/news/", type: HTML, connector: http, tier: B }
433 + - { name: sitemap, url: "https://www.fingrid.fi/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
434 +
435 + # ───────────────────────── C · Oil & gas, pipelines, utilities, renewables ─────────────────────────
436 + - id: exxonmobil
437 + name: ExxonMobil
438 + domain: exxonmobil.com
439 + homepage: https://corporate.exxonmobil.com
440 + categories: [energy, finance]
441 + tier: A
442 + weight: 1.3
443 + aliases: [exxon, exxon mobil, xom]
444 + discover: { rss: true, sitemap: true }
445 + sensors:
446 + - { name: newsroom feed, url: "https://corporate.exxonmobil.com/feed.xml", type: ATOM, connector: rss, tier: A }
447 + - id: chevron
448 + name: Chevron
449 + domain: chevron.com
450 + homepage: https://www.chevron.com
451 + categories: [energy, finance]
452 + tier: B
453 + weight: 1.2
454 + aliases: [cvx]
455 + discover: { rss: false, sitemap: false }
456 + notes: "Every path (newsroom, sitemap) answers 403 to non-browser clients — kept for entity linking only."
457 + - id: shell
458 + name: Shell
459 + domain: shell.com
460 + homepage: https://www.shell.com
461 + categories: [energy, finance]
462 + tier: B
463 + weight: 1.3
464 + aliases: [shell plc, royal dutch shell]
465 + discover: { rss: false, sitemap: true, pages: true }
466 + notes: "Newsroom index is client-rendered (thin); sitemap only."
467 + sensors:
468 + - { name: sitemap, url: "https://www.shell.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
469 + - id: bp
470 + name: BP
471 + domain: bp.com
472 + homepage: https://www.bp.com
473 + categories: [energy, finance]
474 + tier: B
475 + weight: 1.2
476 + aliases: [bp plc, british petroleum]
477 + discover: { rss: false, sitemap: false }
478 + notes: "Press-release pages answer 403 (Akamai) to non-browser clients and no feed exists — kept for entity linking only."
479 + - id: totalenergies
480 + name: TotalEnergies
481 + domain: totalenergies.com
482 + homepage: https://totalenergies.com
483 + categories: [energy, finance]
484 + tier: B
485 + weight: 1.2
486 + aliases: [total, total energies]
487 + discover: { rss: false, sitemap: true, pages: true }
488 + sensors:
489 + - { name: news, url: "https://totalenergies.com/news", type: HTML, connector: http, tier: B }
490 + - { name: sitemap, url: "https://totalenergies.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
491 + - id: equinor
492 + name: Equinor
493 + domain: equinor.com
494 + homepage: https://www.equinor.com
495 + categories: [energy, finance]
496 + tier: B
497 + weight: 1.1
498 + aliases: [statoil]
499 + discover: { rss: false, sitemap: true, pages: true }
500 + notes: "News index is client-rendered (thin); sitemap only."
501 + sensors:
502 + - { name: sitemap, url: "https://www.equinor.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
503 + - id: eni
504 + name: Eni
505 + domain: eni.com
506 + homepage: https://www.eni.com
507 + categories: [energy, finance]
508 + tier: C
509 + aliases: [eni spa]
510 + discover: { rss: false, sitemap: true }
511 + sensors:
512 + - { name: sitemap (en), url: "https://www.eni.com/en-IT/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
513 + - id: saudi-aramco
514 + name: Saudi Aramco
515 + domain: aramco.com
516 + homepage: https://www.aramco.com
517 + categories: [energy, finance]
518 + tier: B
519 + weight: 1.3
520 + aliases: [aramco]
521 + discover: { rss: false, sitemap: true, pages: true }
522 + sensors:
523 + - { name: news and media, url: "https://www.aramco.com/en/news-media", type: HTML, connector: http, tier: B }
524 + - { name: sitemap, url: "https://www.aramco.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
525 + - id: petrobras
526 + name: Petrobras
527 + domain: petrobras.com.br
528 + homepage: https://petrobras.com.br
529 + categories: [energy, finance]
530 + tier: C
531 + aliases: [petróleo brasileiro]
532 + discover: { rss: false, sitemap: true }
533 + sensors:
534 + - { name: sitemap, url: "https://petrobras.com.br/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
535 + - id: suncor
536 + name: Suncor Energy
537 + domain: suncor.com
538 + homepage: https://www.suncor.com
539 + categories: [energy, finance]
540 + tier: B
541 + aliases: [suncor, petro-canada]
542 + discover: { rss: false, sitemap: false }
543 + notes: "newsroom pages answer 403 (Akamai) and the investor RSS host does not resolve — kept for entity linking only."
544 + - id: cenovus
545 + name: Cenovus Energy
546 + domain: cenovus.com
547 + homepage: https://www.cenovus.com
548 + categories: [energy, finance]
549 + tier: B
550 + aliases: [cenovus]
551 + discover: { rss: false, sitemap: true, pages: true }
552 + sensors:
553 + - { name: news and stories, url: "https://www.cenovus.com/News-and-Stories", type: HTML, connector: http, tier: B }
554 + - id: cnrl
555 + name: Canadian Natural Resources
556 + domain: cnrl.com
557 + homepage: https://www.cnrl.com
558 + categories: [energy, finance]
559 + tier: B
560 + aliases: [cnrl, canadian natural]
561 + discover: { rss: false, sitemap: true, pages: true }
562 + sensors:
563 + - { name: news alert, url: "https://www.cnrl.com/news-alert/", type: HTML, connector: http, tier: B }
564 + - id: imperial-oil
565 + name: Imperial Oil
566 + domain: imperialoil.ca
567 + homepage: https://www.imperialoil.ca
568 + categories: [energy, finance]
569 + tier: B
570 + aliases: [imperial, esso canada]
571 + discover: { rss: true, sitemap: true }
572 + sensors:
573 + - { name: news feed, url: "https://www.imperialoil.ca/feed.xml", type: ATOM, connector: rss, tier: B }
574 + - id: enbridge
575 + name: Enbridge
576 + domain: enbridge.com
577 + homepage: https://www.enbridge.com
578 + categories: [energy, infrastructure, finance]
579 + tier: B
580 + weight: 1.2
581 + aliases: [enbridge inc]
582 + discover: { rss: false, sitemap: true, pages: true }
583 + sensors:
584 + - { name: news releases, url: "https://www.enbridge.com/news", type: HTML, connector: http, tier: B }
585 + - { name: sitemap, url: "https://www.enbridge.com/sitemap-enbridge.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
586 + - id: tc-energy
587 + name: TC Energy
588 + domain: tcenergy.com
589 + homepage: https://www.tcenergy.com
590 + categories: [energy, infrastructure, finance]
591 + tier: B
592 + weight: 1.1
593 + aliases: [transcanada, tc energy]
594 + discover: { rss: false, sitemap: true, pages: true }
595 + sensors:
596 + - { name: newsroom, url: "https://www.tcenergy.com/newsroom", type: HTML, connector: http, tier: B }
597 + - { name: sitemap, url: "https://www.tcenergy.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
598 + - id: kinder-morgan
599 + name: Kinder Morgan
600 + domain: kindermorgan.com
601 + homepage: https://www.kindermorgan.com
602 + categories: [energy, infrastructure, finance]
603 + tier: C
604 + aliases: [kmi]
605 + discover: { rss: false, sitemap: true }
606 + notes: "Investor RSS (ir.kindermorgan.com) answers 403; sitemap only."
607 + sensors:
608 + - { name: sitemap, url: "https://kindermorgan.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
609 + - id: williams
610 + name: Williams Companies
611 + domain: williams.com
612 + homepage: https://www.williams.com
613 + categories: [energy, infrastructure, finance]
614 + tier: C
615 + aliases: [williams, wmb]
616 + discover: { rss: true, sitemap: true }
617 + sensors:
618 + - { name: news feed, url: "https://www.williams.com/feed/", type: RSS, connector: rss, tier: B }
619 + - id: duke-energy
620 + name: Duke Energy
621 + domain: duke-energy.com
622 + homepage: https://www.duke-energy.com
623 + categories: [energy, finance]
624 + tier: B
625 + weight: 1.1
626 + aliases: [duke]
627 + discover: { rss: true }
628 + sensors:
629 + - { name: news releases feed, url: "https://news.duke-energy.com/releases.xml", type: RSS, connector: rss, tier: B }
630 + - { name: storms and outages feed, url: "https://news.duke-energy.com/cats/storms_and_outages.xml", type: RSS, connector: rss, tier: A }
631 + - id: nextera-energy
632 + name: NextEra Energy
633 + domain: nexteraenergy.com
634 + homepage: https://www.nexteraenergy.com
635 + categories: [energy, finance]
636 + tier: B
637 + weight: 1.2
638 + aliases: [nextera, nee, florida power & light, fpl]
639 + discover: { rss: true, sitemap: true }
640 + sensors:
641 + - { name: investor news feed, url: "https://www.investor.nexteraenergy.com/rss/news-releases.xml", type: RSS, connector: rss, tier: B }
642 + - { name: newsroom feed, url: "https://newsroom.nexteraenergy.com/news-releases?pagetemplate=rss", type: RSS, connector: rss, tier: B }
643 + - id: southern-company
644 + name: Southern Company
645 + domain: southerncompany.com
646 + homepage: https://www.southerncompany.com
647 + categories: [energy, finance]
648 + tier: C
649 + aliases: [southern co, georgia power]
650 + discover: { rss: false, sitemap: true, pages: true }
651 + sensors:
652 + - { name: newsroom, url: "https://www.southerncompany.com/newsroom.html", type: HTML, connector: http, tier: B }
653 + - { name: sitemap, url: "https://www.southerncompany.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
654 + - id: exelon
655 + name: Exelon
656 + domain: exeloncorp.com
657 + homepage: https://www.exeloncorp.com
658 + categories: [energy, finance]
659 + tier: C
660 + aliases: [exelon corporation, comed, peco, bge]
661 + discover: { rss: true, sitemap: true, pages: true }
662 + sensors:
663 + - { name: investor news feed, url: "https://investors.exeloncorp.com/rss/news-releases.xml", type: RSS, connector: rss, tier: B }
664 + - { name: newsroom, url: "https://www.exeloncorp.com/newsroom", type: HTML, connector: http, tier: B }
665 + - id: dominion-energy
666 + name: Dominion Energy
667 + domain: dominionenergy.com
668 + homepage: https://www.dominionenergy.com
669 + categories: [energy, finance]
670 + tier: C
671 + aliases: [dominion]
672 + discover: { rss: false, sitemap: true }
673 + sensors:
674 + - { name: news sitemap, url: "https://www.dominionenergy.com/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
675 + - id: aep
676 + name: American Electric Power
677 + domain: aep.com
678 + homepage: https://www.aep.com
679 + categories: [energy, finance]
680 + tier: C
681 + aliases: [aep]
682 + discover: { rss: true, sitemap: true }
683 + sensors:
684 + - { name: news feed, url: "https://www.aep.com/news/rss/", type: RSS, connector: rss, tier: B }
685 + - id: fortis
686 + name: Fortis Inc.
687 + domain: fortisinc.com
688 + homepage: https://www.fortisinc.com
689 + categories: [energy, finance]
690 + tier: C
691 + aliases: [fortis, fortisbc, fortisalberta]
692 + discover: { rss: false, sitemap: true, pages: true }
693 + sensors:
694 + - { name: news releases, url: "https://fortisinc.com/news", type: HTML, connector: http, tier: B }
695 + - id: emera
696 + name: Emera
697 + domain: emera.com
698 + homepage: https://www.emera.com
699 + categories: [energy, finance]
700 + tier: C
701 + aliases: [emera inc, nova scotia power]
702 + discover: { rss: false, sitemap: true, pages: true }
703 + notes: "emera.com/news redirects to a client-rendered Q4 investor page (75 chars of text); no feed — no sensor."
704 + - id: hydro-one
705 + name: Hydro One
706 + domain: hydroone.com
707 + homepage: https://www.hydroone.com
708 + categories: [energy, infrastructure]
709 + tier: C
710 + aliases: [hydro one]
711 + discover: { rss: true, sitemap: true, pages: true }
712 + notes: "No feed, sitemap or server-rendered news index found (media-centre paths 404; investors host does not resolve)."
713 + - id: bc-hydro
714 + name: BC Hydro
715 + domain: bchydro.com
716 + homepage: https://www.bchydro.com
717 + categories: [energy, infrastructure]
718 + tier: B
719 + aliases: [bc hydro]
720 + discover: { rss: false, sitemap: true, pages: true }
721 + sensors:
722 + - { name: press centre, url: "https://www.bchydro.com/news/press_centre.html", type: HTML, connector: http, tier: B }
723 + - { name: sitemap, url: "https://www.bchydro.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 4000 } }
724 + - id: opg
725 + name: Ontario Power Generation
726 + domain: opg.com
727 + homepage: https://www.opg.com
728 + categories: [energy, infrastructure]
729 + tier: B
730 + aliases: [opg, ontario power generation]
731 + discover: { rss: false, sitemap: false }
732 + notes: "WordPress /feed/ and /news/ answer 403 to the engine fetcher (bot management) — no sensor."
733 + - id: energir
734 + name: Énergir
735 + domain: energir.com
736 + homepage: https://energir.com
737 + categories: [energy, infrastructure]
738 + tier: C
739 + aliases: [energir, gaz métro, gaz metro]
740 + discover: { rss: false, sitemap: true, pages: true }
741 + sensors:
742 + - { name: news, url: "https://energir.com/en/about/media/news", type: HTML, connector: http, tier: B }
743 + - { name: sitemap (fr), url: "https://energir.com/fr/sitemaps-1-sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
744 + - id: iberdrola
745 + name: Iberdrola
746 + domain: iberdrola.com
747 + homepage: https://www.iberdrola.com
748 + categories: [energy, finance]
749 + tier: B
750 + weight: 1.1
751 + aliases: [scottishpower, avangrid]
752 + discover: { rss: false, sitemap: false }
753 + notes: "Press room and /rss answer 403 to non-browser clients — kept for entity linking only."
754 + - id: enel
755 + name: Enel
756 + domain: enel.com
757 + homepage: https://www.enel.com
758 + categories: [energy, finance]
759 + tier: B
760 + weight: 1.1
761 + aliases: [enel group, endesa]
762 + discover: { rss: false, sitemap: true }
763 + notes: "Press pages redirect to the homepage for non-browser clients; the large sitemap is the usable endpoint."
764 + sensors:
765 + - { name: sitemap, url: "https://www.enel.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 4000 } }
766 + - id: edf
767 + name: EDF
768 + domain: edf.fr
769 + homepage: https://www.edf.fr
770 + categories: [energy, finance]
771 + tier: B
772 + weight: 1.2
773 + aliases: [électricité de france, electricite de france]
774 + discover: { rss: false, sitemap: false, pages: true }
775 + notes: "rss.xml answers 403; the press-release index is server-rendered."
776 + sensors:
777 + - { name: communiqués de presse, url: "https://www.edf.fr/groupe-edf/espaces-dedies/journalistes/tous-les-communiques-de-presse", type: HTML, connector: http, tier: B }
778 + - id: engie
779 + name: Engie
780 + domain: engie.com
781 + homepage: https://www.engie.com
782 + categories: [energy, finance]
783 + tier: C
784 + aliases: [gdf suez]
785 + discover: { rss: false, sitemap: true }
786 + sensors:
787 + - { name: sitemap, url: "https://www.engie.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
788 + - id: eon
789 + name: E.ON
790 + domain: eon.com
791 + homepage: https://www.eon.com
792 + categories: [energy, finance]
793 + tier: C
794 + aliases: [e.on, eon se]
795 + discover: { rss: false, sitemap: false }
796 + notes: "Press pages and RSS answer 403 to non-browser clients — kept for entity linking only."
797 + - id: rwe
798 + name: RWE
799 + domain: rwe.com
800 + homepage: https://www.rwe.com
801 + categories: [energy, finance]
802 + tier: B
803 + aliases: [rwe ag]
804 + discover: { rss: false, sitemap: true, pages: true }
805 + sensors:
806 + - { name: press, url: "https://www.rwe.com/en/press/", type: HTML, connector: http, tier: B }
807 + - { name: sitemap, url: "https://www.rwe.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
808 + - id: orsted
809 + name: Ørsted
810 + domain: orsted.com
811 + homepage: https://orsted.com
812 + categories: [energy, finance]
813 + tier: B
814 + aliases: [orsted, dong energy]
815 + discover: { rss: false, sitemap: false }
816 + notes: "Company-announcement list and /rss answer 403 to non-browser clients — kept for entity linking only."
817 + - id: vattenfall
818 + name: Vattenfall
819 + domain: vattenfall.com
820 + homepage: https://group.vattenfall.com
821 + categories: [energy, finance]
822 + tier: C
823 + discover: { rss: false, sitemap: true, pages: true }
824 + sensors:
825 + - { name: newsroom, url: "https://group.vattenfall.com/press-and-media/newsroom", type: HTML, connector: http, tier: B }
826 + - { name: sitemap, url: "https://group.vattenfall.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
827 + - id: sse
828 + name: SSE plc
829 + domain: sse.com
830 + homepage: https://www.sse.com
831 + categories: [energy, finance]
832 + tier: C
833 + aliases: [sse, scottish and southern energy]
834 + discover: { rss: false, sitemap: true, pages: true }
835 + sensors:
836 + - { name: news and views, url: "https://www.sse.com/news-and-views/", type: HTML, connector: http, tier: B }
837 + - { name: sitemap, url: "https://www.sse.com/xmlsitemap", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
838 + - id: centrica
839 + name: Centrica
840 + domain: centrica.com
841 + homepage: https://www.centrica.com
842 + categories: [energy, finance]
843 + tier: C
844 + aliases: [british gas]
845 + discover: { rss: false, sitemap: false }
846 + notes: "Media-centre pages answer 403 to the engine fetcher — no sensor."
847 + - id: vestas
848 + name: Vestas
849 + domain: vestas.com
850 + homepage: https://www.vestas.com
851 + categories: [energy, technology, finance]
852 + tier: B
853 + weight: 1.1
854 + aliases: [vestas wind systems]
855 + discover: { rss: false, sitemap: true, pages: true }
856 + notes: "Company-news index is client-rendered; sitemap only."
857 + sensors:
858 + - { name: sitemap, url: "https://www.vestas.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
859 + - id: siemens-energy
860 + name: Siemens Energy
861 + domain: siemens-energy.com
862 + homepage: https://www.siemens-energy.com
863 + categories: [energy, technology, finance]
864 + tier: B
865 + weight: 1.1
866 + aliases: [siemens energy ag]
867 + discover: { rss: false, sitemap: true, pages: true }
868 + notes: "Press index is client-rendered (thin); sitemap only."
869 + sensors:
870 + - { name: sitemap, url: "https://www.siemens-energy.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
871 + - id: siemens-gamesa
872 + name: Siemens Gamesa
873 + domain: siemensgamesa.com
874 + homepage: https://www.siemensgamesa.com
875 + categories: [energy, technology]
876 + tier: C
877 + aliases: [gamesa]
878 + discover: { rss: false, sitemap: true }
879 + sensors:
880 + - { name: sitemap, url: "https://www.siemensgamesa.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
881 + - id: ge-vernova
882 + name: GE Vernova
883 + domain: gevernova.com
884 + homepage: https://www.gevernova.com
885 + categories: [energy, technology, finance]
886 + tier: B
887 + weight: 1.2
888 + aliases: [ge vernova, gev, ge power]
889 + discover: { rss: false, sitemap: true, pages: true }
890 + notes: "rss.xml, news/rss.xml and news/sitemap.xml all answer 500 to the engine fetcher (200 to curl); only the server-rendered news index is usable."
891 + sensors:
892 + - { name: news, url: "https://www.gevernova.com/news", type: HTML, connector: http, tier: B }
893 + - id: first-solar
894 + name: First Solar
895 + domain: firstsolar.com
896 + homepage: https://www.firstsolar.com
897 + categories: [energy, technology, finance]
898 + tier: C
899 + aliases: [fslr]
900 + discover: { rss: false, sitemap: true }
901 + notes: "Investor RSS (investor.firstsolar.com) answers 403; the news sitemap is the usable endpoint."
902 + sensors:
903 + - { name: news sitemap, url: "https://www.firstsolar.com/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 1000 } }
904 + - id: enphase
905 + name: Enphase Energy
906 + domain: enphase.com
907 + homepage: https://enphase.com
908 + categories: [energy, technology, finance]
909 + tier: C
910 + aliases: [enphase, enph]
911 + discover: { rss: true, sitemap: true, pages: true }
912 + sensors:
913 + - { name: investor news feed, url: "https://investor.enphase.com/rss/news-releases.xml", type: RSS, connector: rss, tier: B }
914 + - { name: blog, url: "https://enphase.com/blog", type: HTML, connector: http, tier: C }
915 + - id: solaredge
916 + name: SolarEdge
917 + domain: solaredge.com
918 + homepage: https://www.solaredge.com
919 + categories: [energy, technology, finance]
920 + tier: C
921 + aliases: [sedg]
922 + discover: { rss: true, sitemap: true }
923 + sensors:
924 + - { name: investor news feed, url: "https://investors.solaredge.com/rss/news-releases.xml", type: RSS, connector: rss, tier: B }
925 + - id: fluence
926 + name: Fluence Energy
927 + domain: fluenceenergy.com
928 + homepage: https://fluenceenergy.com
929 + categories: [energy, technology, finance]
930 + tier: C
931 + aliases: [fluence, flnc]
932 + discover: { rss: true, sitemap: true }
933 + sensors:
934 + - { name: investor news feed, url: "https://ir.fluenceenergy.com/rss/news-releases.xml", type: RSS, connector: rss, tier: B }
935 + - id: brookfield-renewable
936 + name: Brookfield Renewable
937 + domain: brookfieldrenewable.com
938 + homepage: https://bep.brookfield.com
939 + categories: [energy, finance]
940 + tier: C
941 + aliases: [bep, brookfield renewable partners]
942 + discover: { rss: false, sitemap: false }
943 + notes: "bep.brookfield.com (press releases, Q4 RSS) answers 403 to non-browser clients — kept for entity linking only."
944 + - id: northland-power
945 + name: Northland Power
946 + domain: northlandpower.com
947 + homepage: https://northlandpower.com
948 + categories: [energy, finance]
949 + tier: C
950 + aliases: [npi]
951 + discover: { rss: true, sitemap: true }
952 + sensors:
953 + - { name: newsroom feed, url: "https://northlandpower.com/newsroom/feed/", type: RSS, connector: rss, tier: B }
954 + - id: boralex
955 + name: Boralex
956 + domain: boralex.com
957 + homepage: https://www.boralex.com
958 + categories: [energy, finance]
959 + tier: C
960 + aliases: [blx]
961 + discover: { rss: false, sitemap: true, pages: true }
962 + sensors:
963 + - { name: news, url: "https://www.boralex.com/en/news", type: HTML, connector: http, tier: B }
964 + - id: innergex
965 + name: Innergex Renewable Energy
966 + domain: innergex.com
967 + homepage: https://www.innergex.com
968 + categories: [energy, finance]
969 + tier: C
970 + aliases: [innergex, ine]
971 + discover: { rss: false, sitemap: true }
972 + notes: "Single-page app (client-rendered, no feed, /en/news 404) — no sensor."
973 +
974 + # ───────────────────────── D · Nuclear & new energy ─────────────────────────
975 + - id: westinghouse
976 + name: Westinghouse Electric Company
977 + domain: westinghousenuclear.com
978 + homepage: https://www.westinghousenuclear.com
979 + categories: [energy, technology]
980 + tier: B
981 + weight: 1.1
982 + aliases: [westinghouse nuclear, ap1000, ap300]
983 + discover: { rss: true, sitemap: true }
984 + sensors:
985 + - { name: news feed, url: "https://info.westinghousenuclear.com/news/rss.xml", type: RSS, connector: rss, tier: B }
986 + - { name: sitemap, url: "https://westinghousenuclear.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
987 + - id: cameco
988 + name: Cameco
989 + domain: cameco.com
990 + homepage: https://www.cameco.com
991 + categories: [energy, finance]
992 + tier: B
993 + weight: 1.1
994 + aliases: [ccj, cco]
995 + discover: { rss: true, sitemap: true }
996 + sensors:
997 + - { name: news feed, url: "https://www.cameco.com/rss/news", type: RSS, connector: rss, tier: B }
998 + - id: nuscale
999 + name: NuScale Power
1000 + domain: nuscalepower.com
1001 + homepage: https://www.nuscalepower.com
1002 + categories: [energy, technology, finance]
1003 + tier: C
1004 + aliases: [nuscale, smr]
1005 + discover: { rss: true, sitemap: true }
1006 + sensors:
1007 + - { name: press releases feed, url: "https://www.nuscalepower.com/press-releases/rss.xml", type: RSS, connector: rss, tier: B }
1008 + - id: terrapower
1009 + name: TerraPower
1010 + domain: terrapower.com
1011 + homepage: https://www.terrapower.com
1012 + categories: [energy, technology]
1013 + tier: C
1014 + aliases: [natrium]
1015 + discover: { rss: false, sitemap: true, pages: true }
1016 + sensors:
1017 + - { name: news, url: "https://www.terrapower.com/news", type: HTML, connector: http, tier: B }
1018 + - { name: sitemap, url: "https://www.terrapower.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1019 + - id: commonwealth-fusion
1020 + name: Commonwealth Fusion Systems
1021 + domain: cfs.energy
1022 + homepage: https://cfs.energy
1023 + categories: [energy, technology, science]
1024 + tier: C
1025 + aliases: [cfs, sparc, arc]
1026 + discover: { rss: false, sitemap: true, pages: true }
1027 + sensors:
1028 + - { name: news and media, url: "https://cfs.energy/news-and-media/", type: HTML, connector: http, tier: B }
1029 + - { name: sitemap, url: "https://cfs.energy/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1030 + - id: iter
1031 + name: ITER Organization
1032 + domain: iter.org
1033 + homepage: https://www.iter.org
1034 + categories: [energy, science, international]
1035 + tier: C
1036 + aliases: [iter, iter fusion]
1037 + discover: { rss: true, sitemap: true }
1038 + sensors:
1039 + - { name: newsline feed, url: "https://www.iter.org/rss.xml", type: RSS, connector: rss, tier: B }
1040 + - id: x-energy
1041 + name: X-energy
1042 + domain: x-energy.com
1043 + homepage: https://x-energy.com
1044 + categories: [energy, technology]
1045 + tier: C
1046 + aliases: [x energy, xe-100]
1047 + discover: { rss: true, sitemap: true }
1048 + sensors:
1049 + - { name: news feed, url: "https://x-energy.com/news/feed/", type: RSS, connector: rss, tier: B }
1050 + - id: helion
1051 + name: Helion Energy
1052 + domain: helionenergy.com
1053 + homepage: https://www.helionenergy.com
1054 + categories: [energy, technology]
1055 + tier: C
1056 + aliases: [helion, polaris]
1057 + discover: { rss: false, sitemap: true, pages: true }
1058 + sensors:
1059 + - { name: newsroom, url: "https://www.helionenergy.com/newsroom", type: HTML, connector: http, tier: B }
1060 + - id: oklo
1061 + name: Oklo
1062 + domain: oklo.com
1063 + homepage: https://oklo.com
1064 + categories: [energy, technology, finance]
1065 + tier: C
1066 + aliases: [oklo inc, aurora powerhouse]
1067 + discover: { rss: false, sitemap: false }
1068 + notes: "Newsroom answers 403 to non-browser clients and the Q4 investor host does not resolve — kept for entity linking only."
1069 + - id: kairos-power
1070 + name: Kairos Power
1071 + domain: kairospower.com
1072 + homepage: https://kairospower.com
1073 + categories: [energy, technology]
1074 + tier: C
1075 + aliases: [kairos, hermes reactor]
1076 + discover: { rss: false, sitemap: true }
1077 + notes: "No feed and /news 404; sitemap only."
1078 + sensors:
1079 + - { name: sitemap, url: "https://www.kairospower.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1080 + - id: general-fusion
1081 + name: General Fusion
1082 + domain: generalfusion.com
1083 + homepage: https://generalfusion.com
1084 + categories: [energy, technology]
1085 + tier: C
1086 + aliases: [general fusion, lm26]
1087 + discover: { rss: true, sitemap: true }
1088 + sensors:
1089 + - { name: news feed, url: "https://generalfusion.com/feed/", type: RSS, connector: rss, tier: B }
1090 + - id: world-nuclear-news
1091 + name: World Nuclear News (World Nuclear Association)
1092 + domain: world-nuclear-news.org
1093 + homepage: https://www.world-nuclear-news.org
1094 + categories: [energy, news, international]
1095 + tier: B
1096 + weight: 1.1
1097 + aliases: [wnn, world nuclear association, wna]
1098 + discover: { rss: true, sitemap: true }
1099 + llm: false
1100 + notes: "world-nuclear.org itself exposes no feed or sitemap; WNN is the association's news service."
1101 + sensors:
1102 + - { name: news feed, url: "https://world-nuclear-news.org/rss", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
1103 + - id: nei
1104 + name: Nuclear Energy Institute
1105 + domain: nei.org
1106 + homepage: https://www.nei.org
1107 + categories: [energy, ngo]
1108 + tier: C
1109 + aliases: [nei]
1110 + discover: { rss: false, sitemap: false }
1111 + notes: "Every path answers 403 to non-browser clients — kept for entity linking only."
1112 + - id: cnsc
1113 + name: Canadian Nuclear Safety Commission
1114 + domain: nuclearsafety.gc.ca
1115 + homepage: https://www.cnsc-ccsn.gc.ca
1116 + categories: [energy, government]
1117 + tier: B
1118 + aliases: [cnsc, ccsn, commission canadienne de sûreté nucléaire]
1119 + discover: { rss: false, sitemap: true, pages: true }
1120 + sensors:
1121 + - { name: news feed (canada.ca), url: "https://api.io.canada.ca/io-server/gc/news/en/v2?dept=canadiannuclearsafetycommission&sort=publishedDate&orderBy=desc&pick=50&format=atom&atomtitle=CNSC", type: ATOM, connector: rss, tier: B }
1122 + - { name: news room, url: "https://www.cnsc-ccsn.gc.ca/eng/resources/news-room/", type: HTML, connector: http, tier: B }
1123 +
1124 + # ───────────────────────── E · Weather & hazards ─────────────────────────
1125 + - id: nws
1126 + name: National Weather Service
1127 + domain: weather.gov
1128 + homepage: https://www.weather.gov
1129 + categories: [weather, government]
1130 + tier: S
1131 + weight: 1.4
1132 + aliases: [nws, national weather service, api.weather.gov]
1133 + discover: { rss: false, sitemap: false, pages: true }
1134 + llm: false
1135 + sensors:
1136 + - { name: active alerts (extreme/severe), url: "https://api.weather.gov/alerts/active?status=actual&severity=Extreme,Severe", type: REST_API, connector: jsonlist, tier: S, config: { itemsPath: features, keyField: id, titleField: properties.headline, summaryField: properties.description, dateField: properties.sent, urlField: id, headers: { "User-Agent": "WebSensorBot/0.1 (contact@websensor.io)", Accept: "application/geo+json" }, maxItems: 100 } }
1137 + - { name: news, url: "https://www.weather.gov/news", type: HTML, connector: http, tier: B }
1138 + - id: noaa
1139 + extend: true
1140 + products:
1141 + - { name: National Hurricane Center, type: service, aliases: [nhc] }
1142 + - { name: Space Weather Prediction Center, type: service, aliases: [swpc] }
1143 + sensors:
1144 + - { name: nhc eastern pacific advisories, url: "https://www.nhc.noaa.gov/index-ep.xml", type: RSS, connector: rss, tier: A }
1145 + - { name: nhc tropical weather outlooks, url: "https://www.nhc.noaa.gov/gtwo.xml", type: RSS, connector: rss, tier: A }
1146 + - { name: climate.gov feed, url: "https://www.climate.gov/rss.xml", type: RSS, connector: rss, tier: B }
1147 + - id: usgs
1148 + extend: true
1149 + sensors:
1150 + - { name: earthquakes m4.5+ past day, url: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_day.atom", type: ATOM, connector: rss, tier: A, config: { maxItems: 50 } }
1151 + - id: eccc
1152 + extend: true
1153 + products:
1154 + - { name: Weather alerts, type: service, aliases: [weather.gc.ca, meteo.gc.ca] }
1155 + sensors:
1156 + - { name: weather alerts montréal, url: "https://weather.gc.ca/rss/alerts/45.508_-73.587_e.xml", type: ATOM, connector: rss, tier: A }
1157 + - { name: weather alerts toronto, url: "https://weather.gc.ca/rss/alerts/43.653_-79.383_e.xml", type: ATOM, connector: rss, tier: A }
1158 + - { name: weather alerts vancouver, url: "https://weather.gc.ca/rss/alerts/49.283_-123.121_e.xml", type: ATOM, connector: rss, tier: A }
1159 + - id: met-office
1160 + name: Met Office
1161 + domain: metoffice.gov.uk
1162 + homepage: https://www.metoffice.gov.uk
1163 + categories: [weather, government]
1164 + tier: B
1165 + weight: 1.1
1166 + aliases: [uk met office]
1167 + discover: { rss: false, sitemap: true, pages: true }
1168 + notes: "Warning RSS feeds (WarningsRSS/Region/UK) are empty when no warning is in force, so they cannot be validated as list sensors."
1169 + sensors:
1170 + - { name: news blog, url: "https://www.metoffice.gov.uk/blog", type: HTML, connector: http, tier: B }
1171 + - { name: sitemap, url: "https://www.metoffice.gov.uk/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1172 + - id: meteo-france
1173 + name: Météo-France
1174 + domain: meteofrance.com
1175 + homepage: https://meteofrance.com
1176 + categories: [weather, government]
1177 + tier: B
1178 + aliases: [meteo france, météo france]
1179 + discover: { rss: true, sitemap: false }
1180 + sensors:
1181 + - { name: actualités feed, url: "https://meteofrance.com/rss.xml", type: RSS, connector: rss, tier: B }
1182 + - id: dwd
1183 + name: Deutscher Wetterdienst
1184 + domain: dwd.de
1185 + homepage: https://www.dwd.de
1186 + categories: [weather, government]
1187 + tier: B
1188 + aliases: [dwd, german weather service]
1189 + discover: { rss: true, sitemap: true }
1190 + sensors:
1191 + - { name: pressemitteilungen feed, url: "https://www.dwd.de/SiteGlobals/Functions/RSSFeed/DE/pressemitteilungen/rssfeeds_pm.xml", type: RSS, connector: rss, tier: B }
1192 + - id: jma
1193 + name: Japan Meteorological Agency
1194 + domain: jma.go.jp
1195 + homepage: https://www.jma.go.jp
1196 + categories: [weather, government]
1197 + tier: A
1198 + weight: 1.2
1199 + aliases: [jma, 気象庁]
1200 + discover: { rss: false, sitemap: false }
1201 + llm: false
1202 + notes: "High-volume official Atom feeds (extra.xml ~870 entries/day); only the earthquake & volcano feed is curated."
1203 + sensors:
1204 + - { name: earthquake and volcano feed, url: "https://www.data.jma.go.jp/developer/xml/feed/eqvol.xml", type: ATOM, connector: rss, tier: A, config: { maxItems: 50 } }
1205 + - id: bom
1206 + name: Australian Bureau of Meteorology
1207 + domain: bom.gov.au
1208 + homepage: http://www.bom.gov.au
1209 + categories: [weather, government]
1210 + tier: B
1211 + aliases: [bom, bureau of meteorology]
1212 + discover: { rss: false, sitemap: false }
1213 + notes: "All RSS/warning feeds answer 403 to non-browser clients — kept for entity linking only."
1214 + - id: ecmwf
1215 + name: ECMWF
1216 + domain: ecmwf.int
1217 + homepage: https://www.ecmwf.int
1218 + categories: [weather, science, international]
1219 + tier: B
1220 + aliases: [european centre for medium-range weather forecasts]
1221 + discover: { rss: true, sitemap: true }
1222 + sensors:
1223 + - { name: news feed, url: "https://www.ecmwf.int/rss.xml", type: RSS, connector: rss, tier: B }
1224 + - id: copernicus
1225 + name: Copernicus (C3S · CAMS · EMS)
1226 + domain: copernicus.eu
1227 + homepage: https://www.copernicus.eu
1228 + categories: [climate, weather, science, international]
1229 + tier: B
1230 + weight: 1.2
1231 + aliases: [copernicus climate change service, c3s, copernicus atmosphere monitoring service, cams, copernicus emergency management service, ems]
1232 + products:
1233 + - { name: Copernicus Climate Bulletin, type: product, aliases: [climate bulletin] }
1234 + - { name: ERA5, type: product }
1235 + discover: { rss: true, sitemap: true }
1236 + sensors:
1237 + - { name: c3s news feed, url: "https://climate.copernicus.eu/rss.xml", type: RSS, connector: rss, tier: B }
1238 + - { name: cams news feed, url: "https://atmosphere.copernicus.eu/rss.xml", type: RSS, connector: rss, tier: B }
1239 + - { name: ems sitemap, url: "https://emergency.copernicus.eu/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
1240 + - id: gdacs
1241 + name: GDACS — Global Disaster Alert and Coordination System
1242 + domain: gdacs.org
1243 + homepage: https://www.gdacs.org
1244 + categories: [weather, international]
1245 + tier: A
1246 + weight: 1.2
1247 + aliases: [gdacs]
1248 + discover: { rss: true }
1249 + sensors:
1250 + - { name: alerts feed, url: "https://www.gdacs.org/xml/rss.xml", type: RSS, connector: rss, tier: A, config: { maxItems: 100 } }
1251 + - id: reliefweb
1252 + name: ReliefWeb (UN OCHA)
1253 + domain: reliefweb.int
1254 + homepage: https://reliefweb.int
1255 + categories: [international, ngo]
1256 + tier: B
1257 + aliases: [reliefweb, ocha]
1258 + discover: { rss: false, sitemap: false }
1259 + notes: "API v1 is decommissioned (410) and v2 rejects non-approved appnames (403); the site itself has no feed. Request an appname before adding a jsonlist sensor."
1260 + - id: pdc
1261 + name: Pacific Disaster Center
1262 + domain: pdc.org
1263 + homepage: https://www.pdc.org
1264 + categories: [weather, international]
1265 + tier: C
1266 + aliases: [pdc, disasteraware]
1267 + discover: { rss: false, sitemap: false }
1268 + notes: "WordPress /feed/ and /news/ answer 403 to non-browser clients — no sensor."
1269 + - id: smithsonian-gvp
1270 + name: Smithsonian Global Volcanism Program
1271 + domain: volcano.si.edu
1272 + homepage: https://volcano.si.edu
1273 + categories: [science, weather]
1274 + tier: B
1275 + aliases: [gvp, global volcanism program, weekly volcanic activity report]
1276 + discover: { rss: true }
1277 + sensors:
1278 + - { name: weekly volcanic activity report feed, url: "https://volcano.si.edu/news/WeeklyVolcanoRSS.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 40 } }
1279 + - id: emsc
1280 + name: EMSC — European-Mediterranean Seismological Centre
1281 + domain: emsc-csem.org
1282 + homepage: https://www.emsc-csem.org
1283 + categories: [science, weather]
1284 + tier: A
1285 + weight: 1.1
1286 + aliases: [emsc, seismicportal, csem]
1287 + discover: { rss: false, sitemap: false }
1288 + llm: false
1289 + sensors:
1290 + - { name: earthquakes m5+, url: "https://www.seismicportal.eu/fdsnws/event/1/query?format=json&limit=50&minmag=5", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: features, keyField: properties.source_id, titleTemplate: "M{properties.mag} {properties.flynn_region}", dateField: properties.time, urlTemplate: "https://www.emsc-csem.org/Earthquake_information/earthquake.php?id={key}", compareFields: [properties.mag, properties.depth], maxItems: 50 } }
1291 + - id: earthquakes-canada
1292 + name: Earthquakes Canada (Natural Resources Canada)
1293 + domain: earthquakescanada.nrcan.gc.ca
1294 + homepage: https://www.earthquakescanada.nrcan.gc.ca
1295 + categories: [science, weather, government]
1296 + tier: A
1297 + aliases: [earthquakes canada, séismes canada, nrcan earthquakes]
1298 + discover: { rss: false, sitemap: false }
1299 + llm: false
1300 + sensors:
1301 + - { name: recent earthquakes feed, url: "https://www.earthquakescanada.nrcan.gc.ca/cache/earthquakes/canada-en.atom", type: ATOM, connector: rss, tier: A, config: { maxItems: 50 } }
1302 +
1303 + # ───────────────────────── F · Climate bodies & analysts ─────────────────────────
1304 + - id: ipcc
1305 + name: IPCC
1306 + domain: ipcc.ch
1307 + homepage: https://www.ipcc.ch
1308 + categories: [climate, science, international]
1309 + tier: B
1310 + weight: 1.3
1311 + aliases: [intergovernmental panel on climate change]
1312 + products:
1313 + - { name: Assessment Report, type: product, aliases: [ar6, ar7] }
1314 + discover: { rss: true, pages: true }
1315 + sensors:
1316 + - { name: news feed, url: "https://www.ipcc.ch/feed/", type: RSS, connector: rss, tier: B }
1317 + - id: unfccc
1318 + name: UNFCCC
1319 + domain: unfccc.int
1320 + homepage: https://unfccc.int
1321 + categories: [climate, international]
1322 + tier: B
1323 + weight: 1.2
1324 + aliases: [un climate change, cop, paris agreement]
1325 + discover: { rss: false, sitemap: true }
1326 + notes: "News index is client-rendered (thin); sitemap only."
1327 + sensors:
1328 + - { name: sitemap, url: "https://unfccc.int/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 4000 } }
1329 + - id: carbon-brief
1330 + name: Carbon Brief
1331 + domain: carbonbrief.org
1332 + homepage: https://www.carbonbrief.org
1333 + categories: [climate, news]
1334 + tier: B
1335 + weight: 1.1
1336 + discover: { rss: true, sitemap: true }
1337 + sensors:
1338 + - { name: articles feed, url: "https://www.carbonbrief.org/feed", type: RSS, connector: rss, tier: B }
1339 + - id: global-carbon-project
1340 + name: Global Carbon Project
1341 + domain: globalcarbonproject.org
1342 + homepage: https://www.globalcarbonproject.org
1343 + categories: [climate, science]
1344 + tier: C
1345 + aliases: [global carbon budget]
1346 + discover: { rss: false, sitemap: false }
1347 + notes: "Static site without feed or sitemap — kept for entity linking only."
1348 + - id: climate-action-tracker
1349 + name: Climate Action Tracker
1350 + domain: climateactiontracker.org
1351 + homepage: https://climateactiontracker.org
1352 + categories: [climate, ngo]
1353 + tier: C
1354 + aliases: [cat]
1355 + discover: { rss: false, sitemap: false, pages: true }
1356 + sensors:
1357 + - { name: blog, url: "https://climateactiontracker.org/blog/", type: HTML, connector: http, tier: C }
1358 + - id: ember
1359 + name: Ember
1360 + domain: ember-energy.org
1361 + homepage: https://ember-energy.org
1362 + categories: [energy, climate, ngo]
1363 + tier: C
1364 + aliases: [ember climate, ember energy]
1365 + discover: { rss: false, sitemap: true, pages: true }
1366 + sensors:
1367 + - { name: latest insights, url: "https://ember-energy.org/latest-insights/", type: HTML, connector: http, tier: B }
1368 + - { name: sitemap, url: "https://ember-energy.org/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
1369 + - id: carbon-tracker
1370 + name: Carbon Tracker Initiative
1371 + domain: carbontracker.org
1372 + homepage: https://carbontracker.org
1373 + categories: [climate, finance, ngo]
1374 + tier: C
1375 + aliases: [carbon tracker]
1376 + discover: { rss: true, sitemap: true }
1377 + sensors:
1378 + - { name: news feed, url: "https://carbontracker.org/feed/", type: RSS, connector: rss, tier: C }
1379 + - id: cdp
1380 + name: CDP
1381 + domain: cdp.net
1382 + homepage: https://www.cdp.net
1383 + categories: [climate, finance, ngo]
1384 + tier: C
1385 + aliases: [carbon disclosure project]
1386 + discover: { rss: false, sitemap: true }
1387 + sensors:
1388 + - { name: sitemap, url: "https://www.cdp.net/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
1389 + - id: sbti
1390 + name: Science Based Targets initiative
1391 + domain: sciencebasedtargets.org
1392 + homepage: https://sciencebasedtargets.org
1393 + categories: [climate, finance, ngo]
1394 + tier: C
1395 + aliases: [sbti, science based targets]
1396 + discover: { rss: false, sitemap: true, pages: true }
1397 + sensors:
1398 + - { name: news, url: "https://sciencebasedtargets.org/news", type: HTML, connector: http, tier: C }
1399 + - id: ifrs-issb
1400 + name: IFRS Foundation / ISSB
1401 + domain: ifrs.org
1402 + homepage: https://www.ifrs.org
1403 + categories: [finance, climate, standards]
1404 + tier: B
1405 + weight: 1.1
1406 + aliases: [ifrs, issb, international sustainability standards board, iasb]
1407 + products:
1408 + - { name: IFRS S1, type: standard }
1409 + - { name: IFRS S2, type: standard }
1410 + discover: { rss: false, sitemap: true, pages: true }
1411 + sensors:
1412 + - { name: news, url: "https://www.ifrs.org/news-and-events/news/", type: HTML, connector: http, tier: B }
1413 + - { name: sitemap, url: "https://www.ifrs.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 4000 } }
1414 + - id: nsidc
1415 + name: National Snow and Ice Data Center
1416 + domain: nsidc.org
1417 + homepage: https://nsidc.org
1418 + categories: [climate, science]
1419 + tier: C
1420 + aliases: [nsidc, arctic sea ice news]
1421 + discover: { rss: true, sitemap: false }
1422 + sensors:
1423 + - { name: arctic sea ice news feed, url: "https://nsidc.org/arcticseaicenews/feed/", type: RSS, connector: rss, tier: B }
1424 + - id: berkeley-earth
1425 + name: Berkeley Earth
1426 + domain: berkeleyearth.org
1427 + homepage: https://berkeleyearth.org
1428 + categories: [climate, science]
1429 + tier: C
1430 + discover: { rss: true, sitemap: true }
1431 + sensors:
1432 + - { name: news feed, url: "https://berkeleyearth.org/feed/", type: RSS, connector: rss, tier: C }
1433 + - id: climate-central
1434 + name: Climate Central
1435 + domain: climatecentral.org
1436 + homepage: https://www.climatecentral.org
1437 + categories: [climate, science, ngo]
1438 + tier: C
1439 + discover: { rss: true, sitemap: true }
1440 + sensors:
1441 + - { name: news feed, url: "https://feeds.feedburner.com/climatecentral/djOO", type: RSS, connector: rss, tier: C }
1442 + - id: canadian-climate-institute
1443 + name: Canadian Climate Institute
1444 + domain: climateinstitute.ca
1445 + homepage: https://climateinstitute.ca
1446 + categories: [climate, ngo]
1447 + tier: C
1448 + aliases: [institut climatique du canada]
1449 + discover: { rss: true, sitemap: true }
1450 + sensors:
1451 + - { name: news feed, url: "https://climateinstitute.ca/news/feed/", type: RSS, connector: rss, tier: C }
1452 + - id: ouranos
1453 + name: Ouranos
1454 + domain: ouranos.ca
1455 + homepage: https://www.ouranos.ca
1456 + categories: [climate, science]
1457 + tier: C
1458 + discover: { rss: false, sitemap: true }
1459 + sensors:
1460 + - { name: sitemap, url: "https://www.ouranos.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1461 + - id: iisd
1462 + name: International Institute for Sustainable Development
1463 + domain: iisd.org
1464 + homepage: https://www.iisd.org
1465 + categories: [climate, ngo, international]
1466 + tier: C
1467 + aliases: [iisd, earth negotiations bulletin]
1468 + discover: { rss: false, sitemap: true, pages: true }
1469 + sensors:
1470 + - { name: press, url: "https://www.iisd.org/press", type: HTML, connector: http, tier: C }
1471 + - { name: articles, url: "https://www.iisd.org/articles", type: HTML, connector: http, tier: C }
1472 + - id: pembina-institute
1473 + name: Pembina Institute
1474 + domain: pembina.org
1475 + homepage: https://www.pembina.org
1476 + categories: [energy, climate, ngo]
1477 + tier: C
1478 + aliases: [pembina]
1479 + discover: { rss: true, sitemap: true }
1480 + sensors:
1481 + - { name: all news feed, url: "https://www.pembina.org/rss/all", type: RSS, connector: rss, tier: C }
1482 + - id: clean-energy-canada
1483 + name: Clean Energy Canada
1484 + domain: cleanenergycanada.org
1485 + homepage: https://cleanenergycanada.org
1486 + categories: [energy, climate, ngo]
1487 + tier: C
1488 + discover: { rss: true, sitemap: true }
1489 + sensors:
1490 + - { name: news feed, url: "https://cleanenergycanada.org/feed/", type: RSS, connector: rss, tier: C }
1491 + - id: rmi
1492 + name: RMI
1493 + domain: rmi.org
1494 + homepage: https://rmi.org
1495 + categories: [energy, climate, ngo]
1496 + tier: C
1497 + aliases: [rocky mountain institute]
1498 + discover: { rss: true, sitemap: true }
1499 + sensors:
1500 + - { name: news sitemap, url: "https://rmi.org/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 1000 } }
1501 + - id: bloombergnef
1502 + name: BloombergNEF
1503 + domain: bnef.com
1504 + homepage: https://about.bnef.com
1505 + categories: [energy, climate, finance]
1506 + tier: B
1507 + weight: 1.1
1508 + aliases: [bnef, bloomberg new energy finance]
1509 + discover: { rss: true, sitemap: true }
1510 + sensors:
1511 + - { name: insights feed, url: "https://about.bnef.com/feed/", type: RSS, connector: rss, tier: B }
1512 + - id: wood-mackenzie
1513 + name: Wood Mackenzie
1514 + domain: woodmac.com
1515 + homepage: https://www.woodmac.com
1516 + categories: [energy, finance]
1517 + tier: C
1518 + aliases: [woodmac]
1519 + discover: { rss: false, sitemap: true, pages: true }
1520 + sensors:
1521 + - { name: press releases, url: "https://www.woodmac.com/press-releases/", type: HTML, connector: http, tier: B }
1522 + - { name: sitemap, url: "https://www.woodmac.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
1523 + - id: rystad-energy
1524 + name: Rystad Energy
1525 + domain: rystadenergy.com
1526 + homepage: https://www.rystadenergy.com
1527 + categories: [energy, finance]
1528 + tier: C
1529 + aliases: [rystad]
1530 + discover: { rss: false, sitemap: true, pages: true }
1531 + sensors:
1532 + - { name: news, url: "https://www.rystadenergy.com/news", type: HTML, connector: http, tier: B }
1533 + - { name: sitemap, url: "https://www.rystadenergy.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1534 + - id: sp-global-commodity-insights
1535 + name: S&P Global Commodity Insights
1536 + domain: spglobal.com
1537 + homepage: https://www.spglobal.com/commodity-insights
1538 + categories: [energy, finance]
1539 + tier: C
1540 + aliases: [platts, s&p global platts, commodity insights]
1541 + discover: { rss: false, sitemap: false }
1542 + notes: "spglobal.com answers 403 to non-browser clients on every path (including the RSS feed list) — kept for entity linking only."
added config/sources.d/13-telecom-internet-infra.yaml +1712 −0
@@ -0,0 +1,1712 @@
1 +# config/sources.d/13-telecom-internet-infra.yaml — telcos, network equipment & silicon, CDN/edge/security,
2 +# certificate authorities & PKI, registries/registrars/RIRs, DNS resolvers, internet exchanges, data centres,
3 +# internet measurement, browsers & web platform, messaging & e-mail infrastructure. Authored 2026-09-08; every
4 +# sensor below was fetched and parsed by apps/engine/src/validate.ts before being kept. Blocked or client-rendered
5 +# organizations are listed with `notes:` and discovery flags only.
6 +sources:
7 + # ───────────────────────── A · Telecom operators ─────────────────────────
8 + - id: att
9 + name: AT&T
10 + domain: att.com
11 + homepage: https://www.att.com
12 + categories: [telecom]
13 + tier: B
14 + weight: 1.3
15 + aliases: [at&t, att, at and t]
16 + products:
17 + - { name: AT&T Fiber, type: product }
18 + - { name: FirstNet, type: service }
19 + discover: { rss: false, sitemap: true, status: false, pages: true }
20 + notes: "about.att.com newsroom and investors.att.com are Akamai-blocked (403) for non-browser clients; only the www sitemap is reachable."
21 + sensors:
22 + - { name: sitemap, url: "https://www.att.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 6 } }
23 + - id: verizon
24 + name: Verizon
25 + domain: verizon.com
26 + homepage: https://www.verizon.com
27 + categories: [telecom]
28 + tier: B
29 + weight: 1.3
30 + aliases: [verizon communications, verizon wireless, vz]
31 + products:
32 + - { name: Fios, type: product, aliases: [verizon fios] }
33 + discover: { rss: false, sitemap: true, pages: true }
34 + notes: "Newsroom RSS endpoints were retired; the newsroom index is server-rendered."
35 + sensors:
36 + - { name: newsroom, url: "https://www.verizon.com/about/news", type: HTML, connector: http, tier: B }
37 + - id: t-mobile
38 + name: T-Mobile US
39 + domain: t-mobile.com
40 + homepage: https://www.t-mobile.com
41 + categories: [telecom]
42 + tier: B
43 + weight: 1.2
44 + aliases: [t-mobile, tmobile, t mobile us, tmus]
45 + discover: { rss: false, sitemap: true, pages: false }
46 + notes: "www.t-mobile.com/news and investor.t-mobile.com return 403 (Akamai bot manager) — no validated sensor yet."
47 + - id: comcast
48 + name: Comcast
49 + domain: corporate.comcast.com
50 + homepage: https://corporate.comcast.com
51 + categories: [telecom, media]
52 + tier: B
53 + weight: 1.2
54 + aliases: [comcast, xfinity, comcast cable]
55 + products:
56 + - { name: Xfinity, type: product }
57 + discover: { rss: true, sitemap: true, pages: true }
58 + notes: "corporate.comcast.com feeds and cmcsa.com IR feed are not reachable for bots (connection reset)."
59 + - id: charter
60 + name: Charter Communications
61 + domain: corporate.charter.com
62 + homepage: https://corporate.charter.com
63 + categories: [telecom]
64 + tier: B
65 + aliases: [charter, spectrum, charter communications]
66 + products:
67 + - { name: Spectrum, type: product }
68 + discover: { rss: true, sitemap: true }
69 + sensors:
70 + - { name: sitemap, url: "https://corporate.charter.com/sitemap/sitemap-index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
71 + - id: lumen
72 + name: Lumen Technologies
73 + domain: lumen.com
74 + homepage: https://www.lumen.com
75 + categories: [telecom, infrastructure]
76 + tier: B
77 + aliases: [lumen, centurylink, level 3, level3]
78 + discover: { rss: false, sitemap: true, pages: true }
79 + notes: "ir.lumen.com (Q4) returns 403; news.lumen.com redirects to a press-resources page."
80 + sensors:
81 + - { name: press resources, url: "https://www.lumen.com/en-us/news/press-resources.html", type: HTML, connector: http, tier: C }
82 + - id: bell-canada
83 + name: Bell Canada (BCE)
84 + domain: bce.ca
85 + homepage: https://www.bce.ca
86 + categories: [telecom]
87 + tier: B
88 + weight: 1.2
89 + aliases: [bell, bce, bell canada, bell mobility, bell media]
90 + products:
91 + - { name: Bell Fibe, type: product, aliases: [fibe] }
92 + discover: { rss: true, sitemap: true, pages: true }
93 + sensors:
94 + - { name: sitemap, url: "https://www.bce.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 4000 } }
95 + - { name: news, url: "https://www.bce.ca/news", type: HTML, connector: http, tier: B }
96 + - id: rogers
97 + name: Rogers Communications
98 + domain: about.rogers.com
99 + homepage: https://about.rogers.com
100 + categories: [telecom]
101 + tier: B
102 + weight: 1.2
103 + aliases: [rogers, rogers communications, rogers wireless, shaw]
104 + discover: { rss: true, sitemap: true }
105 + sensors:
106 + - { name: news feed, url: "https://about.rogers.com/feed/", type: RSS, connector: rss, tier: B }
107 + - { name: sitemap, url: "https://about.rogers.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 6 } }
108 + - id: telus
109 + name: TELUS
110 + domain: telus.com
111 + homepage: https://www.telus.com
112 + categories: [telecom]
113 + tier: B
114 + weight: 1.1
115 + aliases: [telus, telus communications, telus health]
116 + discover: { rss: false, sitemap: true, pages: false }
117 + notes: "www.telus.com/en/about/news returns 403 to non-browser clients — no validated sensor yet."
118 + - id: quebecor
119 + name: Québecor / Vidéotron
120 + domain: quebecor.com
121 + homepage: https://www.quebecor.com
122 + categories: [telecom, media]
123 + tier: B
124 + aliases: [quebecor, québecor, videotron, vidéotron, freedom mobile]
125 + products:
126 + - { name: Vidéotron, type: product, aliases: [videotron] }
127 + - { name: Freedom Mobile, type: product }
128 + discover: { rss: true, sitemap: true, pages: true }
129 + notes: "corpo.videotron.com press pages return 404 for direct hits; the Québecor corporate site is server-rendered."
130 + sensors:
131 + - { name: sitemap, url: "https://www.quebecor.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
132 + - { name: press releases, url: "https://www.quebecor.com/en/press-releases", type: HTML, connector: http, tier: B }
133 + - id: sasktel
134 + name: SaskTel
135 + domain: sasktel.com
136 + homepage: https://www.sasktel.com
137 + categories: [telecom]
138 + tier: C
139 + aliases: [sasktel]
140 + discover: { rss: true, sitemap: true }
141 + sensors:
142 + - { name: news, url: "https://www.sasktel.com/about-us/news", type: HTML, connector: http, tier: C }
143 + - { name: sitemap, url: "https://www.sasktel.com/sitemap/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
144 + - id: eastlink
145 + name: Eastlink
146 + domain: eastlink.ca
147 + homepage: https://www.eastlink.ca
148 + categories: [telecom]
149 + tier: C
150 + aliases: [eastlink]
151 + discover: { rss: true, sitemap: true }
152 + sensors:
153 + - { name: sitemap, url: "https://www.eastlink.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
154 + - id: bt
155 + name: BT Group
156 + domain: bt.com
157 + homepage: https://www.bt.com
158 + categories: [telecom]
159 + tier: B
160 + weight: 1.2
161 + aliases: [bt, bt group, british telecom, ee, openreach]
162 + products:
163 + - { name: EE, type: product }
164 + - { name: Openreach, type: service }
165 + discover: { rss: true, sitemap: true }
166 + sensors:
167 + - { name: newsroom feed, url: "https://newsroom.bt.com/feed/", type: RSS, connector: rss, tier: B }
168 + - id: vodafone
169 + name: Vodafone Group
170 + domain: vodafone.com
171 + homepage: https://www.vodafone.com
172 + categories: [telecom]
173 + tier: B
174 + weight: 1.2
175 + aliases: [vodafone, vodafone group, vodafonethree]
176 + discover: { rss: false, sitemap: false, pages: false }
177 + notes: "www.vodafone.com/news and its feed return 403 (bot management) — no validated sensor yet."
178 + - id: deutsche-telekom
179 + name: Deutsche Telekom
180 + domain: telekom.com
181 + homepage: https://www.telekom.com
182 + categories: [telecom]
183 + tier: B
184 + weight: 1.2
185 + aliases: [deutsche telekom, telekom, dt, t-systems]
186 + discover: { rss: true, sitemap: true }
187 + sensors:
188 + - { name: sitemap (en), url: "https://www.telekom.com/en.sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 4000 } }
189 + - id: orange
190 + name: Orange
191 + domain: orange.com
192 + homepage: https://www.orange.com
193 + categories: [telecom]
194 + tier: B
195 + weight: 1.2
196 + aliases: [orange, orange group, orange business, france telecom]
197 + discover: { rss: false, sitemap: true, pages: true }
198 + notes: "newsroom.orange.com/feed returns 403; the newsroom index itself is served."
199 + sensors:
200 + - { name: newsroom, url: "https://newsroom.orange.com/", type: HTML, connector: http, tier: B }
201 + - id: telefonica
202 + name: Telefónica
203 + domain: telefonica.com
204 + homepage: https://www.telefonica.com
205 + categories: [telecom]
206 + tier: B
207 + weight: 1.2
208 + aliases: [telefonica, telefónica, movistar, o2]
209 + products:
210 + - { name: Movistar, type: product }
211 + discover: { rss: true, sitemap: true }
212 + sensors:
213 + - { name: news feed, url: "https://www.telefonica.com/en/feed/", type: RSS, connector: rss, tier: B }
214 + - { name: press room feed, url: "https://www.telefonica.com/en/communication-room/press-room/feed/", type: RSS, connector: rss, tier: B }
215 + - id: tim
216 + name: TIM (Telecom Italia)
217 + domain: gruppotim.it
218 + homepage: https://www.gruppotim.it
219 + categories: [telecom]
220 + tier: C
221 + aliases: [tim, telecom italia, gruppo tim]
222 + discover: { rss: true, sitemap: true }
223 + sensors:
224 + - { name: sitemap (it), url: "https://www.gruppotim.it/it.sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 4000 } }
225 + - id: swisscom
226 + name: Swisscom
227 + domain: swisscom.ch
228 + homepage: https://www.swisscom.ch
229 + categories: [telecom]
230 + tier: C
231 + aliases: [swisscom]
232 + discover: { rss: true, sitemap: true }
233 + sensors:
234 + - { name: news, url: "https://www.swisscom.ch/en/about/news.html", type: HTML, connector: http, tier: B }
235 + - { name: sitemap, url: "https://www.swisscom.ch/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
236 + - id: kpn
237 + name: KPN
238 + domain: kpn.com
239 + homepage: https://www.kpn.com
240 + categories: [telecom]
241 + tier: C
242 + aliases: [kpn, koninklijke kpn]
243 + discover: { rss: true, sitemap: true }
244 + sensors:
245 + - { name: sitemap, url: "https://www.kpn.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 3 } }
246 + - id: telia
247 + name: Telia Company
248 + domain: teliacompany.com
249 + homepage: https://www.teliacompany.com
250 + categories: [telecom]
251 + tier: C
252 + aliases: [telia, telia company]
253 + discover: { rss: true, sitemap: true }
254 + sensors:
255 + - { name: sitemap, url: "https://www.teliacompany.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 4000 } }
256 + - id: telenor
257 + name: Telenor
258 + domain: telenor.com
259 + homepage: https://www.telenor.com
260 + categories: [telecom]
261 + tier: C
262 + aliases: [telenor, telenor group]
263 + discover: { rss: true, sitemap: true }
264 + sensors:
265 + - { name: newsroom, url: "https://www.telenor.com/media/newsroom/", type: HTML, connector: http, tier: B }
266 + - id: ntt
267 + name: NTT Group
268 + domain: group.ntt
269 + homepage: https://group.ntt
270 + categories: [telecom, infrastructure]
271 + tier: B
272 + weight: 1.2
273 + aliases: [ntt, nippon telegraph and telephone, ntt data, ntt docomo, docomo]
274 + products:
275 + - { name: NTT DOCOMO, type: product, aliases: [docomo] }
276 + - { name: NTT DATA, type: product }
277 + discover: { rss: true, sitemap: true }
278 + sensors:
279 + - { name: press releases feed, url: "https://group.ntt/en/newsrelease/rss/release.rdf", type: RSS, connector: rss, tier: B }
280 + - id: kddi
281 + name: KDDI
282 + domain: kddi.com
283 + homepage: https://www.kddi.com
284 + categories: [telecom]
285 + tier: C
286 + aliases: [kddi, au]
287 + notes: "newsroom.kddi.com is client-rendered (198 chars of text) and exposes no feed — no validated sensor yet."
288 + discover: { rss: true, sitemap: true }
289 + - id: softbank
290 + name: SoftBank Corp.
291 + domain: softbank.jp
292 + homepage: https://www.softbank.jp
293 + categories: [telecom]
294 + tier: C
295 + aliases: [softbank, softbank corp]
296 + discover: { rss: true, sitemap: true }
297 + sensors:
298 + - { name: corporate news (en), url: "https://www.softbank.jp/en/corp/news/", type: HTML, connector: http, tier: B }
299 + - id: kt
300 + name: KT Corporation
301 + domain: corp.kt.com
302 + homepage: https://corp.kt.com
303 + categories: [telecom]
304 + tier: C
305 + aliases: [kt, kt corp, korea telecom]
306 + discover: { rss: true, sitemap: true }
307 + sensors:
308 + - { name: sitemap, url: "https://corp.kt.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000, maxChildren: 4 } }
309 + - id: reliance-jio
310 + name: Reliance Jio
311 + domain: jio.com
312 + homepage: https://www.jio.com
313 + categories: [telecom]
314 + tier: C
315 + weight: 1.1
316 + aliases: [jio, reliance jio, jio platforms]
317 + discover: { rss: false, sitemap: true }
318 + sensors:
319 + - { name: sitemap, url: "https://www.jio.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
320 + - id: singtel
321 + name: Singtel
322 + domain: singtel.com
323 + homepage: https://www.singtel.com
324 + categories: [telecom]
325 + tier: C
326 + aliases: [singtel, singapore telecommunications, optus]
327 + products:
328 + - { name: Optus, type: product }
329 + discover: { rss: true, sitemap: true }
330 + notes: "optus.com.au refuses non-browser connections; Optus is tracked as a Singtel product."
331 + sensors:
332 + - { name: sitemap, url: "https://www.singtel.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
333 + - id: telstra
334 + name: Telstra
335 + domain: telstra.com.au
336 + homepage: https://www.telstra.com.au
337 + categories: [telecom]
338 + tier: C
339 + weight: 1.1
340 + aliases: [telstra]
341 + discover: { rss: true, sitemap: true }
342 + sensors:
343 + - { name: sitemap, url: "https://www.telstra.com.au/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 4000 } }
344 + - id: mtn
345 + name: MTN Group
346 + domain: mtn.com
347 + homepage: https://www.mtn.com
348 + categories: [telecom]
349 + tier: C
350 + aliases: [mtn, mtn group]
351 + discover: { rss: true, sitemap: true }
352 + sensors:
353 + - { name: news feed, url: "https://www.mtn.com/feed/", type: RSS, connector: rss, tier: B }
354 + - id: starlink
355 + name: Starlink
356 + domain: starlink.com
357 + homepage: https://www.starlink.com
358 + categories: [telecom, space]
359 + tier: B
360 + weight: 1.3
361 + aliases: [starlink, spacex starlink]
362 + discover: { rss: false, sitemap: true, pages: false }
363 + notes: "Site is a client-rendered app; only the sitemaps are usable. Availability map and updates page are JS-only."
364 + sensors:
365 + - { name: marketing sitemap, url: "https://starlink.com/sitemaps/marketing/sitemap-index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000, maxChildren: 4 } }
366 + - { name: support sitemap, url: "https://starlink.com/sitemaps/support/sitemap-index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000, maxChildren: 4 } }
367 +
368 + # ───────────────────────── B · Network equipment & silicon ─────────────────────────
369 + - id: ericsson
370 + name: Ericsson
371 + domain: ericsson.com
372 + homepage: https://www.ericsson.com
373 + categories: [telecom, technology]
374 + tier: B
375 + weight: 1.2
376 + aliases: [ericsson, telefonaktiebolaget lm ericsson]
377 + discover: { rss: false, sitemap: false, pages: false }
378 + notes: "www.ericsson.com newsroom and RSS return 403 (Akamai) to non-browser clients — no validated sensor yet."
379 + - id: nokia
380 + name: Nokia
381 + domain: nokia.com
382 + homepage: https://www.nokia.com
383 + categories: [telecom, technology]
384 + tier: B
385 + weight: 1.2
386 + aliases: [nokia, nokia networks, nokia bell labs, infinera]
387 + discover: { rss: false, sitemap: false, pages: false }
388 + notes: "www.nokia.com/newsroom and RSS return 403 to non-browser clients — no validated sensor yet. Infinera merged into Nokia (2025)."
389 + - id: juniper
390 + name: Juniper Networks
391 + domain: juniper.net
392 + homepage: https://www.juniper.net
393 + categories: [telecom, technology, cyber]
394 + tier: B
395 + aliases: [juniper, juniper networks, junos, mist]
396 + products:
397 + - { name: Junos OS, type: software, aliases: [junos] }
398 + - { name: Mist AI, type: product }
399 + discover: { rss: false, sitemap: true }
400 + notes: "Security advisories live on supportportal.juniper.net (Salesforce, client-rendered). Juniper is now part of HPE (2025)."
401 + sensors:
402 + - { name: sitemap, url: "https://www.juniper.net/content/dam/www/utils/xml-sitemaps/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 6 } }
403 + - id: arista
404 + name: Arista Networks
405 + domain: arista.com
406 + homepage: https://www.arista.com
407 + categories: [telecom, technology, cyber]
408 + tier: B
409 + aliases: [arista, arista networks, eos]
410 + products:
411 + - { name: Arista EOS, type: software, aliases: [eos] }
412 + discover: { rss: true, sitemap: true, pages: true }
413 + sensors:
414 + - { name: blog feed, url: "https://blogs.arista.com/blog/rss.xml", type: RSS, connector: rss, tier: B }
415 + - { name: security advisories, url: "https://www.arista.com/en/support/advisories-notices", type: HTML, connector: http, tier: A }
416 + - { name: sitemap, url: "https://www.arista.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
417 + - id: ubiquiti
418 + name: Ubiquiti
419 + domain: ui.com
420 + homepage: https://www.ui.com
421 + categories: [telecom, technology]
422 + tier: B
423 + aliases: [ubiquiti, ubnt, unifi]
424 + products:
425 + - { name: UniFi, type: product }
426 + discover: { rss: false, sitemap: true, status: true }
427 + sensors:
428 + - { name: status, url: "https://status.ui.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
429 + - { name: sitemap, url: "https://ui.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000, maxChildren: 6 } }
430 + - id: netgear
431 + name: NETGEAR
432 + domain: netgear.com
433 + homepage: https://www.netgear.com
434 + categories: [consumer-tech, telecom, cyber]
435 + tier: B
436 + aliases: [netgear, orbi, nighthawk]
437 + discover: { rss: false, sitemap: true, pages: true }
438 + sensors:
439 + - { name: product security advisories, url: "https://www.netgear.com/about/security/", type: HTML, connector: http, tier: A }
440 + - { name: sitemap, url: "https://www.netgear.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
441 + - id: tp-link
442 + name: TP-Link
443 + domain: tp-link.com
444 + homepage: https://www.tp-link.com
445 + categories: [consumer-tech, telecom]
446 + tier: C
447 + aliases: [tp-link, tplink, omada, deco]
448 + discover: { rss: false, sitemap: true, pages: true }
449 + sensors:
450 + - { name: press news (us), url: "https://www.tp-link.com/us/press/news/", type: HTML, connector: http, tier: B }
451 + - id: huawei
452 + name: Huawei
453 + domain: huawei.com
454 + homepage: https://www.huawei.com
455 + categories: [telecom, technology, cyber]
456 + tier: B
457 + weight: 1.2
458 + aliases: [huawei, huawei technologies, harmonyos, hisilicon]
459 + products:
460 + - { name: HarmonyOS, type: software }
461 + discover: { rss: false, sitemap: true, pages: true }
462 + sensors:
463 + - { name: psirt security bulletins, url: "https://www.huawei.com/en/psirt/all-bulletins", type: HTML, connector: http, tier: A }
464 + - { name: sitemap index, url: "https://www.huawei.com/href-sitemap-index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
465 + - id: zte
466 + name: ZTE
467 + domain: zte.com.cn
468 + homepage: https://www.zte.com.cn/global/
469 + categories: [telecom, technology]
470 + tier: C
471 + aliases: [zte, zte corporation]
472 + discover: { rss: false, sitemap: true }
473 + sensors:
474 + - { name: sitemap, url: "https://www.zte.com.cn/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 4000 } }
475 + - id: broadcom
476 + name: Broadcom
477 + domain: broadcom.com
478 + homepage: https://www.broadcom.com
479 + categories: [semiconductors, technology, enterprise]
480 + tier: B
481 + weight: 1.3
482 + aliases: [broadcom, avgo, vmware, symantec enterprise]
483 + products:
484 + - { name: VMware, type: product, aliases: [vsphere, vmware cloud foundation] }
485 + discover: { rss: false, sitemap: true, pages: true }
486 + notes: "Security advisories are on support.broadcom.com (client-rendered portal)."
487 + sensors:
488 + - { name: sitemap, url: "https://www.broadcom.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
489 + - id: extreme-networks
490 + name: Extreme Networks
491 + domain: extremenetworks.com
492 + homepage: https://www.extremenetworks.com
493 + categories: [telecom, technology]
494 + tier: C
495 + aliases: [extreme networks, extreme]
496 + discover: { rss: false, sitemap: true }
497 + sensors:
498 + - { name: sitemap, url: "https://www.extremenetworks.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
499 + - id: zyxel
500 + name: Zyxel
501 + domain: zyxel.com
502 + homepage: https://www.zyxel.com
503 + categories: [telecom, cyber]
504 + tier: B
505 + aliases: [zyxel, zyxel networks]
506 + discover: { rss: false, sitemap: true, pages: true }
507 + sensors:
508 + - { name: security advisories, url: "https://www.zyxel.com/global/en/support/security-advisories", type: HTML, connector: http, tier: A }
509 + - id: mikrotik
510 + name: MikroTik
511 + domain: mikrotik.com
512 + homepage: https://mikrotik.com
513 + categories: [telecom, technology]
514 + tier: B
515 + aliases: [mikrotik, routeros]
516 + products:
517 + - { name: RouterOS, type: software }
518 + discover: { rss: false, sitemap: true, pages: true }
519 + sensors:
520 + - { name: routeros changelogs, url: "https://mikrotik.com/download/changelogs", type: HTML, connector: http, tier: B }
521 + - { name: sitemap, url: "https://mikrotik.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
522 + - id: cambium-networks
523 + name: Cambium Networks
524 + domain: cambiumnetworks.com
525 + homepage: https://www.cambiumnetworks.com
526 + categories: [telecom, technology]
527 + tier: C
528 + aliases: [cambium, cambium networks]
529 + discover: { rss: true, sitemap: true, status: true }
530 + sensors:
531 + - { name: blog feed, url: "https://www.cambiumnetworks.com/feed/", type: RSS, connector: rss, tier: C }
532 + - { name: status, url: "https://status.cambiumnetworks.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
533 + - id: cisco-meraki
534 + name: Cisco Meraki
535 + domain: meraki.com
536 + homepage: https://meraki.cisco.com
537 + categories: [telecom, cloud]
538 + tier: B
539 + aliases: [meraki, cisco meraki]
540 + discover: { rss: false, sitemap: false, status: true }
541 + sensors:
542 + - { name: status, url: "https://status.meraki.net/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
543 +
544 + # ───────────────────────── C · CDN, edge & network security ─────────────────────────
545 + - id: imperva
546 + name: Imperva
547 + domain: imperva.com
548 + homepage: https://www.imperva.com
549 + categories: [cyber, infrastructure]
550 + tier: B
551 + aliases: [imperva, incapsula, thales imperva]
552 + discover: { rss: false, sitemap: false, status: true }
553 + notes: "www.imperva.com is behind an Incapsula interstitial for bots; only the status page is usable."
554 + sensors:
555 + - { name: status, url: "https://status.imperva.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
556 + - id: zscaler
557 + name: Zscaler
558 + domain: zscaler.com
559 + homepage: https://www.zscaler.com
560 + categories: [cyber, cloud]
561 + tier: B
562 + weight: 1.1
563 + aliases: [zscaler, zero trust exchange, threatlabz]
564 + discover: { rss: false, sitemap: true, pages: true }
565 + notes: "trust.zscaler.com is a custom trust portal (no public JSON)."
566 + sensors:
567 + - { name: sitemap, url: "https://www.zscaler.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 6000 } }
568 + - { name: pricing and plans, url: "https://www.zscaler.com/pricing-and-plans", type: HTML, connector: http, tier: C }
569 + - id: netskope
570 + name: Netskope
571 + domain: netskope.com
572 + homepage: https://www.netskope.com
573 + categories: [cyber, cloud]
574 + tier: B
575 + aliases: [netskope]
576 + discover: { rss: true, sitemap: true }
577 + sensors:
578 + - { name: news feed, url: "https://www.netskope.com/feed", type: RSS, connector: rss, tier: B }
579 + - id: f5
580 + name: F5
581 + domain: f5.com
582 + homepage: https://www.f5.com
583 + categories: [cyber, infrastructure]
584 + tier: B
585 + weight: 1.1
586 + aliases: [f5, f5 networks, big-ip, nginx, f5 labs]
587 + products:
588 + - { name: BIG-IP, type: product }
589 + - { name: NGINX, type: software }
590 + discover: { rss: true, sitemap: true }
591 + notes: "Product security advisories are on my.f5.com (client-rendered)."
592 + sensors:
593 + - { name: f5 labs threats feed, url: "https://www.f5.com/labs/rss-feeds/threats.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
594 + - { name: sitemap, url: "https://www.f5.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 6 } }
595 + - id: bunny-net
596 + name: bunny.net
597 + domain: bunny.net
598 + homepage: https://bunny.net
599 + categories: [cloud, infrastructure]
600 + tier: B
601 + aliases: [bunny, bunny.net, bunnycdn, bunny cdn]
602 + discover: { rss: true, sitemap: true, status: true, pages: true }
603 + sensors:
604 + - { name: status, url: "https://status.bunny.net/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
605 + - { name: pricing, url: "https://bunny.net/pricing/", type: HTML, connector: http, tier: C }
606 + - { name: sitemap, url: "https://bunny.net/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
607 + - id: gcore
608 + name: Gcore
609 + domain: gcore.com
610 + homepage: https://gcore.com
611 + categories: [cloud, infrastructure]
612 + tier: B
613 + aliases: [gcore, g-core, g-core labs]
614 + discover: { rss: true, sitemap: true, status: true, pages: true }
615 + sensors:
616 + - { name: status, url: "https://status.gcore.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
617 + - { name: edge network pricing, url: "https://gcore.com/pricing/edge-network", type: HTML, connector: http, tier: C }
618 + - { name: docs sitemap, url: "https://docs.gcore.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
619 + - id: cdn77
620 + name: CDN77
621 + domain: cdn77.com
622 + homepage: https://www.cdn77.com
623 + categories: [cloud, infrastructure]
624 + tier: C
625 + aliases: [cdn77, datacamp]
626 + discover: { rss: true, sitemap: true, pages: true }
627 + sensors:
628 + - { name: pricing, url: "https://www.cdn77.com/pricing", type: HTML, connector: http, tier: C }
629 + - { name: sitemap, url: "https://www.cdn77.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
630 + - id: keycdn
631 + name: KeyCDN
632 + domain: keycdn.com
633 + homepage: https://www.keycdn.com
634 + categories: [cloud, infrastructure]
635 + tier: C
636 + aliases: [keycdn]
637 + discover: { rss: true, sitemap: true, pages: true }
638 + sensors:
639 + - { name: blog feed, url: "https://www.keycdn.com/blog/feed", type: RSS, connector: rss, tier: C }
640 + - { name: pricing, url: "https://www.keycdn.com/pricing", type: HTML, connector: http, tier: C }
641 + - id: section
642 + name: Section
643 + domain: section.io
644 + homepage: https://www.section.io
645 + categories: [cloud, infrastructure]
646 + tier: C
647 + aliases: [section, section.io]
648 + discover: { rss: false, sitemap: false, status: true }
649 + sensors:
650 + - { name: status, url: "https://status.section.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
651 +
652 + # ───────────────────────── D · Certificate authorities & PKI ─────────────────────────
653 + - id: digicert
654 + name: DigiCert
655 + domain: digicert.com
656 + homepage: https://www.digicert.com
657 + categories: [cyber, infrastructure]
658 + tier: S
659 + weight: 1.3
660 + aliases: [digicert, digicert one, dns made easy]
661 + products:
662 + - { name: DigiCert ONE, type: product }
663 + - { name: DNS Made Easy, type: service }
664 + discover: { rss: false, sitemap: false, status: true }
665 + notes: "www.digicert.com blog/feed sits behind an Incapsula interstitial; the status page is the reliable signal (also covers DNS Made Easy)."
666 + sensors:
667 + - { name: status, url: "https://status.digicert.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
668 + - id: sectigo
669 + name: Sectigo
670 + domain: sectigo.com
671 + homepage: https://www.sectigo.com
672 + categories: [cyber, infrastructure]
673 + tier: B
674 + weight: 1.1
675 + aliases: [sectigo, comodo ca]
676 + discover: { rss: false, sitemap: true }
677 + notes: "sectigo.status.io is a Status.io page (statusjson connector, not used here)."
678 + sensors:
679 + - { name: sitemap, url: "https://www.sectigo.com/sitemaps-1-sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 6 } }
680 + - id: globalsign
681 + name: GlobalSign
682 + domain: globalsign.com
683 + homepage: https://www.globalsign.com
684 + categories: [cyber, infrastructure]
685 + tier: S
686 + weight: 1.1
687 + aliases: [globalsign, gmo globalsign]
688 + discover: { rss: true, sitemap: true, status: true }
689 + sensors:
690 + - { name: status, url: "https://status.globalsign.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
691 + - { name: sitemap, url: "https://www.globalsign.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 6000 } }
692 + - id: entrust
693 + name: Entrust
694 + domain: entrust.com
695 + homepage: https://www.entrust.com
696 + categories: [cyber, infrastructure]
697 + tier: B
698 + aliases: [entrust, entrust datacard]
699 + discover: { rss: false, sitemap: false, pages: false }
700 + notes: "www.entrust.com blog and feeds return 403 to non-browser clients — no validated sensor yet."
701 + - id: godaddy
702 + name: GoDaddy
703 + domain: godaddy.com
704 + homepage: https://www.godaddy.com
705 + categories: [internet, infrastructure]
706 + tier: B
707 + weight: 1.2
708 + aliases: [godaddy, go daddy, godaddy registry]
709 + products:
710 + - { name: GoDaddy Registry, type: service }
711 + discover: { rss: true, sitemap: false, status: true }
712 + sensors:
713 + - { name: status, url: "https://status.godaddy.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
714 + - { name: resources feed, url: "https://www.godaddy.com/resources/feed", type: RSS, connector: rss, tier: C }
715 + - id: identrust
716 + name: IdenTrust
717 + domain: identrust.com
718 + homepage: https://www.identrust.com
719 + categories: [cyber, infrastructure]
720 + tier: C
721 + aliases: [identrust]
722 + discover: { rss: false, sitemap: true }
723 + sensors:
724 + - { name: sitemap, url: "https://www.identrust.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1500 } }
725 + - id: ssl-com
726 + name: SSL.com
727 + domain: ssl.com
728 + homepage: https://www.ssl.com
729 + categories: [cyber, infrastructure]
730 + tier: C
731 + aliases: [ssl.com]
732 + discover: { rss: true, sitemap: true }
733 + sensors:
734 + - { name: blog feed, url: "https://www.ssl.com/feed/", type: RSS, connector: rss, tier: C }
735 + - { name: sitemap, url: "https://www.ssl.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 6 } }
736 + - id: buypass
737 + name: Buypass
738 + domain: buypass.com
739 + homepage: https://www.buypass.com
740 + categories: [cyber, infrastructure]
741 + tier: C
742 + aliases: [buypass]
743 + discover: { rss: false, sitemap: true }
744 + sensors:
745 + - { name: sitemap, url: "https://www.buypass.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
746 + - id: zerossl
747 + name: ZeroSSL
748 + domain: zerossl.com
749 + homepage: https://zerossl.com
750 + categories: [cyber, infrastructure]
751 + tier: C
752 + aliases: [zerossl]
753 + discover: { rss: false, sitemap: true, pages: true }
754 + sensors:
755 + - { name: pricing, url: "https://zerossl.com/pricing", type: HTML, connector: http, tier: C }
756 + - { name: sitemap, url: "https://zerossl.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000, maxChildren: 2 } }
757 + - id: cab-forum
758 + name: CA/Browser Forum
759 + domain: cabforum.org
760 + homepage: https://cabforum.org
761 + categories: [standards, cyber, internet]
762 + tier: B
763 + weight: 1.2
764 + aliases: [ca/browser forum, cab forum, cabforum, baseline requirements]
765 + products:
766 + - { name: Baseline Requirements, type: standard, aliases: [brs, tls baseline requirements] }
767 + discover: { rss: false, sitemap: true }
768 + sensors:
769 + - { name: server certificate wg releases, url: "https://github.com/cabforum/servercert/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: cabforum/servercert, kind: releases } }
770 + - { name: sitemap, url: "https://cabforum.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
771 + - id: certificate-transparency
772 + name: Certificate Transparency (Google CT)
773 + domain: certificate.transparency.dev
774 + homepage: https://certificate.transparency.dev
775 + categories: [cyber, internet, standards]
776 + tier: C
777 + weight: 1.1
778 + aliases: [certificate transparency, ct logs, ct log list]
779 + discover: { rss: false, sitemap: false }
780 + sensors:
781 + - { name: ct log list (v3), url: "https://www.gstatic.com/ct/log_list/v3/log_list.json", type: JSON, connector: http, tier: C, config: { ignoreKeys: [log_list_timestamp] } }
782 + - id: chromium
783 + extend: true
784 + products:
785 + - { name: Chrome Root Program, type: service, aliases: [chrome root store] }
786 + sensors:
787 + - { name: chrome developers blog feed, url: "https://developer.chrome.com/blog/feed.xml", type: RSS, connector: rss, tier: B }
788 + - { name: chrome root program commits, url: "https://github.com/GoogleChrome/chromerootprogram/commits/main.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: GoogleChrome/chromerootprogram, kind: commits } }
789 + - id: mozilla
790 + extend: true
791 + products:
792 + - { name: Mozilla Root Program, type: service, aliases: [mozilla ca program, nss root store] }
793 + - { name: MDN Web Docs, type: product, aliases: [mdn] }
794 + sensors:
795 + - { name: mdn blog feed, url: "https://developer.mozilla.org/en-US/blog/rss.xml", type: RSS, connector: rss, tier: B }
796 + - { name: root store policy commits, url: "https://github.com/mozilla/pkipolicy/commits/master.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: mozilla/pkipolicy, kind: commits, branch: master } }
797 +
798 + # ───────────────────────── E · Registries, registrars & RIRs ─────────────────────────
799 + - id: ripe-ncc
800 + name: RIPE NCC
801 + domain: ripe.net
802 + homepage: https://www.ripe.net
803 + categories: [internet, infrastructure]
804 + tier: B
805 + weight: 1.3
806 + aliases: [ripe ncc, ripe, ripe atlas, ripe labs, ripestat]
807 + products:
808 + - { name: RIPE Atlas, type: service }
809 + - { name: RIPEstat, type: service }
810 + discover: { rss: true, sitemap: true, status: true }
811 + sensors:
812 + - { name: news feed, url: "https://www.ripe.net/news.xml", type: RSS, connector: rss, tier: B }
813 + - { name: status, url: "https://status.ripe.net/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
814 + - { name: ripe labs feed, url: "https://labs.ripe.net/feed.xml", type: RSS, connector: rss, tier: B }
815 + - id: arin
816 + name: ARIN
817 + domain: arin.net
818 + homepage: https://www.arin.net
819 + categories: [internet, infrastructure]
820 + tier: B
821 + weight: 1.2
822 + aliases: [arin, american registry for internet numbers]
823 + discover: { rss: true, sitemap: true, status: true }
824 + sensors:
825 + - { name: blog feed, url: "https://www.arin.net/blog/rss.xml", type: RSS, connector: rss, tier: B }
826 + - { name: status, url: "https://arin.statuspage.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
827 + - id: apnic
828 + name: APNIC
829 + domain: apnic.net
830 + homepage: https://www.apnic.net
831 + categories: [internet, infrastructure]
832 + tier: B
833 + weight: 1.1
834 + aliases: [apnic, asia pacific network information centre]
835 + discover: { rss: true, sitemap: true }
836 + sensors:
837 + - { name: blog feed, url: "https://blog.apnic.net/feed/", type: RSS, connector: rss, tier: B }
838 + - id: lacnic
839 + name: LACNIC
840 + domain: lacnic.net
841 + homepage: https://www.lacnic.net
842 + categories: [internet, infrastructure]
843 + tier: C
844 + aliases: [lacnic]
845 + discover: { rss: true, sitemap: true }
846 + sensors:
847 + - { name: blog feed, url: "https://blog.lacnic.net/feed/", type: RSS, connector: rss, tier: C }
848 + - id: afrinic
849 + name: AFRINIC
850 + domain: afrinic.net
851 + homepage: https://www.afrinic.net
852 + categories: [internet, infrastructure]
853 + tier: C
854 + aliases: [afrinic]
855 + discover: { rss: true, sitemap: true }
856 + sensors:
857 + - { name: sitemap, url: "https://www.afrinic.net/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
858 + - id: iana
859 + name: IANA
860 + domain: iana.org
861 + homepage: https://www.iana.org
862 + categories: [internet, infrastructure, standards]
863 + tier: B
864 + weight: 1.3
865 + aliases: [iana, internet assigned numbers authority, pti, root zone]
866 + products:
867 + - { name: Root Zone Database, type: service }
868 + discover: { rss: false, sitemap: false, pages: true }
869 + sensors:
870 + - { name: root zone tld list, url: "https://data.iana.org/TLD/tlds-alpha-by-domain.txt", type: FILE, connector: http, tier: D }
871 + - { name: news, url: "https://www.iana.org/news", type: HTML, connector: http, tier: C }
872 + - id: verisign
873 + name: Verisign
874 + domain: verisign.com
875 + homepage: https://www.verisign.com
876 + categories: [internet, infrastructure]
877 + tier: B
878 + weight: 1.2
879 + aliases: [verisign, .com registry, dnib]
880 + discover: { rss: false, sitemap: true, pages: true }
881 + sensors:
882 + - { name: sitemap, url: "https://www.verisign.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
883 + - { name: news and events, url: "https://www.verisign.com/en_US/company-information/news-and-events/index.xhtml", type: HTML, connector: http, tier: B }
884 + - id: cira
885 + name: CIRA (.CA)
886 + domain: cira.ca
887 + homepage: https://www.cira.ca
888 + categories: [internet, infrastructure]
889 + tier: B
890 + weight: 1.1
891 + aliases: [cira, canadian internet registration authority, .ca registry, canadian shield]
892 + products:
893 + - { name: CIRA Canadian Shield, type: service, aliases: [canadian shield dns] }
894 + notes: "www.cira.ca returns 403 to non-browser clients (sitemap and news) — no validated sensor yet."
895 + discover: { rss: true, sitemap: true, pages: true }
896 + - id: nominet
897 + name: Nominet (.UK)
898 + domain: nominet.uk
899 + homepage: https://www.nominet.uk
900 + categories: [internet, infrastructure]
901 + tier: C
902 + aliases: [nominet, .uk registry]
903 + discover: { rss: false, sitemap: false }
904 + notes: "www.nominet.uk returns 403 to non-browser clients — no validated sensor yet."
905 + - id: denic
906 + name: DENIC (.DE)
907 + domain: denic.de
908 + homepage: https://www.denic.de
909 + categories: [internet, infrastructure]
910 + tier: C
911 + aliases: [denic, .de registry]
912 + notes: "No feed; the English news page returns 404 to direct hits — no validated sensor yet."
913 + discover: { rss: true, sitemap: true, pages: true }
914 + - id: afnic
915 + name: Afnic (.FR)
916 + domain: afnic.fr
917 + homepage: https://www.afnic.fr
918 + categories: [internet, infrastructure]
919 + tier: C
920 + aliases: [afnic, .fr registry]
921 + discover: { rss: true, sitemap: true }
922 + sensors:
923 + - { name: news sitemap, url: "https://www.afnic.fr/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 500 } }
924 + - id: sidn
925 + name: SIDN (.NL)
926 + domain: sidn.nl
927 + homepage: https://www.sidn.nl
928 + categories: [internet, infrastructure]
929 + tier: C
930 + aliases: [sidn, .nl registry, sidn labs]
931 + discover: { rss: true, sitemap: true }
932 + sensors:
933 + - { name: news feed, url: "https://www.sidn.nl/rss/news", type: RSS, connector: rss, tier: C }
934 + - id: auda
935 + name: auDA (.AU)
936 + domain: auda.org.au
937 + homepage: https://www.auda.org.au
938 + categories: [internet, infrastructure]
939 + tier: C
940 + aliases: [auda, .au registry]
941 + discover: { rss: true, sitemap: true }
942 + sensors:
943 + - { name: sitemap, url: "https://www.auda.org.au/sitemap-index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000, maxChildren: 3 } }
944 + - id: public-interest-registry
945 + name: Public Interest Registry (.ORG)
946 + domain: pir.org
947 + homepage: https://pir.org
948 + categories: [internet, infrastructure, ngo]
949 + tier: C
950 + aliases: [pir, public interest registry, .org registry]
951 + discover: { rss: true, sitemap: true }
952 + notes: "pir.org/feed/ is a valid but empty RSS feed."
953 + sensors:
954 + - { name: sitemap, url: "https://pir.org/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000, maxChildren: 6 } }
955 + - id: namecheap
956 + name: Namecheap
957 + domain: namecheap.com
958 + homepage: https://www.namecheap.com
959 + categories: [internet, infrastructure]
960 + tier: B
961 + aliases: [namecheap]
962 + discover: { rss: false, sitemap: false, status: false }
963 + notes: "www.namecheap.com (blog feed, status updates) returns 403 and status.namecheap.com is unreachable for bots — no validated sensor yet."
964 + - id: gandi
965 + name: Gandi
966 + domain: gandi.net
967 + homepage: https://www.gandi.net
968 + categories: [internet, infrastructure]
969 + tier: B
970 + aliases: [gandi, gandi.net]
971 + discover: { rss: true, sitemap: true, status: true }
972 + sensors:
973 + - { name: status, url: "https://status.gandi.net/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
974 + - { name: news feed, url: "https://news.gandi.net/en/feed/", type: RSS, connector: rss, tier: C }
975 + - id: porkbun
976 + name: Porkbun
977 + domain: porkbun.com
978 + homepage: https://porkbun.com
979 + categories: [internet, infrastructure]
980 + tier: C
981 + aliases: [porkbun]
982 + discover: { rss: true, sitemap: true }
983 + sensors:
984 + - { name: blog feed, url: "https://porkbun.com/blog/feed/", type: RSS, connector: rss, tier: C }
985 + - id: tucows
986 + name: Tucows / OpenSRS
987 + domain: tucows.com
988 + homepage: https://www.tucows.com
989 + categories: [internet, infrastructure]
990 + tier: B
991 + aliases: [tucows, opensrs, enom, hover, ting]
992 + products:
993 + - { name: OpenSRS, type: service }
994 + - { name: Enom, type: service }
995 + - { name: Hover, type: service }
996 + discover: { rss: true, sitemap: true, status: true }
997 + sensors:
998 + - { name: opensrs status, url: "https://www.opensrsstatus.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
999 + - { name: news, url: "https://www.tucows.com/news/", type: HTML, connector: http, tier: C }
1000 + - id: squarespace
1001 + name: Squarespace (Domains)
1002 + domain: squarespace.com
1003 + homepage: https://www.squarespace.com
1004 + categories: [internet, commerce]
1005 + tier: B
1006 + aliases: [squarespace, squarespace domains, google domains]
1007 + products:
1008 + - { name: Squarespace Domains, type: service, aliases: [google domains] }
1009 + discover: { rss: false, sitemap: false, status: true }
1010 + sensors:
1011 + - { name: status, url: "https://status.squarespace.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1012 + - id: name-com
1013 + name: Name.com
1014 + domain: name.com
1015 + homepage: https://www.name.com
1016 + categories: [internet, infrastructure]
1017 + tier: C
1018 + aliases: [name.com]
1019 + discover: { rss: false, sitemap: false, status: true }
1020 + sensors:
1021 + - { name: status, url: "https://status.name.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1022 + - id: eurid
1023 + name: EURid (.EU)
1024 + domain: eurid.eu
1025 + homepage: https://eurid.eu
1026 + categories: [internet, infrastructure]
1027 + tier: C
1028 + aliases: [eurid, .eu registry]
1029 + notes: "eurid.eu/en/news/ is client-rendered (thin) and exposes no feed — no validated sensor yet."
1030 + discover: { rss: true, sitemap: true, pages: true }
1031 + - id: team-internet
1032 + name: Team Internet (CentralNic)
1033 + domain: teaminternet.com
1034 + homepage: https://teaminternet.com
1035 + categories: [internet, infrastructure]
1036 + tier: C
1037 + aliases: [team internet, centralnic]
1038 + discover: { rss: true, sitemap: true }
1039 + sensors:
1040 + - { name: news feed, url: "https://teaminternet.com/feed/", type: RSS, connector: rss, tier: C }
1041 +
1042 + # ───────────────────────── F · DNS resolvers & DNS providers ─────────────────────────
1043 + - id: quad9
1044 + name: Quad9
1045 + domain: quad9.net
1046 + homepage: https://quad9.net
1047 + categories: [internet, cyber, infrastructure]
1048 + tier: B
1049 + weight: 1.1
1050 + aliases: [quad9, 9.9.9.9]
1051 + discover: { rss: true, sitemap: true, pages: true }
1052 + notes: "uptime.quad9.net is a self-hosted status site without the Atlassian JSON API."
1053 + sensors:
1054 + - { name: blog, url: "https://quad9.net/news/blog/", type: HTML, connector: http, tier: B }
1055 + - id: cisco-umbrella
1056 + name: Cisco Umbrella (OpenDNS)
1057 + domain: umbrella.cisco.com
1058 + homepage: https://umbrella.cisco.com
1059 + categories: [cyber, internet, infrastructure]
1060 + tier: B
1061 + weight: 1.1
1062 + aliases: [cisco umbrella, umbrella, opendns]
1063 + products:
1064 + - { name: OpenDNS, type: service }
1065 + discover: { rss: true, sitemap: true, status: true }
1066 + sensors:
1067 + - { name: status, url: "https://status.umbrella.cisco.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1068 + - { name: blog feed, url: "https://umbrella.cisco.com/feed", type: RSS, connector: rss, tier: B }
1069 + - id: adguard-dns
1070 + name: AdGuard DNS
1071 + domain: adguard-dns.io
1072 + homepage: https://adguard-dns.io
1073 + categories: [internet, cyber, consumer-tech]
1074 + tier: B
1075 + aliases: [adguard dns, adguard]
1076 + discover: { rss: false, sitemap: true, status: true }
1077 + sensors:
1078 + - { name: status, url: "https://status.adguard.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1079 + - { name: blog sitemap, url: "https://adguard-dns.io/blog-sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1080 + - id: dnsfilter
1081 + name: DNSFilter
1082 + domain: dnsfilter.com
1083 + homepage: https://www.dnsfilter.com
1084 + categories: [cyber, internet]
1085 + tier: B
1086 + aliases: [dnsfilter]
1087 + discover: { rss: true, sitemap: true, status: true, pages: true }
1088 + sensors:
1089 + - { name: status, url: "https://status.dnsfilter.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1090 + - { name: blog feed, url: "https://www.dnsfilter.com/blog/rss.xml", type: RSS, connector: rss, tier: C }
1091 + - { name: pricing, url: "https://www.dnsfilter.com/pricing", type: HTML, connector: http, tier: C }
1092 + - id: control-d
1093 + name: Control D
1094 + domain: controld.com
1095 + homepage: https://controld.com
1096 + categories: [internet, cyber]
1097 + tier: C
1098 + aliases: [control d, controld]
1099 + discover: { rss: true, sitemap: true }
1100 + sensors:
1101 + - { name: blog feed, url: "https://controld.com/blog/rss/", type: RSS, connector: rss, tier: C }
1102 + - id: nextdns
1103 + name: NextDNS
1104 + domain: nextdns.io
1105 + homepage: https://nextdns.io
1106 + categories: [internet, cyber]
1107 + tier: B
1108 + aliases: [nextdns]
1109 + discover: { rss: false, sitemap: false, pages: false }
1110 + notes: "nextdns.io is client-rendered and the only Statuspage found (nextdns.statuspage.io, 'NextDNS-XYZ') is not linked from the site — not trusted. CLI releases on GitHub are the official signal."
1111 + sensors:
1112 + - { name: cli releases, url: "https://github.com/nextdns/nextdns/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: nextdns/nextdns, kind: releases } }
1113 + - id: dnsimple
1114 + name: DNSimple
1115 + domain: dnsimple.com
1116 + homepage: https://dnsimple.com
1117 + categories: [internet, infrastructure, developer]
1118 + tier: B
1119 + aliases: [dnsimple]
1120 + discover: { rss: true, sitemap: true, status: true, pages: true }
1121 + sensors:
1122 + - { name: status, url: "https://dnsimple.statuspage.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1123 + - { name: blog feed, url: "https://blog.dnsimple.com/feed.xml", type: RSS, connector: rss, tier: C }
1124 + - { name: pricing, url: "https://dnsimple.com/pricing", type: HTML, connector: http, tier: C }
1125 +
1126 + # ───────────────────────── G · Internet exchanges, data centres & measurement ─────────────────────────
1127 + - id: de-cix
1128 + name: DE-CIX
1129 + domain: de-cix.net
1130 + homepage: https://www.de-cix.net
1131 + categories: [internet, infrastructure]
1132 + tier: B
1133 + weight: 1.1
1134 + aliases: [de-cix, decix]
1135 + discover: { rss: true, sitemap: true, pages: true }
1136 + sensors:
1137 + - { name: sitemap, url: "https://www.de-cix.net/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1138 + - { name: news, url: "https://www.de-cix.net/en/about-de-cix/news", type: HTML, connector: http, tier: B }
1139 + - id: ams-ix
1140 + name: AMS-IX
1141 + domain: ams-ix.net
1142 + homepage: https://www.ams-ix.net
1143 + categories: [internet, infrastructure]
1144 + tier: B
1145 + weight: 1.1
1146 + aliases: [ams-ix, amsix, amsterdam internet exchange]
1147 + discover: { rss: true, sitemap: true, status: true }
1148 + sensors:
1149 + - { name: status, url: "https://status.ams-ix.net/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1150 + - { name: news, url: "https://www.ams-ix.net/ams/news", type: HTML, connector: http, tier: B }
1151 + - id: linx
1152 + name: LINX
1153 + domain: linx.net
1154 + homepage: https://www.linx.net
1155 + categories: [internet, infrastructure]
1156 + tier: B
1157 + aliases: [linx, london internet exchange]
1158 + discover: { rss: true, sitemap: true }
1159 + sensors:
1160 + - { name: news feed, url: "https://www.linx.net/news/feed/", type: RSS, connector: rss, tier: B }
1161 + - { name: news sitemap, url: "https://www.linx.net/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 500 } }
1162 + - id: france-ix
1163 + name: France-IX
1164 + domain: franceix.net
1165 + homepage: https://www.franceix.net
1166 + categories: [internet, infrastructure]
1167 + tier: C
1168 + aliases: [france-ix, franceix]
1169 + discover: { rss: true, sitemap: true }
1170 + sensors:
1171 + - { name: sitemap, url: "https://www.franceix.net/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 500 } }
1172 + - id: qix
1173 + name: QIX (Montréal)
1174 + domain: qix.ca
1175 + homepage: https://qix.ca
1176 + categories: [internet, infrastructure]
1177 + tier: C
1178 + aliases: [qix, quebec internet exchange, montreal internet exchange]
1179 + discover: { rss: true, sitemap: true, pages: true }
1180 + sensors:
1181 + - { name: grille tarifaire, url: "https://qix.ca/grille-tarifaire/", type: HTML, connector: http, tier: C }
1182 + - { name: sitemap, url: "https://qix.ca/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 500, maxChildren: 3 } }
1183 + - id: torix
1184 + name: TorIX
1185 + domain: torix.ca
1186 + homepage: https://www.torix.ca
1187 + categories: [internet, infrastructure]
1188 + tier: C
1189 + aliases: [torix, toronto internet exchange]
1190 + discover: { rss: true, sitemap: true, pages: true }
1191 + sensors:
1192 + - { name: pricing, url: "https://torix.ca/pricing/", type: HTML, connector: http, tier: C }
1193 + - { name: sitemap, url: "https://www.torix.ca/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 500, maxChildren: 3 } }
1194 + - id: equinix
1195 + name: Equinix
1196 + domain: equinix.com
1197 + homepage: https://www.equinix.com
1198 + categories: [infrastructure, internet]
1199 + tier: B
1200 + weight: 1.3
1201 + aliases: [equinix, equinix metal, equinix fabric]
1202 + discover: { rss: true, sitemap: false, status: false }
1203 + notes: "www.equinix.com and status.equinix.com are Akamai-blocked for bots; the corporate blog feed is open."
1204 + sensors:
1205 + - { name: blog feed, url: "https://blog.equinix.com/feed/", type: RSS, connector: rss, tier: B }
1206 + - id: digital-realty
1207 + name: Digital Realty
1208 + domain: digitalrealty.com
1209 + homepage: https://www.digitalrealty.com
1210 + categories: [infrastructure]
1211 + tier: C
1212 + weight: 1.1
1213 + aliases: [digital realty, interxion, platformdigital]
1214 + discover: { rss: true, sitemap: true }
1215 + sensors:
1216 + - { name: sitemap, url: "https://www.digitalrealty.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 7 } }
1217 + - id: cyrusone
1218 + name: CyrusOne
1219 + domain: cyrusone.com
1220 + homepage: https://www.cyrusone.com
1221 + categories: [infrastructure]
1222 + tier: C
1223 + aliases: [cyrusone]
1224 + discover: { rss: true, sitemap: true }
1225 + sensors:
1226 + - { name: sitemap, url: "https://www.cyrusone.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1227 + - id: qts
1228 + name: QTS Data Centers
1229 + domain: q.com
1230 + homepage: https://q.com
1231 + categories: [infrastructure]
1232 + tier: C
1233 + aliases: [qts, qts data centers, quality technology services]
1234 + discover: { rss: true, sitemap: true }
1235 + sensors:
1236 + - { name: news feed, url: "https://q.com/news/feed/", type: RSS, connector: rss, tier: C }
1237 + - id: switch
1238 + name: Switch
1239 + domain: switch.com
1240 + homepage: https://www.switch.com
1241 + categories: [infrastructure]
1242 + tier: C
1243 + aliases: [switch, switch inc, switch data centers]
1244 + discover: { rss: true, sitemap: true }
1245 + sensors:
1246 + - { name: news feed, url: "https://www.switch.com/feed/", type: RSS, connector: rss, tier: C }
1247 + - id: estruxture
1248 + name: eStruxture
1249 + domain: estruxture.com
1250 + homepage: https://www.estruxture.com
1251 + categories: [infrastructure]
1252 + tier: C
1253 + aliases: [estruxture]
1254 + discover: { rss: true, sitemap: true }
1255 + sensors:
1256 + - { name: blog feed, url: "https://www.estruxture.com/blog/rss.xml", type: RSS, connector: rss, tier: C }
1257 + - { name: sitemap, url: "https://www.estruxture.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1258 + - id: vantage-data-centers
1259 + name: Vantage Data Centers
1260 + domain: vantage-dc.com
1261 + homepage: https://vantage-dc.com
1262 + categories: [infrastructure]
1263 + tier: C
1264 + aliases: [vantage, vantage data centers]
1265 + discover: { rss: true, sitemap: true }
1266 + sensors:
1267 + - { name: news sitemap, url: "https://vantage-dc.com/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 500 } }
1268 + - id: peeringdb
1269 + name: PeeringDB
1270 + domain: peeringdb.com
1271 + homepage: https://www.peeringdb.com
1272 + categories: [internet, infrastructure, open-data]
1273 + tier: B
1274 + weight: 1.1
1275 + aliases: [peeringdb]
1276 + discover: { rss: false, sitemap: false }
1277 + sensors:
1278 + - { name: internet exchanges updated (30 d), url: "https://www.peeringdb.com/api/ix?depth=0&limit=250&updated__gte={now-30d}", type: REST_API, connector: jsonlist, tier: B, config: { itemsPath: data, keyField: id, titleField: name, urlTemplate: "https://www.peeringdb.com/ix/{key}", summaryField: city, dateField: updated, compareFields: [name, website, net_count, proto_ipv6], maxItems: 250, noConditional: true } }
1279 + - id: ioda
1280 + name: IODA (Internet Outage Detection and Analysis)
1281 + domain: ioda.inetintel.cc.gatech.edu
1282 + homepage: https://ioda.inetintel.cc.gatech.edu
1283 + categories: [internet, research, infrastructure]
1284 + tier: C
1285 + aliases: [ioda, internet outage detection]
1286 + discover: { rss: false, sitemap: false }
1287 + notes: "Dashboard is a client-rendered SPA; the alerts API requires epoch from/until parameters (no ISO placeholders) — no validated sensor yet."
1288 + - id: netblocks
1289 + name: NetBlocks
1290 + domain: netblocks.org
1291 + homepage: https://netblocks.org
1292 + categories: [internet, ngo, politics]
1293 + tier: B
1294 + weight: 1.1
1295 + aliases: [netblocks]
1296 + discover: { rss: true, sitemap: true }
1297 + sensors:
1298 + - { name: reports feed, url: "https://netblocks.org/feed", type: RSS, connector: rss, tier: B }
1299 + - id: kentik
1300 + name: Kentik
1301 + domain: kentik.com
1302 + homepage: https://www.kentik.com
1303 + categories: [internet, infrastructure, enterprise]
1304 + tier: B
1305 + aliases: [kentik]
1306 + discover: { rss: true, sitemap: true, status: true, pages: true }
1307 + sensors:
1308 + - { name: status, url: "https://status.kentik.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1309 + - { name: kentipedia feed, url: "https://www.kentik.com/kentipedia.xml", type: RSS, connector: rss, tier: C, config: { maxItems: 60 } }
1310 + - id: thousandeyes
1311 + name: Cisco ThousandEyes
1312 + domain: thousandeyes.com
1313 + homepage: https://www.thousandeyes.com
1314 + categories: [internet, infrastructure, enterprise]
1315 + tier: B
1316 + aliases: [thousandeyes, cisco thousandeyes, internet outages map]
1317 + discover: { rss: false, sitemap: false, status: true }
1318 + notes: "www.thousandeyes.com blog/RSS return 403 to non-browser clients; the status page is open."
1319 + sensors:
1320 + - { name: status, url: "https://status.thousandeyes.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1321 + - id: ookla
1322 + name: Ookla (Speedtest, Downdetector)
1323 + domain: ookla.com
1324 + homepage: https://www.ookla.com
1325 + categories: [internet, infrastructure, consumer-tech]
1326 + tier: B
1327 + weight: 1.1
1328 + aliases: [ookla, speedtest, downdetector]
1329 + products:
1330 + - { name: Speedtest, type: product }
1331 + - { name: Downdetector, type: product }
1332 + discover: { rss: true, sitemap: true, status: true }
1333 + notes: "downdetector.com is client-rendered and bot-protected; tracked as an Ookla product."
1334 + sensors:
1335 + - { name: status, url: "https://status.ookla.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1336 + - { name: articles feed, url: "https://www.ookla.com/articles/rss", type: RSS, connector: rss, tier: B }
1337 + - id: catchpoint
1338 + name: Catchpoint
1339 + domain: catchpoint.com
1340 + homepage: https://www.catchpoint.com
1341 + categories: [internet, infrastructure, enterprise]
1342 + tier: B
1343 + aliases: [catchpoint, internet sonar]
1344 + discover: { rss: true, sitemap: true, status: true }
1345 + sensors:
1346 + - { name: status, url: "https://status.catchpoint.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1347 + - { name: blog feed, url: "https://www.catchpoint.com/blog/rss.xml", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
1348 + - id: internet-society
1349 + extend: true
1350 + products:
1351 + - { name: Internet Society Pulse, type: service, aliases: [pulse, isoc pulse] }
1352 + sensors:
1353 + - { name: pulse news feed, url: "https://pulse.internetsociety.org/en/news/rss/", type: RSS, connector: rss, tier: B }
1354 + - { name: pulse release notes feed, url: "https://pulse.internetsociety.org/en/release-notes/rss/", type: RSS, connector: rss, tier: C }
1355 +
1356 + # ───────────────────────── H · Browsers & web platform ─────────────────────────
1357 + - id: webkit
1358 + name: WebKit
1359 + domain: webkit.org
1360 + homepage: https://webkit.org
1361 + categories: [technology, developer, open-source]
1362 + tier: B
1363 + weight: 1.2
1364 + aliases: [webkit, safari technology preview]
1365 + discover: { rss: true, sitemap: true }
1366 + sensors:
1367 + - { name: blog feed, url: "https://webkit.org/feed/", type: RSS, connector: rss, tier: B }
1368 + - id: brave
1369 + name: Brave
1370 + domain: brave.com
1371 + homepage: https://brave.com
1372 + categories: [technology, consumer-tech, internet]
1373 + tier: B
1374 + weight: 1.1
1375 + aliases: [brave, brave browser, brave search]
1376 + products:
1377 + - { name: Brave Browser, type: software }
1378 + - { name: Brave Search, type: product }
1379 + discover: { rss: true, sitemap: true, status: false }
1380 + sensors:
1381 + - { name: blog feed, url: "https://brave.com/blog/index.xml", type: RSS, connector: rss, tier: B }
1382 + - { name: browser releases, url: "https://github.com/brave/brave-browser/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: brave/brave-browser, kind: releases } }
1383 + - id: opera
1384 + name: Opera
1385 + domain: opera.com
1386 + homepage: https://www.opera.com
1387 + categories: [technology, consumer-tech, internet]
1388 + tier: C
1389 + aliases: [opera, opera browser, opera gx]
1390 + discover: { rss: true, sitemap: false }
1391 + sensors:
1392 + - { name: news blog feed, url: "https://blogs.opera.com/news/feed/", type: RSS, connector: rss, tier: C }
1393 + - { name: press feed, url: "https://press.opera.com/feed/", type: RSS, connector: rss, tier: C }
1394 + - id: vivaldi
1395 + name: Vivaldi
1396 + domain: vivaldi.com
1397 + homepage: https://vivaldi.com
1398 + categories: [technology, consumer-tech, internet]
1399 + tier: C
1400 + aliases: [vivaldi, vivaldi browser]
1401 + discover: { rss: true, sitemap: true }
1402 + sensors:
1403 + - { name: blog feed, url: "https://vivaldi.com/feed/", type: RSS, connector: rss, tier: C }
1404 + - id: microsoft
1405 + extend: true
1406 + products:
1407 + - { name: Microsoft Edge, type: software, aliases: [edge, edge browser, msedge] }
1408 + sensors:
1409 + - { name: edge dev blog feed, url: "https://blogs.windows.com/msedgedev/feed/", type: RSS, connector: rss, tier: B }
1410 + - id: the-browser-company
1411 + name: The Browser Company (Arc)
1412 + domain: arc.net
1413 + homepage: https://arc.net
1414 + categories: [technology, consumer-tech]
1415 + tier: C
1416 + aliases: [the browser company, arc, arc browser, dia browser]
1417 + products:
1418 + - { name: Arc, type: software, aliases: [arc browser] }
1419 + - { name: Dia, type: software }
1420 + discover: { rss: false, sitemap: true }
1421 + sensors:
1422 + - { name: sitemap, url: "https://arc.net/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 500 } }
1423 + - id: duckduckgo
1424 + name: DuckDuckGo
1425 + domain: duckduckgo.com
1426 + homepage: https://duckduckgo.com
1427 + categories: [internet, consumer-tech, technology]
1428 + tier: B
1429 + weight: 1.1
1430 + aliases: [duckduckgo, ddg, spread privacy]
1431 + discover: { rss: true, sitemap: true }
1432 + sensors:
1433 + - { name: spread privacy blog feed, url: "https://spreadprivacy.com/rss/", type: RSS, connector: rss, tier: B }
1434 + - { name: sitemap, url: "https://duckduckgo.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 500 } }
1435 + - id: ecosia
1436 + name: Ecosia
1437 + domain: ecosia.org
1438 + homepage: https://www.ecosia.org
1439 + categories: [internet, consumer-tech, climate]
1440 + tier: C
1441 + aliases: [ecosia]
1442 + discover: { rss: true, sitemap: false }
1443 + sensors:
1444 + - { name: blog feed, url: "https://blog.ecosia.org/rss/", type: RSS, connector: rss, tier: C }
1445 + - id: web-platform-tests
1446 + name: Web Platform Tests & Interop
1447 + domain: web-platform-tests.org
1448 + homepage: https://web-platform-tests.org
1449 + categories: [standards, developer, open-source]
1450 + tier: C
1451 + weight: 1.1
1452 + aliases: [web platform tests, wpt, wpt.fyi, interop]
1453 + products:
1454 + - { name: Interop, type: product, aliases: [interop 2026] }
1455 + discover: { rss: false, sitemap: false }
1456 + llm: false
1457 + sensors:
1458 + - { name: interop commits, url: "https://github.com/web-platform-tests/interop/commits/main.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: web-platform-tests/interop, kind: commits } }
1459 + - { name: wpt commits, url: "https://github.com/web-platform-tests/wpt/commits/master.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: web-platform-tests/wpt, kind: commits, branch: master } }
1460 + - id: caniuse
1461 + name: Can I use
1462 + domain: caniuse.com
1463 + homepage: https://caniuse.com
1464 + categories: [developer, standards]
1465 + tier: C
1466 + aliases: [can i use, caniuse]
1467 + discover: { rss: true, sitemap: false }
1468 + sensors:
1469 + - { name: updates feed, url: "https://feeds.feedburner.com/WhenCanIUse", type: ATOM, connector: rss, tier: C }
1470 + - { name: data commits, url: "https://github.com/Fyrd/caniuse/commits/main.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: Fyrd/caniuse, kind: commits } }
1471 +
1472 + # ───────────────────────── I · Messaging & e-mail infrastructure ─────────────────────────
1473 + - id: twilio
1474 + name: Twilio
1475 + domain: twilio.com
1476 + homepage: https://www.twilio.com
1477 + categories: [developer, cloud, telecom]
1478 + tier: S
1479 + weight: 1.3
1480 + aliases: [twilio, sendgrid, twilio sendgrid, segment]
1481 + products:
1482 + - { name: SendGrid, type: service, aliases: [twilio sendgrid] }
1483 + - { name: Segment, type: service, aliases: [twilio segment] }
1484 + - { name: Programmable Messaging, type: API }
1485 + discover: { rss: true, sitemap: true, status: true, pages: true }
1486 + sensors:
1487 + - { name: status, url: "https://status.twilio.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1488 + - { name: segment status, url: "https://status.segment.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1489 + - { name: changelog feed, url: "https://www.twilio.com/en-us/changelog.feed.xml", type: RSS, connector: rss, tier: B }
1490 + - { name: blog feed, url: "https://www.twilio.com/en-us/blog.feed.xml", type: RSS, connector: rss, tier: C }
1491 + - id: mailgun
1492 + name: Mailgun
1493 + domain: mailgun.com
1494 + homepage: https://www.mailgun.com
1495 + categories: [developer, cloud]
1496 + tier: B
1497 + aliases: [mailgun, sinch mailgun]
1498 + discover: { rss: true, sitemap: true, status: true, pages: true }
1499 + sensors:
1500 + - { name: status, url: "https://status.mailgun.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1501 + - { name: blog feed, url: "https://www.mailgun.com/blog/feed/", type: RSS, connector: rss, tier: C }
1502 + - { name: pricing, url: "https://www.mailgun.com/pricing/", type: HTML, connector: http, tier: C }
1503 + - id: postmark
1504 + name: Postmark
1505 + domain: postmarkapp.com
1506 + homepage: https://postmarkapp.com
1507 + categories: [developer, cloud]
1508 + tier: C
1509 + aliases: [postmark, postmarkapp, activecampaign postmark]
1510 + discover: { rss: true, sitemap: true, pages: true }
1511 + notes: "status.postmarkapp.com is a custom page without the Atlassian API."
1512 + sensors:
1513 + - { name: pricing, url: "https://postmarkapp.com/pricing", type: HTML, connector: http, tier: C }
1514 + - id: mailchimp
1515 + name: Mailchimp (Intuit)
1516 + domain: mailchimp.com
1517 + homepage: https://mailchimp.com
1518 + categories: [commerce, cloud]
1519 + tier: B
1520 + aliases: [mailchimp, mandrill, intuit mailchimp]
1521 + products:
1522 + - { name: Mandrill, type: service }
1523 + discover: { rss: false, sitemap: true, pages: true }
1524 + notes: "status.mailchimp.com / status.mandrillapp.com are custom pages without the Atlassian API."
1525 + sensors:
1526 + - { name: marketing pricing, url: "https://mailchimp.com/pricing/marketing/", type: HTML, connector: http, tier: C }
1527 + - { name: sitemap, url: "https://mailchimp.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
1528 + - id: bird
1529 + name: Bird (MessageBird, SparkPost)
1530 + domain: bird.com
1531 + homepage: https://bird.com
1532 + categories: [developer, cloud, telecom]
1533 + tier: B
1534 + aliases: [bird, messagebird, sparkpost]
1535 + products:
1536 + - { name: SparkPost, type: service }
1537 + discover: { rss: false, sitemap: true, status: true, pages: true }
1538 + sensors:
1539 + - { name: status, url: "https://status.bird.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1540 + - { name: sparkpost status, url: "https://status.sparkpost.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1541 + - { name: changelog, url: "https://bird.com/changelog", type: HTML, connector: http, tier: B }
1542 + - id: brevo
1543 + name: Brevo
1544 + domain: brevo.com
1545 + homepage: https://www.brevo.com
1546 + categories: [commerce, cloud]
1547 + tier: B
1548 + aliases: [brevo, sendinblue]
1549 + discover: { rss: false, sitemap: true, status: true }
1550 + sensors:
1551 + - { name: status, url: "https://status.brevo.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1552 + - { name: sitemap (en), url: "https://www.brevo.com/sitemap_en.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1553 + - id: resend
1554 + name: Resend
1555 + domain: resend.com
1556 + homepage: https://resend.com
1557 + categories: [developer, cloud]
1558 + tier: B
1559 + aliases: [resend]
1560 + discover: { rss: true, sitemap: true, pages: true }
1561 + notes: "Status page (resend-status.com) is incident.io — statusjson connector, not used here."
1562 + sensors:
1563 + - { name: changelog feed, url: "https://resend.com/changelog/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
1564 + - { name: blog feed, url: "https://resend.com/blog/rss.xml", type: RSS, connector: rss, tier: C, config: { maxItems: 60 } }
1565 + - { name: pricing, url: "https://resend.com/pricing", type: HTML, connector: http, tier: C }
1566 + - id: proton
1567 + name: Proton
1568 + domain: proton.me
1569 + homepage: https://proton.me
1570 + categories: [cyber, consumer-tech, internet]
1571 + tier: B
1572 + weight: 1.1
1573 + aliases: [proton, proton mail, protonmail, proton vpn, proton ag]
1574 + products:
1575 + - { name: Proton Mail, type: product, aliases: [protonmail] }
1576 + - { name: Proton VPN, type: product }
1577 + discover: { rss: true, sitemap: true, status: true, pages: true }
1578 + sensors:
1579 + - { name: status, url: "https://status.proton.me/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1580 + - { name: blog feed, url: "https://proton.me/blog/feed.xml", type: RSS, connector: rss, tier: B }
1581 + - { name: pricing, url: "https://proton.me/pricing", type: HTML, connector: http, tier: C }
1582 + - id: fastmail
1583 + name: Fastmail
1584 + domain: fastmail.com
1585 + homepage: https://www.fastmail.com
1586 + categories: [internet, consumer-tech]
1587 + tier: B
1588 + aliases: [fastmail]
1589 + discover: { rss: true, sitemap: true, status: true }
1590 + sensors:
1591 + - { name: status, url: "https://fastmailstatus.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1592 + - { name: blog feed, url: "https://www.fastmail.com/blog/feed.xml", type: ATOM, connector: rss, tier: C }
1593 + - id: tuta
1594 + name: Tuta
1595 + domain: tuta.com
1596 + homepage: https://tuta.com
1597 + categories: [cyber, consumer-tech, internet]
1598 + tier: C
1599 + aliases: [tuta, tutanota, tuta mail]
1600 + discover: { rss: true, sitemap: true, pages: true }
1601 + notes: "status.tuta.com requires an API token."
1602 + sensors:
1603 + - { name: blog feed, url: "https://tuta.com/blog/feed.xml", type: RSS, connector: rss, tier: C }
1604 + - { name: security, url: "https://tuta.com/security", type: HTML, connector: http, tier: C }
1605 + - id: sinch
1606 + name: Sinch
1607 + domain: sinch.com
1608 + homepage: https://sinch.com
1609 + categories: [telecom, developer, cloud]
1610 + tier: B
1611 + aliases: [sinch]
1612 + discover: { rss: true, sitemap: true, status: true }
1613 + sensors:
1614 + - { name: status, url: "https://status.sinch.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1615 + - { name: news feed, url: "https://sinch.com/news/feed/", type: RSS, connector: rss, tier: B }
1616 + - id: vonage
1617 + name: Vonage
1618 + domain: vonage.com
1619 + homepage: https://www.vonage.com
1620 + categories: [telecom, developer, cloud]
1621 + tier: C
1622 + aliases: [vonage, nexmo, ericsson vonage]
1623 + discover: { rss: true, sitemap: true }
1624 + notes: "status.vonage.com / vonagestatus.com are unreachable for non-browser clients."
1625 + - id: bandwidth
1626 + name: Bandwidth
1627 + domain: bandwidth.com
1628 + homepage: https://www.bandwidth.com
1629 + categories: [telecom, developer, cloud]
1630 + tier: B
1631 + aliases: [bandwidth, bandwidth.com]
1632 + discover: { rss: true, sitemap: true, status: true }
1633 + sensors:
1634 + - { name: status, url: "https://status.bandwidth.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1635 + - { name: sitemap, url: "https://www.bandwidth.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1636 + - id: telnyx
1637 + name: Telnyx
1638 + domain: telnyx.com
1639 + homepage: https://telnyx.com
1640 + categories: [telecom, developer, cloud]
1641 + tier: B
1642 + aliases: [telnyx]
1643 + discover: { rss: true, sitemap: true, status: true, pages: true }
1644 + sensors:
1645 + - { name: status, url: "https://status.telnyx.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1646 + - { name: release notes feed, url: "https://telnyx.com/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
1647 + - { name: pricing, url: "https://telnyx.com/pricing", type: HTML, connector: http, tier: C }
1648 + - id: infobip
1649 + name: Infobip
1650 + domain: infobip.com
1651 + homepage: https://www.infobip.com
1652 + categories: [telecom, developer, cloud]
1653 + tier: B
1654 + aliases: [infobip]
1655 + discover: { rss: true, sitemap: true, status: true }
1656 + sensors:
1657 + - { name: status, url: "https://status.infobip.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1658 + - { name: news feed, url: "https://www.infobip.com/news/feed", type: RSS, connector: rss, tier: C }
1659 + - id: plivo
1660 + name: Plivo
1661 + domain: plivo.com
1662 + homepage: https://www.plivo.com
1663 + categories: [telecom, developer, cloud]
1664 + tier: B
1665 + aliases: [plivo]
1666 + discover: { rss: true, sitemap: true, status: true, pages: true }
1667 + sensors:
1668 + - { name: status, url: "https://status.plivo.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1669 + - { name: changelog, url: "https://www.plivo.com/changelog", type: HTML, connector: http, tier: B }
1670 + - { name: site feed, url: "https://www.plivo.com/rss.xml", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
1671 + - id: m3aawg
1672 + name: M3AAWG
1673 + domain: m3aawg.org
1674 + homepage: https://www.m3aawg.org
1675 + categories: [cyber, internet, standards]
1676 + tier: C
1677 + aliases: [m3aawg, maawg, messaging malware mobile anti-abuse working group]
1678 + discover: { rss: true, sitemap: true, pages: true }
1679 + sensors:
1680 + - { name: sitemap, url: "https://www.m3aawg.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1681 + - { name: news, url: "https://www.m3aawg.org/news", type: HTML, connector: http, tier: C }
1682 + - id: spamhaus
1683 + name: Spamhaus
1684 + domain: spamhaus.org
1685 + homepage: https://www.spamhaus.org
1686 + categories: [cyber, internet]
1687 + tier: B
1688 + weight: 1.1
1689 + aliases: [spamhaus, spamhaus project, sbl, dbl]
1690 + discover: { rss: false, sitemap: true, pages: true }
1691 + sensors:
1692 + - { name: resource hub, url: "https://www.spamhaus.org/resource-hub/", type: HTML, connector: http, tier: B }
1693 + - id: validity
1694 + name: Validity (Return Path)
1695 + domain: validity.com
1696 + homepage: https://www.validity.com
1697 + categories: [commerce, internet]
1698 + tier: C
1699 + aliases: [validity, return path, everest]
1700 + discover: { rss: true, sitemap: true }
1701 + sensors:
1702 + - { name: blog feed, url: "https://www.validity.com/blog/feed/", type: RSS, connector: rss, tier: C }
1703 + - id: dmarc-org
1704 + name: DMARC.org
1705 + domain: dmarc.org
1706 + homepage: https://dmarc.org
1707 + categories: [cyber, internet, standards]
1708 + tier: C
1709 + aliases: [dmarc, dmarc.org]
1710 + discover: { rss: true, sitemap: true }
1711 + sensors:
1712 + - { name: news feed, url: "https://dmarc.org/feed/", type: RSS, connector: rss, tier: C }
added config/sources.d/14-retail-consumer-travel.yaml +1621 −0
@@ -0,0 +1,1621 @@
1 +# config/sources.d/14-retail-consumer-travel.yaml — retail & marketplaces, consumer brands, food & beverage,
2 +# restaurants, hospitality & travel platforms, delivery, automotive retail, loyalty (added 2026-09-08).
3 +# Every sensor below was fetched and parsed by apps/engine/src/validate.ts before being written. Investor-relations
4 +# feeds hosted on Q4 behind a Cloudflare challenge (Costco, Best Buy, Kroger IR, eBay IR, Wayfair, Chewy, Canadian
5 +# Tire, Aritzia, Roots, General Mills, Molson Coors, Kimberly-Clark, Whirlpool, Mattel, GoPro, Crocs, CarMax,
6 +# Gap, Levi's, Hyatt IR, RBI, Starbucks, Yum, Wendy's, Darden, Booking, Uber IR, DoorDash IR) are NOT sensors —
7 +# they are listed in `notes:`. `robots.txt` sensors (tier D) on the large marketplaces track AI-crawler policy shifts.
8 +
9 +sources:
10 + # ───────────────────────── A · Retailers & marketplaces ─────────────────────────
11 + - id: amazon
12 + name: Amazon
13 + domain: amazon.com
14 + homepage: https://www.aboutamazon.com
15 + categories: [retail, commerce, technology]
16 + tier: A
17 + weight: 1.5
18 + aliases: [amazon.com, amazon inc]
19 + products:
20 + - { name: Amazon Prime, type: service, aliases: [prime] }
21 + - { name: Alexa, type: product }
22 + - { name: Kindle, type: product }
23 + - { name: Amazon Marketplace, type: service, aliases: [amazon marketplace, amazon sellers] }
24 + discover: { rss: true, sitemap: true, pages: true }
25 + notes: "AWS is the separate `aws` source. press.aboutamazon.com/rss/news-releases.xml and ir.aboutamazon.com (Q4, Cloudflare challenge) are not reachable; the About Amazon newsroom feed is."
26 + sensors:
27 + - { name: news feed, url: "https://www.aboutamazon.com/rss/feed.rss", type: RSS, connector: rss, tier: A }
28 + - { name: crawler policy (robots.txt), url: "https://www.amazon.com/robots.txt", type: FILE, connector: http, tier: D }
29 + - id: walmart
30 + name: Walmart
31 + domain: walmart.com
32 + homepage: https://corporate.walmart.com
33 + categories: [retail, commerce]
34 + tier: B
35 + weight: 1.3
36 + aliases: [walmart inc, wal-mart]
37 + products:
38 + - { name: Walmart+, type: service, aliases: [walmart plus] }
39 + - { name: Sam's Club, type: product, aliases: [sams club] }
40 + discover: { rss: true, sitemap: true, pages: true }
41 + notes: "No RSS on corporate.walmart.com or stock.walmart.com (Q4 404); newsroom index page + robots."
42 + sensors:
43 + - { name: newsroom, url: "https://corporate.walmart.com/content/corporate/en_us/news.html", type: HTML, connector: http, tier: B }
44 + - { name: crawler policy (robots.txt), url: "https://www.walmart.com/robots.txt", type: FILE, connector: http, tier: D }
45 + - id: target
46 + name: Target
47 + domain: target.com
48 + homepage: https://corporate.target.com
49 + categories: [retail, commerce]
50 + tier: B
51 + weight: 1.2
52 + aliases: [target corporation, target corp]
53 + discover: { rss: true, sitemap: true }
54 + sensors:
55 + - { name: press releases feed, url: "https://corporate.target.com/feeds/pressreleases", type: RSS, connector: rss, tier: B }
56 + - { name: news feed, url: "https://corporate.target.com/feeds/news", type: RSS, connector: rss, tier: B }
57 + - { name: crawler policy (robots.txt), url: "https://www.target.com/robots.txt", type: FILE, connector: http, tier: D }
58 + - id: costco
59 + name: Costco
60 + domain: costco.com
61 + homepage: https://investor.costco.com
62 + categories: [retail, commerce]
63 + tier: B
64 + weight: 1.2
65 + aliases: [costco wholesale]
66 + discover: { rss: true, sitemap: true }
67 + notes: "investor.costco.com (Q4) sits behind a Cloudflare challenge; costco.com times out for bots. No validated sensor yet."
68 + - id: home-depot
69 + name: The Home Depot
70 + domain: homedepot.com
71 + homepage: https://corporate.homedepot.com
72 + categories: [retail, commerce]
73 + tier: B
74 + weight: 1.2
75 + aliases: [home depot]
76 + discover: { rss: true, sitemap: true }
77 + sensors:
78 + - { name: investor news feed, url: "https://ir.homedepot.com/rss/news-releases.xml", type: RSS, connector: rss, tier: B }
79 + - { name: crawler policy (robots.txt), url: "https://www.homedepot.com/robots.txt", type: FILE, connector: http, tier: D }
80 + - id: lowes
81 + name: Lowe's
82 + domain: lowes.com
83 + homepage: https://corporate.lowes.com
84 + categories: [retail, commerce]
85 + tier: B
86 + aliases: [lowes, lowe's companies]
87 + discover: { rss: true, sitemap: true, pages: true }
88 + notes: "corporate.lowes.com newsroom has no feed (Akamai on lowes.com)."
89 + sensors:
90 + - { name: newsroom, url: "https://corporate.lowes.com/newsroom", type: HTML, connector: http, tier: B }
91 + - id: kroger
92 + name: Kroger
93 + domain: thekrogerco.com
94 + categories: [retail, food]
95 + tier: B
96 + aliases: [the kroger co]
97 + discover: { rss: true }
98 + notes: "ir.kroger.com (Q4) behind a Cloudflare challenge; corporate WordPress feed works."
99 + sensors:
100 + - { name: newsroom feed, url: "https://www.thekrogerco.com/feed/", type: RSS, connector: rss, tier: B }
101 + - id: best-buy
102 + name: Best Buy
103 + domain: bestbuy.com
104 + homepage: https://corporate.bestbuy.com
105 + categories: [retail, consumer-tech]
106 + tier: B
107 + aliases: [bestbuy]
108 + discover: { rss: true }
109 + notes: "investors.bestbuy.com (Q4) behind a Cloudflare challenge."
110 + sensors:
111 + - { name: corporate news feed, url: "https://corporate.bestbuy.com/feed/", type: RSS, connector: rss, tier: B }
112 + - { name: crawler policy (robots.txt), url: "https://www.bestbuy.com/robots.txt", type: FILE, connector: http, tier: D }
113 + - id: ikea
114 + name: IKEA
115 + domain: ikea.com
116 + categories: [retail, consumer]
117 + tier: B
118 + weight: 1.1
119 + aliases: [ingka, inter ikea]
120 + discover: { rss: true, sitemap: true, pages: true }
121 + notes: "Newsroom (ikea.com/global/en/newsroom) is client-rendered, no feed."
122 + sensors:
123 + - { name: crawler policy (robots.txt), url: "https://www.ikea.com/robots.txt", type: FILE, connector: http, tier: D }
124 + - id: loblaw
125 + name: Loblaw Companies
126 + domain: loblaw.ca
127 + categories: [retail, food]
128 + tier: B
129 + weight: 1.1
130 + aliases: [loblaws, loblaw companies limited]
131 + products:
132 + - { name: PC Optimum, type: service, aliases: [pc optimum] }
133 + - { name: Shoppers Drug Mart, type: product, aliases: [shoppers, pharmaprix] }
134 + - { name: No Frills, type: product }
135 + discover: { rss: true, sitemap: true, pages: true }
136 + sensors:
137 + - { name: our stories, url: "https://www.loblaw.ca/en/our-stories/", type: HTML, connector: http, tier: B }
138 + - id: empire-sobeys
139 + name: Empire Company (Sobeys)
140 + domain: empireco.ca
141 + categories: [retail, food]
142 + tier: B
143 + aliases: [empire, sobeys, iga, safeway canada]
144 + products:
145 + - { name: Scene+, type: service, aliases: [scene plus] }
146 + - { name: Voilà, type: service, aliases: [voila] }
147 + discover: { rss: true, sitemap: true, pages: true }
148 + sensors:
149 + - { name: news releases, url: "https://www.empireco.ca/news", type: HTML, connector: http, tier: B }
150 + - id: dollarama
151 + name: Dollarama
152 + domain: dollarama.com
153 + categories: [retail]
154 + tier: B
155 + discover: { rss: true, sitemap: true }
156 + sensors:
157 + - { name: corporate content sitemap, url: "https://www.dollarama.com/sitemap_content.xml", type: SITEMAP, connector: sitemap, tier: B }
158 + - id: couche-tard
159 + name: Alimentation Couche-Tard
160 + domain: couche-tard.com
161 + homepage: https://corporate.couche-tard.com
162 + categories: [retail]
163 + tier: B
164 + aliases: [couche-tard, circle k]
165 + products:
166 + - { name: Circle K, type: product }
167 + discover: { rss: true, sitemap: true, pages: true }
168 + sensors:
169 + - { name: newsroom, url: "https://corporate.couche-tard.com/newsroom", type: HTML, connector: http, tier: B }
170 + - id: aldi
171 + name: ALDI
172 + domain: aldi.us
173 + homepage: https://corporate.aldi.us
174 + categories: [retail, food]
175 + tier: B
176 + aliases: [aldi us, aldi süd, aldi nord]
177 + discover: { rss: true, sitemap: true, pages: true }
178 + notes: "aldi.co.uk newsroom is 403 to bots."
179 + sensors:
180 + - { name: US newsroom, url: "https://corporate.aldi.us/newsroom", type: HTML, connector: http, tier: B }
181 + - id: carrefour
182 + name: Carrefour
183 + domain: carrefour.com
184 + categories: [retail, food]
185 + tier: B
186 + weight: 1.1
187 + aliases: [groupe carrefour]
188 + discover: { rss: true, sitemap: true }
189 + sensors:
190 + - { name: news feed, url: "https://www.carrefour.com/en/rss.xml", type: RSS, connector: rss, tier: B }
191 + - id: hm-group
192 + name: H&M Group
193 + domain: hmgroup.com
194 + categories: [retail, consumer]
195 + tier: B
196 + aliases: [h&m, hennes & mauritz, h and m]
197 + discover: { rss: true, sitemap: true }
198 + sensors:
199 + - { name: news feed, url: "https://hmgroup.com/feed/", type: RSS, connector: rss, tier: B }
200 + - id: seven-and-i
201 + name: Seven & i Holdings
202 + domain: 7andi.com
203 + categories: [retail]
204 + tier: B
205 + aliases: [seven & i, 7-eleven, seven eleven, 7&i]
206 + products:
207 + - { name: 7-Eleven, type: product, aliases: [seven eleven] }
208 + discover: { rss: true }
209 + sensors:
210 + - { name: news feed, url: "https://www.7andi.com/rss/en_news.xml", type: RSS, connector: rss, tier: B }
211 + - id: alibaba
212 + name: Alibaba Group
213 + domain: alibabagroup.com
214 + categories: [commerce, retail, technology]
215 + tier: B
216 + weight: 1.3
217 + aliases: [alibaba, taobao, tmall, aliexpress]
218 + products:
219 + - { name: AliExpress, type: service }
220 + - { name: Taobao, type: service }
221 + - { name: Tmall, type: service }
222 + - { name: Alizila, type: product }
223 + discover: { rss: true, sitemap: true }
224 + notes: "alibabagroup.com is client-rendered; Alizila (official news site) has a WordPress feed."
225 + sensors:
226 + - { name: alizila news feed, url: "https://www.alizila.com/feed/", type: RSS, connector: rss, tier: B }
227 + - { name: alibaba.com crawler policy (robots.txt), url: "https://www.alibaba.com/robots.txt", type: FILE, connector: http, tier: D }
228 + - { name: aliexpress crawler policy (robots.txt), url: "https://www.aliexpress.com/robots.txt", type: FILE, connector: http, tier: D }
229 + - id: etsy
230 + name: Etsy
231 + domain: etsy.com
232 + homepage: https://investors.etsy.com
233 + categories: [commerce, retail]
234 + tier: B
235 + aliases: [etsy inc]
236 + discover: { rss: true }
237 + sensors:
238 + - { name: press releases feed, url: "https://investors.etsy.com/news-events/press-releases/rss", type: RSS, connector: rss, tier: B }
239 + - { name: crawler policy (robots.txt), url: "https://www.etsy.com/robots.txt", type: FILE, connector: http, tier: D }
240 + - id: ebay
241 + name: eBay
242 + domain: ebay.com
243 + homepage: https://www.ebayinc.com
244 + categories: [commerce, retail]
245 + tier: B
246 + weight: 1.1
247 + aliases: [ebay inc]
248 + discover: { rss: true }
249 + notes: "investors.ebayinc.com (Q4) behind a Cloudflare challenge; ebayinc.com stories feed works."
250 + sensors:
251 + - { name: news feed, url: "https://www.ebayinc.com/stories/news/rss/", type: RSS, connector: rss, tier: B }
252 + - { name: crawler policy (robots.txt), url: "https://www.ebay.com/robots.txt", type: FILE, connector: http, tier: D }
253 + - id: rakuten
254 + name: Rakuten Group
255 + domain: rakuten.co.jp
256 + homepage: https://global.rakuten.com/corp/
257 + categories: [commerce, retail, internet]
258 + tier: B
259 + aliases: [rakuten]
260 + discover: { rss: true }
261 + sensors:
262 + - { name: press releases feed, url: "https://global.rakuten.com/corp/rss/press.xml", type: RSS, connector: rss, tier: B }
263 + - { name: crawler policy (robots.txt), url: "https://www.rakuten.co.jp/robots.txt", type: FILE, connector: http, tier: D }
264 + - id: mercadolibre
265 + name: MercadoLibre
266 + domain: mercadolibre.com
267 + homepage: https://investor.mercadolibre.com
268 + categories: [commerce, retail, payments]
269 + tier: B
270 + weight: 1.1
271 + aliases: [mercado libre, meli, mercado pago]
272 + discover: { rss: true, sitemap: true }
273 + notes: "investor.mercadolibre.com exposes no RSS (404 on the usual paths)."
274 + sensors:
275 + - { name: crawler policy (robots.txt), url: "https://www.mercadolibre.com/robots.txt", type: FILE, connector: http, tier: D }
276 + - id: shein
277 + name: SHEIN
278 + domain: shein.com
279 + homepage: https://www.sheingroup.com
280 + categories: [commerce, retail, consumer]
281 + tier: B
282 + aliases: [shein group]
283 + discover: { rss: true, sitemap: true, pages: true }
284 + sensors:
285 + - { name: newsroom, url: "https://www.sheingroup.com/newsroom", type: HTML, connector: http, tier: B }
286 + - { name: crawler policy (robots.txt), url: "https://www.shein.com/robots.txt", type: FILE, connector: http, tier: D }
287 + - id: flipkart
288 + name: Flipkart
289 + domain: flipkart.com
290 + homepage: https://stories.flipkart.com
291 + categories: [commerce, retail]
292 + tier: B
293 + discover: { rss: true, sitemap: true }
294 + sensors:
295 + - { name: crawler policy (robots.txt), url: "https://www.flipkart.com/robots.txt", type: FILE, connector: http, tier: D }
296 + - id: wayfair
297 + name: Wayfair
298 + domain: wayfair.com
299 + categories: [commerce, retail]
300 + tier: B
301 + discover: { rss: true }
302 + notes: "investor.wayfair.com (Q4) behind a Cloudflare challenge."
303 + sensors:
304 + - { name: crawler policy (robots.txt), url: "https://www.wayfair.com/robots.txt", type: FILE, connector: http, tier: D }
305 + - id: chewy
306 + name: Chewy
307 + domain: chewy.com
308 + categories: [commerce, retail]
309 + tier: C
310 + discover: { rss: true }
311 + notes: "investor.chewy.com (Q4) behind a Cloudflare challenge."
312 + sensors:
313 + - { name: crawler policy (robots.txt), url: "https://www.chewy.com/robots.txt", type: FILE, connector: http, tier: D }
314 + - id: instacart
315 + name: Instacart
316 + domain: instacart.com
317 + homepage: https://company.instacart.com
318 + categories: [commerce, food, technology]
319 + tier: B
320 + aliases: [maplebear]
321 + discover: { rss: true, sitemap: true, pages: true }
322 + sensors:
323 + - { name: company updates, url: "https://company.instacart.com/updates/", type: HTML, connector: http, tier: B }
324 + - { name: crawler policy (robots.txt), url: "https://www.instacart.com/robots.txt", type: FILE, connector: http, tier: D }
325 + - id: newegg
326 + name: Newegg
327 + domain: newegg.com
328 + categories: [commerce, consumer-tech]
329 + tier: C
330 + discover: { rss: true }
331 + sensors:
332 + - { name: insider feed, url: "https://www.newegg.com/insider/feed/", type: RSS, connector: rss, tier: C }
333 + - { name: crawler policy (robots.txt), url: "https://www.newegg.com/robots.txt", type: FILE, connector: http, tier: D }
334 + - id: canadian-tire
335 + name: Canadian Tire Corporation
336 + domain: canadiantire.ca
337 + homepage: https://corp.canadiantire.ca
338 + categories: [retail]
339 + tier: B
340 + aliases: [canadian tire, ctc, sportchek, mark's]
341 + products:
342 + - { name: Triangle Rewards, type: service }
343 + discover: { rss: true, sitemap: true }
344 + notes: "corp.canadiantire.ca and investors.canadiantire.ca (Q4) behind a Cloudflare challenge."
345 + sensors:
346 + - { name: crawler policy (robots.txt), url: "https://www.canadiantire.ca/robots.txt", type: FILE, connector: http, tier: D }
347 + - id: walgreens
348 + name: Walgreens Boots Alliance
349 + domain: walgreens.com
350 + homepage: https://corporate.walgreens.com
351 + categories: [retail, health]
352 + tier: B
353 + aliases: [walgreens, boots, wba]
354 + discover: { rss: true, sitemap: true, pages: true }
355 + sensors:
356 + - { name: news and stories, url: "https://corporate.walgreens.com/news-and-stories/", type: HTML, connector: http, tier: B }
357 + - id: cvs
358 + name: CVS Health
359 + domain: cvshealth.com
360 + categories: [retail, health]
361 + tier: B
362 + weight: 1.1
363 + aliases: [cvs, cvs pharmacy, aetna]
364 + discover: { rss: true, sitemap: true, pages: true }
365 + sensors:
366 + - { name: sitemap, url: "https://www.cvshealth.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
367 + - id: metro-inc
368 + name: Metro Inc.
369 + domain: metro.ca
370 + homepage: https://corpo.metro.ca
371 + categories: [retail, food]
372 + tier: B
373 + aliases: [metro, jean coutu, brunet, super c]
374 + products:
375 + - { name: Jean Coutu, type: product, aliases: [pjc] }
376 + discover: { rss: true, sitemap: true }
377 + notes: "No feed on corpo.metro.ca; corporate sitemap only."
378 + sensors:
379 + - { name: corporate sitemap, url: "https://corpo.metro.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
380 + - id: lidl
381 + name: Lidl
382 + domain: lidl.com
383 + homepage: https://corporate.lidl.co.uk
384 + categories: [retail, food]
385 + tier: B
386 + aliases: [lidl gb, schwarz group]
387 + discover: { rss: true, sitemap: true, pages: true }
388 + sensors:
389 + - { name: UK media centre, url: "https://corporate.lidl.co.uk/media-centre", type: HTML, connector: http, tier: B }
390 + - id: tesco
391 + name: Tesco
392 + domain: tescoplc.com
393 + categories: [retail, food]
394 + tier: B
395 + weight: 1.1
396 + aliases: [tesco plc]
397 + discover: { rss: true, sitemap: true }
398 + notes: "tescoplc.com returns 403 to non-browser clients on every path (Akamai). No validated sensor yet."
399 + - id: sainsburys
400 + name: Sainsbury's
401 + domain: sainsburys.co.uk
402 + homepage: https://corporate.sainsburys.co.uk
403 + categories: [retail, food]
404 + tier: B
405 + aliases: [sainsburys, j sainsbury, argos]
406 + discover: { rss: true, sitemap: true, pages: true }
407 + sensors:
408 + - { name: press releases feed, url: "https://corporate.sainsburys.co.uk/rss/news", type: RSS, connector: rss, tier: B }
409 + - { name: press releases, url: "https://corporate.sainsburys.co.uk/news/press-releases/", type: HTML, connector: http, tier: B }
410 + - id: inditex
411 + name: Inditex
412 + domain: inditex.com
413 + categories: [retail, consumer]
414 + tier: B
415 + weight: 1.1
416 + aliases: [zara, massimo dutti, bershka, pull&bear]
417 + products:
418 + - { name: Zara, type: product }
419 + discover: { rss: true, sitemap: true, pages: true }
420 + notes: "zara.com is 403 to bots; inditex.com press pages are server-rendered."
421 + sensors:
422 + - { name: press news, url: "https://www.inditex.com/itxcomweb/en/press/news", type: HTML, connector: http, tier: B }
423 + - id: fast-retailing
424 + name: Fast Retailing
425 + domain: fastretailing.com
426 + categories: [retail, consumer]
427 + tier: B
428 + aliases: [uniqlo, gu]
429 + products:
430 + - { name: UNIQLO, type: product, aliases: [uniqlo] }
431 + discover: { rss: true, sitemap: true, pages: true }
432 + sensors:
433 + - { name: news, url: "https://www.fastretailing.com/eng/about/news/", type: HTML, connector: http, tier: B }
434 + - id: jd-com
435 + name: JD.com
436 + domain: jd.com
437 + homepage: https://ir.jd.com
438 + categories: [commerce, retail]
439 + tier: B
440 + aliases: [jingdong, jd]
441 + discover: { rss: true, sitemap: true }
442 + notes: "ir.jd.com and corporate.jd.com are 403 to bots; jd.com robots.txt redirects to an HTML page. No validated sensor yet."
443 + - id: pdd-temu
444 + name: PDD Holdings (Temu)
445 + domain: pddholdings.com
446 + categories: [commerce, retail]
447 + tier: B
448 + aliases: [pdd, temu, pinduoduo]
449 + products:
450 + - { name: Temu, type: service }
451 + - { name: Pinduoduo, type: service }
452 + discover: { rss: true, sitemap: true }
453 + notes: "investor.pddholdings.com is 403 to bots; temu.com serves an HTML shell for robots.txt. No validated sensor yet."
454 + - id: bh-photo
455 + name: B&H Photo Video
456 + domain: bhphotovideo.com
457 + categories: [commerce, consumer-tech]
458 + tier: C
459 + aliases: [b&h, bh photo]
460 + discover: { rss: true }
461 + notes: "Whole site behind a Cloudflare challenge (Explora feed included)."
462 + - id: simons
463 + name: La Maison Simons
464 + domain: simons.ca
465 + categories: [retail, consumer]
466 + tier: C
467 + aliases: [simons]
468 + discover: { rss: true, sitemap: true }
469 + notes: "simons.ca is 403 to bots."
470 + - id: aritzia
471 + name: Aritzia
472 + domain: aritzia.com
473 + categories: [retail, consumer]
474 + tier: C
475 + discover: { rss: true, sitemap: true }
476 + notes: "aritzia.com and investors.aritzia.com (Q4) behind a Cloudflare challenge."
477 + - id: roots
478 + name: Roots
479 + domain: roots.com
480 + categories: [retail, consumer]
481 + tier: C
482 + aliases: [roots canada]
483 + discover: { rss: true, sitemap: true }
484 + notes: "investors.roots.com (Q4) behind a Cloudflare challenge; roots.com exposes no feed."
485 + - id: sephora
486 + name: Sephora
487 + domain: sephora.com
488 + homepage: https://newsroom.sephora.com
489 + categories: [retail, consumer]
490 + tier: B
491 + discover: { rss: true }
492 + sensors:
493 + - { name: newsroom feed, url: "https://newsroom.sephora.com/feed/", type: RSS, connector: rss, tier: B }
494 + - id: ulta
495 + name: Ulta Beauty
496 + domain: ulta.com
497 + categories: [retail, consumer]
498 + tier: B
499 + aliases: [ulta]
500 + discover: { rss: true, sitemap: true, pages: true }
501 + notes: "investors.ulta.com unreachable for bots; ulta.com newsroom is client-rendered — investor sitemap only."
502 + sensors:
503 + - { name: investor sitemap, url: "https://www.ulta.com/investor/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B }
504 +
505 + # ───────────────────────── B · Consumer brands ─────────────────────────
506 + - id: nike
507 + name: Nike
508 + domain: nike.com
509 + homepage: https://about.nike.com
510 + categories: [consumer, retail]
511 + tier: B
512 + weight: 1.3
513 + aliases: [nike inc, jordan brand, converse]
514 + discover: { rss: true, sitemap: true }
515 + sensors:
516 + - { name: newsroom feed, url: "https://about.nike.com/en/feed", type: RSS, connector: rss, tier: B }
517 + - id: adidas
518 + name: adidas
519 + domain: adidas-group.com
520 + homepage: https://www.adidas-group.com
521 + categories: [consumer, retail]
522 + tier: B
523 + weight: 1.1
524 + aliases: [adidas ag]
525 + discover: { rss: true, sitemap: true }
526 + notes: "news.adidas.com answers 202 with an empty body (bot management); adidas-group.com exposes no feed. No validated sensor yet."
527 + - id: lululemon
528 + name: lululemon
529 + domain: lululemon.com
530 + homepage: https://corporate.lululemon.com
531 + categories: [consumer, retail]
532 + tier: B
533 + aliases: [lululemon athletica]
534 + discover: { rss: true }
535 + sensors:
536 + - { name: press releases feed, url: "https://corporate.lululemon.com/rss/press-releases", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
537 + - id: canada-goose
538 + name: Canada Goose
539 + domain: canadagoose.com
540 + categories: [consumer, retail]
541 + tier: C
542 + discover: { rss: true, sitemap: true }
543 + notes: "canadagoose.com rate-limits bots (429); investors.canadagoose.com unreachable. No validated sensor yet."
544 + - id: lvmh
545 + name: LVMH
546 + domain: lvmh.com
547 + categories: [consumer, retail]
548 + tier: B
549 + weight: 1.3
550 + aliases: [louis vuitton, moët hennessy louis vuitton, dior, tiffany]
551 + products:
552 + - { name: Louis Vuitton, type: product }
553 + - { name: Dior, type: product }
554 + discover: { rss: true, sitemap: true, pages: true }
555 + notes: "lvmh.com news pages are client-rendered; sitemap index only."
556 + sensors:
557 + - { name: sitemap, url: "https://www.lvmh.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
558 + - id: kering
559 + name: Kering
560 + domain: kering.com
561 + categories: [consumer, retail]
562 + tier: B
563 + weight: 1.1
564 + aliases: [gucci, saint laurent, bottega veneta, balenciaga]
565 + products:
566 + - { name: Gucci, type: product }
567 + discover: { rss: true, sitemap: true }
568 + sensors:
569 + - { name: sitemap (en), url: "https://www.kering.com/en/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
570 + - id: hermes
571 + name: Hermès
572 + domain: hermes.com
573 + homepage: https://finance.hermes.com
574 + categories: [consumer, retail]
575 + tier: B
576 + weight: 1.1
577 + aliases: [hermes, hermès international]
578 + discover: { rss: true, sitemap: true }
579 + sensors:
580 + - { name: finance sitemap, url: "https://finance.hermes.com/sitemap-index.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
581 + - id: richemont
582 + name: Richemont
583 + domain: richemont.com
584 + categories: [consumer, retail]
585 + tier: B
586 + aliases: [cartier, van cleef & arpels, iwc, compagnie financière richemont]
587 + products:
588 + - { name: Cartier, type: product }
589 + discover: { rss: true, sitemap: true }
590 + sensors:
591 + - { name: sitemap, url: "https://www.richemont.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
592 + - id: loreal
593 + name: L'Oréal
594 + domain: loreal.com
595 + categories: [consumer]
596 + tier: B
597 + weight: 1.2
598 + aliases: [loreal, l'oréal groupe, lancôme, maybelline, garnier]
599 + discover: { rss: true, sitemap: true, pages: true }
600 + sensors:
601 + - { name: news, url: "https://www.loreal.com/en/news/", type: HTML, connector: http, tier: B }
602 + - { name: finance news (fr), url: "https://www.loreal-finance.com/fr/actualites", type: HTML, connector: http, tier: B }
603 + - id: estee-lauder
604 + name: The Estée Lauder Companies
605 + domain: elcompanies.com
606 + categories: [consumer]
607 + tier: B
608 + weight: 1.1
609 + aliases: [estee lauder, estée lauder, mac cosmetics, clinique]
610 + discover: { rss: true }
611 + sensors:
612 + - { name: press releases feed, url: "https://www.elcompanies.com/en/rss/press-releases", type: RSS, connector: rss, tier: B }
613 + - id: procter-gamble
614 + name: Procter & Gamble
615 + domain: pg.com
616 + homepage: https://us.pg.com
617 + categories: [consumer]
618 + tier: B
619 + weight: 1.3
620 + aliases: [p&g, procter and gamble, pampers, tide, gillette]
621 + products:
622 + - { name: Gillette, type: product }
623 + - { name: Pampers, type: product }
624 + - { name: Tide, type: product }
625 + discover: { rss: true, sitemap: true, pages: true }
626 + notes: "news.pg.com (Q4) redirects to the newsroom; no RSS."
627 + sensors:
628 + - { name: newsroom, url: "https://us.pg.com/newsroom/", type: HTML, connector: http, tier: B }
629 + - { name: sitemap, url: "https://us.pg.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
630 + - id: unilever
631 + name: Unilever
632 + domain: unilever.com
633 + categories: [consumer, food]
634 + tier: B
635 + weight: 1.3
636 + aliases: [dove, hellmann's, ben & jerry's, knorr]
637 + discover: { rss: true, sitemap: true }
638 + notes: "unilever.com is 403 to non-browser clients on every path (Akamai). No validated sensor yet."
639 + - id: nestle
640 + name: Nestlé
641 + domain: nestle.com
642 + categories: [consumer, food]
643 + tier: B
644 + weight: 1.3
645 + aliases: [nestle, nespresso, purina, kitkat]
646 + products:
647 + - { name: Nespresso, type: product }
648 + discover: { rss: true, sitemap: true }
649 + notes: "nestle.com media pages are 403 to bots (Akamai); sitemap is reachable."
650 + sensors:
651 + - { name: sitemap, url: "https://www.nestle.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
652 + - id: coca-cola
653 + name: The Coca-Cola Company
654 + domain: coca-colacompany.com
655 + categories: [consumer, food]
656 + tier: B
657 + weight: 1.3
658 + aliases: [coca-cola, coke, sprite, fanta]
659 + discover: { rss: true, sitemap: true, pages: true }
660 + notes: "investors.coca-colacompany.com exposes no RSS."
661 + sensors:
662 + - { name: media center, url: "https://www.coca-colacompany.com/media-center", type: HTML, connector: http, tier: B }
663 + - { name: corporate sitemap (us-en), url: "https://www.coca-colacompany.com/content/corporate.sitemap.us-en-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
664 + - id: pepsico
665 + name: PepsiCo
666 + domain: pepsico.com
667 + categories: [consumer, food]
668 + tier: B
669 + weight: 1.3
670 + aliases: [pepsi, frito-lay, gatorade, quaker]
671 + discover: { rss: true, sitemap: true, pages: true }
672 + notes: "investors.pepsico.com and pepsico.com expose no RSS."
673 + sensors:
674 + - { name: newsroom, url: "https://www.pepsico.com/newsroom", type: HTML, connector: http, tier: B }
675 + - { name: sitemap, url: "https://www.pepsico.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
676 + - id: mondelez
677 + name: Mondelēz International
678 + domain: mondelezinternational.com
679 + categories: [consumer, food]
680 + tier: B
681 + weight: 1.1
682 + aliases: [mondelez, oreo, cadbury, toblerone]
683 + discover: { rss: true, sitemap: true }
684 + notes: "ir.mondelezinternational.com (Q4) is 403 to bots."
685 + sensors:
686 + - { name: sitemap, url: "https://www.mondelezinternational.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
687 + - id: kraft-heinz
688 + name: Kraft Heinz
689 + domain: kraftheinzcompany.com
690 + categories: [consumer, food]
691 + tier: B
692 + aliases: [kraft, heinz]
693 + discover: { rss: true, sitemap: true }
694 + notes: "news.kraftheinzcompany.com and ir.kraftheinzcompany.com (Q4) behind a Cloudflare challenge. No validated sensor yet."
695 + - id: general-mills
696 + name: General Mills
697 + domain: generalmills.com
698 + categories: [consumer, food]
699 + tier: B
700 + aliases: [cheerios, pillsbury, häagen-dazs]
701 + discover: { rss: true, sitemap: true, pages: true }
702 + notes: "investors.generalmills.com (Q4) behind a Cloudflare challenge; generalmills.com news pages are client-rendered — sitemap only."
703 + sensors:
704 + - { name: sitemap, url: "https://www.generalmills.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
705 + - id: kellanova
706 + name: Kellanova
707 + domain: kellanova.com
708 + categories: [consumer, food]
709 + tier: C
710 + aliases: [kellogg's, kellogg, pringles]
711 + discover: { rss: true, sitemap: true }
712 + notes: "kellanova.com answers 405 to bots; investor.kellanova.com (Q4) likewise. No validated sensor yet."
713 + - id: mars
714 + name: Mars, Incorporated
715 + domain: mars.com
716 + categories: [consumer, food]
717 + tier: B
718 + aliases: [mars inc, m&m's, snickers, pedigree, royal canin]
719 + discover: { rss: true, sitemap: true }
720 + notes: "mars.com news pages are 403 to bots; sitemap is reachable."
721 + sensors:
722 + - { name: sitemap, url: "https://www.mars.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
723 + - id: danone
724 + name: Danone
725 + domain: danone.com
726 + categories: [consumer, food]
727 + tier: B
728 + aliases: [activia, evian, alpro]
729 + discover: { rss: true, sitemap: true, pages: true }
730 + sensors:
731 + - { name: press releases, url: "https://www.danone.com/newsroom/press-releases.html", type: HTML, connector: http, tier: B }
732 + - id: ab-inbev
733 + name: AB InBev
734 + domain: ab-inbev.com
735 + categories: [consumer, food]
736 + tier: B
737 + weight: 1.1
738 + aliases: [anheuser-busch inbev, anheuser-busch, budweiser, stella artois, corona]
739 + discover: { rss: true, sitemap: true, pages: true }
740 + notes: "ab-inbev.com news pages are client-rendered (React shell) and the sitemap 404s. No validated sensor yet."
741 + - id: diageo
742 + name: Diageo
743 + domain: diageo.com
744 + categories: [consumer, food]
745 + tier: B
746 + aliases: [johnnie walker, guinness, smirnoff, tanqueray]
747 + discover: { rss: true }
748 + sensors:
749 + - { name: press releases feed, url: "https://www.diageo.com/en/rss/press-releases", type: RSS, connector: rss, tier: B }
750 + - id: heineken
751 + name: Heineken
752 + domain: theheinekencompany.com
753 + categories: [consumer, food]
754 + tier: B
755 + aliases: [heineken n.v.]
756 + discover: { rss: true, sitemap: true }
757 + notes: "theheinekencompany.com is 403 to bots (Akamai). No validated sensor yet."
758 + - id: molson-coors
759 + name: Molson Coors
760 + domain: molsoncoors.com
761 + categories: [consumer, food]
762 + tier: B
763 + aliases: [molson, coors, miller lite]
764 + discover: { rss: true, sitemap: true }
765 + notes: "ir.molsoncoors.com (Q4) behind a Cloudflare challenge; the corporate site feed works."
766 + sensors:
767 + - { name: news feed, url: "https://www.molsoncoors.com/rss.xml", type: RSS, connector: rss, tier: B }
768 + - id: constellation-brands
769 + name: Constellation Brands
770 + domain: cbrands.com
771 + categories: [consumer, food]
772 + tier: B
773 + aliases: [constellation, modelo, corona usa, kim crawford]
774 + discover: { rss: true }
775 + sensors:
776 + - { name: press releases feed, url: "https://www.cbrands.com/blogs/press-releases.atom", type: ATOM, connector: rss, tier: B }
777 + - id: saputo
778 + name: Saputo
779 + domain: saputo.com
780 + categories: [consumer, food]
781 + tier: B
782 + discover: { rss: true, sitemap: true }
783 + sensors:
784 + - { name: news sitemap, url: "https://www.saputo.com/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B }
785 + - id: lassonde
786 + name: Lassonde Industries
787 + domain: lassonde.com
788 + categories: [consumer, food]
789 + tier: C
790 + aliases: [lassonde, oasis]
791 + discover: { rss: true }
792 + sensors:
793 + - { name: news feed, url: "https://www.lassonde.com/en/feed/", type: RSS, connector: rss, tier: C }
794 + - id: agropur
795 + name: Agropur
796 + domain: agropur.com
797 + categories: [consumer, food, agriculture]
798 + tier: C
799 + aliases: [natrel, oka]
800 + discover: { rss: true, sitemap: true, pages: true }
801 + sensors:
802 + - { name: news, url: "https://www.agropur.com/en/news", type: HTML, connector: http, tier: C }
803 + - id: colgate-palmolive
804 + name: Colgate-Palmolive
805 + domain: colgatepalmolive.com
806 + categories: [consumer]
807 + tier: B
808 + aliases: [colgate, palmolive, hill's pet nutrition]
809 + discover: { rss: true, sitemap: true }
810 + notes: "colgatepalmolive.com and investor.colgatepalmolive.com are 403 to bots. No validated sensor yet."
811 + - id: kimberly-clark
812 + name: Kimberly-Clark
813 + domain: kimberly-clark.com
814 + categories: [consumer]
815 + tier: B
816 + aliases: [kleenex, huggies, kotex, scott]
817 + discover: { rss: true, sitemap: true }
818 + notes: "kimberly-clark.com and investor.kimberly-clark.com (Q4) behind a Cloudflare challenge. No validated sensor yet."
819 + - id: clorox
820 + name: The Clorox Company
821 + domain: thecloroxcompany.com
822 + categories: [consumer]
823 + tier: B
824 + aliases: [clorox, burt's bees, brita, glad]
825 + discover: { rss: true, sitemap: true, pages: true }
826 + sensors:
827 + - { name: news feed, url: "https://www.thecloroxcompany.com/feed/", type: RSS, connector: rss, tier: B }
828 + - { name: newsroom, url: "https://www.thecloroxcompany.com/newsroom/", type: HTML, connector: http, tier: B }
829 + - id: reckitt
830 + name: Reckitt
831 + domain: reckitt.com
832 + categories: [consumer, health]
833 + tier: B
834 + aliases: [reckitt benckiser, dettol, lysol, durex, nurofen]
835 + discover: { rss: true, sitemap: true, pages: true }
836 + sensors:
837 + - { name: news, url: "https://www.reckitt.com/news/", type: HTML, connector: http, tier: B }
838 + - id: henkel
839 + name: Henkel
840 + domain: henkel.com
841 + categories: [consumer]
842 + tier: B
843 + aliases: [persil, schwarzkopf, loctite, pritt]
844 + discover: { rss: true, sitemap: true }
845 + sensors:
846 + - { name: press releases feed, url: "https://www.henkel.com/service/en/33922/asFeed/index.xml", type: RSS, connector: rss, tier: B }
847 + - id: beiersdorf
848 + name: Beiersdorf
849 + domain: beiersdorf.com
850 + categories: [consumer]
851 + tier: B
852 + aliases: [nivea, eucerin, la prairie, tesa]
853 + discover: { rss: true, sitemap: true, pages: true }
854 + sensors:
855 + - { name: press releases, url: "https://www.beiersdorf.com/newsroom/press-information/all-press-releases", type: HTML, connector: http, tier: B }
856 + - id: shiseido
857 + name: Shiseido
858 + domain: shiseido.com
859 + homepage: https://corp.shiseido.com
860 + categories: [consumer]
861 + tier: C
862 + aliases: [nars, drunk elephant]
863 + discover: { rss: true, sitemap: true }
864 + notes: "corp.shiseido.com exposes no feed and its English newsroom 404s on the usual paths. No validated sensor yet."
865 + - id: whirlpool
866 + name: Whirlpool Corporation
867 + domain: whirlpoolcorp.com
868 + categories: [consumer, consumer-tech]
869 + tier: B
870 + aliases: [whirlpool, kitchenaid, maytag]
871 + discover: { rss: true, sitemap: true }
872 + notes: "investors.whirlpoolcorp.com (Q4) behind a Cloudflare challenge; whirlpoolcorp.com/news 404. No validated sensor yet."
873 + - id: electrolux
874 + name: Electrolux Group
875 + domain: electroluxgroup.com
876 + categories: [consumer, consumer-tech]
877 + tier: B
878 + aliases: [electrolux, frigidaire, aeg]
879 + discover: { rss: true, sitemap: true }
880 + sensors:
881 + - { name: news feed, url: "https://www.electroluxgroup.com/en/feed", type: RSS, connector: rss, tier: B }
882 + - id: dyson
883 + name: Dyson
884 + domain: dyson.com
885 + categories: [consumer, consumer-tech]
886 + tier: C
887 + discover: { rss: true, sitemap: true }
888 + notes: "dyson.com newsroom is 403 to bots. No validated sensor yet."
889 + - id: philips
890 + name: Philips
891 + domain: philips.com
892 + categories: [consumer, consumer-tech, health]
893 + tier: B
894 + weight: 1.1
895 + aliases: [royal philips, koninklijke philips]
896 + discover: { rss: true, sitemap: true }
897 + sensors:
898 + - { name: news feed, url: "https://www.philips.com/content/corporate/en_AA/feed.rss.xml?pageSize=15&startIndex=0&src=/content/corporate/en_AA/about/news/archive&sortMode=createdDate", type: RSS, connector: rss, tier: B }
899 + - id: sonos
900 + name: Sonos
901 + domain: sonos.com
902 + homepage: https://newsroom.sonos.com
903 + categories: [consumer-tech, consumer]
904 + tier: B
905 + discover: { rss: true }
906 + sensors:
907 + - { name: press releases feed, url: "https://newsroom.sonos.com/press_releases.atom", type: ATOM, connector: rss, tier: B }
908 + - id: gopro
909 + name: GoPro
910 + domain: gopro.com
911 + categories: [consumer-tech, consumer]
912 + tier: C
913 + discover: { rss: true, sitemap: true }
914 + notes: "gopro.com news and investor.gopro.com (Q4) behind a Cloudflare challenge. No validated sensor yet."
915 + - id: garmin
916 + name: Garmin
917 + domain: garmin.com
918 + categories: [consumer-tech, consumer]
919 + tier: B
920 + weight: 1.1
921 + discover: { rss: true, sitemap: true }
922 + sensors:
923 + - { name: newsroom feed, url: "https://www.garmin.com/en-US/newsroom/feed/", type: RSS, connector: rss, tier: B }
924 + - id: peloton
925 + name: Peloton
926 + domain: onepeloton.com
927 + categories: [consumer-tech, consumer]
928 + tier: C
929 + aliases: [peloton interactive]
930 + discover: { rss: true, sitemap: true, pages: true }
931 + notes: "investor.onepeloton.com is 403 to bots."
932 + sensors:
933 + - { name: blog, url: "https://www.onepeloton.com/blog", type: HTML, connector: http, tier: C }
934 + - id: mattel
935 + name: Mattel
936 + domain: mattel.com
937 + homepage: https://corporate.mattel.com
938 + categories: [consumer]
939 + tier: B
940 + aliases: [barbie, hot wheels, fisher-price]
941 + products:
942 + - { name: Barbie, type: product }
943 + discover: { rss: true, sitemap: true }
944 + notes: "investors.mattel.com (Q4) behind a Cloudflare challenge; corporate sitemap is reachable."
945 + sensors:
946 + - { name: corporate sitemap, url: "https://corporate.mattel.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B }
947 + - id: hasbro
948 + name: Hasbro
949 + domain: hasbro.com
950 + categories: [consumer, gaming]
951 + tier: B
952 + aliases: [wizards of the coast, monopoly, nerf]
953 + discover: { rss: true, sitemap: true }
954 + notes: "newsroom.hasbro.com and investor.hasbro.com are 403 to bots. No validated sensor yet."
955 + - id: lego
956 + name: The LEGO Group
957 + domain: lego.com
958 + categories: [consumer]
959 + tier: B
960 + weight: 1.1
961 + aliases: [lego]
962 + discover: { rss: true, sitemap: true, pages: true }
963 + sensors:
964 + - { name: newsroom, url: "https://www.lego.com/en-ca/aboutus/newsroom", type: HTML, connector: http, tier: B }
965 + - { name: local news sitemap, url: "https://www.lego.com/local-news/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B }
966 + - id: yeti
967 + name: YETI
968 + domain: yeti.com
969 + categories: [consumer]
970 + tier: C
971 + discover: { rss: true, sitemap: true }
972 + notes: "yeti.com press pages are 403 to bots. No validated sensor yet."
973 + - id: stanley
974 + name: Stanley 1913
975 + domain: stanley1913.com
976 + categories: [consumer]
977 + tier: C
978 + aliases: [stanley, stanley cup tumbler, pmi worldwide]
979 + discover: { rss: true, sitemap: true }
980 + sensors:
981 + - { name: stories feed, url: "https://www.stanley1913.com/blogs/stanley-story.atom", type: ATOM, connector: rss, tier: C }
982 + - id: crocs
983 + name: Crocs
984 + domain: crocs.com
985 + categories: [consumer, retail]
986 + tier: C
987 + aliases: [heydude]
988 + discover: { rss: true, sitemap: true }
989 + notes: "investors.crocs.com (Q4) behind a Cloudflare challenge. No validated sensor yet."
990 + - id: vf-corp
991 + name: VF Corporation
992 + domain: vfc.com
993 + categories: [consumer, retail]
994 + tier: B
995 + aliases: [vf corp, the north face, vans, timberland]
996 + products:
997 + - { name: The North Face, type: product }
998 + - { name: Vans, type: product }
999 + discover: { rss: true }
1000 + sensors:
1001 + - { name: press releases feed, url: "https://www.vfc.com/investors/news-events-presentations/press-releases/rss", type: RSS, connector: rss, tier: B }
1002 + - id: levi-strauss
1003 + name: Levi Strauss & Co.
1004 + domain: levistrauss.com
1005 + categories: [consumer, retail]
1006 + tier: B
1007 + aliases: [levi's, levis, dockers]
1008 + discover: { rss: true }
1009 + notes: "investors.levistrauss.com (Q4) behind a Cloudflare challenge; corporate WordPress feed works."
1010 + sensors:
1011 + - { name: news feed, url: "https://www.levistrauss.com/feed/", type: RSS, connector: rss, tier: B }
1012 + - id: gap
1013 + name: Gap Inc.
1014 + domain: gapinc.com
1015 + categories: [consumer, retail]
1016 + tier: B
1017 + aliases: [gap, old navy, banana republic, athleta]
1018 + discover: { rss: true, sitemap: true, pages: true }
1019 + notes: "investors.gapinc.com (Q4) behind a Cloudflare challenge."
1020 + sensors:
1021 + - { name: newsroom, url: "https://www.gapinc.com/en-us/news", type: HTML, connector: http, tier: B }
1022 + - id: abercrombie
1023 + name: Abercrombie & Fitch Co.
1024 + domain: abercrombie.com
1025 + homepage: https://corporate.abercrombie.com
1026 + categories: [consumer, retail]
1027 + tier: C
1028 + aliases: [abercrombie, hollister]
1029 + discover: { rss: true, pages: true }
1030 + notes: "abercrombieandfitchcompany.gcs-web.com feeds are 403 to bots."
1031 + sensors:
1032 + - { name: news, url: "https://corporate.abercrombie.com/news", type: HTML, connector: http, tier: C }
1033 + - id: ralph-lauren
1034 + name: Ralph Lauren
1035 + domain: ralphlauren.com
1036 + homepage: https://corporate.ralphlauren.com
1037 + categories: [consumer, retail]
1038 + tier: B
1039 + aliases: [polo ralph lauren]
1040 + discover: { rss: true, pages: true }
1041 + sensors:
1042 + - { name: newsroom, url: "https://corporate.ralphlauren.com/newsroom", type: HTML, connector: http, tier: B }
1043 + - id: tapestry
1044 + name: Tapestry
1045 + domain: tapestry.com
1046 + categories: [consumer, retail]
1047 + tier: B
1048 + aliases: [coach, kate spade, stuart weitzman]
1049 + discover: { rss: true }
1050 + sensors:
1051 + - { name: news feed, url: "https://www.tapestry.com/feed/", type: RSS, connector: rss, tier: B }
1052 + - id: capri-holdings
1053 + name: Capri Holdings
1054 + domain: capriholdings.com
1055 + categories: [consumer, retail]
1056 + tier: C
1057 + aliases: [capri, michael kors, versace, jimmy choo]
1058 + discover: { rss: true, sitemap: true }
1059 + notes: "capriholdings.com is 403 to bots. No validated sensor yet."
1060 +
1061 + # ───────────────────────── C · Restaurants ─────────────────────────
1062 + - id: mcdonalds
1063 + name: McDonald's
1064 + domain: mcdonalds.com
1065 + homepage: https://corporate.mcdonalds.com
1066 + categories: [food, retail]
1067 + tier: B
1068 + weight: 1.3
1069 + aliases: [mcdonald's, mcdonalds, mcd]
1070 + discover: { rss: true, sitemap: true }
1071 + notes: "corporate.mcdonalds.com and mcdonalds.com time out for non-browser clients (Akamai); investors.mcdonalds.com unreachable. No validated sensor yet."
1072 + - id: starbucks
1073 + name: Starbucks
1074 + domain: starbucks.com
1075 + homepage: https://about.starbucks.com
1076 + categories: [food, retail]
1077 + tier: B
1078 + weight: 1.2
1079 + discover: { rss: true, sitemap: true }
1080 + notes: "about.starbucks.com / stories.starbucks.com and investor.starbucks.com (Q4) behind a Cloudflare challenge. No validated sensor yet."
1081 + - id: yum-brands
1082 + name: Yum! Brands
1083 + domain: yum.com
1084 + categories: [food, retail]
1085 + tier: B
1086 + aliases: [yum, kfc, taco bell, pizza hut]
1087 + products:
1088 + - { name: KFC, type: product }
1089 + - { name: Taco Bell, type: product }
1090 + - { name: Pizza Hut, type: product }
1091 + discover: { rss: true, pages: true }
1092 + notes: "investors.yum.com (Q4) behind a Cloudflare challenge."
1093 + sensors:
1094 + - { name: news, url: "https://www.yum.com/wps/portal/yumbrands/Yumbrands/news", type: HTML, connector: http, tier: B }
1095 + - id: restaurant-brands
1096 + name: Restaurant Brands International
1097 + domain: rbi.com
1098 + categories: [food, retail]
1099 + tier: B
1100 + weight: 1.1
1101 + aliases: [rbi, tim hortons, burger king, popeyes, firehouse subs]
1102 + products:
1103 + - { name: Tim Hortons, type: product, aliases: [tims] }
1104 + - { name: Burger King, type: product }
1105 + - { name: Popeyes, type: product }
1106 + discover: { rss: true, sitemap: true, pages: true }
1107 + notes: "rbi.com (Q4) behind a Cloudflare challenge; timhortons.ca/news is a client-rendered shell (validator: thin). No validated sensor yet."
1108 + - id: chipotle
1109 + name: Chipotle Mexican Grill
1110 + domain: chipotle.com
1111 + homepage: https://newsroom.chipotle.com
1112 + categories: [food, retail]
1113 + tier: B
1114 + aliases: [chipotle]
1115 + discover: { rss: true }
1116 + sensors:
1117 + - { name: press releases feed, url: "https://newsroom.chipotle.com/press-releases?pagetemplate=rss", type: RSS, connector: rss, tier: B }
1118 + - id: dominos
1119 + name: Domino's Pizza
1120 + domain: dominos.com
1121 + homepage: https://ir.dominos.com
1122 + categories: [food, retail]
1123 + tier: B
1124 + aliases: [dominos, domino's]
1125 + discover: { rss: true, sitemap: true }
1126 + notes: "ir.dominos.com is 403 to bots. No validated sensor yet."
1127 + - id: subway
1128 + name: Subway
1129 + domain: subway.com
1130 + homepage: https://newsroom.subway.com
1131 + categories: [food, retail]
1132 + tier: B
1133 + discover: { rss: true }
1134 + sensors:
1135 + - { name: press releases feed, url: "https://newsroom.subway.com/Press-Releases?pagetemplate=rss", type: RSS, connector: rss, tier: B }
1136 + - id: mty-group
1137 + name: MTY Food Group
1138 + domain: mtygroup.com
1139 + categories: [food, retail]
1140 + tier: C
1141 + aliases: [mty, thaï express, valentine, cold stone]
1142 + discover: { rss: true, sitemap: true }
1143 + notes: "mtygroup.com WordPress feeds (all languages/categories) are empty; press releases live behind a client-rendered investors page. No validated sensor yet."
1144 + - id: aw-canada
1145 + name: A&W Canada
1146 + domain: aw.ca
1147 + homepage: https://web.aw.ca
1148 + categories: [food, retail]
1149 + tier: C
1150 + aliases: [a&w, a&w food services]
1151 + discover: { rss: true, sitemap: true }
1152 + notes: "web.aw.ca newsroom is a client-rendered shell. No validated sensor yet."
1153 + - id: st-hubert
1154 + name: St-Hubert
1155 + domain: st-hubert.com
1156 + categories: [food, retail]
1157 + tier: C
1158 + aliases: [rôtisseries st-hubert]
1159 + discover: { rss: true, sitemap: true }
1160 + notes: "st-hubert.com is 403 to bots (news, press, sitemap). No validated sensor yet."
1161 + - id: wendys
1162 + name: Wendy's
1163 + domain: wendys.com
1164 + homepage: https://www.irwendys.com
1165 + categories: [food, retail]
1166 + tier: B
1167 + aliases: [wendys]
1168 + discover: { rss: true, sitemap: true }
1169 + notes: "irwendys.com (Q4) behind a Cloudflare challenge; wendys.com has no feed. No validated sensor yet."
1170 + - id: darden
1171 + name: Darden Restaurants
1172 + domain: darden.com
1173 + categories: [food, retail]
1174 + tier: C
1175 + aliases: [olive garden, longhorn steakhouse]
1176 + discover: { rss: true, sitemap: true }
1177 + notes: "investor.darden.com (Q4) behind a Cloudflare challenge; darden.com newsroom 404. No validated sensor yet."
1178 + - id: chick-fil-a
1179 + name: Chick-fil-A
1180 + domain: chick-fil-a.com
1181 + categories: [food, retail]
1182 + tier: B
1183 + discover: { rss: true }
1184 + sensors:
1185 + - { name: stories feed, url: "https://www.chick-fil-a.com/feed", type: RSS, connector: rss, tier: B }
1186 + - id: inspire-brands
1187 + name: Inspire Brands
1188 + domain: inspirebrands.com
1189 + categories: [food, retail]
1190 + tier: B
1191 + aliases: [dunkin, dunkin', arby's, buffalo wild wings, sonic, baskin-robbins, jimmy john's]
1192 + products:
1193 + - { name: Dunkin', type: product, aliases: [dunkin, dunkin donuts] }
1194 + - { name: Arby's, type: product }
1195 + discover: { rss: true }
1196 + sensors:
1197 + - { name: news feed, url: "https://inspirebrands.com/feed/", type: RSS, connector: rss, tier: B }
1198 +
1199 + # ───────────────────────── D · Hospitality & travel ─────────────────────────
1200 + - id: marriott
1201 + name: Marriott International
1202 + domain: marriott.com
1203 + homepage: https://news.marriott.com
1204 + categories: [travel]
1205 + tier: B
1206 + weight: 1.2
1207 + aliases: [marriott, bonvoy, sheraton, westin, ritz-carlton]
1208 + products:
1209 + - { name: Marriott Bonvoy, type: service, aliases: [bonvoy] }
1210 + discover: { rss: true, sitemap: true }
1211 + notes: "news.marriott.com is fully client-rendered (2.5 KB shell); investors.marriott.com unreachable. No validated sensor yet."
1212 + - id: hilton
1213 + name: Hilton
1214 + domain: hilton.com
1215 + homepage: https://stories.hilton.com
1216 + categories: [travel]
1217 + tier: B
1218 + weight: 1.2
1219 + aliases: [hilton worldwide, hilton honors, waldorf astoria, doubletree]
1220 + discover: { rss: true }
1221 + sensors:
1222 + - { name: stories feed, url: "https://stories.hilton.com/feed", type: RSS, connector: rss, tier: B }
1223 + - id: hyatt
1224 + name: Hyatt
1225 + domain: hyatt.com
1226 + homepage: https://newsroom.hyatt.com
1227 + categories: [travel]
1228 + tier: B
1229 + aliases: [hyatt hotels, world of hyatt]
1230 + discover: { rss: true }
1231 + notes: "investors.hyatt.com (Q4) behind a Cloudflare challenge; newsroom RSS works."
1232 + sensors:
1233 + - { name: news releases feed, url: "https://newsroom.hyatt.com/news-releases?pagetemplate=rss", type: RSS, connector: rss, tier: B }
1234 + - id: ihg
1235 + name: IHG Hotels & Resorts
1236 + domain: ihgplc.com
1237 + categories: [travel]
1238 + tier: B
1239 + aliases: [ihg, intercontinental, holiday inn, crowne plaza]
1240 + discover: { rss: true, sitemap: true }
1241 + notes: "ihgplc.com is 403 to bots on news and RSS paths (Akamai). No validated sensor yet."
1242 + - id: accor
1243 + name: Accor
1244 + domain: accor.com
1245 + homepage: https://group.accor.com
1246 + categories: [travel]
1247 + tier: B
1248 + aliases: [accorhotels, ibis, novotel, sofitel, fairmont]
1249 + discover: { rss: true, sitemap: true }
1250 + notes: "press.accor.com feed is 403 to bots; group.accor.com exposes no feed. No validated sensor yet."
1251 + - id: wyndham
1252 + name: Wyndham Hotels & Resorts
1253 + domain: wyndhamhotels.com
1254 + homepage: https://corporate.wyndhamhotels.com
1255 + categories: [travel]
1256 + tier: B
1257 + aliases: [wyndham, days inn, la quinta, super 8]
1258 + discover: { rss: true }
1259 + sensors:
1260 + - { name: news releases feed, url: "https://corporate.wyndhamhotels.com/news-releases/feed/", type: RSS, connector: rss, tier: B }
1261 + - id: four-seasons
1262 + name: Four Seasons
1263 + domain: fourseasons.com
1264 + homepage: https://press.fourseasons.com
1265 + categories: [travel]
1266 + tier: C
1267 + aliases: [four seasons hotels and resorts]
1268 + discover: { rss: true, pages: true }
1269 + sensors:
1270 + - { name: news releases, url: "https://press.fourseasons.com/news-releases/", type: HTML, connector: http, tier: C }
1271 + - id: airbnb
1272 + name: Airbnb
1273 + domain: airbnb.com
1274 + homepage: https://news.airbnb.com
1275 + categories: [travel, technology]
1276 + tier: B
1277 + weight: 1.3
1278 + discover: { rss: true, sitemap: true, pages: true }
1279 + notes: "news.airbnb.com has no RSS; investors.airbnb.com exposes no feed."
1280 + sensors:
1281 + - { name: newsroom sitemap, url: "https://news.airbnb.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
1282 + - { name: crawler policy (robots.txt), url: "https://www.airbnb.com/robots.txt", type: FILE, connector: http, tier: D }
1283 + - id: booking-holdings
1284 + name: Booking Holdings
1285 + domain: booking.com
1286 + homepage: https://www.bookingholdings.com
1287 + categories: [travel, technology]
1288 + tier: B
1289 + weight: 1.3
1290 + aliases: [booking, booking.com, priceline, agoda, kayak, opentable, rentalcars]
1291 + products:
1292 + - { name: Booking.com, type: service }
1293 + - { name: Priceline, type: service }
1294 + - { name: Agoda, type: service }
1295 + - { name: OpenTable, type: service }
1296 + discover: { rss: true, sitemap: true }
1297 + notes: "ir.bookingholdings.com (Q4) behind a Cloudflare challenge."
1298 + sensors:
1299 + - { name: crawler policy (robots.txt), url: "https://www.booking.com/robots.txt", type: FILE, connector: http, tier: D }
1300 + - id: kayak
1301 + name: KAYAK
1302 + domain: kayak.com
1303 + categories: [travel, technology]
1304 + tier: C
1305 + aliases: [kayak]
1306 + discover: { rss: true }
1307 + sensors:
1308 + - { name: news feed, url: "https://www.kayak.com/news/feed/", type: RSS, connector: rss, tier: C }
1309 + - id: expedia
1310 + name: Expedia Group
1311 + domain: expedia.com
1312 + homepage: https://www.expediagroup.com
1313 + categories: [travel, technology]
1314 + tier: B
1315 + weight: 1.2
1316 + aliases: [expedia, hotels.com, vrbo, trivago, orbitz, travelocity]
1317 + products:
1318 + - { name: Vrbo, type: service }
1319 + - { name: Hotels.com, type: service }
1320 + discover: { rss: true, sitemap: true }
1321 + notes: "expediagroup.com media/IR pages (Q4) behind a Cloudflare challenge."
1322 + sensors:
1323 + - { name: crawler policy (robots.txt), url: "https://www.expedia.com/robots.txt", type: FILE, connector: http, tier: D }
1324 + - id: tripadvisor
1325 + name: Tripadvisor
1326 + domain: tripadvisor.com
1327 + categories: [travel, internet]
1328 + tier: B
1329 + aliases: [trip advisor, viator, thefork]
1330 + discover: { rss: true, sitemap: true }
1331 + notes: "ir.tripadvisor.com is 403 to bots."
1332 + sensors:
1333 + - { name: crawler policy (robots.txt), url: "https://www.tripadvisor.com/robots.txt", type: FILE, connector: http, tier: D }
1334 + - id: trip-com
1335 + name: Trip.com Group
1336 + domain: trip.com
1337 + homepage: https://investors.trip.com
1338 + categories: [travel, internet]
1339 + tier: B
1340 + aliases: [trip.com, ctrip, skyscanner, qunar]
1341 + products:
1342 + - { name: Skyscanner, type: service }
1343 + discover: { rss: true, sitemap: true }
1344 + notes: "investors.trip.com is 403 to bots; skyscanner.net serves a captcha. No validated sensor yet."
1345 + - id: hopper
1346 + name: Hopper
1347 + domain: hopper.com
1348 + homepage: https://media.hopper.com
1349 + categories: [travel, technology]
1350 + tier: C
1351 + discover: { rss: true, sitemap: true, pages: true }
1352 + sensors:
1353 + - { name: media room, url: "https://media.hopper.com/", type: HTML, connector: http, tier: C }
1354 + - id: carnival
1355 + name: Carnival Corporation
1356 + domain: carnivalcorp.com
1357 + categories: [travel]
1358 + tier: B
1359 + weight: 1.1
1360 + aliases: [carnival, carnival cruise line, princess cruises, holland america, costa, aida, p&o cruises]
1361 + discover: { rss: true }
1362 + sensors:
1363 + - { name: news feed, url: "https://www.carnivalcorp.com/feed/", type: RSS, connector: rss, tier: B }
1364 + - id: royal-caribbean
1365 + name: Royal Caribbean Group
1366 + domain: royalcaribbeangroup.com
1367 + categories: [travel]
1368 + tier: B
1369 + weight: 1.1
1370 + aliases: [royal caribbean, celebrity cruises, silversea]
1371 + discover: { rss: true, sitemap: true, pages: true }
1372 + notes: "rclinvestor.com exposes no RSS."
1373 + sensors:
1374 + - { name: news, url: "https://www.royalcaribbeangroup.com/news", type: HTML, connector: http, tier: B }
1375 + - id: norwegian-cruise
1376 + name: Norwegian Cruise Line Holdings
1377 + domain: nclhltd.com
1378 + categories: [travel]
1379 + tier: B
1380 + aliases: [norwegian cruise line, ncl, oceania cruises, regent seven seas]
1381 + discover: { rss: true }
1382 + sensors:
1383 + - { name: press releases feed, url: "https://www.nclhltd.com/investors/news-events/press-releases/rss", type: RSS, connector: rss, tier: B }
1384 + - id: msc-cruises
1385 + name: MSC Cruises
1386 + domain: msccruises.com
1387 + categories: [travel]
1388 + tier: C
1389 + aliases: [msc]
1390 + discover: { rss: true, sitemap: true }
1391 + notes: "msccruises.com answers 401 to bots. No validated sensor yet."
1392 + - id: vail-resorts
1393 + name: Vail Resorts
1394 + domain: vailresorts.com
1395 + homepage: https://news.vailresorts.com
1396 + categories: [travel, sports]
1397 + tier: C
1398 + aliases: [vail, epic pass, whistler blackcomb]
1399 + discover: { rss: true, sitemap: true }
1400 + notes: "investors.vailresorts.com is 403 to bots; news.vailresorts.com exposes no RSS. No validated sensor yet."
1401 + - id: club-med
1402 + name: Club Med
1403 + domain: clubmed.com
1404 + homepage: https://corporate.clubmed
1405 + categories: [travel]
1406 + tier: C
1407 + discover: { rss: true, sitemap: true }
1408 + notes: "corporate.clubmed feed is 403 to bots. No validated sensor yet."
1409 + - id: transat
1410 + name: Transat A.T.
1411 + domain: transat.com
1412 + categories: [travel, aviation]
1413 + tier: C
1414 + aliases: [air transat, transat]
1415 + discover: { rss: true, sitemap: true, pages: true }
1416 + sensors:
1417 + - { name: media, url: "https://www.transat.com/en-CA/corporate/media", type: HTML, connector: http, tier: C }
1418 + - id: sunwing
1419 + name: Sunwing
1420 + domain: sunwing.ca
1421 + categories: [travel, aviation]
1422 + tier: C
1423 + aliases: [sunwing vacations, westjet vacations]
1424 + discover: { rss: true, sitemap: true }
1425 + notes: "sunwing.ca exposes no press page or feed reachable by bots. No validated sensor yet."
1426 + - id: uber
1427 + name: Uber
1428 + domain: uber.com
1429 + categories: [travel, transport, technology]
1430 + tier: B
1431 + weight: 1.3
1432 + aliases: [uber technologies, uber eats]
1433 + products:
1434 + - { name: Uber Eats, type: service }
1435 + discover: { rss: true, sitemap: true, pages: true }
1436 + notes: "investor.uber.com (Q4) behind a Cloudflare challenge; uber.com newsroom feed paths answer 406."
1437 + sensors:
1438 + - { name: newsroom (US), url: "https://www.uber.com/us/en/newsroom/", type: HTML, connector: http, tier: B }
1439 + - { name: crawler policy (robots.txt), url: "https://www.uber.com/robots.txt", type: FILE, connector: http, tier: D }
1440 + - id: lyft
1441 + name: Lyft
1442 + domain: lyft.com
1443 + categories: [travel, transport, technology]
1444 + tier: B
1445 + discover: { rss: true, sitemap: true, pages: true }
1446 + notes: "investor.lyft.com exposes no RSS."
1447 + sensors:
1448 + - { name: blog, url: "https://www.lyft.com/blog", type: HTML, connector: http, tier: B }
1449 + - id: doordash
1450 + name: DoorDash
1451 + domain: doordash.com
1452 + homepage: https://about.doordash.com
1453 + categories: [food, technology, commerce]
1454 + tier: B
1455 + weight: 1.1
1456 + aliases: [dashpass, wolt]
1457 + discover: { rss: true, sitemap: true, pages: true }
1458 + notes: "ir.doordash.com (Q4) and doordash.com robots.txt behind a Cloudflare challenge."
1459 + sensors:
1460 + - { name: news, url: "https://about.doordash.com/en-us/news", type: HTML, connector: http, tier: B }
1461 + - id: deliveroo
1462 + name: Deliveroo
1463 + domain: deliveroo.co.uk
1464 + homepage: https://corporate.deliveroo.co.uk
1465 + categories: [food, technology, commerce]
1466 + tier: C
1467 + discover: { rss: true, sitemap: true }
1468 + notes: "corporate.deliveroo.co.uk and deliveroo.news are unreachable for bots. No validated sensor yet."
1469 + - id: just-eat-takeaway
1470 + name: Just Eat Takeaway.com
1471 + domain: justeattakeaway.com
1472 + categories: [food, technology, commerce]
1473 + tier: C
1474 + aliases: [just eat, takeaway.com, skip the dishes, skipthedishes, lieferando, thuisbezorgd]
1475 + products:
1476 + - { name: SkipTheDishes, type: service, aliases: [skip] }
1477 + discover: { rss: true, sitemap: true }
1478 + notes: "justeattakeaway.com newsroom and RSS behind a Cloudflare challenge; skipthedishes.com/news 403. No validated sensor yet."
1479 + - id: grab
1480 + name: Grab
1481 + domain: grab.com
1482 + categories: [travel, transport, technology, commerce]
1483 + tier: B
1484 + aliases: [grab holdings, grabfood]
1485 + discover: { rss: true }
1486 + sensors:
1487 + - { name: press feed, url: "https://www.grab.com/sg/press/feed/", type: RSS, connector: rss, tier: B }
1488 + - id: bolt
1489 + name: Bolt
1490 + domain: bolt.eu
1491 + categories: [travel, transport, technology]
1492 + tier: C
1493 + aliases: [bolt technology, taxify]
1494 + discover: { rss: true, sitemap: true, pages: true }
1495 + sensors:
1496 + - { name: blog, url: "https://bolt.eu/en/blog/", type: HTML, connector: http, tier: C }
1497 + - id: getaround
1498 + name: Getaround
1499 + domain: getaround.com
1500 + categories: [travel, transport]
1501 + tier: C
1502 + discover: { rss: true, sitemap: true }
1503 + notes: "getaround.com blog and feed redirect to the homepage. No validated sensor yet."
1504 + - id: turo
1505 + name: Turo
1506 + domain: turo.com
1507 + categories: [travel, transport]
1508 + tier: C
1509 + discover: { rss: true, sitemap: true }
1510 + notes: "turo.com blog behind a Cloudflare challenge. No validated sensor yet."
1511 + - id: hertz
1512 + name: Hertz
1513 + domain: hertz.com
1514 + homepage: https://newsroom.hertz.com
1515 + categories: [travel, transport]
1516 + tier: B
1517 + aliases: [hertz global, dollar, thrifty]
1518 + discover: { rss: true }
1519 + sensors:
1520 + - { name: newsroom feed, url: "https://newsroom.hertz.com/feed/", type: RSS, connector: rss, tier: B }
1521 + - id: avis-budget
1522 + name: Avis Budget Group
1523 + domain: avisbudgetgroup.com
1524 + categories: [travel, transport]
1525 + tier: B
1526 + aliases: [avis, budget, zipcar]
1527 + products:
1528 + - { name: Zipcar, type: service }
1529 + discover: { rss: true, sitemap: true, pages: true }
1530 + notes: "ir.avisbudgetgroup.com is 403 to bots."
1531 + sensors:
1532 + - { name: press releases, url: "https://www.avisbudgetgroup.com/home/news-and-media/press-release", type: HTML, connector: http, tier: B }
1533 + - { name: sitemap, url: "https://www.avisbudgetgroup.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B }
1534 + - id: enterprise-mobility
1535 + name: Enterprise Mobility
1536 + domain: enterprisemobility.com
1537 + categories: [travel, transport]
1538 + tier: C
1539 + aliases: [enterprise, enterprise rent-a-car, national car rental, alamo]
1540 + discover: { rss: true, sitemap: true }
1541 + notes: "enterprisemobility.com press pages are 403 to bots. No validated sensor yet."
1542 + - id: sixt
1543 + name: Sixt
1544 + domain: sixt.com
1545 + homepage: https://about.sixt.com
1546 + categories: [travel, transport]
1547 + tier: C
1548 + discover: { rss: true, sitemap: true }
1549 + notes: "sixt.com and about.sixt.com press pages behind a Cloudflare challenge. No validated sensor yet."
1550 + - id: amadeus
1551 + name: Amadeus
1552 + domain: amadeus.com
1553 + categories: [travel, technology]
1554 + tier: B
1555 + aliases: [amadeus it group]
1556 + discover: { rss: true, sitemap: true }
1557 + notes: "amadeus.com newsroom is a client-rendered shell; no feed or XML sitemap. No validated sensor yet."
1558 + - id: sabre
1559 + name: Sabre
1560 + domain: sabre.com
1561 + categories: [travel, technology]
1562 + tier: B
1563 + aliases: [sabre corporation]
1564 + discover: { rss: true, sitemap: true, pages: true }
1565 + notes: "investors.sabre.com is 403 to bots; sabre.com releases pages are client-rendered and the feed answers 500. No validated sensor yet."
1566 + - id: travelport
1567 + name: Travelport
1568 + domain: travelport.com
1569 + categories: [travel, technology]
1570 + tier: C
1571 + discover: { rss: true, sitemap: true, pages: true }
1572 + sensors:
1573 + - { name: blog, url: "https://www.travelport.com/blog", type: HTML, connector: http, tier: C }
1574 +
1575 + # ───────────────────────── E · Automotive retail & loyalty ─────────────────────────
1576 + - id: carmax
1577 + name: CarMax
1578 + domain: carmax.com
1579 + categories: [automotive, retail]
1580 + tier: B
1581 + discover: { rss: true, sitemap: true }
1582 + notes: "investors.carmax.com (Q4) behind a Cloudflare challenge. No validated sensor yet."
1583 + - id: autonation
1584 + name: AutoNation
1585 + domain: autonation.com
1586 + categories: [automotive, retail]
1587 + tier: C
1588 + discover: { rss: true, sitemap: true }
1589 + notes: "autonation.com/news 403, newsroom.autonation.com behind a Cloudflare challenge, investors.autonation.com RSS 404. No validated sensor yet."
1590 + - id: carvana
1591 + name: Carvana
1592 + domain: carvana.com
1593 + homepage: https://investors.carvana.com
1594 + categories: [automotive, retail, commerce]
1595 + tier: B
1596 + discover: { rss: true }
1597 + sensors:
1598 + - { name: investor news feed, url: "https://investors.carvana.com/rss/news-releases.xml", type: RSS, connector: rss, tier: B }
1599 + - id: autocanada
1600 + name: AutoCanada
1601 + domain: autocan.ca
1602 + categories: [automotive, retail]
1603 + tier: C
1604 + discover: { rss: true, sitemap: true }
1605 + notes: "autocan.ca is 403 to bots. No validated sensor yet."
1606 + - id: air-miles
1607 + name: AIR MILES
1608 + domain: airmiles.ca
1609 + categories: [retail, commerce]
1610 + tier: C
1611 + aliases: [air miles, airmiles, bmo air miles]
1612 + discover: { rss: true, sitemap: true }
1613 + notes: "airmiles.ca redirects most pages through OAuth; sitemap is the only stable public surface."
1614 + sensors:
1615 + - { name: sitemap, url: "https://www.airmiles.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1616 +
1617 + # ───────────────────────── F · Extensions of founding-file sources ─────────────────────────
1618 + - id: shopify
1619 + extend: true
1620 + sensors:
1621 + - { name: crawler policy (robots.txt), url: "https://www.shopify.com/robots.txt", type: FILE, connector: http, tier: D }
added config/sources.d/15-gaming-entertainment.yaml +1194 −0
@@ -0,0 +1,1194 @@
1 +# config/sources.d/15-gaming-entertainment.yaml — gaming platforms, publishers & engines; film/TV & streaming;
2 +# music & audio; esports & creator platforms. Authored 2026-09-08. Every sensor below was fetched and parsed by
3 +# apps/engine/src/validate.ts before being written (OK only). Blocked / client-rendered organizations are recorded
4 +# in `notes:` instead of pretending: Activision (host hangs), Krafton (403), HoYoverse/Riot news/Rockstar/Blizzard
5 +# news (client-rendered), Devolver (Vercel checkpoint), GOG/Paradox/King (no feed or sitemap), Roku (all hosts hang or
6 +# no DNS), Ticketmaster/Tidal/Humble/Spotify status hosts (no DNS), IMAX/Dolby IR/WMG IR/Lionsgate IR/Netflix IR/
7 +# Unity IR/Roblox IR (Cloudflare challenge), Grammys/ASCAP (403), ITV (Cloudflare), TIFF (202 challenge),
8 +# TelevisaUnivision (geo-restricted), Corus/Cinemark/RTL/MFE (JS shells, list pages 404), Kick (S3 AccessDenied),
9 +# 100 Thieves (Shopify 429), TSM/OverActive/Ko-fi/AEG/SOCAN/Eventbrite/Audacy/SiriusXM/Avid/Sennheiser (no endpoint).
10 +# Godot is already declared in 10-open-source.yaml (same two sensors) and is not repeated here.
11 +sources:
12 + # ───────────────────────── Gaming · platforms & stores ─────────────────────────
13 + - id: valve-steam
14 + name: Valve / Steam
15 + domain: store.steampowered.com
16 + homepage: https://store.steampowered.com
17 + categories: [gaming, technology]
18 + tier: A
19 + weight: 1.4
20 + aliases: [valve, steam, valve software, steam store]
21 + products:
22 + - { name: Steam, type: product, aliases: [steam client] }
23 + - { name: Steam Deck, type: product, aliases: [steamdeck] }
24 + - { name: Steamworks, type: API, aliases: [steamworks sdk, steam api] }
25 + discover: { rss: true, sitemap: false, status: false, pages: false }
26 + notes: "No official status API (steamstat.us is third-party). Client-beta group feed available at steamcommunity.com/groups/SteamClientBeta/rss/ if needed."
27 + sensors:
28 + - { name: steam news feed, url: "https://store.steampowered.com/feeds/news/", type: RSS, connector: rss, tier: A }
29 + - { name: steam deck news feed, url: "https://store.steampowered.com/feeds/news/app/1675200/", type: RSS, connector: rss, tier: B }
30 + - { name: steamworks news feed, url: "https://steamcommunity.com/groups/steamworks/rss/", type: RSS, connector: rss, tier: B }
31 + - id: epic-games
32 + name: Epic Games
33 + domain: epicgames.com
34 + homepage: https://www.epicgames.com
35 + categories: [gaming, developer, technology]
36 + tier: S
37 + weight: 1.3
38 + aliases: [epic, epic games store, unreal]
39 + products:
40 + - { name: Unreal Engine, type: software, aliases: [ue5, unreal engine 5] }
41 + - { name: Epic Games Store, type: product, aliases: [egs] }
42 + - { name: Fortnite, type: product }
43 + - { name: Epic Online Services, type: API, aliases: [eos] }
44 + discover: { rss: true, sitemap: false, status: true, pages: false }
45 + notes: "epicgames.com/site/en-US/news and unrealengine.com/en-US/news return 403 to bots; the Unreal Engine feed and the Statuspage API are the reliable endpoints."
46 + sensors:
47 + - { name: status, url: "https://status.epicgames.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
48 + - { name: unreal engine feed, url: "https://www.unrealengine.com/rss?lang=en-US", type: ATOM, connector: rss, tier: B }
49 + - id: playstation
50 + name: PlayStation (Sony Interactive Entertainment)
51 + domain: playstation.com
52 + homepage: https://www.playstation.com
53 + categories: [gaming, consumer-tech]
54 + tier: S
55 + weight: 1.3
56 + aliases: [sony interactive entertainment, sie, psn, playstation network]
57 + products:
58 + - { name: PlayStation 5, type: product, aliases: [ps5] }
59 + - { name: PlayStation Plus, type: service, aliases: [ps plus] }
60 + - { name: PlayStation Network, type: service, aliases: [psn] }
61 + - { name: PlayStation Store, type: service }
62 + discover: { rss: true, sitemap: true, status: false, pages: false }
63 + notes: "status.playstation.com is client-rendered but backed by the regional JSON at /data/statuses/region/SCEA.json (services + status arrays)."
64 + sensors:
65 + - { name: psn status (americas), url: "https://status.playstation.com/data/statuses/region/SCEA.json", type: JSON, connector: http, tier: S, config: { jsonPath: "countries" } }
66 + - { name: playstation blog feed, url: "https://blog.playstation.com/feed/", type: RSS, connector: rss, tier: A }
67 + - id: xbox
68 + name: Xbox
69 + domain: xbox.com
70 + homepage: https://www.xbox.com
71 + categories: [gaming, consumer-tech]
72 + tier: S
73 + weight: 1.3
74 + aliases: [xbox live, microsoft gaming, xbox wire]
75 + products:
76 + - { name: Xbox Game Pass, type: service, aliases: [game pass] }
77 + - { name: Xbox Live, type: service, aliases: [xbox network] }
78 + - { name: Xbox Series X, type: product, aliases: [xbox series s] }
79 + - { name: Xbox Cloud Gaming, type: service, aliases: [xcloud] }
80 + discover: { rss: true, sitemap: false, status: false, pages: false }
81 + notes: "support.xbox.com/xbox-live-status is a JS shell; the underlying service-status JSON is xnotify.xboxlive.com/servicestatusv6/US/en-US (LastUpdated ignored). Activision (activision.com, callofduty.com) hangs for bots — no sensor."
82 + sensors:
83 + - { name: xbox live status, url: "https://xnotify.xboxlive.com/servicestatusv6/US/en-US", type: JSON, connector: http, tier: S, config: { ignoreKeys: [LastUpdated] } }
84 + - { name: xbox wire feed, url: "https://news.xbox.com/en-us/feed/", type: RSS, connector: rss, tier: A }
85 + - id: nintendo
86 + name: Nintendo
87 + domain: nintendo.com
88 + homepage: https://www.nintendo.com
89 + categories: [gaming, consumer-tech]
90 + tier: S
91 + weight: 1.3
92 + aliases: [nintendo co ltd, nintendo of america]
93 + products:
94 + - { name: Nintendo Switch 2, type: product, aliases: [switch 2] }
95 + - { name: Nintendo Switch, type: product, aliases: [switch] }
96 + - { name: Nintendo Switch Online, type: service, aliases: [nso] }
97 + - { name: Nintendo eShop, type: service, aliases: [eshop] }
98 + discover: { rss: true, sitemap: true, status: false, pages: false }
99 + notes: "Network status page (nintendo.co.jp/netinfo) is fed by status.json (operational_statuses + temporary_maintenances; utc_del_time/platform_image ignored). No official news RSS."
100 + sensors:
101 + - { name: network status, url: "https://www.nintendo.co.jp/netinfo/en_US/status.json", type: JSON, connector: http, tier: S, config: { ignoreKeys: [utc_del_time, platform_image] } }
102 + - { name: investor relations, url: "https://www.nintendo.co.jp/ir/en/index.html", type: HTML, connector: http, tier: B }
103 + - id: roblox
104 + name: Roblox
105 + domain: roblox.com
106 + homepage: https://www.roblox.com
107 + categories: [gaming, internet]
108 + tier: A
109 + weight: 1.2
110 + aliases: [roblox corporation, roblox studio]
111 + products:
112 + - { name: Roblox Studio, type: software }
113 + - { name: Roblox Platform, type: service }
114 + discover: { rss: true, sitemap: false, status: false, pages: false }
115 + notes: "status.roblox.com is not an Atlassian Statuspage (no /api/v2); newsroom (about.roblox.com) is client-rendered. Developer Forum Discourse feeds are the official change channel."
116 + sensors:
117 + - { name: devforum announcements, url: "https://devforum.roblox.com/c/updates/announcements/36.rss", type: RSS, connector: rss, tier: A }
118 + - { name: devforum release notes, url: "https://devforum.roblox.com/c/updates/release-notes/62.rss", type: RSS, connector: rss, tier: B }
119 + - id: discord
120 + name: Discord
121 + domain: discord.com
122 + homepage: https://discord.com
123 + categories: [gaming, internet, developer]
124 + tier: S
125 + weight: 1.3
126 + aliases: [discord inc]
127 + products:
128 + - { name: Discord Nitro, type: service, aliases: [nitro] }
129 + - { name: Discord API, type: API, aliases: [discord developer portal] }
130 + discover: { rss: true, sitemap: false, status: true, pages: false }
131 + sensors:
132 + - { name: status, url: "https://discordstatus.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
133 + - { name: blog feed, url: "https://discord.com/blog/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
134 + - { name: api docs commits, url: "https://github.com/discord/discord-api-docs/commits/main.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: discord/discord-api-docs, kind: commits } }
135 + - id: twitch
136 + name: Twitch
137 + domain: twitch.tv
138 + homepage: https://www.twitch.tv
139 + categories: [gaming, media, internet]
140 + tier: S
141 + weight: 1.2
142 + aliases: [twitch interactive]
143 + products:
144 + - { name: Twitch API, type: API, aliases: [helix api, eventsub] }
145 + discover: { rss: true, sitemap: false, status: true, pages: false }
146 + notes: "blog.twitch.tv has no machine feed (client-rendered); the developer changelog is server-rendered."
147 + sensors:
148 + - { name: status, url: "https://status.twitch.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
149 + - { name: developer changelog, url: "https://dev.twitch.tv/docs/change-log", type: HTML, connector: http, tier: B }
150 + - id: riot-games
151 + name: Riot Games
152 + domain: riotgames.com
153 + homepage: https://www.riotgames.com
154 + categories: [gaming]
155 + tier: A
156 + weight: 1.2
157 + aliases: [riot]
158 + products:
159 + - { name: League of Legends, type: product, aliases: [lol, league] }
160 + - { name: VALORANT, type: product, aliases: [valorant] }
161 + - { name: Teamfight Tactics, type: product, aliases: [tft] }
162 + - { name: Riot Client, type: software }
163 + discover: { rss: false, sitemap: false, status: false, pages: false }
164 + notes: "riotgames.com/en/news and status.riotgames.com are client-rendered; the public status CDN JSON (incidents + maintenances per shard) is the official machine endpoint."
165 + sensors:
166 + - { name: lol status na incidents, url: "https://lol.secure.dyn.riotcdn.net/channels/public/x/status/na1.json", type: JSON, connector: http, tier: S, config: { ignoreKeys: [locales] } }
167 + - { name: valorant status na, url: "https://valorant.secure.dyn.riotcdn.net/channels/public/x/status/na.json", type: JSON, connector: http, tier: S, config: { ignoreKeys: [locales] } }
168 + - id: blizzard
169 + name: Blizzard Entertainment
170 + domain: blizzard.com
171 + homepage: https://www.blizzard.com
172 + categories: [gaming]
173 + tier: B
174 + aliases: [blizzard, battle.net, battlenet]
175 + products:
176 + - { name: Battle.net, type: service, aliases: [battle net] }
177 + - { name: World of Warcraft, type: product, aliases: [wow] }
178 + - { name: Overwatch 2, type: product, aliases: [overwatch] }
179 + - { name: Diablo IV, type: product, aliases: [diablo 4] }
180 + discover: { rss: false, sitemap: false, status: false, pages: false }
181 + notes: "news.blizzard.com is an API-driven SPA with no RSS or sitemap; Battle.net support status page is client-rendered. Official game news is mirrored on Steam (app feeds)."
182 + sensors:
183 + - { name: overwatch 2 steam news, url: "https://store.steampowered.com/feeds/news/app/2357570/", type: RSS, connector: rss, tier: B }
184 + - { name: diablo iv steam news, url: "https://store.steampowered.com/feeds/news/app/2344520/", type: RSS, connector: rss, tier: B }
185 + - id: electronic-arts
186 + name: Electronic Arts
187 + domain: ea.com
188 + homepage: https://www.ea.com
189 + categories: [gaming]
190 + tier: B
191 + weight: 1.1
192 + aliases: [ea, ea sports, ea games]
193 + products:
194 + - { name: EA app, type: software }
195 + - { name: EA SPORTS FC, type: product, aliases: [fc 26, fifa] }
196 + - { name: Battlefield, type: product }
197 + - { name: The Sims, type: product }
198 + discover: { rss: false, sitemap: true, status: false, pages: false }
199 + notes: "ir.ea.com redirects to the homepage; help.ea.com status hangs for bots. Sitemap index + news page are the machine-readable surfaces."
200 + sensors:
201 + - { name: sitemap, url: "https://www.ea.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxChildren: 12, maxUrls: 4000 } }
202 + - { name: news, url: "https://www.ea.com/news", type: HTML, connector: http, tier: B }
203 + - id: ubisoft
204 + name: Ubisoft
205 + domain: ubisoft.com
206 + homepage: https://www.ubisoft.com
207 + categories: [gaming]
208 + tier: B
209 + weight: 1.1
210 + aliases: [ubisoft entertainment]
211 + products:
212 + - { name: Ubisoft Connect, type: software }
213 + - { name: Assassin's Creed, type: product, aliases: [assassins creed] }
214 + - { name: Rainbow Six Siege, type: product, aliases: [r6] }
215 + discover: { rss: false, sitemap: true, status: false, pages: false }
216 + sensors:
217 + - { name: news, url: "https://www.ubisoft.com/en-us/news", type: HTML, connector: http, tier: B }
218 + - { name: sitemap, url: "https://www.ubisoft.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 10, maxUrls: 4000 } }
219 + - id: take-two
220 + name: Take-Two Interactive
221 + domain: take2games.com
222 + homepage: https://www.take2games.com
223 + categories: [gaming, finance]
224 + tier: B
225 + weight: 1.1
226 + aliases: [take two, take-two interactive software, ttwo]
227 + products:
228 + - { name: Rockstar Games, type: product, aliases: [rockstar] }
229 + - { name: 2K, type: product, aliases: [2k games] }
230 + - { name: Grand Theft Auto VI, type: product, aliases: [gta 6, gta vi] }
231 + discover: { rss: true, sitemap: false, status: false, pages: false }
232 + notes: "rockstargames.com/newswire is client-rendered (newswire.rss returns 500); 2K newsroom is a JS shell. Investor-relations feed is the stable channel."
233 + sensors:
234 + - { name: investor news feed, url: "https://ir.take2games.com/rss/news-releases.xml", type: RSS, connector: rss, tier: A }
235 + - id: zynga
236 + name: Zynga
237 + domain: zynga.com
238 + homepage: https://www.zynga.com
239 + categories: [gaming]
240 + tier: C
241 + aliases: [zynga inc]
242 + discover: { rss: true, sitemap: false, status: false, pages: false }
243 + sensors:
244 + - { name: news feed, url: "https://www.zynga.com/feed/", type: RSS, connector: rss, tier: C, config: { maxItems: 40 } }
245 + - id: bethesda
246 + name: Bethesda Softworks
247 + domain: bethesda.net
248 + homepage: https://bethesda.net
249 + categories: [gaming]
250 + tier: B
251 + aliases: [bethesda, bethesda game studios, zenimax]
252 + products:
253 + - { name: The Elder Scrolls, type: product, aliases: [elder scrolls, skyrim] }
254 + - { name: Fallout, type: product }
255 + - { name: Starfield, type: product }
256 + discover: { rss: false, sitemap: true, status: false, pages: false }
257 + sensors:
258 + - { name: sitemap, url: "https://bethesda.net/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 5000 } }
259 + - id: square-enix
260 + name: Square Enix
261 + domain: square-enix.com
262 + homepage: https://www.hd.square-enix.com/eng/
263 + categories: [gaming]
264 + tier: B
265 + weight: 1.1
266 + aliases: [square enix holdings, squaresoft]
267 + products:
268 + - { name: Final Fantasy, type: product, aliases: [ff14, ffxiv, final fantasy xiv] }
269 + - { name: Dragon Quest, type: product }
270 + - { name: Kingdom Hearts, type: product }
271 + discover: { rss: false, sitemap: true, status: false, pages: false }
272 + notes: "No RSS; corporate news list (hd.square-enix.com/eng/news) is server-rendered, IR news is 403 for bots."
273 + sensors:
274 + - { name: corporate news, url: "https://www.hd.square-enix.com/eng/news/", type: HTML, connector: http, tier: B }
275 + - { name: games sitemap, url: "https://www.square-enix-games.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 6, maxUrls: 3000 } }
276 + - id: capcom
277 + name: Capcom
278 + domain: capcom.co.jp
279 + homepage: https://www.capcom.co.jp/ir/english/
280 + categories: [gaming]
281 + tier: B
282 + aliases: [capcom co ltd]
283 + products:
284 + - { name: Monster Hunter, type: product, aliases: [monster hunter wilds] }
285 + - { name: Resident Evil, type: product, aliases: [biohazard] }
286 + - { name: Street Fighter, type: product, aliases: [street fighter 6] }
287 + discover: { rss: false, sitemap: false, status: false, pages: false }
288 + notes: "capcom-games.com returns 403 to bots; the English IR press-release list is server-rendered."
289 + sensors:
290 + - { name: ir press releases, url: "https://www.capcom.co.jp/ir/english/news/", type: HTML, connector: http, tier: B }
291 + - id: sega
292 + name: Sega
293 + domain: sega.co.jp
294 + homepage: https://www.sega.co.jp/en/
295 + categories: [gaming]
296 + tier: B
297 + aliases: [sega corporation, sega sammy, atlus]
298 + products:
299 + - { name: Sonic the Hedgehog, type: product, aliases: [sonic] }
300 + - { name: Like a Dragon, type: product, aliases: [yakuza] }
301 + - { name: Persona, type: product }
302 + discover: { rss: false, sitemap: false, status: false, pages: false }
303 + notes: "sega.com is behind a Vercel security checkpoint (429) and sega.co.jp/en/release is a JS shell; the Sega Sammy Holdings news-release list and sitemap are server-rendered."
304 + sensors:
305 + - { name: sega sammy news releases, url: "https://www.segasammy.co.jp/en/release/", type: HTML, connector: http, tier: B }
306 + - { name: sega sammy sitemap, url: "https://www.segasammy.co.jp/en/wp-sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 21, maxUrls: 3000 } }
307 + - id: bandai-namco
308 + name: Bandai Namco Entertainment
309 + domain: bandainamcoent.com
310 + homepage: https://www.bandainamcoent.com
311 + categories: [gaming]
312 + tier: B
313 + aliases: [bandai namco, namco]
314 + products:
315 + - { name: Elden Ring, type: product }
316 + - { name: Tekken, type: product, aliases: [tekken 8] }
317 + - { name: Dragon Ball games, type: product }
318 + discover: { rss: false, sitemap: true, status: false, pages: false }
319 + notes: "bandainamco.co.jp (holdings) returns 403 to bots."
320 + sensors:
321 + - { name: news, url: "https://www.bandainamcoent.com/news", type: HTML, connector: http, tier: B }
322 + - { name: sitemap, url: "https://www.bandainamcoent.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 8, maxUrls: 3000 } }
323 + - id: konami
324 + name: Konami
325 + domain: konami.com
326 + homepage: https://www.konami.com/en/
327 + categories: [gaming]
328 + tier: C
329 + aliases: [konami group, konami digital entertainment]
330 + products:
331 + - { name: eFootball, type: product, aliases: [pes] }
332 + - { name: Metal Gear Solid, type: product, aliases: [metal gear] }
333 + - { name: Silent Hill, type: product }
334 + discover: { rss: false, sitemap: true, status: false, pages: false }
335 + sensors:
336 + - { name: sitemap, url: "https://www.konami.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
337 + - id: cd-projekt
338 + name: CD PROJEKT
339 + domain: cdprojekt.com
340 + homepage: https://www.cdprojekt.com/en/
341 + categories: [gaming]
342 + tier: B
343 + aliases: [cd projekt red, cdpr, cdp]
344 + products:
345 + - { name: Cyberpunk 2077, type: product, aliases: [cyberpunk] }
346 + - { name: The Witcher, type: product, aliases: [witcher 4] }
347 + - { name: GOG, type: product, aliases: [gog.com, gog galaxy] }
348 + discover: { rss: true, sitemap: false, status: false, pages: false }
349 + notes: "GOG (gog.com) exposes no feed or sitemap (every path redirects to the storefront) — tracked here as a CD PROJEKT product only."
350 + sensors:
351 + - { name: news feed, url: "https://www.cdprojekt.com/en/feed/", type: RSS, connector: rss, tier: B }
352 + - { name: news archive, url: "https://www.cdprojekt.com/en/media/news/", type: HTML, connector: http, tier: B }
353 + - id: embracer
354 + name: Embracer Group
355 + domain: embracer.com
356 + homepage: https://embracer.com
357 + categories: [gaming, finance]
358 + tier: C
359 + aliases: [embracer, thq nordic, plaion]
360 + discover: { rss: false, sitemap: true, status: false, pages: false }
361 + notes: "WordPress feed endpoints return a 500 (site error); the sitemap index is healthy."
362 + sensors:
363 + - { name: sitemap, url: "https://embracer.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 7, maxUrls: 3000 } }
364 + - id: tencent
365 + name: Tencent
366 + domain: tencent.com
367 + homepage: https://www.tencent.com/en-us/
368 + categories: [gaming, technology, internet]
369 + tier: B
370 + weight: 1.2
371 + aliases: [tencent holdings, tencent games, timi studio, lightspeed studios]
372 + products:
373 + - { name: WeChat, type: product, aliases: [weixin] }
374 + - { name: Honor of Kings, type: product }
375 + - { name: PUBG Mobile, type: product }
376 + discover: { rss: false, sitemap: true, status: false, pages: false }
377 + notes: "Krafton (krafton.com, 403) and NetEase (ir.netease.com hangs) could not be added; HoYoverse (hoyoverse.com) is fully client-rendered."
378 + sensors:
379 + - { name: newsroom, url: "https://www.tencent.com/newsroom/all-news/", type: HTML, connector: http, tier: B }
380 + - id: supercell
381 + name: Supercell
382 + domain: supercell.com
383 + homepage: https://supercell.com
384 + categories: [gaming]
385 + tier: C
386 + products:
387 + - { name: Clash of Clans, type: product }
388 + - { name: Clash Royale, type: product }
389 + - { name: Brawl Stars, type: product }
390 + discover: { rss: false, sitemap: true, status: false, pages: false }
391 + sensors:
392 + - { name: news, url: "https://supercell.com/en/news/", type: HTML, connector: http, tier: C }
393 + - id: scopely
394 + name: Scopely
395 + domain: scopely.com
396 + homepage: https://www.scopely.com
397 + categories: [gaming]
398 + tier: C
399 + aliases: [scopely inc, niantic games]
400 + products:
401 + - { name: Pokémon GO, type: product, aliases: [pokemon go] }
402 + - { name: Monopoly GO!, type: product, aliases: [monopoly go] }
403 + - { name: MARVEL Strike Force, type: product }
404 + discover: { rss: false, sitemap: true, status: false, pages: false }
405 + notes: "nianticlabs.com/news now redirects here (Niantic's games division was acquired by Scopely); Niantic Spatial has no feed."
406 + sensors:
407 + - { name: news, url: "https://www.scopely.com/en/news", type: HTML, connector: http, tier: C }
408 + - { name: sitemap, url: "https://www.scopely.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
409 + - id: larian
410 + name: Larian Studios
411 + domain: larian.com
412 + homepage: https://larian.com
413 + categories: [gaming]
414 + tier: C
415 + aliases: [larian studios]
416 + products:
417 + - { name: "Baldur's Gate 3", type: product, aliases: [bg3, baldurs gate 3] }
418 + - { name: Divinity, type: product, aliases: [divinity original sin] }
419 + discover: { rss: false, sitemap: false, status: false, pages: false }
420 + sensors:
421 + - { name: news, url: "https://larian.com/news", type: HTML, connector: http, tier: C }
422 + - { name: baldur's gate 3 steam news, url: "https://store.steampowered.com/feeds/news/app/1086940/", type: RSS, connector: rss, tier: B }
423 + - id: fromsoftware
424 + name: FromSoftware
425 + domain: fromsoftware.jp
426 + homepage: https://www.fromsoftware.jp/ww/
427 + categories: [gaming]
428 + tier: C
429 + aliases: [from software, fromsoft]
430 + products:
431 + - { name: Elden Ring, type: product, aliases: [elden ring nightreign] }
432 + - { name: Dark Souls, type: product }
433 + - { name: Armored Core, type: product }
434 + discover: { rss: false, sitemap: false, status: false, pages: false }
435 + notes: "fromsoftware.jp has no news list reachable by bots (404 on /ww/news); official patch notes are published on the Steam app feed."
436 + sensors:
437 + - { name: elden ring steam news, url: "https://store.steampowered.com/feeds/news/app/1245620/", type: RSS, connector: rss, tier: B }
438 + - id: nexon
439 + name: Nexon
440 + domain: nexon.co.jp
441 + homepage: https://www.nexon.co.jp/en/
442 + categories: [gaming, finance]
443 + tier: C
444 + aliases: [nexon co ltd, nexon games]
445 + products:
446 + - { name: MapleStory, type: product }
447 + - { name: The First Descendant, type: product }
448 + - { name: Dungeon & Fighter, type: product, aliases: [dnf, dungeon fighter] }
449 + discover: { rss: false, sitemap: false, status: false, pages: false }
450 + notes: "nexon.co.jp/en/news is client-rendered; the IR page is server-rendered."
451 + sensors:
452 + - { name: investor relations, url: "https://www.nexon.co.jp/en/ir/", type: HTML, connector: http, tier: C }
453 + # ───────────────────────── Gaming · engines, stores, industry bodies ─────────────────────────
454 + - id: unity
455 + name: Unity Technologies
456 + domain: unity.com
457 + homepage: https://unity.com
458 + categories: [gaming, developer, technology]
459 + tier: A
460 + weight: 1.2
461 + aliases: [unity technologies, unity engine, unity3d]
462 + products:
463 + - { name: Unity Engine, type: software, aliases: [unity 6] }
464 + - { name: Unity Runtime Fee, type: product }
465 + discover: { rss: true, sitemap: false, status: false, pages: false }
466 + notes: "status.unity.com is not an Atlassian Statuspage (no /api/v2); investors.unity.com is behind Cloudflare."
467 + sensors:
468 + - { name: blog feed, url: "https://unity.com/blog/rss", type: RSS, connector: rss, tier: A, config: { maxItems: 60 } }
469 + - { name: unity csreference tags, url: "https://github.com/Unity-Technologies/UnityCsReference/tags.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: Unity-Technologies/UnityCsReference, kind: tags } }
470 + - id: itch-io
471 + name: itch.io
472 + domain: itch.io
473 + homepage: https://itch.io
474 + categories: [gaming, commerce]
475 + tier: B
476 + aliases: [itch, itchio]
477 + discover: { rss: true, sitemap: false, status: false, pages: false }
478 + notes: "status.itch.io is not an Atlassian Statuspage. games/newest.xml (new uploads) omitted on purpose — hundreds per day."
479 + sensors:
480 + - { name: blog feed, url: "https://itch.io/blog.rss", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
481 + - { name: platform updates feed, url: "https://itch.io/updates.rss", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
482 + - id: humble-bundle
483 + name: Humble Bundle
484 + domain: humblebundle.com
485 + homepage: https://www.humblebundle.com
486 + categories: [gaming, commerce]
487 + tier: C
488 + aliases: [humble]
489 + discover: { rss: true, sitemap: false, status: false, pages: false }
490 + notes: "status.humblebundle.com does not resolve."
491 + sensors:
492 + - { name: blog feed, url: "https://blog.humblebundle.com/feed/", type: RSS, connector: rss, tier: C }
493 + - id: green-man-gaming
494 + name: Green Man Gaming
495 + domain: greenmangaming.com
496 + homepage: https://www.greenmangaming.com
497 + categories: [gaming, commerce]
498 + tier: C
499 + aliases: [gmg]
500 + discover: { rss: true, sitemap: false, status: false, pages: false }
501 + sensors:
502 + - { name: blog feed, url: "https://www.greenmangaming.com/blog/feed/", type: RSS, connector: rss, tier: C }
503 + - id: nvidia
504 + extend: true
505 + aliases: [geforce now]
506 + products:
507 + - { name: GeForce NOW, type: service, aliases: [gfn, geforce now cloud gaming] }
508 + sensors:
509 + - { name: geforce now status, url: "https://status.geforcenow.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
510 + - id: esrb
511 + name: ESRB
512 + domain: esrb.org
513 + homepage: https://www.esrb.org
514 + categories: [gaming, standards]
515 + tier: C
516 + aliases: [entertainment software rating board]
517 + discover: { rss: true, sitemap: false, status: false, pages: false }
518 + sensors:
519 + - { name: news feed, url: "https://www.esrb.org/feed/", type: RSS, connector: rss, tier: C }
520 + - id: pegi
521 + name: PEGI
522 + domain: pegi.info
523 + homepage: https://pegi.info
524 + categories: [gaming, standards]
525 + tier: C
526 + aliases: [pan european game information]
527 + discover: { rss: false, sitemap: true, status: false, pages: false }
528 + notes: "No RSS; /news returns 404 — sitemap is the only machine surface."
529 + sensors:
530 + - { name: sitemap, url: "https://pegi.info/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
531 + - id: entertainment-software-association
532 + name: Entertainment Software Association
533 + domain: theesa.com
534 + homepage: https://www.theesa.com
535 + categories: [gaming, politics]
536 + tier: C
537 + aliases: [esa, the esa]
538 + discover: { rss: false, sitemap: true, status: false, pages: false }
539 + notes: "WordPress /feed/ redirects to the homepage; newsroom page and sitemap index work."
540 + sensors:
541 + - { name: newsroom, url: "https://www.theesa.com/news/", type: HTML, connector: http, tier: C }
542 + - { name: sitemap, url: "https://www.theesa.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 13, maxUrls: 3000 } }
543 + - id: igda
544 + name: International Game Developers Association
545 + domain: igda.org
546 + homepage: https://igda.org
547 + categories: [gaming, ngo]
548 + tier: D
549 + aliases: [igda]
550 + discover: { rss: false, sitemap: false, status: false, pages: false }
551 + notes: "igda.org/feed/ is valid RSS but empty; the news archive page is server-rendered."
552 + sensors:
553 + - { name: news archive, url: "https://igda.org/news-archive/", type: HTML, connector: http, tier: D }
554 + - id: gdc
555 + name: Game Developers Conference
556 + domain: gdconf.com
557 + homepage: https://gdconf.com
558 + categories: [gaming, developer]
559 + tier: C
560 + aliases: [gdc, game developers conference]
561 + discover: { rss: false, sitemap: true, status: false, pages: false }
562 + sensors:
563 + - { name: news & insights, url: "https://gdconf.com/news-insights/", type: HTML, connector: http, tier: C }
564 + - { name: sitemap, url: "https://gdconf.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
565 + # ───────────────────────── Film / TV & streaming ─────────────────────────
566 + - id: netflix
567 + name: Netflix
568 + domain: netflix.com
569 + homepage: https://about.netflix.com
570 + categories: [entertainment, media, technology]
571 + tier: A
572 + weight: 1.4
573 + aliases: [netflix inc, tudum]
574 + products:
575 + - { name: Netflix Ads, type: product, aliases: [netflix ads suite] }
576 + - { name: Netflix Games, type: product }
577 + - { name: Tudum, type: product }
578 + discover: { rss: true, sitemap: true, status: false, pages: false }
579 + notes: "about.netflix.com has no RSS (404) and ir.netflix.net is behind Cloudflare; the newsroom is server-rendered, help.netflix.com/is-netflix-down is the official service-status page, the tech blog is on Medium."
580 + sensors:
581 + - { name: newsroom, url: "https://about.netflix.com/en/newsroom", type: HTML, connector: http, tier: A }
582 + - { name: service status page, url: "https://help.netflix.com/en/is-netflix-down", type: HTML, connector: http, tier: A }
583 + - { name: tech blog feed, url: "https://netflixtechblog.com/feed", type: RSS, connector: rss, tier: B }
584 + - id: disney
585 + name: The Walt Disney Company
586 + domain: thewaltdisneycompany.com
587 + homepage: https://thewaltdisneycompany.com
588 + categories: [entertainment, media]
589 + tier: A
590 + weight: 1.3
591 + aliases: [disney, walt disney, disney+, disney plus, hulu, espn, pixar, marvel studios, lucasfilm]
592 + products:
593 + - { name: Disney+, type: service, aliases: [disney plus] }
594 + - { name: Hulu, type: service }
595 + - { name: ESPN, type: product }
596 + discover: { rss: true, sitemap: false, status: false, pages: false }
597 + notes: "press.hulu.com/feed is valid but empty; press.disneyplus.com has no feed — both are covered as Disney products."
598 + sensors:
599 + - { name: news feed, url: "https://thewaltdisneycompany.com/feed/", type: RSS, connector: rss, tier: A, config: { maxItems: 60 } }
600 + - id: warner-bros-discovery
601 + name: Warner Bros. Discovery
602 + domain: wbd.com
603 + homepage: https://www.wbd.com
604 + categories: [entertainment, media]
605 + tier: B
606 + weight: 1.2
607 + aliases: [wbd, warner bros, hbo, hbo max, max, discovery, cnn parent]
608 + products:
609 + - { name: HBO Max, type: service, aliases: [max] }
610 + - { name: Warner Bros. Pictures, type: product }
611 + - { name: Discovery+, type: service }
612 + discover: { rss: false, sitemap: false, status: false, pages: false }
613 + notes: "press.wbd.com and ir.wbd.com are behind Cloudflare (403); sitemap.xml returns 400. The newsroom page is server-rendered."
614 + sensors:
615 + - { name: newsroom, url: "https://www.wbd.com/newsroom", type: HTML, connector: http, tier: B }
616 + - id: paramount
617 + name: Paramount
618 + domain: paramount.com
619 + homepage: https://www.paramount.com
620 + categories: [entertainment, media]
621 + tier: B
622 + weight: 1.1
623 + aliases: [paramount global, paramount skydance, viacomcbs, cbs, paramount+, pluto tv]
624 + products:
625 + - { name: Paramount+, type: service, aliases: [paramount plus] }
626 + - { name: Pluto TV, type: service }
627 + - { name: CBS, type: product }
628 + discover: { rss: false, sitemap: true, status: false, pages: false }
629 + notes: "ir.paramount.com hangs for bots; corporate.pluto.tv redirects to the consumer app — Pluto TV is tracked as a Paramount product."
630 + sensors:
631 + - { name: news, url: "https://www.paramount.com/news", type: HTML, connector: http, tier: B }
632 + - { name: sitemap, url: "https://www.paramount.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
633 + - id: nbcuniversal
634 + name: NBCUniversal
635 + domain: nbcuniversal.com
636 + homepage: https://www.nbcuniversal.com
637 + categories: [entertainment, media]
638 + tier: B
639 + weight: 1.1
640 + aliases: [nbcu, nbc universal, comcast nbcuniversal, peacock, universal pictures]
641 + products:
642 + - { name: Peacock, type: service }
643 + - { name: Universal Pictures, type: product }
644 + - { name: NBC News, type: product }
645 + discover: { rss: false, sitemap: true, status: false, pages: false }
646 + notes: "corporate.comcast.com hangs for bots; NBCU newsroom and sitemap are server-rendered."
647 + sensors:
648 + - { name: newsroom, url: "https://www.nbcuniversal.com/newsroom", type: HTML, connector: http, tier: B }
649 + - { name: sitemap, url: "https://www.nbcuniversal.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
650 + - id: fox-corporation
651 + name: Fox Corporation
652 + domain: foxcorporation.com
653 + homepage: https://www.foxcorporation.com
654 + categories: [entertainment, media]
655 + tier: C
656 + aliases: [fox corp, fox, tubi parent]
657 + products:
658 + - { name: Tubi, type: service }
659 + - { name: Fox News, type: product }
660 + discover: { rss: false, sitemap: true, status: false, pages: false }
661 + notes: "WordPress /feed/ is valid but empty; investor RSS is 404. Sitemap index is the machine surface."
662 + sensors:
663 + - { name: sitemap, url: "https://www.foxcorporation.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 7 } }
664 + - id: tubi
665 + name: Tubi
666 + domain: tubitv.com
667 + homepage: https://corporate.tubitv.com
668 + categories: [entertainment, media]
669 + tier: C
670 + aliases: [tubi tv]
671 + discover: { rss: true, sitemap: false, status: false, pages: false }
672 + sensors:
673 + - { name: corporate news feed, url: "https://corporate.tubitv.com/feed/", type: RSS, connector: rss, tier: C }
674 + - id: lionsgate
675 + name: Lionsgate
676 + domain: lionsgate.com
677 + homepage: https://www.lionsgate.com
678 + categories: [entertainment]
679 + tier: C
680 + aliases: [lions gate entertainment, starz]
681 + discover: { rss: false, sitemap: true, status: false, pages: false }
682 + notes: "investors.lionsgate.com is behind Cloudflare; /news is a JS shell. Sitemap only."
683 + sensors:
684 + - { name: sitemap, url: "https://www.lionsgate.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
685 + - id: amc-networks
686 + name: AMC Networks
687 + domain: amcnetworks.com
688 + homepage: https://www.amcnetworks.com
689 + categories: [entertainment, media]
690 + tier: C
691 + aliases: [amc, amc+, amc plus, shudder, acorn tv]
692 + products:
693 + - { name: AMC+, type: service, aliases: [amc plus] }
694 + - { name: Shudder, type: service }
695 + discover: { rss: true, sitemap: false, status: false, pages: false }
696 + sensors:
697 + - { name: news feed, url: "https://www.amcnetworks.com/feed/", type: RSS, connector: rss, tier: C }
698 + - id: sony
699 + extend: true
700 + aliases: [sony pictures, sony pictures entertainment, spe, columbia pictures]
701 + products:
702 + - { name: Sony Pictures, type: product, aliases: [sony pictures entertainment, columbia pictures] }
703 + sensors:
704 + - { name: sony pictures press releases, url: "https://www.sonypictures.com/corp/press.html", type: HTML, connector: http, tier: B }
705 + - id: crunchyroll
706 + name: Crunchyroll
707 + domain: crunchyroll.com
708 + homepage: https://www.crunchyroll.com
709 + categories: [entertainment, media]
710 + tier: B
711 + aliases: [crunchyroll news, funimation]
712 + llm: false
713 + discover: { rss: true, sitemap: false, status: false, pages: false }
714 + notes: "status.crunchyroll.com is an S3 bucket (AccessDenied), not a Statuspage. The Crunchyroll News feed is served via FeedBurner (high volume → heuristics only)."
715 + sensors:
716 + - { name: news feed, url: "https://feeds.feedburner.com/crunchyroll/rss/anime", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
717 + - id: plex
718 + name: Plex
719 + domain: plex.tv
720 + homepage: https://www.plex.tv
721 + categories: [entertainment, consumer-tech]
722 + tier: B
723 + aliases: [plex media server, plex pass]
724 + products:
725 + - { name: Plex Media Server, type: software, aliases: [pms] }
726 + - { name: Plex Pass, type: service }
727 + discover: { rss: true, sitemap: false, status: true, pages: false }
728 + sensors:
729 + - { name: status, url: "https://status.plex.tv/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
730 + - { name: blog feed, url: "https://www.plex.tv/blog/feed/", type: RSS, connector: rss, tier: B }
731 + - id: canal-plus
732 + name: CANAL+ Group
733 + domain: canalplusgroup.com
734 + homepage: https://www.canalplusgroup.com/en
735 + categories: [entertainment, media]
736 + tier: C
737 + aliases: [canal+, canal plus, groupe canal+, studiocanal, mycanal]
738 + products:
739 + - { name: myCANAL, type: service }
740 + - { name: STUDIOCANAL, type: product }
741 + discover: { rss: false, sitemap: true, status: false, pages: false }
742 + notes: "Next.js site: /en/news and /en/press-releases return 404; sitemap is the machine surface."
743 + sensors:
744 + - { name: sitemap, url: "https://www.canalplusgroup.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
745 + - id: bell-media
746 + name: Bell Media
747 + domain: bellmedia.ca
748 + homepage: https://www.bellmedia.ca
749 + categories: [entertainment, media]
750 + tier: C
751 + aliases: [crave, ctv, tsn, noovo, bell media inc]
752 + products:
753 + - { name: Crave, type: service }
754 + - { name: CTV, type: product }
755 + - { name: TSN, type: product }
756 + discover: { rss: false, sitemap: true, status: false, pages: false }
757 + notes: "WordPress /feed/ is empty; The Lede (press hub) is server-rendered. Corus Entertainment (corusent.com) is a JS shell whose sitemap children all 404 — not added."
758 + sensors:
759 + - { name: the lede (press), url: "https://www.bellmedia.ca/the-lede/", type: HTML, connector: http, tier: C }
760 + - { name: sitemap, url: "https://www.bellmedia.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 10, maxUrls: 3000 } }
761 + - id: channel-4
762 + name: Channel 4
763 + domain: channel4.com
764 + homepage: https://www.channel4.com
765 + categories: [entertainment, media]
766 + tier: C
767 + aliases: [channel four, c4, all 4]
768 + discover: { rss: false, sitemap: false, status: false, pages: false }
769 + notes: "ITV (itvplc.com) is behind Cloudflare and itv.com/presscentre hangs — not added."
770 + sensors:
771 + - { name: press news, url: "https://www.channel4.com/press/news", type: HTML, connector: http, tier: C }
772 + - id: prosiebensat1
773 + name: ProSiebenSat.1 Media
774 + domain: prosiebensat1.com
775 + homepage: https://www.prosiebensat1.com/en
776 + categories: [entertainment, media]
777 + tier: C
778 + aliases: [prosieben, p7s1, joyn]
779 + products:
780 + - { name: Joyn, type: service }
781 + discover: { rss: false, sitemap: true, status: false, pages: false }
782 + notes: "RTL Group (company.rtl.com) and MFE-MediaForEurope expose no reachable press list or sitemap — not added."
783 + sensors:
784 + - { name: sitemap, url: "https://www.prosiebensat1.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 12, maxUrls: 3000 } }
785 + - id: globo
786 + name: Grupo Globo
787 + domain: globo.com
788 + homepage: https://g1.globo.com
789 + categories: [media, news]
790 + tier: B
791 + aliases: [globo, g1, tv globo, globoplay]
792 + llm: false
793 + products:
794 + - { name: Globoplay, type: service }
795 + - { name: g1, type: product }
796 + discover: { rss: true, sitemap: false, status: false, pages: false }
797 + sensors:
798 + - { name: g1 news feed, url: "https://g1.globo.com/rss/g1/", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
799 + - id: mpa
800 + name: Motion Picture Association
801 + domain: motionpictures.org
802 + homepage: https://www.motionpictures.org
803 + categories: [entertainment, politics]
804 + tier: C
805 + aliases: [mpa, mpaa, motion picture association of america]
806 + discover: { rss: true, sitemap: false, status: false, pages: false }
807 + sensors:
808 + - { name: news feed, url: "https://www.motionpictures.org/feed/", type: RSS, connector: rss, tier: C }
809 + - id: oscars
810 + name: Academy of Motion Picture Arts and Sciences
811 + domain: oscars.org
812 + homepage: https://www.oscars.org
813 + categories: [entertainment]
814 + tier: C
815 + aliases: [ampas, the academy, oscars, academy awards]
816 + discover: { rss: true, sitemap: false, status: false, pages: false }
817 + notes: "press.oscars.org has no feed; oscars.org/rss.xml exists but carries a single item — the news page is the richer surface."
818 + sensors:
819 + - { name: news, url: "https://www.oscars.org/news", type: HTML, connector: http, tier: C }
820 + - { name: rss, url: "https://www.oscars.org/rss.xml", type: RSS, connector: rss, tier: C }
821 + - id: television-academy
822 + name: Television Academy
823 + domain: televisionacademy.com
824 + homepage: https://www.televisionacademy.com
825 + categories: [entertainment]
826 + tier: C
827 + aliases: [emmys, emmy awards, primetime emmys]
828 + discover: { rss: false, sitemap: true, status: false, pages: false }
829 + sensors:
830 + - { name: news, url: "https://www.televisionacademy.com/features/news", type: HTML, connector: http, tier: C }
831 + - { name: sitemap, url: "https://www.televisionacademy.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 8, maxUrls: 3000 } }
832 + - id: festival-de-cannes
833 + name: Festival de Cannes
834 + domain: festival-cannes.com
835 + homepage: https://www.festival-cannes.com/en/
836 + categories: [entertainment]
837 + tier: C
838 + aliases: [cannes, cannes film festival]
839 + discover: { rss: false, sitemap: true, status: false, pages: false }
840 + notes: "WordPress feed disabled (wp_die); TIFF (tiff.net) answers 202 challenge pages — not added."
841 + sensors:
842 + - { name: press area, url: "https://www.festival-cannes.com/en/press/", type: HTML, connector: http, tier: C }
843 + - { name: sitemap, url: "https://www.festival-cannes.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 10, maxUrls: 3000 } }
844 + - id: sundance
845 + name: Sundance Institute
846 + domain: sundance.org
847 + homepage: https://www.sundance.org
848 + categories: [entertainment, ngo]
849 + tier: C
850 + aliases: [sundance film festival, sundance institute]
851 + discover: { rss: true, sitemap: false, status: false, pages: false }
852 + sensors:
853 + - { name: news feed, url: "https://www.sundance.org/feed/", type: RSS, connector: rss, tier: C }
854 + - id: amc-theatres
855 + name: AMC Theatres
856 + domain: amctheatres.com
857 + homepage: https://www.amctheatres.com
858 + categories: [entertainment, finance]
859 + tier: C
860 + aliases: [amc entertainment, amc entertainment holdings]
861 + discover: { rss: false, sitemap: false, status: false, pages: false }
862 + notes: "Q4 investor site: RSS endpoints 404; press-release list is server-rendered. Cinemark (ir.cinemark.com) 404s on every list page and IMAX is behind Cloudflare — not added. Cineplex corp site only exposes a one-child sitemap."
863 + sensors:
864 + - { name: press releases, url: "https://investor.amctheatres.com/news-events/press-releases", type: HTML, connector: http, tier: C }
865 + - id: dolby
866 + name: Dolby Laboratories
867 + domain: dolby.com
868 + homepage: https://www.dolby.com
869 + categories: [entertainment, consumer-tech, technology]
870 + tier: C
871 + aliases: [dolby, dolby atmos, dolby vision]
872 + products:
873 + - { name: Dolby Atmos, type: technology }
874 + - { name: Dolby Vision, type: technology }
875 + discover: { rss: false, sitemap: true, status: false, pages: false }
876 + notes: "investor.dolby.com is behind Cloudflare; the pr.co newsroom (news.dolby.com) serves an incomplete certificate chain (TLS verify fails). dolby.com sitemap is the machine surface."
877 + sensors:
878 + - { name: sitemap, url: "https://www.dolby.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
879 + - id: thx
880 + name: THX
881 + domain: thx.com
882 + homepage: https://www.thx.com
883 + categories: [entertainment, consumer-tech]
884 + tier: D
885 + aliases: [thx ltd]
886 + discover: { rss: true, sitemap: false, status: false, pages: false }
887 + sensors:
888 + - { name: news feed, url: "https://www.thx.com/feed/", type: RSS, connector: rss, tier: D }
889 + # ───────────────────────── Music & audio ─────────────────────────
890 + - id: spotify
891 + name: Spotify
892 + domain: spotify.com
893 + homepage: https://newsroom.spotify.com
894 + categories: [music, media, technology]
895 + tier: A
896 + weight: 1.3
897 + aliases: [spotify technology, spotify ab]
898 + products:
899 + - { name: Spotify Premium, type: service }
900 + - { name: Spotify Web API, type: API, aliases: [spotify api, spotify for developers] }
901 + - { name: Spotify for Artists, type: product }
902 + discover: { rss: true, sitemap: false, status: false, pages: false }
903 + notes: "status.spotify.dev does not resolve; developer.spotify.com/blog is 404. Newsroom + engineering blog are the official feeds."
904 + sensors:
905 + - { name: newsroom feed, url: "https://newsroom.spotify.com/feed/", type: RSS, connector: rss, tier: A }
906 + - { name: engineering blog feed, url: "https://engineering.atspotify.com/feed", type: RSS, connector: rss, tier: B }
907 + - id: deezer
908 + name: Deezer
909 + domain: deezer.com
910 + homepage: https://www.deezer.com
911 + categories: [music, media]
912 + tier: C
913 + aliases: [deezer sa]
914 + discover: { rss: true, sitemap: false, status: false, pages: false }
915 + sensors:
916 + - { name: newsroom feed, url: "https://newsroom-deezer.com/feed/", type: RSS, connector: rss, tier: C }
917 + - id: soundcloud
918 + name: SoundCloud
919 + domain: soundcloud.com
920 + homepage: https://soundcloud.com
921 + categories: [music, media, internet]
922 + tier: C
923 + aliases: [soundcloud ltd]
924 + discover: { rss: false, sitemap: false, status: false, pages: false }
925 + notes: "status.soundcloud.com redirects to a Zendesk article behind Cloudflare; blog/press feeds redirect to the newsroom page."
926 + sensors:
927 + - { name: newsroom, url: "https://soundcloud.com/company/newsroom", type: HTML, connector: http, tier: C }
928 + - id: tidal
929 + name: TIDAL
930 + domain: tidal.com
931 + homepage: https://tidal.com
932 + categories: [music, media]
933 + tier: C
934 + aliases: [tidal music, tidal hifi]
935 + products:
936 + - { name: TIDAL API, type: API, aliases: [tidal developer platform] }
937 + discover: { rss: false, sitemap: false, status: false, pages: false }
938 + notes: "tidal.com is behind DataDome (403 for bots) and status.tidal.com does not resolve; the open-source SDK releases are the only machine endpoint."
939 + sensors:
940 + - { name: web sdk releases, url: "https://github.com/tidal-music/tidal-sdk-web/releases.atom", type: GITHUB_RELEASE, connector: github, tier: C, config: { repo: tidal-music/tidal-sdk-web, kind: releases } }
941 + - id: qobuz
942 + name: Qobuz
943 + domain: qobuz.com
944 + homepage: https://www.qobuz.com
945 + categories: [music, media]
946 + tier: D
947 + aliases: [qobuz music]
948 + discover: { rss: false, sitemap: false, status: false, pages: false }
949 + sensors:
950 + - { name: magazine, url: "https://www.qobuz.com/us-en/magazine", type: HTML, connector: http, tier: D }
951 + - id: bandcamp
952 + name: Bandcamp
953 + domain: bandcamp.com
954 + homepage: https://bandcamp.com
955 + categories: [music, commerce]
956 + tier: C
957 + aliases: [bandcamp daily]
958 + discover: { rss: true, sitemap: false, status: false, pages: false }
959 + sensors:
960 + - { name: bandcamp daily feed, url: "https://daily.bandcamp.com/feed", type: RSS, connector: rss, tier: C, config: { maxItems: 40 } }
961 + - { name: company blog feed, url: "https://blog.bandcamp.com/feed/", type: RSS, connector: rss, tier: C }
962 + - id: universal-music-group
963 + name: Universal Music Group
964 + domain: universalmusic.com
965 + homepage: https://www.universalmusic.com
966 + categories: [music, entertainment]
967 + tier: B
968 + weight: 1.1
969 + aliases: [umg, universal music]
970 + discover: { rss: true, sitemap: false, status: false, pages: false }
971 + sensors:
972 + - { name: news feed, url: "https://www.universalmusic.com/feed/", type: RSS, connector: rss, tier: B }
973 + - id: sony-music
974 + name: Sony Music Entertainment
975 + domain: sonymusic.com
976 + homepage: https://www.sonymusic.com
977 + categories: [music, entertainment]
978 + tier: B
979 + aliases: [sony music, sme, columbia records, rca records, epic records]
980 + discover: { rss: true, sitemap: false, status: false, pages: false }
981 + sensors:
982 + - { name: news feed, url: "https://www.sonymusic.com/feed/", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
983 + - id: warner-music-group
984 + name: Warner Music Group
985 + domain: wmg.com
986 + homepage: https://www.wmg.com
987 + categories: [music, entertainment]
988 + tier: B
989 + aliases: [wmg, warner music, atlantic records, warner records]
990 + discover: { rss: false, sitemap: true, status: false, pages: false }
991 + notes: "investors.wmg.com is behind Cloudflare; the news page and sitemap index are server-rendered."
992 + sensors:
993 + - { name: news, url: "https://www.wmg.com/news", type: HTML, connector: http, tier: B }
994 + - { name: sitemap, url: "https://www.wmg.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 9, maxUrls: 3000 } }
995 + - id: riaa
996 + name: RIAA
997 + domain: riaa.com
998 + homepage: https://www.riaa.com
999 + categories: [music, politics]
1000 + tier: C
1001 + aliases: [recording industry association of america]
1002 + discover: { rss: true, sitemap: false, status: false, pages: false }
1003 + notes: "Recording Academy / Grammys (grammy.com) returns 403 to bots; ASCAP 403; SOCAN has no feed or news list — not added."
1004 + sensors:
1005 + - { name: news feed, url: "https://www.riaa.com/feed/", type: RSS, connector: rss, tier: C }
1006 + - id: ifpi
1007 + name: IFPI
1008 + domain: ifpi.org
1009 + homepage: https://www.ifpi.org
1010 + categories: [music, international]
1011 + tier: C
1012 + aliases: [international federation of the phonographic industry]
1013 + discover: { rss: false, sitemap: true, status: false, pages: false }
1014 + sensors:
1015 + - { name: news, url: "https://www.ifpi.org/news/", type: HTML, connector: http, tier: C }
1016 + - { name: sitemap, url: "https://www.ifpi.org/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 4 } }
1017 + - id: bmi
1018 + name: BMI (Broadcast Music, Inc.)
1019 + domain: bmi.com
1020 + homepage: https://www.bmi.com
1021 + categories: [music]
1022 + tier: D
1023 + aliases: [broadcast music inc, bmi music]
1024 + discover: { rss: false, sitemap: false, status: false, pages: false }
1025 + sensors:
1026 + - { name: news, url: "https://www.bmi.com/news", type: HTML, connector: http, tier: D }
1027 + - id: live-nation
1028 + name: Live Nation Entertainment
1029 + domain: livenationentertainment.com
1030 + homepage: https://www.livenationentertainment.com
1031 + categories: [music, entertainment, commerce]
1032 + tier: B
1033 + weight: 1.1
1034 + aliases: [live nation, ticketmaster, lyv]
1035 + products:
1036 + - { name: Ticketmaster, type: product }
1037 + - { name: Ticketmaster API, type: API, aliases: [ticketmaster discovery api] }
1038 + discover: { rss: false, sitemap: true, status: false, pages: false }
1039 + notes: "status.ticketmaster.com does not resolve; investors.livenationentertainment.com RSS is 404. The press-release page is client-rendered; sitemap + Ticketmaster blog feed are the working channels."
1040 + sensors:
1041 + - { name: ticketmaster blog feed, url: "https://blog.ticketmaster.com/feed/", type: RSS, connector: rss, tier: C }
1042 + - { name: sitemap, url: "https://www.livenationentertainment.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
1043 + - id: iheartmedia
1044 + name: iHeartMedia
1045 + domain: iheartmedia.com
1046 + homepage: https://www.iheartmedia.com
1047 + categories: [music, media]
1048 + tier: C
1049 + aliases: [iheart, iheartradio]
1050 + products:
1051 + - { name: iHeartRadio, type: service }
1052 + discover: { rss: false, sitemap: false, status: false, pages: false }
1053 + notes: "Audacy (feed empty, IR hangs) and SiriusXM (Q4 IR 404, newsroom 404) could not be added."
1054 + sensors:
1055 + - { name: press room, url: "https://www.iheartmedia.com/press", type: HTML, connector: http, tier: C }
1056 + - id: shure
1057 + name: Shure
1058 + domain: shure.com
1059 + homepage: https://www.shure.com
1060 + categories: [music, consumer-tech]
1061 + tier: D
1062 + aliases: [shure inc]
1063 + discover: { rss: false, sitemap: true, status: false, pages: false }
1064 + notes: "Sennheiser (sennheiser.com) has no sitemap and its newsroom is a JS app; Avid is behind Cloudflare — not added."
1065 + sensors:
1066 + - { name: sitemap, url: "https://www.shure.com/en-US/sitemap.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxChildren: 6, maxUrls: 3000 } }
1067 + - id: native-instruments
1068 + name: Native Instruments
1069 + domain: native-instruments.com
1070 + homepage: https://www.native-instruments.com
1071 + categories: [music, consumer-tech]
1072 + tier: D
1073 + aliases: [ni, komplete, kontakt]
1074 + products:
1075 + - { name: Komplete, type: software }
1076 + - { name: Kontakt, type: software }
1077 + discover: { rss: true, sitemap: false, status: false, pages: false }
1078 + sensors:
1079 + - { name: blog feed, url: "https://blog.native-instruments.com/feed/", type: RSS, connector: rss, tier: D }
1080 + - id: ableton
1081 + name: Ableton
1082 + domain: ableton.com
1083 + homepage: https://www.ableton.com
1084 + categories: [music, consumer-tech]
1085 + tier: C
1086 + aliases: [ableton live, ableton push]
1087 + products:
1088 + - { name: Ableton Live, type: software, aliases: [live 12] }
1089 + - { name: Push, type: product, aliases: [push 3] }
1090 + discover: { rss: false, sitemap: false, status: false, pages: false }
1091 + sensors:
1092 + - { name: live 12 release notes, url: "https://www.ableton.com/en/release-notes/live-12/", type: HTML, connector: http, tier: B }
1093 + - { name: blog, url: "https://www.ableton.com/en/blog/", type: HTML, connector: http, tier: C }
1094 + - id: steinberg
1095 + name: Steinberg
1096 + domain: steinberg.net
1097 + homepage: https://www.steinberg.net
1098 + categories: [music, consumer-tech]
1099 + tier: D
1100 + aliases: [steinberg media technologies, cubase, nuendo, dorico]
1101 + products:
1102 + - { name: Cubase, type: software }
1103 + - { name: Dorico, type: software }
1104 + discover: { rss: true, sitemap: false, status: false, pages: false }
1105 + sensors:
1106 + - { name: forum announcements feed, url: "https://forums.steinberg.net/c/announcements/5.rss", type: RSS, connector: rss, tier: D }
1107 + # ───────────────────────── Esports & creator platforms ─────────────────────────
1108 + - id: esl-faceit-group
1109 + name: ESL FACEIT Group
1110 + domain: eslfaceitgroup.com
1111 + homepage: https://eslfaceitgroup.com
1112 + categories: [gaming, sports]
1113 + tier: C
1114 + aliases: [efg, esl, faceit, dreamhack, iem]
1115 + products:
1116 + - { name: FACEIT, type: service }
1117 + - { name: Intel Extreme Masters, type: product, aliases: [iem] }
1118 + discover: { rss: true, sitemap: false, status: false, pages: false }
1119 + notes: "BLAST (blast.tv) exposes only a 22 000-URL sitemap and no feed; Riot esports sites are client-rendered — not added."
1120 + sensors:
1121 + - { name: news feed, url: "https://eslfaceitgroup.com/feed/", type: RSS, connector: rss, tier: C }
1122 + - id: team-liquid
1123 + name: Team Liquid
1124 + domain: teamliquid.com
1125 + homepage: https://teamliquid.com
1126 + categories: [gaming, sports]
1127 + tier: C
1128 + aliases: [tl, liquid]
1129 + discover: { rss: true, sitemap: false, status: false, pages: false }
1130 + notes: "teamliquid.com is a JS shell; TL.net (the organization's editorial site) publishes RSS."
1131 + sensors:
1132 + - { name: tl.net news feed, url: "https://tl.net/rss/news.xml", type: RSS, connector: rss, tier: C }
1133 + - id: cloud9
1134 + name: Cloud9
1135 + domain: cloud9.gg
1136 + homepage: https://cloud9.gg
1137 + categories: [gaming, sports]
1138 + tier: C
1139 + aliases: [c9]
1140 + discover: { rss: true, sitemap: false, status: false, pages: false }
1141 + notes: "TSM (tsm.gg redirects to a shop), OverActive Media (all paths 404) and 100 Thieves (Shopify news.atom rate-limits with 429) could not be added."
1142 + sensors:
1143 + - { name: news feed, url: "https://cloud9.gg/feed/", type: RSS, connector: rss, tier: C }
1144 + - id: patreon
1145 + name: Patreon
1146 + domain: patreon.com
1147 + homepage: https://www.patreon.com
1148 + categories: [internet, media, payments]
1149 + tier: A
1150 + weight: 1.1
1151 + aliases: [patreon inc]
1152 + products:
1153 + - { name: Patreon API, type: API }
1154 + discover: { rss: false, sitemap: false, status: true, pages: false }
1155 + notes: "news.patreon.com has no machine feed (JS app). Ko-fi (status host does not resolve, blog 404) and Kick (Cloudflare, status bucket AccessDenied) — not added."
1156 + sensors:
1157 + - { name: status, url: "https://status.patreon.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1158 + - id: vimeo
1159 + name: Vimeo
1160 + domain: vimeo.com
1161 + homepage: https://vimeo.com
1162 + categories: [media, internet, technology]
1163 + tier: A
1164 + aliases: [vimeo inc]
1165 + products:
1166 + - { name: Vimeo API, type: API }
1167 + discover: { rss: true, sitemap: false, status: true, pages: false }
1168 + notes: "Rumble (rum.group / corp.rumble.com) has no feed and its IR RSS is 403 — not added."
1169 + sensors:
1170 + - { name: status, url: "https://www.vimeostatus.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1171 + - { name: blog feed, url: "https://vimeo.com/blog/feed.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
1172 + - id: medium
1173 + name: Medium
1174 + domain: medium.com
1175 + homepage: https://medium.com
1176 + categories: [media, internet]
1177 + tier: A
1178 + aliases: [medium.com, a medium corporation]
1179 + discover: { rss: true, sitemap: false, status: true, pages: false }
1180 + sensors:
1181 + - { name: status, url: "https://status.medium.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1182 + - { name: blog feed, url: "https://medium.com/feed/blog", type: RSS, connector: rss, tier: B }
1183 + - id: substack
1184 + name: Substack
1185 + domain: substack.com
1186 + homepage: https://substack.com
1187 + categories: [media, internet]
1188 + tier: A
1189 + weight: 1.1
1190 + aliases: [substack inc]
1191 + discover: { rss: true, sitemap: false, status: true, pages: false }
1192 + sensors:
1193 + - { name: status, url: "https://substack.statuspage.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1194 + - { name: on substack feed, url: "https://on.substack.com/feed", type: RSS, connector: rss, tier: B }
added config/sources.d/16-universities-research.yaml +1768 −0
@@ -0,0 +1,1768 @@
1 +# config/sources.d/16-universities-research.yaml — universities, research institutes & national labs,
2 +# journals / publishers / preprint servers / scholarly infrastructure, funders & science policy.
3 +# Authored 2026-09-08. Every sensor below was fetched and parsed with the registry validator; organizations
4 +# whose feeds are blocked (403/202 bot management) or simply absent are kept as discover-only entities with a
5 +# `notes:` explanation so nobody re-probes them blindly. Extends: arxiv (API Atom feeds), nasa (JPL), esa
6 +# (ESA/Webb, ESA/Hubble).
7 +sources:
8 + # ───────────────────────── extensions of founding-file sources ─────────────────────────
9 + - id: arxiv
10 + extend: true
11 + notes: "arXiv API (export.arxiv.org) — Atom, 50 newest per category; the API asks for ≥ 3–4 s between requests, one sensor per category keeps it polite."
12 + sensors:
13 + - { name: cs.AI api feed, url: "https://export.arxiv.org/api/query?search_query=cat:cs.AI&sortBy=submittedDate&sortOrder=descending&max_results=50", type: ATOM, connector: rss, tier: B, config: { maxItems: 50 } }
14 + - { name: cs.LG api feed, url: "https://export.arxiv.org/api/query?search_query=cat:cs.LG&sortBy=submittedDate&sortOrder=descending&max_results=50", type: ATOM, connector: rss, tier: B, config: { maxItems: 50 } }
15 + - { name: cs.CL api feed, url: "https://export.arxiv.org/api/query?search_query=cat:cs.CL&sortBy=submittedDate&sortOrder=descending&max_results=50", type: ATOM, connector: rss, tier: B, config: { maxItems: 50 } }
16 + - { name: cs.CR api feed, url: "https://export.arxiv.org/api/query?search_query=cat:cs.CR&sortBy=submittedDate&sortOrder=descending&max_results=50", type: ATOM, connector: rss, tier: B, config: { maxItems: 50 } }
17 + - { name: econ.EM api feed, url: "https://export.arxiv.org/api/query?search_query=cat:econ.EM&sortBy=submittedDate&sortOrder=descending&max_results=50", type: ATOM, connector: rss, tier: B, config: { maxItems: 50 } }
18 + - { name: q-fin.ST api feed, url: "https://export.arxiv.org/api/query?search_query=cat:q-fin.ST&sortBy=submittedDate&sortOrder=descending&max_results=50", type: ATOM, connector: rss, tier: B, config: { maxItems: 50 } }
19 + - id: nasa
20 + extend: true
21 + aliases: [jpl, jet propulsion laboratory]
22 + products:
23 + - { name: Jet Propulsion Laboratory, type: service, aliases: [jpl] }
24 + sensors:
25 + - { name: jpl news feed, url: "https://www.jpl.nasa.gov/feeds/news/", type: RSS, connector: rss, tier: B }
26 + - { name: science news feed, url: "https://science.nasa.gov/feed/", type: RSS, connector: rss, tier: B }
27 + - id: esa
28 + extend: true
29 + aliases: [esa webb, esa hubble]
30 + sensors:
31 + - { name: esa webb news feed, url: "https://esawebb.org/news/feed/", type: RSS, connector: rss, tier: B }
32 + - { name: esa hubble news feed, url: "https://esahubble.org/news/feed/", type: RSS, connector: rss, tier: B }
33 +
34 + # ───────────────────────── universities · United Kingdom & Europe ─────────────────────────
35 + - id: cambridge
36 + name: University of Cambridge
37 + domain: cam.ac.uk
38 + categories: [education, research]
39 + tier: B
40 + weight: 1.2
41 + aliases: [cambridge university]
42 + discover: { rss: true, sitemap: false }
43 + sensors:
44 + - { name: news feed, url: "https://www.cam.ac.uk/news/feed", type: RSS, connector: rss, tier: B }
45 + - id: oxford
46 + name: University of Oxford
47 + domain: ox.ac.uk
48 + categories: [education, research]
49 + tier: B
50 + weight: 1.2
51 + aliases: [oxford university]
52 + discover: { rss: false, sitemap: false }
53 + notes: "www.ox.ac.uk answers 403 to every non-browser and browser fetch from our network (bot management) — /rss/news and sitemaps unreachable; entity only."
54 + - id: imperial-college
55 + name: Imperial College London
56 + domain: imperial.ac.uk
57 + categories: [education, research]
58 + tier: B
59 + aliases: [imperial]
60 + discover: { rss: true, sitemap: false }
61 + notes: "No RSS on /news (historic /news/rss/ and /news/feed/ are 404); the only sitemap is the 17 k-URL corporate one — entity only until a feed reappears."
62 + - id: ucl
63 + name: University College London
64 + domain: ucl.ac.uk
65 + categories: [education, research]
66 + tier: B
67 + aliases: [university college london]
68 + discover: { rss: false, sitemap: false }
69 + notes: "403 on feeds and news sitemap (bot management); entity only."
70 + - id: edinburgh
71 + name: University of Edinburgh
72 + domain: ed.ac.uk
73 + categories: [education, research]
74 + tier: B
75 + aliases: [edinburgh university]
76 + discover: { rss: true, sitemap: false }
77 + notes: "News hub has no RSS/Atom and no news sitemap (2026-09); entity only."
78 + - id: eth-zurich
79 + name: ETH Zurich
80 + domain: ethz.ch
81 + categories: [education, research]
82 + tier: B
83 + weight: 1.2
84 + aliases: [eth zürich, eth]
85 + discover: { rss: false }
86 + sensors:
87 + - { name: eth news feed, url: "https://ethz.ch/en/news-und-veranstaltungen/eth-news/news/_jcr_content.feed.html", type: ATOM, connector: rss, tier: B, config: { maxItems: 50 } }
88 + - id: epfl
89 + name: EPFL
90 + domain: epfl.ch
91 + categories: [education, research]
92 + tier: B
93 + weight: 1.1
94 + aliases: [école polytechnique fédérale de lausanne]
95 + discover: { rss: false }
96 + sensors:
97 + - { name: mediacom news feed, url: "https://actu.epfl.ch/feeds/rss/mediacom/en/", type: RSS, connector: rss, tier: B }
98 + - id: tu-munich
99 + name: Technical University of Munich
100 + domain: tum.de
101 + categories: [education, research]
102 + tier: B
103 + aliases: [tum, technische universität münchen]
104 + discover: { rss: false }
105 + sensors:
106 + - { name: news feed, url: "https://www.tum.de/en/news.rss", type: ATOM, connector: rss, tier: B }
107 + - id: lmu-munich
108 + name: LMU Munich
109 + domain: lmu.de
110 + categories: [education, research]
111 + tier: B
112 + aliases: [ludwig-maximilians-universität, lmu]
113 + discover: { rss: false }
114 + sensors:
115 + - { name: newsroom feed, url: "https://www.lmu.de/en/newsroom/rss-feed-news.xml", type: RSS, connector: rss, tier: B }
116 + - id: sorbonne-universite
117 + name: Sorbonne Université
118 + domain: sorbonne-universite.fr
119 + categories: [education, research]
120 + tier: B
121 + aliases: [sorbonne]
122 + discover: { rss: false }
123 + sensors:
124 + - { name: actualités feed, url: "https://www.sorbonne-universite.fr/rss.xml", type: RSS, connector: rss, tier: B }
125 + - id: psl
126 + name: Université PSL
127 + domain: psl.eu
128 + categories: [education, research]
129 + tier: B
130 + aliases: [paris sciences et lettres]
131 + discover: { rss: false }
132 + sensors:
133 + - { name: actualités feed, url: "https://psl.eu/rss.xml", type: RSS, connector: rss, tier: B }
134 + - id: ku-leuven
135 + name: KU Leuven
136 + domain: kuleuven.be
137 + categories: [education, research]
138 + tier: B
139 + aliases: [leuven]
140 + discover: { rss: false }
141 + sensors:
142 + - { name: news feed, url: "https://nieuws.kuleuven.be/en/content/rss", type: ATOM, connector: rss, tier: B }
143 + - id: tu-delft
144 + name: TU Delft
145 + domain: tudelft.nl
146 + categories: [education, research]
147 + tier: B
148 + aliases: [delft university of technology]
149 + discover: { rss: true, sitemap: false }
150 + notes: "No RSS on /en/news (2026-09); generic 217-child sitemap only. Entity only."
151 + - id: university-of-amsterdam
152 + name: University of Amsterdam
153 + domain: uva.nl
154 + categories: [education, research]
155 + tier: B
156 + aliases: [uva, universiteit van amsterdam]
157 + discover: { rss: false }
158 + sensors:
159 + - { name: news sitemap, url: "https://www.uva.nl/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 500, maxChildren: 6 } }
160 + - id: university-of-copenhagen
161 + name: University of Copenhagen
162 + domain: ku.dk
163 + categories: [education, research]
164 + tier: B
165 + aliases: [københavns universitet, ucph]
166 + discover: { rss: false }
167 + sensors:
168 + - { name: all news feed, url: "https://news.ku.dk/all_news/?get_rss=1", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
169 + - id: karolinska
170 + name: Karolinska Institutet
171 + domain: ki.se
172 + categories: [education, research, health]
173 + tier: B
174 + aliases: [karolinska institute]
175 + discover: { rss: false }
176 + sensors:
177 + - { name: latest news feed, url: "https://nyheter.ki.se/latest-news/rss.xml", type: RSS, connector: rss, tier: B }
178 + - id: uppsala
179 + name: Uppsala University
180 + domain: uu.se
181 + categories: [education, research]
182 + tier: B
183 + aliases: [uppsala universitet]
184 + discover: { rss: true, sitemap: false }
185 + notes: "No RSS on /en/news and no news sitemap (2026-09); entity only."
186 + - id: university-of-helsinki
187 + name: University of Helsinki
188 + domain: helsinki.fi
189 + categories: [education, research]
190 + tier: B
191 + aliases: [helsingin yliopisto]
192 + discover: { rss: false }
193 + sensors:
194 + - { name: news feed, url: "https://www.helsinki.fi/en/rss.xml", type: RSS, connector: rss, tier: B }
195 +
196 + # ───────────────────────── universities · Asia-Pacific ─────────────────────────
197 + - id: university-of-tokyo
198 + name: University of Tokyo
199 + domain: u-tokyo.ac.jp
200 + categories: [education, research]
201 + tier: B
202 + weight: 1.1
203 + aliases: [utokyo, todai]
204 + discover: { rss: true, sitemap: false }
205 + notes: "No RSS/Atom on the EN news hub, no sitemap (2026-09); entity only."
206 + - id: kyoto-university
207 + name: Kyoto University
208 + domain: kyoto-u.ac.jp
209 + categories: [education, research]
210 + tier: B
211 + aliases: [kyodai]
212 + discover: { rss: false }
213 + sensors:
214 + - { name: news feed, url: "https://www.kyoto-u.ac.jp/en/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
215 + - id: nus
216 + name: National University of Singapore
217 + domain: nus.edu.sg
218 + categories: [education, research]
219 + tier: B
220 + weight: 1.1
221 + aliases: [nus singapore]
222 + discover: { rss: false }
223 + sensors:
224 + - { name: news feed, url: "https://news.nus.edu.sg/feed/", type: RSS, connector: rss, tier: B }
225 + - id: ntu-singapore
226 + name: Nanyang Technological University
227 + domain: ntu.edu.sg
228 + categories: [education, research]
229 + tier: B
230 + aliases: [ntu]
231 + discover: { rss: true, sitemap: false }
232 + notes: "News hub is client-rendered without RSS; no sitemap (2026-09). Entity only."
233 + - id: tsinghua
234 + name: Tsinghua University
235 + domain: tsinghua.edu.cn
236 + categories: [education, research]
237 + tier: B
238 + weight: 1.1
239 + discover: { rss: true, sitemap: false }
240 + notes: "No feed on the EN site (2026-09); entity only."
241 + - id: peking-university
242 + name: Peking University
243 + domain: pku.edu.cn
244 + categories: [education, research]
245 + tier: B
246 + weight: 1.1
247 + aliases: [pku, beida]
248 + discover: { rss: true, sitemap: false }
249 + notes: "No feed on english.pku.edu.cn (2026-09); entity only."
250 + - id: hku
251 + name: University of Hong Kong
252 + domain: hku.hk
253 + categories: [education, research]
254 + tier: B
255 + aliases: [hong kong university]
256 + discover: { rss: true, sitemap: false }
257 + notes: "Press-release pages have no RSS (rss.hku.hk is the Research Services office, not a feed). Entity only."
258 + - id: kaist
259 + name: KAIST
260 + domain: kaist.ac.kr
261 + categories: [education, research]
262 + tier: B
263 + aliases: [korea advanced institute of science and technology]
264 + discover: { rss: false }
265 + sensors:
266 + - { name: news sitemap, url: "https://news.kaist.ac.kr/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 1500, maxChildren: 4 } }
267 + - id: seoul-national-university
268 + name: Seoul National University
269 + domain: snu.ac.kr
270 + categories: [education, research]
271 + tier: B
272 + aliases: [snu]
273 + discover: { rss: true, sitemap: false }
274 + notes: "No feed on en.snu.ac.kr (2026-09); entity only."
275 + - id: iit-bombay
276 + name: IIT Bombay
277 + domain: iitb.ac.in
278 + categories: [education, research]
279 + tier: B
280 + aliases: [indian institute of technology bombay]
281 + discover: { rss: false }
282 + sensors:
283 + - { name: news feed, url: "https://www.iitb.ac.in/rss.xml", type: RSS, connector: rss, tier: B }
284 + - id: university-of-melbourne
285 + name: University of Melbourne
286 + domain: unimelb.edu.au
287 + categories: [education, research]
288 + tier: B
289 + aliases: [unimelb, melbourne university]
290 + discover: { rss: false, sitemap: false }
291 + notes: "403 on newsroom feeds/sitemaps and on pursuit.unimelb.edu.au (bot management); entity only."
292 + - id: university-of-sydney
293 + name: University of Sydney
294 + domain: sydney.edu.au
295 + categories: [education, research]
296 + tier: B
297 + aliases: [usyd]
298 + discover: { rss: true, sitemap: false }
299 + notes: "No RSS in News & opinion (AEM), no news sitemap (2026-09); entity only."
300 + - id: anu
301 + name: Australian National University
302 + domain: anu.edu.au
303 + categories: [education, research]
304 + tier: B
305 + aliases: [australian national university]
306 + discover: { rss: true, sitemap: false }
307 + notes: "Newsroom has no RSS (2026-09); generic 76-child sitemap only. Entity only."
308 +
309 + # ───────────────────────── universities · Canada ─────────────────────────
310 + - id: university-of-toronto
311 + name: University of Toronto
312 + domain: utoronto.ca
313 + categories: [education, research]
314 + tier: B
315 + weight: 1.2
316 + aliases: [u of t, uoft]
317 + discover: { rss: false }
318 + sensors:
319 + - { name: news feed, url: "https://www.utoronto.ca/rss.xml", type: RSS, connector: rss, tier: B }
320 + - id: ubc
321 + name: University of British Columbia
322 + domain: ubc.ca
323 + categories: [education, research]
324 + tier: B
325 + weight: 1.1
326 + aliases: [ubc]
327 + discover: { rss: false }
328 + sensors:
329 + - { name: news feed, url: "https://news.ubc.ca/feed/", type: RSS, connector: rss, tier: B }
330 + - id: mcgill
331 + name: McGill University
332 + domain: mcgill.ca
333 + categories: [education, research]
334 + tier: B
335 + weight: 1.1
336 + aliases: [mcgill]
337 + discover: { rss: false }
338 + sensors:
339 + - { name: news releases feed, url: "https://www.mcgill.ca/newsroom/channels_item/19/rss", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
340 + - { name: experts feed, url: "https://www.mcgill.ca/newsroom/channels_item/20/rss", type: RSS, connector: rss, tier: C, config: { maxItems: 30 } }
341 + - id: universite-de-montreal
342 + name: Université de Montréal
343 + domain: umontreal.ca
344 + categories: [education, research]
345 + tier: B
346 + weight: 1.1
347 + aliases: [udem, university of montreal]
348 + discover: { rss: false }
349 + notes: "UdeMnouvelles offers only a client-rendered RSS builder (/rss) with no static feed URL; the TYPO3 sitemap index of the news site is used instead."
350 + sensors:
351 + - { name: udemnouvelles sitemap, url: "https://nouvelles.umontreal.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000, maxChildren: 3 } }
352 + - id: universite-laval
353 + name: Université Laval
354 + domain: ulaval.ca
355 + categories: [education, research]
356 + tier: B
357 + aliases: [laval university]
358 + discover: { rss: false }
359 + sensors:
360 + - { name: actualités feed, url: "https://www.ulaval.ca/rss.xml", type: RSS, connector: rss, tier: B }
361 + - id: uqam
362 + name: Université du Québec à Montréal
363 + domain: uqam.ca
364 + categories: [education, research]
365 + tier: B
366 + aliases: [uqam]
367 + discover: { rss: false }
368 + notes: "actualites.uqam.ca answers 500 on /feed; the press room (salledepresse.uqam.ca) WordPress feed works."
369 + sensors:
370 + - { name: salle de presse feed, url: "https://salledepresse.uqam.ca/feed/", type: RSS, connector: rss, tier: B }
371 + - id: uqo
372 + name: Université du Québec en Outaouais
373 + domain: uqo.ca
374 + categories: [education, research]
375 + tier: B
376 + aliases: [uqo]
377 + discover: { rss: true }
378 + sensors:
379 + - { name: actualités feed, url: "https://uqo.ca/rss.xml", type: RSS, connector: rss, tier: B }
380 + - id: universite-de-sherbrooke
381 + name: Université de Sherbrooke
382 + domain: usherbrooke.ca
383 + categories: [education, research]
384 + tier: B
385 + aliases: [udes, sherbrooke]
386 + discover: { rss: true, sitemap: false }
387 + notes: "No RSS under /actualites (2026-09); entity only."
388 + - id: polytechnique-montreal
389 + name: Polytechnique Montréal
390 + domain: polymtl.ca
391 + categories: [education, research]
392 + tier: B
393 + aliases: [poly montréal, polymtl]
394 + discover: { rss: false }
395 + sensors:
396 + - { name: news feed, url: "https://www.polymtl.ca/rss.xml", type: RSS, connector: rss, tier: B }
397 + - { name: carrefour actualité feed, url: "https://www.polymtl.ca/carrefour-actualite/rss.xml", type: RSS, connector: rss, tier: C }
398 + - id: hec-montreal
399 + name: HEC Montréal
400 + domain: hec.ca
401 + categories: [education, research, finance]
402 + tier: B
403 + aliases: [hec]
404 + discover: { rss: false }
405 + sensors:
406 + - { name: nouvelles feed, url: "https://www.hec.ca/nouvelles/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
407 + - id: concordia
408 + name: Concordia University
409 + domain: concordia.ca
410 + categories: [education, research]
411 + tier: B
412 + aliases: [concordia montreal]
413 + discover: { rss: true, sitemap: false }
414 + notes: "AEM news hub without RSS or news sitemap (2026-09); entity only."
415 + - id: ets-montreal
416 + name: École de technologie supérieure
417 + domain: etsmtl.ca
418 + categories: [education, research]
419 + tier: C
420 + aliases: [éts, ets]
421 + discover: { rss: true, sitemap: false }
422 + notes: "No RSS on /nouvelles (2026-09); entity only."
423 + - id: inrs
424 + name: Institut national de la recherche scientifique
425 + domain: inrs.ca
426 + categories: [education, research]
427 + tier: B
428 + aliases: [inrs]
429 + discover: { rss: false }
430 + sensors:
431 + - { name: actualités feed, url: "https://inrs.ca/feed/", type: RSS, connector: rss, tier: B }
432 + - id: teluq
433 + name: Université TÉLUQ
434 + domain: teluq.ca
435 + categories: [education]
436 + tier: C
437 + aliases: [téluq, teluq]
438 + discover: { rss: true, sitemap: false }
439 + notes: "No RSS on /site/nouvelles (2026-09); entity only."
440 + - id: uqtr
441 + name: Université du Québec à Trois-Rivières
442 + domain: uqtr.ca
443 + categories: [education, research]
444 + tier: B
445 + aliases: [uqtr]
446 + discover: { rss: false }
447 + sensors:
448 + - { name: néo uqtr feed, url: "https://neo.uqtr.ca/feed/", type: RSS, connector: rss, tier: B }
449 + - id: uqac
450 + name: Université du Québec à Chicoutimi
451 + domain: uqac.ca
452 + categories: [education, research]
453 + tier: B
454 + aliases: [uqac]
455 + discover: { rss: false }
456 + sensors:
457 + - { name: nouvelles feed, url: "https://www.uqac.ca/feed/", type: RSS, connector: rss, tier: B }
458 + - id: uqar
459 + name: Université du Québec à Rimouski
460 + domain: uqar.ca
461 + categories: [education, research]
462 + tier: B
463 + aliases: [uqar]
464 + discover: { rss: false }
465 + sensors:
466 + - { name: nouvelles feed, url: "https://www.uqar.ca/feed/", type: RSS, connector: rss, tier: B }
467 + - id: uqat
468 + name: Université du Québec en Abitibi-Témiscamingue
469 + domain: uqat.ca
470 + categories: [education, research]
471 + tier: C
472 + aliases: [uqat]
473 + discover: { rss: true, sitemap: false }
474 + notes: "/feed and /rss.xml are 404 (2026-09); entity only."
475 + - id: bishops-university
476 + name: Bishop's University
477 + domain: ubishops.ca
478 + categories: [education]
479 + tier: C
480 + aliases: [bishop's]
481 + discover: { rss: false }
482 + sensors:
483 + - { name: news feed, url: "https://www.ubishops.ca/feed/", type: RSS, connector: rss, tier: C }
484 + - id: university-of-waterloo
485 + name: University of Waterloo
486 + domain: uwaterloo.ca
487 + categories: [education, research, ai]
488 + tier: B
489 + weight: 1.1
490 + aliases: [waterloo, uwaterloo]
491 + discover: { rss: false }
492 + sensors:
493 + - { name: news feed, url: "https://uwaterloo.ca/rss.xml", type: RSS, connector: rss, tier: B }
494 + - id: mcmaster
495 + name: McMaster University
496 + domain: mcmaster.ca
497 + categories: [education, research]
498 + tier: B
499 + aliases: [mcmaster]
500 + discover: { rss: false }
501 + sensors:
502 + - { name: mcmaster news feed, url: "https://news.mcmaster.ca/feed/", type: RSS, connector: rss, tier: B }
503 + - id: university-of-alberta
504 + name: University of Alberta
505 + domain: ualberta.ca
506 + categories: [education, research, ai]
507 + tier: B
508 + aliases: [ualberta, u of a]
509 + discover: { rss: false, sitemap: false }
510 + notes: "403 on every feed/sitemap path under /en/news and /folio (bot management); entity only."
511 + - id: university-of-calgary
512 + name: University of Calgary
513 + domain: ucalgary.ca
514 + categories: [education, research]
515 + tier: B
516 + aliases: [ucalgary, u of c]
517 + discover: { rss: false }
518 + sensors:
519 + - { name: news feed, url: "https://ucalgary.ca/news/rss.xml", type: RSS, connector: rss, tier: B }
520 + - id: university-of-ottawa
521 + name: University of Ottawa
522 + domain: uottawa.ca
523 + categories: [education, research]
524 + tier: B
525 + aliases: [uottawa, université d'ottawa]
526 + discover: { rss: false }
527 + sensors:
528 + - { name: news feed, url: "https://www.uottawa.ca/en/rss.xml", type: RSS, connector: rss, tier: B }
529 + - id: queens-university
530 + name: Queen's University
531 + domain: queensu.ca
532 + categories: [education, research]
533 + tier: B
534 + aliases: [queen's, queensu]
535 + discover: { rss: false }
536 + sensors:
537 + - { name: gazette feed, url: "https://www.queensu.ca/gazette/rss.xml", type: RSS, connector: rss, tier: B }
538 + - id: western-university
539 + name: Western University
540 + domain: uwo.ca
541 + homepage: https://www.uwo.ca
542 + categories: [education, research]
543 + tier: B
544 + aliases: [western, uwo]
545 + discover: { rss: false }
546 + sensors:
547 + - { name: western news feed, url: "https://news.westernu.ca/feed/", type: RSS, connector: rss, tier: B }
548 + - id: dalhousie
549 + name: Dalhousie University
550 + domain: dal.ca
551 + categories: [education, research]
552 + tier: B
553 + aliases: [dal]
554 + discover: { rss: false }
555 + sensors:
556 + - { name: dal news feed, url: "https://www.dal.ca/news.rss.html", type: RSS, connector: rss, tier: B }
557 + - id: sfu
558 + name: Simon Fraser University
559 + domain: sfu.ca
560 + categories: [education, research]
561 + tier: B
562 + aliases: [sfu]
563 + discover: { rss: false }
564 + sensors:
565 + - { name: sfu news feed, url: "https://www.sfu.ca/content/sfu/sfunews/_jcr_content/main_content/listclf3.feed", type: ATOM, connector: rss, tier: B }
566 + - id: university-of-victoria
567 + name: University of Victoria
568 + domain: uvic.ca
569 + categories: [education, research]
570 + tier: B
571 + aliases: [uvic]
572 + discover: { rss: false }
573 + sensors:
574 + - { name: news feed, url: "https://news.uvic.ca/feed/", type: RSS, connector: rss, tier: B }
575 + - id: university-of-manitoba
576 + name: University of Manitoba
577 + domain: umanitoba.ca
578 + categories: [education, research]
579 + tier: C
580 + aliases: [umanitoba, u of m]
581 + discover: { rss: false, sitemap: false }
582 + notes: "news.umanitoba.ca returns an HTML shell for /feed and sitemaps (client-rendered); entity only."
583 + - id: university-of-saskatchewan
584 + name: University of Saskatchewan
585 + domain: usask.ca
586 + categories: [education, research]
587 + tier: B
588 + aliases: [usask]
589 + discover: { rss: false }
590 + sensors:
591 + - { name: news feed, url: "https://news.usask.ca/index.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
592 +
593 + # ───────────────────────── universities · United States ─────────────────────────
594 + - id: princeton
595 + name: Princeton University
596 + domain: princeton.edu
597 + categories: [education, research]
598 + tier: B
599 + weight: 1.2
600 + discover: { rss: false }
601 + sensors:
602 + - { name: news feed, url: "https://www.princeton.edu/feed", type: RSS, connector: rss, tier: B }
603 + - id: yale
604 + name: Yale University
605 + domain: yale.edu
606 + categories: [education, research]
607 + tier: B
608 + weight: 1.2
609 + discover: { rss: false }
610 + sensors:
611 + - { name: yale news feed, url: "https://news.yale.edu/news-rss", type: RSS, connector: rss, tier: B }
612 + - id: columbia
613 + name: Columbia University
614 + domain: columbia.edu
615 + categories: [education, research]
616 + tier: B
617 + weight: 1.2
618 + discover: { rss: false, sitemap: false }
619 + notes: "news.columbia.edu answers 403 to feeds and sitemap (bot management); entity only."
620 + - id: upenn
621 + name: University of Pennsylvania
622 + domain: upenn.edu
623 + categories: [education, research]
624 + tier: B
625 + weight: 1.1
626 + aliases: [penn]
627 + discover: { rss: false, sitemap: false }
628 + notes: "penntoday.upenn.edu answers 403 to feeds and sitemap (bot management); entity only."
629 + - id: uchicago
630 + name: University of Chicago
631 + domain: uchicago.edu
632 + categories: [education, research]
633 + tier: B
634 + weight: 1.1
635 + aliases: [university of chicago]
636 + discover: { rss: false }
637 + notes: "UChicago News has no RSS; its sitemap index (news-only host) is the sensor."
638 + sensors:
639 + - { name: news sitemap, url: "https://news.uchicago.edu/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000, maxChildren: 3 } }
640 + - id: cornell
641 + name: Cornell University
642 + domain: cornell.edu
643 + categories: [education, research]
644 + tier: B
645 + weight: 1.1
646 + discover: { rss: false }
647 + notes: "Cornell Chronicle only exposes topic feeds (taxonomy/term/*/feed); the Google news sitemap covers everything."
648 + sensors:
649 + - { name: chronicle news sitemap, url: "https://news.cornell.edu/sitemap-news.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 500 } }
650 + - id: johns-hopkins
651 + name: Johns Hopkins University
652 + domain: jhu.edu
653 + categories: [education, research, health]
654 + tier: B
655 + weight: 1.1
656 + aliases: [jhu, hopkins]
657 + discover: { rss: false }
658 + sensors:
659 + - { name: hub feed, url: "https://hub.jhu.edu/feed/", type: RSS, connector: rss, tier: B }
660 + - id: duke
661 + name: Duke University
662 + domain: duke.edu
663 + categories: [education, research]
664 + tier: B
665 + weight: 1.1
666 + discover: { rss: false }
667 + notes: "Duke Today has no RSS; its sitemap index (news-only host) is the sensor."
668 + sensors:
669 + - { name: duke today sitemap, url: "https://today.duke.edu/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000, maxChildren: 3 } }
670 + - id: northwestern
671 + name: Northwestern University
672 + domain: northwestern.edu
673 + categories: [education, research]
674 + tier: B
675 + discover: { rss: false }
676 + sensors:
677 + - { name: northwestern now feed, url: "https://news.northwestern.edu/feeds/allStories", type: RSS, connector: rss, tier: B }
678 + - id: university-of-michigan
679 + name: University of Michigan
680 + domain: umich.edu
681 + categories: [education, research]
682 + tier: B
683 + weight: 1.1
684 + aliases: [umich, michigan]
685 + discover: { rss: false }
686 + sensors:
687 + - { name: michigan news feed, url: "https://news.umich.edu/feed/", type: RSS, connector: rss, tier: B }
688 + - id: ucla
689 + name: UCLA
690 + domain: ucla.edu
691 + categories: [education, research]
692 + tier: B
693 + weight: 1.1
694 + aliases: [university of california los angeles]
695 + discover: { rss: false }
696 + sensors:
697 + - { name: newsroom feed, url: "https://newsroom.ucla.edu/rss.xml", type: RSS, connector: rss, tier: B }
698 + - id: ucsd
699 + name: UC San Diego
700 + domain: ucsd.edu
701 + categories: [education, research]
702 + tier: B
703 + aliases: [uc san diego, university of california san diego]
704 + discover: { rss: false }
705 + notes: "UC San Diego Today has no RSS; its sitemap (news-only host) is the sensor."
706 + sensors:
707 + - { name: today sitemap, url: "https://today.ucsd.edu/others/sitemap", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
708 + - id: university-of-washington
709 + name: University of Washington
710 + domain: washington.edu
711 + categories: [education, research]
712 + tier: B
713 + weight: 1.1
714 + aliases: [uw, udub]
715 + discover: { rss: false }
716 + sensors:
717 + - { name: uw news feed, url: "https://www.washington.edu/news/feed/", type: RSS, connector: rss, tier: B }
718 + - id: georgia-tech
719 + name: Georgia Tech
720 + domain: gatech.edu
721 + categories: [education, research]
722 + tier: B
723 + aliases: [georgia institute of technology]
724 + discover: { rss: false }
725 + sensors:
726 + - { name: news feed, url: "https://news.gatech.edu/rss/all", type: RSS, connector: rss, tier: B }
727 + - id: ut-austin
728 + name: University of Texas at Austin
729 + domain: utexas.edu
730 + categories: [education, research]
731 + tier: B
732 + aliases: [ut austin, utexas]
733 + discover: { rss: false }
734 + sensors:
735 + - { name: news feed, url: "https://news.utexas.edu/feed/", type: RSS, connector: rss, tier: B }
736 + - id: carnegie-mellon
737 + name: Carnegie Mellon University
738 + domain: cmu.edu
739 + categories: [education, research, ai]
740 + tier: B
741 + weight: 1.2
742 + aliases: [cmu, carnegie mellon]
743 + discover: { rss: false }
744 + sensors:
745 + - { name: news feed, url: "https://www.cmu.edu/news/feeds/news.rss", type: RSS, connector: rss, tier: B }
746 + - id: nyu
747 + name: New York University
748 + domain: nyu.edu
749 + categories: [education, research]
750 + tier: B
751 + aliases: [nyu]
752 + discover: { rss: false, sitemap: false }
753 + notes: "nyu.edu answers 202 with an interstitial (bot management) on feeds and sitemap; entity only."
754 + - id: usc
755 + name: University of Southern California
756 + domain: usc.edu
757 + categories: [education, research]
758 + tier: B
759 + aliases: [usc]
760 + discover: { rss: false }
761 + sensors:
762 + - { name: usc today feed, url: "https://today.usc.edu/feed/", type: RSS, connector: rss, tier: B }
763 + - id: purdue
764 + name: Purdue University
765 + domain: purdue.edu
766 + categories: [education, research]
767 + tier: B
768 + discover: { rss: false }
769 + sensors:
770 + - { name: newsroom feed, url: "https://www.purdue.edu/newsroom/feed/", type: RSS, connector: rss, tier: B }
771 + - id: university-of-illinois
772 + name: University of Illinois Urbana-Champaign
773 + domain: illinois.edu
774 + categories: [education, research]
775 + tier: B
776 + aliases: [uiuc, illinois]
777 + discover: { rss: false }
778 + sensors:
779 + - { name: news bureau feed, url: "https://news.illinois.edu/feed/", type: RSS, connector: rss, tier: B }
780 + - id: university-of-wisconsin
781 + name: University of Wisconsin–Madison
782 + domain: wisc.edu
783 + categories: [education, research]
784 + tier: B
785 + aliases: [uw–madison, wisconsin]
786 + discover: { rss: false }
787 + sensors:
788 + - { name: news feed, url: "https://news.wisc.edu/feed/", type: RSS, connector: rss, tier: B }
789 + - id: university-of-minnesota
790 + name: University of Minnesota
791 + domain: umn.edu
792 + categories: [education, research]
793 + tier: B
794 + aliases: [umn]
795 + discover: { rss: false, sitemap: false }
796 + notes: "twin-cities.umn.edu answers 403 to feeds and sitemap (bot management); entity only."
797 +
798 + # ───────────────────────── research institutes & national labs ─────────────────────────
799 + - id: cnrs
800 + name: CNRS
801 + domain: cnrs.fr
802 + categories: [research, science]
803 + tier: B
804 + weight: 1.2
805 + aliases: [centre national de la recherche scientifique]
806 + discover: { rss: false }
807 + notes: "/en/rss.xml is a stale single-item feed; the FR feed, CNRS News (EN) and CNRS Le journal are live."
808 + sensors:
809 + - { name: actualités feed, url: "https://www.cnrs.fr/fr/rss.xml", type: RSS, connector: rss, tier: B }
810 + - { name: cnrs news feed, url: "https://news.cnrs.fr/rss", type: RSS, connector: rss, tier: B }
811 + - { name: le journal feed, url: "https://lejournal.cnrs.fr/rss", type: RSS, connector: rss, tier: C }
812 + - id: inria
813 + name: Inria
814 + domain: inria.fr
815 + categories: [research, ai, developer]
816 + tier: B
817 + weight: 1.1
818 + discover: { rss: false }
819 + sensors:
820 + - { name: actualités feed, url: "https://www.inria.fr/fr/rss.xml", type: RSS, connector: rss, tier: B }
821 + - { name: news feed (en), url: "https://www.inria.fr/en/rss.xml", type: RSS, connector: rss, tier: C }
822 + - id: inserm
823 + name: Inserm
824 + domain: inserm.fr
825 + categories: [research, health]
826 + tier: B
827 + aliases: [institut national de la santé et de la recherche médicale]
828 + discover: { rss: false }
829 + sensors:
830 + - { name: press room feed, url: "https://presse.inserm.fr/en/feed/", type: RSS, connector: rss, tier: B }
831 + - { name: site feed, url: "https://www.inserm.fr/feed/", type: RSS, connector: rss, tier: C }
832 + - id: cea
833 + name: CEA
834 + domain: cea.fr
835 + categories: [research, energy, science]
836 + tier: B
837 + aliases: [commissariat à l'énergie atomique et aux énergies alternatives]
838 + discover: { rss: true, sitemap: false }
839 + notes: "SharePoint site without any RSS endpoint found (2026-09); entity only."
840 + - id: fraunhofer
841 + name: Fraunhofer-Gesellschaft
842 + domain: fraunhofer.de
843 + categories: [research, technology]
844 + tier: B
845 + weight: 1.1
846 + aliases: [fraunhofer]
847 + discover: { rss: false }
848 + sensors:
849 + - { name: press feed, url: "https://www.fraunhofer.de/en/rss/press.rss", type: RSS, connector: rss, tier: B }
850 + - id: helmholtz
851 + name: Helmholtz Association
852 + domain: helmholtz.de
853 + categories: [research, science]
854 + tier: B
855 + aliases: [helmholtz-gemeinschaft]
856 + discover: { rss: true, sitemap: false }
857 + notes: "Newsroom without RSS (2026-09); entity only."
858 + - id: leibniz
859 + name: Leibniz Association
860 + domain: leibniz-gemeinschaft.de
861 + categories: [research, science]
862 + tier: B
863 + aliases: [leibniz-gemeinschaft, leibniz]
864 + discover: { rss: false }
865 + sensors:
866 + - { name: news feed, url: "https://www.leibniz-gemeinschaft.de/rss.xml", type: RSS, connector: rss, tier: B }
867 + - id: riken
868 + name: RIKEN
869 + domain: riken.jp
870 + categories: [research, science]
871 + tier: B
872 + weight: 1.1
873 + discover: { rss: false }
874 + sensors:
875 + - { name: press releases feed, url: "https://www.riken.jp/en/feed/press_feed/", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
876 + - { name: topics feed, url: "https://www.riken.jp/en/feed/topics_feed/", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
877 + - id: csiro
878 + name: CSIRO
879 + domain: csiro.au
880 + categories: [research, science]
881 + tier: B
882 + aliases: [commonwealth scientific and industrial research organisation]
883 + discover: { rss: true, sitemap: false }
884 + notes: "News hub without RSS and blog.csiro.au feed returns HTML (2026-09); only a 7 k-URL corporate sitemap. Entity only."
885 + - id: nrc-canada
886 + name: National Research Council Canada
887 + domain: nrc.canada.ca
888 + categories: [research, government]
889 + tier: B
890 + aliases: [nrc, cnrc, conseil national de recherches]
891 + discover: { rss: true, sitemap: false }
892 + notes: "Stories hub has no feed and canada.ca department Atom feeds return the 404 page for NRC (2026-09); entity only."
893 + - id: mila
894 + name: Mila – Quebec AI Institute
895 + domain: mila.quebec
896 + categories: [research, ai]
897 + tier: B
898 + weight: 1.1
899 + aliases: [mila]
900 + discover: { rss: false }
901 + sensors:
902 + - { name: news feed, url: "https://mila.quebec/en/rss.xml", type: RSS, connector: rss, tier: B }
903 + - id: vector-institute
904 + name: Vector Institute
905 + domain: vectorinstitute.ai
906 + categories: [research, ai]
907 + tier: B
908 + aliases: [vector]
909 + discover: { rss: false }
910 + sensors:
911 + - { name: news feed, url: "https://vectorinstitute.ai/feed/", type: RSS, connector: rss, tier: B }
912 + - id: amii
913 + name: Amii
914 + domain: amii.ca
915 + categories: [research, ai]
916 + tier: C
917 + aliases: [alberta machine intelligence institute]
918 + discover: { rss: true, sitemap: false }
919 + notes: "Client-rendered site with no feed (2026-09); entity only."
920 + - id: ivado
921 + name: IVADO
922 + domain: ivado.ca
923 + categories: [research, ai]
924 + tier: C
925 + discover: { rss: false }
926 + sensors:
927 + - { name: news feed, url: "https://ivado.ca/en/feed/", type: RSS, connector: rss, tier: C }
928 + - id: cifar
929 + name: CIFAR
930 + domain: cifar.ca
931 + categories: [research, ai, funding]
932 + tier: B
933 + aliases: [canadian institute for advanced research]
934 + discover: { rss: false }
935 + sensors:
936 + - { name: news feed, url: "https://cifar.ca/feed/", type: RSS, connector: rss, tier: B }
937 + - id: ai2
938 + name: Allen Institute for AI
939 + domain: allenai.org
940 + categories: [research, ai]
941 + tier: B
942 + weight: 1.1
943 + aliases: [ai2, allen ai]
944 + products:
945 + - { name: OLMo, type: AI_model, aliases: [olmo] }
946 + - { name: Semantic Scholar, type: service, aliases: [semantic scholar] }
947 + discover: { rss: false }
948 + notes: "Semantic Scholar (an AI2 product) has no public news feed; blog.semanticscholar.org does not resolve."
949 + sensors:
950 + - { name: blog feed, url: "https://allenai.org/rss.xml", type: RSS, connector: rss, tier: B }
951 + - { name: medium blog feed, url: "https://medium.com/feed/ai2-blog", type: RSS, connector: rss, tier: C }
952 + - id: broad-institute
953 + name: Broad Institute
954 + domain: broadinstitute.org
955 + categories: [research, health]
956 + tier: B
957 + aliases: [broad]
958 + discover: { rss: false }
959 + sensors:
960 + - { name: news feed, url: "https://www.broadinstitute.org/rss.xml", type: RSS, connector: rss, tier: B }
961 + - id: salk-institute
962 + name: Salk Institute
963 + domain: salk.edu
964 + categories: [research, health]
965 + tier: C
966 + aliases: [salk]
967 + discover: { rss: false }
968 + sensors:
969 + - { name: news feed, url: "https://www.salk.edu/feed/", type: RSS, connector: rss, tier: C }
970 + - id: scripps-research
971 + name: Scripps Research
972 + domain: scripps.edu
973 + categories: [research, health]
974 + tier: C
975 + discover: { rss: true, sitemap: false }
976 + notes: "/rss returns a valid but empty WordPress feed (2026-09); entity only."
977 + - id: hhmi
978 + name: Howard Hughes Medical Institute
979 + domain: hhmi.org
980 + categories: [research, health, funding]
981 + tier: B
982 + aliases: [hhmi]
983 + discover: { rss: true, sitemap: false }
984 + notes: "/rss.xml is an empty channel and the news hub has no feed (2026-09); entity only."
985 + - id: wellcome
986 + name: Wellcome
987 + domain: wellcome.org
988 + categories: [research, health, funding]
989 + tier: B
990 + aliases: [wellcome trust]
991 + discover: { rss: false, sitemap: false }
992 + notes: "wellcome.org answers 202 with a bot-management interstitial on every path; entity only."
993 + - id: sanger-institute
994 + name: Wellcome Sanger Institute
995 + domain: sanger.ac.uk
996 + categories: [research, health]
997 + tier: C
998 + aliases: [sanger]
999 + discover: { rss: false }
1000 + sensors:
1001 + - { name: news feed, url: "https://www.sanger.ac.uk/feed/", type: RSS, connector: rss, tier: C }
1002 + - id: embl
1003 + name: EMBL
1004 + domain: embl.org
1005 + categories: [research, science]
1006 + tier: B
1007 + weight: 1.1
1008 + aliases: [european molecular biology laboratory]
1009 + discover: { rss: false }
1010 + sensors:
1011 + - { name: news feed, url: "https://www.embl.org/news/feed/", type: RSS, connector: rss, tier: B }
1012 + - id: francis-crick-institute
1013 + name: Francis Crick Institute
1014 + domain: crick.ac.uk
1015 + categories: [research, health]
1016 + tier: B
1017 + aliases: [the crick]
1018 + discover: { rss: false, sitemap: false }
1019 + notes: "403 on feeds and sitemap (bot management); entity only."
1020 + - id: institut-pasteur
1021 + name: Institut Pasteur
1022 + domain: pasteur.fr
1023 + categories: [research, health]
1024 + tier: B
1025 + weight: 1.1
1026 + aliases: [pasteur]
1027 + discover: { rss: true, sitemap: false }
1028 + notes: "/rss.xml, /fr/rss.xml and /en/rss.xml are valid but empty channels (2026-09); entity only."
1029 + - id: weizmann-institute
1030 + name: Weizmann Institute of Science
1031 + domain: weizmann.ac.il
1032 + categories: [research, science]
1033 + tier: B
1034 + aliases: [weizmann]
1035 + discover: { rss: false }
1036 + sensors:
1037 + - { name: compass feed, url: "https://www.weizmann.ac.il/WeizmannCompass/rss.xml", type: RSS, connector: rss, tier: B }
1038 + - { name: wis wander feed, url: "https://wis-wander.weizmann.ac.il/rss.xml", type: RSS, connector: rss, tier: C }
1039 + - id: perimeter-institute
1040 + name: Perimeter Institute
1041 + domain: perimeterinstitute.ca
1042 + categories: [research, science]
1043 + tier: C
1044 + aliases: [perimeter]
1045 + discover: { rss: true, sitemap: false }
1046 + notes: "/rss.xml is an empty channel; no sitemap (2026-09). Entity only."
1047 + - id: santa-fe-institute
1048 + name: Santa Fe Institute
1049 + domain: santafe.edu
1050 + categories: [research, science]
1051 + tier: C
1052 + aliases: [sfi]
1053 + discover: { rss: false }
1054 + sensors:
1055 + - { name: news feed, url: "https://www.santafe.edu/news-center/feed/", type: RSS, connector: rss, tier: C }
1056 + - id: argonne
1057 + name: Argonne National Laboratory
1058 + domain: anl.gov
1059 + categories: [research, science, energy]
1060 + tier: B
1061 + aliases: [argonne]
1062 + discover: { rss: false, sitemap: false }
1063 + notes: "anl.gov answers 403 to feeds and sitemap (bot management); entity only."
1064 + - id: oak-ridge
1065 + name: Oak Ridge National Laboratory
1066 + domain: ornl.gov
1067 + categories: [research, science, energy]
1068 + tier: B
1069 + aliases: [ornl, oak ridge]
1070 + discover: { rss: false }
1071 + sensors:
1072 + - { name: news feed, url: "https://www.ornl.gov/rss.xml", type: RSS, connector: rss, tier: B }
1073 + - id: los-alamos
1074 + name: Los Alamos National Laboratory
1075 + domain: lanl.gov
1076 + categories: [research, science]
1077 + tier: B
1078 + aliases: [lanl, los alamos]
1079 + discover: { rss: true, sitemap: false }
1080 + notes: "No feed on /media/news and discover.lanl.gov does not resolve (2026-09); only a 1.8 k-URL corporate sitemap. Entity only."
1081 + - id: lawrence-livermore
1082 + name: Lawrence Livermore National Laboratory
1083 + domain: llnl.gov
1084 + categories: [research, science]
1085 + tier: B
1086 + aliases: [llnl, livermore]
1087 + discover: { rss: true, sitemap: false }
1088 + notes: "/rss.xml is an empty channel and /news/rss.xml returns HTML (2026-09); entity only."
1089 + - id: lawrence-berkeley
1090 + name: Lawrence Berkeley National Laboratory
1091 + domain: lbl.gov
1092 + categories: [research, science, energy]
1093 + tier: B
1094 + aliases: [berkeley lab, lbnl]
1095 + discover: { rss: false }
1096 + sensors:
1097 + - { name: news center feed, url: "https://newscenter.lbl.gov/feed/", type: RSS, connector: rss, tier: B }
1098 + - id: brookhaven
1099 + name: Brookhaven National Laboratory
1100 + domain: bnl.gov
1101 + categories: [research, science]
1102 + tier: B
1103 + aliases: [bnl]
1104 + discover: { rss: true, sitemap: false }
1105 + notes: "Newsroom without RSS and no sitemap (2026-09); entity only."
1106 + - id: fermilab
1107 + name: Fermilab
1108 + domain: fnal.gov
1109 + categories: [research, science]
1110 + tier: B
1111 + aliases: [fermi national accelerator laboratory]
1112 + discover: { rss: false }
1113 + sensors:
1114 + - { name: news feed, url: "https://news.fnal.gov/feed/", type: RSS, connector: rss, tier: B }
1115 + - id: slac
1116 + name: SLAC National Accelerator Laboratory
1117 + domain: slac.stanford.edu
1118 + categories: [research, science]
1119 + tier: B
1120 + aliases: [slac]
1121 + discover: { rss: false }
1122 + sensors:
1123 + - { name: news feed, url: "https://www6.slac.stanford.edu/rss.xml", type: RSS, connector: rss, tier: B }
1124 + - id: pnnl
1125 + name: Pacific Northwest National Laboratory
1126 + domain: pnnl.gov
1127 + categories: [research, science, energy]
1128 + tier: B
1129 + aliases: [pnnl]
1130 + discover: { rss: true, sitemap: false }
1131 + notes: "/rss.xml is an empty channel and /news/rss.xml is 403 (2026-09); entity only."
1132 + - id: sandia
1133 + name: Sandia National Laboratories
1134 + domain: sandia.gov
1135 + categories: [research, science, cyber]
1136 + tier: B
1137 + aliases: [sandia labs]
1138 + discover: { rss: false }
1139 + sensors:
1140 + - { name: news releases feed, url: "https://newsreleases.sandia.gov/feed/", type: RSS, connector: rss, tier: B }
1141 + - { name: news feed, url: "https://www.sandia.gov/news/feed/", type: RSS, connector: rss, tier: C }
1142 + - id: ncar
1143 + name: NCAR / UCAR
1144 + domain: ucar.edu
1145 + categories: [research, climate, weather]
1146 + tier: B
1147 + aliases: [national center for atmospheric research, ucar]
1148 + discover: { rss: false }
1149 + sensors:
1150 + - { name: news feed, url: "https://news.ucar.edu/rss.xml", type: RSS, connector: rss, tier: B }
1151 + - id: woods-hole
1152 + name: Woods Hole Oceanographic Institution
1153 + domain: whoi.edu
1154 + categories: [research, climate, science]
1155 + tier: B
1156 + aliases: [whoi]
1157 + discover: { rss: false }
1158 + sensors:
1159 + - { name: news feed, url: "https://www.whoi.edu/feed/", type: RSS, connector: rss, tier: B }
1160 + - id: scripps-oceanography
1161 + name: Scripps Institution of Oceanography
1162 + domain: scripps.ucsd.edu
1163 + categories: [research, climate, science]
1164 + tier: B
1165 + aliases: [scripps oceanography]
1166 + discover: { rss: false }
1167 + sensors:
1168 + - { name: news feed, url: "https://scripps.ucsd.edu/news/feed", type: RSS, connector: rss, tier: B }
1169 + - id: alfred-wegener-institute
1170 + name: Alfred Wegener Institute
1171 + domain: awi.de
1172 + categories: [research, climate, science]
1173 + tier: C
1174 + aliases: [awi]
1175 + discover: { rss: true, sitemap: false }
1176 + notes: "Press pages without RSS (2026-09); entity only."
1177 + - id: triumf
1178 + name: TRIUMF
1179 + domain: triumf.ca
1180 + categories: [research, science]
1181 + tier: C
1182 + discover: { rss: false }
1183 + sensors:
1184 + - { name: news feed, url: "https://triumf.ca/feed", type: RSS, connector: rss, tier: C }
1185 + - id: snolab
1186 + name: SNOLAB
1187 + domain: snolab.ca
1188 + categories: [research, science]
1189 + tier: C
1190 + discover: { rss: false }
1191 + sensors:
1192 + - { name: news feed, url: "https://www.snolab.ca/news/feed/", type: RSS, connector: rss, tier: C }
1193 + - id: canadian-light-source
1194 + name: Canadian Light Source
1195 + domain: lightsource.ca
1196 + categories: [research, science]
1197 + tier: C
1198 + aliases: [cls]
1199 + discover: { rss: true, sitemap: false }
1200 + notes: "Only sector news pages (HTML) — no RSS found (2026-09); entity only."
1201 + - id: eso
1202 + name: European Southern Observatory
1203 + domain: eso.org
1204 + categories: [research, space, science]
1205 + tier: B
1206 + weight: 1.1
1207 + aliases: [eso]
1208 + discover: { rss: false }
1209 + sensors:
1210 + - { name: news feed, url: "https://www.eso.org/public/news/feed/", type: RSS, connector: rss, tier: B }
1211 + - { name: announcements feed, url: "https://feeds.feedburner.com/EsoAnnouncements", type: RSS, connector: rss, tier: C }
1212 + - { name: blog feed, url: "https://www.eso.org/public/blog/feed/", type: RSS, connector: rss, tier: C }
1213 + - id: nrao
1214 + name: National Radio Astronomy Observatory
1215 + domain: nrao.edu
1216 + categories: [research, space, science]
1217 + tier: B
1218 + aliases: [nrao]
1219 + discover: { rss: false }
1220 + sensors:
1221 + - { name: news feed, url: "https://public.nrao.edu/news/feed/", type: RSS, connector: rss, tier: B }
1222 + - id: noirlab
1223 + name: NSF NOIRLab
1224 + domain: noirlab.edu
1225 + categories: [research, space, science]
1226 + tier: B
1227 + aliases: [noirlab]
1228 + discover: { rss: false }
1229 + sensors:
1230 + - { name: news feed, url: "https://noirlab.edu/public/news/feed/", type: RSS, connector: rss, tier: B }
1231 + - id: stsci
1232 + name: Space Telescope Science Institute
1233 + domain: stsci.edu
1234 + categories: [research, space, science]
1235 + tier: B
1236 + aliases: [stsci, webb telescope, hubble]
1237 + products:
1238 + - { name: James Webb Space Telescope, type: product, aliases: [jwst, webb] }
1239 + - { name: Hubble Space Telescope, type: product, aliases: [hubble] }
1240 + discover: { rss: false, sitemap: false }
1241 + notes: "webbtelescope.org / hubblesite.org now point to science.nasa.gov/feed/ (covered on nasa) and the ESA/Webb + ESA/Hubble feeds are on esa; STScI itself publishes no feed."
1242 +
1243 + # ───────────────────────── journals, publishers, preprints, scholarly infrastructure ─────────────────────────
1244 + - id: cell-press
1245 + name: Cell Press
1246 + domain: cell.com
1247 + categories: [research, science, health]
1248 + tier: B
1249 + weight: 1.1
1250 + aliases: [cell]
1251 + products:
1252 + - { name: Cell, type: product }
1253 + discover: { rss: false }
1254 + sensors:
1255 + - { name: cell current issue feed, url: "https://www.cell.com/cell/current.rss", type: RSS, connector: rss, tier: B }
1256 + - { name: cell in press feed, url: "https://www.cell.com/cell/inpress.rss", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
1257 + - id: the-lancet
1258 + name: The Lancet
1259 + domain: thelancet.com
1260 + categories: [research, health]
1261 + tier: B
1262 + weight: 1.2
1263 + aliases: [lancet]
1264 + discover: { rss: false }
1265 + sensors:
1266 + - { name: current issue feed, url: "https://www.thelancet.com/rssfeed/lancet_current.xml", type: RSS, connector: rss, tier: B }
1267 + - { name: online first feed, url: "https://www.thelancet.com/rssfeed/lancet_online.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
1268 + - id: nejm
1269 + name: New England Journal of Medicine
1270 + domain: nejm.org
1271 + categories: [research, health]
1272 + tier: B
1273 + weight: 1.2
1274 + aliases: [nejm]
1275 + discover: { rss: false }
1276 + sensors:
1277 + - { name: current issue feed, url: "https://www.nejm.org/action/showFeed?type=etoc&feed=rss&jc=nejm", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
1278 + - id: jama
1279 + name: JAMA Network
1280 + domain: jamanetwork.com
1281 + categories: [research, health]
1282 + tier: B
1283 + weight: 1.1
1284 + aliases: [jama]
1285 + discover: { rss: false }
1286 + sensors:
1287 + - { name: jama current issue feed, url: "https://jamanetwork.com/rss/site_3/67.xml", type: RSS, connector: rss, tier: B }
1288 + - { name: jama online first feed, url: "https://jamanetwork.com/rss/site_3/onlineFirst_67.xml", type: RSS, connector: rss, tier: B }
1289 + - id: bmj
1290 + name: The BMJ
1291 + domain: bmj.com
1292 + categories: [research, health]
1293 + tier: B
1294 + weight: 1.1
1295 + aliases: [british medical journal]
1296 + discover: { rss: false }
1297 + sensors:
1298 + - { name: recent articles feed, url: "https://www.bmj.com/rss/recent.xml", type: RSS, connector: rss, tier: B }
1299 + - id: pnas
1300 + name: PNAS
1301 + domain: pnas.org
1302 + categories: [research, science]
1303 + tier: B
1304 + weight: 1.1
1305 + aliases: [proceedings of the national academy of sciences]
1306 + discover: { rss: false }
1307 + sensors:
1308 + - { name: current issue feed, url: "https://www.pnas.org/action/showFeed?type=etoc&feed=rss&jc=pnas", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
1309 + - id: plos
1310 + name: PLOS
1311 + domain: plos.org
1312 + categories: [research, science]
1313 + tier: B
1314 + aliases: [public library of science]
1315 + products:
1316 + - { name: PLOS ONE, type: product, aliases: [plos one] }
1317 + - { name: PLOS Biology, type: product }
1318 + discover: { rss: false }
1319 + sensors:
1320 + - { name: plos one feed, url: "https://journals.plos.org/plosone/feed/atom", type: ATOM, connector: rss, tier: B }
1321 + - { name: plos biology feed, url: "https://journals.plos.org/plosbiology/feed/atom", type: ATOM, connector: rss, tier: C }
1322 + - { name: blog feed, url: "https://theplosblog.plos.org/feed/", type: RSS, connector: rss, tier: C }
1323 + - id: elife
1324 + name: eLife
1325 + domain: elifesciences.org
1326 + categories: [research, science]
1327 + tier: B
1328 + discover: { rss: false }
1329 + sensors:
1330 + - { name: recent articles feed, url: "https://elifesciences.org/rss/recent.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
1331 + - { name: ahead of print feed, url: "https://elifesciences.org/rss/ahead.xml", type: RSS, connector: rss, tier: C }
1332 + - id: frontiers
1333 + name: Frontiers
1334 + domain: frontiersin.org
1335 + categories: [research, science]
1336 + tier: B
1337 + aliases: [frontiers media]
1338 + discover: { rss: false }
1339 + sensors:
1340 + - { name: news feed, url: "https://www.frontiersin.org/news/rss", type: RSS, connector: rss, tier: B }
1341 + - { name: frontiers in ai feed, url: "https://www.frontiersin.org/journals/artificial-intelligence/rss", type: RSS, connector: rss, tier: C }
1342 + - id: elsevier
1343 + name: Elsevier
1344 + domain: elsevier.com
1345 + categories: [research, media]
1346 + tier: B
1347 + weight: 1.1
1348 + products:
1349 + - { name: ScienceDirect, type: service }
1350 + - { name: Scopus, type: service }
1351 + discover: { rss: true, sitemap: false }
1352 + notes: "No RSS on Elsevier Connect / press releases and no sitemap (2026-09); entity only."
1353 + - id: wiley
1354 + name: Wiley
1355 + domain: wiley.com
1356 + categories: [research, media]
1357 + tier: B
1358 + aliases: [john wiley & sons]
1359 + discover: { rss: false, sitemap: false }
1360 + notes: "newsroom.wiley.com answers 403 to feeds (bot management); entity only."
1361 + - id: acm
1362 + name: ACM
1363 + domain: acm.org
1364 + categories: [research, developer, standards]
1365 + tier: B
1366 + aliases: [association for computing machinery]
1367 + products:
1368 + - { name: Turing Award, type: product, aliases: [acm turing award] }
1369 + - { name: Communications of the ACM, type: product, aliases: [cacm] }
1370 + discover: { rss: false, sitemap: false }
1371 + notes: "acm.org, cacm.acm.org and awards.acm.org all answer 403 to feeds (bot management); entity only."
1372 + - id: ieee-spectrum
1373 + name: IEEE Spectrum
1374 + domain: spectrum.ieee.org
1375 + categories: [research, technology, ai, media]
1376 + tier: B
1377 + weight: 1.1
1378 + aliases: [ieee]
1379 + discover: { rss: false }
1380 + sensors:
1381 + - { name: all articles feed, url: "https://spectrum.ieee.org/feeds/feed.rss", type: RSS, connector: rss, tier: B }
1382 + - { name: ai topic feed, url: "https://spectrum.ieee.org/feeds/topic/artificial-intelligence.rss", type: RSS, connector: rss, tier: C }
1383 + - id: biorxiv
1384 + name: bioRxiv
1385 + domain: biorxiv.org
1386 + categories: [research, science, health]
1387 + tier: B
1388 + weight: 1.1
1389 + llm: false
1390 + discover: { rss: false }
1391 + notes: "High-volume preprint stream — heuristics only. Subject feeds: connect.biorxiv.org/biorxiv_xml.php?subject=<slug>."
1392 + sensors:
1393 + - { name: all preprints feed, url: "https://connect.biorxiv.org/biorxiv_xml.php?subject=all", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
1394 + - { name: neuroscience feed, url: "https://connect.biorxiv.org/biorxiv_xml.php?subject=neuroscience", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
1395 + - { name: bioinformatics feed, url: "https://connect.biorxiv.org/biorxiv_xml.php?subject=bioinformatics", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
1396 + - id: medrxiv
1397 + name: medRxiv
1398 + domain: medrxiv.org
1399 + categories: [research, health]
1400 + tier: B
1401 + weight: 1.1
1402 + llm: false
1403 + discover: { rss: false }
1404 + notes: "High-volume preprint stream — heuristics only."
1405 + sensors:
1406 + - { name: all preprints feed, url: "https://connect.medrxiv.org/medrxiv_xml.php?subject=all", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
1407 + - { name: infectious diseases feed, url: "https://connect.medrxiv.org/medrxiv_xml.php?subject=infectious_diseases", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
1408 + - { name: epidemiology feed, url: "https://connect.medrxiv.org/medrxiv_xml.php?subject=epidemiology", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
1409 + - id: chemrxiv
1410 + name: ChemRxiv
1411 + domain: chemrxiv.org
1412 + categories: [research, science]
1413 + tier: C
1414 + discover: { rss: false, sitemap: false }
1415 + notes: "Cambridge Open Engage answers 403 to the RSS and public API (bot management); entity only."
1416 + - id: ssrn
1417 + name: SSRN
1418 + domain: ssrn.com
1419 + categories: [research, finance]
1420 + tier: C
1421 + aliases: [social science research network]
1422 + discover: { rss: false, sitemap: false }
1423 + notes: "ssrn.com and papers.ssrn.com answer 403 (bot management); entity only."
1424 + - id: nber
1425 + name: National Bureau of Economic Research
1426 + domain: nber.org
1427 + categories: [research, finance, statistics]
1428 + tier: B
1429 + weight: 1.2
1430 + aliases: [nber]
1431 + discover: { rss: false }
1432 + sensors:
1433 + - { name: new working papers feed, url: "https://www.nber.org/rss/new.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
1434 + - { name: releases feed, url: "https://www.nber.org/rss/releases.xml", type: RSS, connector: rss, tier: C }
1435 + - id: repec
1436 + name: RePEc
1437 + domain: repec.org
1438 + categories: [research, finance]
1439 + tier: C
1440 + aliases: [research papers in economics, ideas repec]
1441 + discover: { rss: false }
1442 + sensors:
1443 + - { name: blog feed, url: "https://blog.repec.org/feed/", type: RSS, connector: rss, tier: C }
1444 + - id: retraction-watch
1445 + name: Retraction Watch
1446 + domain: retractionwatch.com
1447 + categories: [research, media]
1448 + tier: B
1449 + discover: { rss: false }
1450 + sensors:
1451 + - { name: posts feed, url: "https://retractionwatch.com/feed/", type: RSS, connector: rss, tier: B }
1452 + - id: crossref
1453 + name: Crossref
1454 + domain: crossref.org
1455 + categories: [research, infrastructure, open-data]
1456 + tier: B
1457 + weight: 1.1
1458 + products:
1459 + - { name: Crossref REST API, type: API }
1460 + discover: { rss: false, status: true }
1461 + sensors:
1462 + - { name: status, url: "https://status.crossref.org/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1463 + - { name: blog feed, url: "https://www.crossref.org/blog/index.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
1464 + - id: orcid
1465 + name: ORCID
1466 + domain: orcid.org
1467 + categories: [research, infrastructure]
1468 + tier: B
1469 + discover: { rss: false }
1470 + sensors:
1471 + - { name: news feed, url: "https://info.orcid.org/feed/", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
1472 + - id: doaj
1473 + name: DOAJ
1474 + domain: doaj.org
1475 + categories: [research, open-data]
1476 + tier: C
1477 + aliases: [directory of open access journals]
1478 + discover: { rss: false }
1479 + sensors:
1480 + - { name: new journals feed, url: "https://doaj.org/feed", type: ATOM, connector: rss, tier: C, config: { maxItems: 50 } }
1481 + - { name: blog feed, url: "https://blog.doaj.org/feed/", type: RSS, connector: rss, tier: C }
1482 + - id: zenodo
1483 + name: Zenodo
1484 + domain: zenodo.org
1485 + categories: [research, open-data, infrastructure]
1486 + tier: B
1487 + products:
1488 + - { name: Zenodo REST API, type: API }
1489 + discover: { rss: false, sitemap: false }
1490 + notes: "Candidate sensor: jsonlist on https://zenodo.org/api/records?sort=mostrecent&size=25 (itemsPath hits.hits, keyField id, titleField metadata.title, urlField links.self_html, dateField created, llm: false). The API answered 504 Gateway Time-out on every attempt on 2026-09-08 and blog.zenodo.org has no feed — entity only until the API is healthy."
1491 + - id: center-for-open-science
1492 + name: Center for Open Science
1493 + domain: cos.io
1494 + categories: [research, infrastructure]
1495 + tier: B
1496 + aliases: [cos, osf, open science framework]
1497 + products:
1498 + - { name: OSF, type: service, aliases: [open science framework] }
1499 + discover: { rss: false, status: true }
1500 + sensors:
1501 + - { name: osf status, url: "https://status.cos.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1502 + - { name: blog feed, url: "https://www.cos.io/blog/rss.xml", type: RSS, connector: rss, tier: C }
1503 + - id: figshare
1504 + name: Figshare
1505 + domain: figshare.com
1506 + categories: [research, infrastructure]
1507 + tier: B
1508 + discover: { rss: false, status: true }
1509 + notes: "Blog answers 202 (bot management); the status page is the only sensor."
1510 + sensors:
1511 + - { name: status, url: "https://status.figshare.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1512 + - id: dryad
1513 + name: Dryad
1514 + domain: datadryad.org
1515 + categories: [research, open-data]
1516 + tier: C
1517 + discover: { rss: false }
1518 + sensors:
1519 + - { name: blog feed, url: "https://blog.datadryad.org/feed", type: RSS, connector: rss, tier: C }
1520 + - id: europe-pmc
1521 + name: Europe PMC
1522 + domain: europepmc.org
1523 + categories: [research, health, open-data]
1524 + tier: B
1525 + llm: false
1526 + products:
1527 + - { name: Europe PMC REST API, type: API }
1528 + discover: { rss: false }
1529 + notes: "europepmc.org RSS is 403; the EBI REST search (newest preprints, SRC:PPR) is polled instead — heuristics only."
1530 + sensors:
1531 + - { name: newest preprints api, url: "https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=SRC:PPR&sort=P_PDATE_D%20desc&format=json&pageSize=25", type: REST_API, connector: jsonlist, tier: B, config: { itemsPath: resultList.result, keyField: id, titleField: title, urlTemplate: "https://europepmc.org/article/PPR/{key}", dateField: firstPublicationDate, maxItems: 25 } }
1532 +
1533 + # ───────────────────────── funders & science policy ─────────────────────────
1534 + - id: erc
1535 + name: European Research Council
1536 + domain: erc.europa.eu
1537 + categories: [research, funding, government]
1538 + tier: B
1539 + weight: 1.1
1540 + aliases: [erc]
1541 + discover: { rss: false }
1542 + sensors:
1543 + - { name: news feed, url: "https://erc.europa.eu/rss.xml", type: RSS, connector: rss, tier: B }
1544 + - id: cordis
1545 + name: CORDIS / Horizon Europe
1546 + domain: cordis.europa.eu
1547 + categories: [research, funding, government]
1548 + tier: B
1549 + aliases: [cordis, horizon europe]
1550 + discover: { rss: false, sitemap: false }
1551 + notes: "/rss/en/news returns HTML (feed discontinued); entity only."
1552 + - id: ukri
1553 + name: UK Research and Innovation
1554 + domain: ukri.org
1555 + categories: [research, funding, government]
1556 + tier: B
1557 + weight: 1.1
1558 + aliases: [ukri]
1559 + discover: { rss: false }
1560 + sensors:
1561 + - { name: news feed, url: "https://www.ukri.org/news/feed/", type: RSS, connector: rss, tier: B }
1562 + - id: dfg
1563 + name: Deutsche Forschungsgemeinschaft
1564 + domain: dfg.de
1565 + categories: [research, funding]
1566 + tier: B
1567 + aliases: [dfg, german research foundation]
1568 + discover: { rss: false }
1569 + sensors:
1570 + - { name: press releases feed, url: "https://www.dfg.de/service/rss/en/324778/feed.rss", type: RSS, connector: rss, tier: B }
1571 + - id: anr
1572 + name: Agence nationale de la recherche
1573 + domain: anr.fr
1574 + categories: [research, funding, government]
1575 + tier: B
1576 + aliases: [anr]
1577 + discover: { rss: false }
1578 + notes: "The generic /rss/ is empty; the calls-for-proposals feed (/rss/?aap) is live."
1579 + sensors:
1580 + - { name: appels à projets feed, url: "https://anr.fr/rss/?aap", type: RSS, connector: rss, tier: B }
1581 + - id: nserc
1582 + name: NSERC
1583 + domain: nserc-crsng.gc.ca
1584 + categories: [research, funding, government]
1585 + tier: B
1586 + aliases: [crsng, natural sciences and engineering research council]
1587 + discover: { rss: false, sitemap: false }
1588 + notes: "Classic ASP site without RSS; canada.ca department Atom feed returns the 404 page (2026-09). Entity only."
1589 + - id: sshrc
1590 + name: SSHRC
1591 + domain: sshrc-crsh.canada.ca
1592 + categories: [research, funding, government]
1593 + tier: C
1594 + aliases: [crsh, social sciences and humanities research council]
1595 + discover: { rss: true, sitemap: false }
1596 + notes: "No feed found after the move to sshrc-crsh.canada.ca (2026-09); entity only."
1597 + - id: cihr
1598 + name: CIHR
1599 + domain: cihr-irsc.gc.ca
1600 + categories: [research, funding, health, government]
1601 + tier: C
1602 + aliases: [irsc, canadian institutes of health research]
1603 + discover: { rss: false, sitemap: false }
1604 + notes: "Site links to a canada.ca Atom feed that returns the 404 page (2026-09); entity only."
1605 + - id: frq
1606 + name: Fonds de recherche du Québec
1607 + domain: frq.gouv.qc.ca
1608 + categories: [research, funding, government]
1609 + tier: B
1610 + aliases: [frq, frqnt, frqs, frqsc]
1611 + discover: { rss: false }
1612 + sensors:
1613 + - { name: actualités feed, url: "https://frq.gouv.qc.ca/feed/", type: RSS, connector: rss, tier: B }
1614 + - { name: news feed (en), url: "https://frq.gouv.qc.ca/en/feed/", type: RSS, connector: rss, tier: C }
1615 + - id: genome-canada
1616 + name: Genome Canada
1617 + domain: genomecanada.ca
1618 + categories: [research, funding, health]
1619 + tier: C
1620 + discover: { rss: false }
1621 + sensors:
1622 + - { name: news feed, url: "https://genomecanada.ca/feed/", type: RSS, connector: rss, tier: C }
1623 + - id: cfi
1624 + name: Canada Foundation for Innovation
1625 + domain: innovation.ca
1626 + categories: [research, funding, government]
1627 + tier: C
1628 + aliases: [cfi, fci]
1629 + discover: { rss: false }
1630 + sensors:
1631 + - { name: news feed, url: "https://www.innovation.ca/rss.xml", type: RSS, connector: rss, tier: C }
1632 + - id: gates-foundation
1633 + name: Gates Foundation
1634 + domain: gatesfoundation.org
1635 + categories: [funding, health, ngo]
1636 + tier: B
1637 + weight: 1.1
1638 + aliases: [bill & melinda gates foundation]
1639 + discover: { rss: false, sitemap: false }
1640 + notes: "Media center without RSS; only a 1.1 k-URL corporate sitemap (2026-09). Entity only."
1641 + - id: czi
1642 + name: Chan Zuckerberg Initiative
1643 + domain: chanzuckerberg.com
1644 + categories: [funding, research, health]
1645 + tier: B
1646 + aliases: [czi]
1647 + discover: { rss: false }
1648 + sensors:
1649 + - { name: newsroom feed, url: "https://chanzuckerberg.com/newsroom/feed/", type: RSS, connector: rss, tier: B }
1650 + - id: simons-foundation
1651 + name: Simons Foundation
1652 + domain: simonsfoundation.org
1653 + categories: [funding, research, science]
1654 + tier: B
1655 + discover: { rss: false }
1656 + sensors:
1657 + - { name: news feed, url: "https://www.simonsfoundation.org/feed/", type: RSS, connector: rss, tier: B }
1658 + - id: sloan-foundation
1659 + name: Alfred P. Sloan Foundation
1660 + domain: sloan.org
1661 + categories: [funding, research]
1662 + tier: C
1663 + aliases: [sloan]
1664 + discover: { rss: false, sitemap: false }
1665 + notes: "sloan.org answers 403 to feeds (bot management); entity only."
1666 + - id: templeton-foundation
1667 + name: John Templeton Foundation
1668 + domain: templeton.org
1669 + categories: [funding, research]
1670 + tier: C
1671 + aliases: [templeton]
1672 + discover: { rss: true, sitemap: false }
1673 + notes: "/feed is a valid but empty WordPress channel (2026-09); entity only."
1674 + - id: jst
1675 + name: Japan Science and Technology Agency
1676 + domain: jst.go.jp
1677 + categories: [research, funding, government]
1678 + tier: C
1679 + aliases: [jst]
1680 + discover: { rss: true, sitemap: false }
1681 + notes: "No RSS on the EN site (2026-09); entity only."
1682 + - id: nsfc
1683 + name: National Natural Science Foundation of China
1684 + domain: nsfc.gov.cn
1685 + categories: [research, funding, government]
1686 + tier: C
1687 + aliases: [nsfc]
1688 + discover: { rss: true, sitemap: false }
1689 + notes: "No feed on the EN site (2026-09); entity only."
1690 + - id: arc-australia
1691 + name: Australian Research Council
1692 + domain: arc.gov.au
1693 + categories: [research, funding, government]
1694 + tier: C
1695 + aliases: [arc]
1696 + discover: { rss: false, sitemap: false }
1697 + notes: "arc.gov.au drops connections from our network (geo/bot filtering, 2026-09); entity only."
1698 + - id: royal-society
1699 + name: Royal Society
1700 + domain: royalsociety.org
1701 + categories: [research, science]
1702 + tier: B
1703 + weight: 1.1
1704 + discover: { rss: false, sitemap: false }
1705 + notes: "royalsociety.org and royalsocietypublishing.org answer 403 to feeds and sitemap (bot management); entity only."
1706 + - id: national-academies
1707 + name: National Academies of Sciences, Engineering, and Medicine
1708 + domain: nationalacademies.org
1709 + categories: [research, science, government]
1710 + tier: B
1711 + weight: 1.1
1712 + aliases: [nasem, national academies press]
1713 + discover: { rss: false }
1714 + notes: "The news hub has no RSS; the National Academies Press new-titles Atom feed is the sensor."
1715 + sensors:
1716 + - { name: nap new titles feed, url: "https://nap.nationalacademies.org/rss/new.xml", type: ATOM, connector: rss, tier: B, config: { maxItems: 50 } }
1717 + - id: aaas
1718 + name: AAAS
1719 + domain: aaas.org
1720 + categories: [research, science]
1721 + tier: B
1722 + aliases: [american association for the advancement of science, eurekalert]
1723 + discover: { rss: true, sitemap: false }
1724 + notes: "aaas.org news has no RSS and EurekAlert! removed its RSS feeds (2026-09); Science journal is the separate `science` source. Entity only."
1725 + - id: nobel-prize
1726 + name: Nobel Prize
1727 + domain: nobelprize.org
1728 + categories: [research, science]
1729 + tier: B
1730 + weight: 1.2
1731 + aliases: [nobel, nobel foundation]
1732 + discover: { rss: false }
1733 + sensors:
1734 + - { name: news feed, url: "https://www.nobelprize.org/feed/", type: RSS, connector: rss, tier: B }
1735 + - id: breakthrough-prize
1736 + name: Breakthrough Prize
1737 + domain: breakthroughprize.org
1738 + categories: [research, science]
1739 + tier: C
1740 + discover: { rss: true, sitemap: false }
1741 + notes: "No RSS on /News (2026-09); entity only."
1742 + - id: imu
1743 + name: International Mathematical Union
1744 + domain: mathunion.org
1745 + categories: [research, science]
1746 + tier: C
1747 + aliases: [fields medal]
1748 + products:
1749 + - { name: Fields Medal, type: product }
1750 + discover: { rss: true, sitemap: false }
1751 + notes: "No RSS on imu-news (2026-09); entity only."
1752 + - id: kavli-foundation
1753 + name: Kavli Foundation
1754 + domain: kavlifoundation.org
1755 + categories: [funding, science]
1756 + tier: C
1757 + aliases: [kavli prize]
1758 + discover: { rss: true, sitemap: false }
1759 + notes: "No RSS on kavlifoundation.org or kavliprize.org (2026-09); entity only."
1760 + - id: wolf-foundation
1761 + name: Wolf Foundation
1762 + domain: wolffund.org.il
1763 + categories: [research, science]
1764 + tier: C
1765 + aliases: [wolf prize]
1766 + discover: { rss: false }
1767 + sensors:
1768 + - { name: news feed, url: "https://wolffund.org.il/feed/", type: RSS, connector: rss, tier: C }
added config/sources.d/17-international-orgs-ngos-standards.yaml +2072 −0
@@ -0,0 +1,2072 @@
1 +# config/sources.d/17-international-orgs-ngos-standards.yaml — UN system & intergovernmental bodies, development
2 +# banks, humanitarian / rights / environment NGOs and foundations, standards bodies, cyber consortia, think tanks,
3 +# polling and AI-policy institutes, investigative-journalism networks. Written 2026-09-08; every sensor below was
4 +# fetched and parsed by apps/engine/src/validate.ts (OK only). Blocked or feed-less organizations are listed with
5 +# `discover:` flags only and the reason in `notes:`.
6 +sources:
7 + # ───────────────────────── UN system & intergovernmental ─────────────────────────
8 + - id: united-nations
9 + extend: true
10 + aliases: [un press, un security council, security council]
11 + sensors:
12 + - { name: un press releases, url: "https://press.un.org/en/rss.xml", type: RSS, connector: rss, tier: A }
13 + - id: unesco
14 + name: UNESCO
15 + domain: unesco.org
16 + homepage: https://www.unesco.org
17 + categories: [international, education]
18 + tier: B
19 + weight: 1.2
20 + aliases: [unesco, united nations educational scientific and cultural organization]
21 + discover: { rss: true, sitemap: true, pages: true }
22 + notes: "No feed or sitemap exposed (all /rss, /sitemap paths return the 404 shell); news listing is client-rendered."
23 + - id: unicef
24 + name: UNICEF
25 + domain: unicef.org
26 + homepage: https://www.unicef.org
27 + categories: [international, ngo, health]
28 + tier: A
29 + weight: 1.3
30 + aliases: [unicef, united nations children's fund]
31 + discover: { rss: true, sitemap: true }
32 + sensors:
33 + - { name: news feed, url: "https://www.unicef.org/news/rss", type: RSS, connector: rss, tier: A }
34 + - id: unhcr
35 + name: UNHCR — UN Refugee Agency
36 + domain: unhcr.org
37 + homepage: https://www.unhcr.org
38 + categories: [international, ngo]
39 + tier: B
40 + weight: 1.2
41 + aliases: [unhcr, un refugee agency]
42 + discover: { rss: true, sitemap: true }
43 + sensors:
44 + - { name: sitemap, url: "https://www.unhcr.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000, maxChildren: 6 } }
45 + - id: wfp
46 + name: World Food Programme
47 + domain: wfp.org
48 + homepage: https://www.wfp.org
49 + categories: [international, ngo, food]
50 + tier: B
51 + weight: 1.2
52 + aliases: [wfp, world food programme]
53 + discover: { rss: true, sitemap: true }
54 + sensors:
55 + - { name: sitemap, url: "https://www.wfp.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000, maxChildren: 6 } }
56 + - id: ilo
57 + name: International Labour Organization
58 + domain: ilo.org
59 + homepage: https://www.ilo.org
60 + categories: [international, labour]
61 + tier: B
62 + weight: 1.1
63 + aliases: [ilo, international labour organization]
64 + discover: { rss: true, sitemap: true, pages: true }
65 + sensors:
66 + - { name: newsroom, url: "https://www.ilo.org/resource/news", type: HTML, connector: http, tier: B }
67 + - { name: sitemap, url: "https://www.ilo.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000, maxChildren: 4 } }
68 + - id: wipo
69 + name: World Intellectual Property Organization
70 + domain: wipo.int
71 + homepage: https://www.wipo.int
72 + categories: [international, legal]
73 + tier: B
74 + weight: 1.1
75 + aliases: [wipo, ompi]
76 + products:
77 + - { name: PATENTSCOPE, type: service, aliases: [patentscope] }
78 + discover: { rss: true, sitemap: true }
79 + sensors:
80 + - { name: press releases, url: "https://www.wipo.int/pressroom/en/rss.xml", type: RSS, connector: rss, tier: B }
81 + - { name: sitemap, url: "https://www.wipo.int/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
82 + - id: wto
83 + name: World Trade Organization
84 + domain: wto.org
85 + homepage: https://www.wto.org
86 + categories: [international, commerce]
87 + tier: A
88 + weight: 1.3
89 + aliases: [wto, omc]
90 + discover: { rss: true }
91 + sensors:
92 + - { name: latest news, url: "https://www.wto.org/library/rss/latest_news_e.xml", type: RSS, connector: rss, tier: A }
93 + - id: iaea
94 + name: International Atomic Energy Agency
95 + domain: iaea.org
96 + homepage: https://www.iaea.org
97 + categories: [international, energy, science]
98 + tier: A
99 + weight: 1.3
100 + aliases: [iaea, aiea]
101 + discover: { rss: true }
102 + sensors:
103 + - { name: top news, url: "https://www.iaea.org/feeds/topnews", type: RSS, connector: rss, tier: A }
104 + - id: itu
105 + name: International Telecommunication Union
106 + domain: itu.int
107 + homepage: https://www.itu.int
108 + categories: [international, telecom, standards]
109 + tier: B
110 + weight: 1.2
111 + aliases: [itu, itu-t, itu-r, uit]
112 + discover: { rss: true, pages: true }
113 + notes: "https://www.itu.int/hub/feed/ is a valid ITU News RSS (curl, HTTP/1.1) but Node connections to itu.int time out (ETIMEDOUT) and the media-centre page answers a 124-char interstitial; validated OK once then failed twice — re-add when stable."
114 + - id: wmo
115 + name: World Meteorological Organization
116 + domain: wmo.int
117 + categories: [international, weather, climate]
118 + tier: B
119 + weight: 1.1
120 + aliases: [wmo, omm]
121 + discover: { rss: true, sitemap: true, pages: true }
122 + sensors:
123 + - { name: news, url: "https://wmo.int/news", type: HTML, connector: http, tier: B }
124 + - { name: sitemap, url: "https://wmo.int/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000, maxChildren: 6 } }
125 + - id: unep
126 + name: UN Environment Programme
127 + domain: unep.org
128 + homepage: https://www.unep.org
129 + categories: [international, climate]
130 + tier: B
131 + weight: 1.2
132 + aliases: [unep, pnue]
133 + discover: { rss: true }
134 + sensors:
135 + - { name: news feed, url: "https://www.unep.org/rss.xml", type: RSS, connector: rss, tier: B }
136 + - id: undp
137 + name: UN Development Programme
138 + domain: undp.org
139 + homepage: https://www.undp.org
140 + categories: [international]
141 + tier: B
142 + weight: 1.1
143 + aliases: [undp, pnud]
144 + discover: { rss: true, sitemap: true, pages: true }
145 + sensors:
146 + - { name: news centre, url: "https://www.undp.org/news-centre", type: HTML, connector: http, tier: B }
147 + - { name: sitemap, url: "https://www.undp.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 6 } }
148 + - id: unodc
149 + name: UN Office on Drugs and Crime
150 + domain: unodc.org
151 + homepage: https://www.unodc.org
152 + categories: [international, legal]
153 + tier: B
154 + aliases: [unodc, onudc]
155 + discover: { rss: true, sitemap: true, pages: true }
156 + sensors:
157 + - { name: press releases, url: "https://www.unodc.org/unodc/en/press/allpress.html", type: HTML, connector: http, tier: B }
158 + - id: unctad
159 + name: UN Trade and Development (UNCTAD)
160 + domain: unctad.org
161 + categories: [international, commerce]
162 + tier: B
163 + aliases: [unctad, cnuced]
164 + discover: { rss: true, sitemap: true }
165 + notes: "Feed and sitemap answer 403 (bot management) to non-browser clients; nothing validated."
166 + - id: un-women
167 + name: UN Women
168 + domain: unwomen.org
169 + homepage: https://www.unwomen.org
170 + categories: [international]
171 + tier: B
172 + aliases: [un women, onu femmes]
173 + discover: { rss: true }
174 + sensors:
175 + - { name: news feed, url: "https://www.unwomen.org/en/rss.xml", type: RSS, connector: rss, tier: B }
176 + - id: iom
177 + name: International Organization for Migration
178 + domain: iom.int
179 + homepage: https://www.iom.int
180 + categories: [international]
181 + tier: B
182 + weight: 1.1
183 + aliases: [iom, oim, un migration]
184 + discover: { rss: true, sitemap: true, pages: true }
185 + sensors:
186 + - { name: news, url: "https://www.iom.int/news", type: HTML, connector: http, tier: B }
187 + - { name: sitemap, url: "https://www.iom.int/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 6 } }
188 + - id: ohchr
189 + name: UN Human Rights (OHCHR)
190 + domain: ohchr.org
191 + homepage: https://www.ohchr.org
192 + categories: [international, ngo]
193 + tier: B
194 + weight: 1.1
195 + aliases: [ohchr, un human rights office, hcdh]
196 + discover: { rss: true, sitemap: true }
197 + notes: "Feed, press-release listing and sitemap return 403 to non-browser clients; nothing validated."
198 + - id: fao
199 + name: Food and Agriculture Organization
200 + domain: fao.org
201 + homepage: https://www.fao.org
202 + categories: [international, food, agriculture]
203 + tier: B
204 + weight: 1.2
205 + aliases: [fao]
206 + discover: { rss: true, sitemap: true, pages: true }
207 + sensors:
208 + - { name: newsroom, url: "https://www.fao.org/newsroom/en", type: HTML, connector: http, tier: B }
209 + - { name: newsroom sitemap, url: "https://www.fao.org/newsroom/sitemap/sitemap.gz", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
210 + - id: upu
211 + name: Universal Postal Union
212 + domain: upu.int
213 + homepage: https://www.upu.int
214 + categories: [international, logistics]
215 + tier: C
216 + aliases: [upu]
217 + discover: { rss: true, sitemap: true }
218 + sensors:
219 + - { name: sitemap, url: "https://upu.int/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
220 + - id: african-union
221 + name: African Union
222 + domain: au.int
223 + homepage: https://au.int
224 + categories: [international, politics]
225 + tier: B
226 + weight: 1.1
227 + aliases: [african union, au, union africaine]
228 + discover: { rss: true }
229 + sensors:
230 + - { name: news feed, url: "https://au.int/en/rss.xml", type: RSS, connector: rss, tier: B }
231 + - id: asean
232 + name: ASEAN
233 + domain: asean.org
234 + categories: [international, politics]
235 + tier: B
236 + weight: 1.1
237 + aliases: [asean, association of southeast asian nations]
238 + discover: { rss: true }
239 + sensors:
240 + - { name: news feed, url: "https://asean.org/feed/", type: RSS, connector: rss, tier: B }
241 + - id: council-of-europe
242 + name: Council of Europe
243 + domain: coe.int
244 + homepage: https://www.coe.int
245 + categories: [international, legal]
246 + tier: B
247 + aliases: [council of europe, conseil de l'europe, coe]
248 + discover: { rss: true, sitemap: true }
249 + notes: "Liferay portal behind bot management: /-/rss, newsroom and rm.coe.int all answer 403; nothing validated."
250 + - id: osce
251 + name: OSCE
252 + domain: osce.org
253 + homepage: https://www.osce.org
254 + categories: [international, politics]
255 + tier: B
256 + aliases: [osce, organization for security and co-operation in europe]
257 + discover: { rss: true, sitemap: true }
258 + notes: "No sitemap; ?format=rss on press releases returns an HTML page; nothing validated."
259 + - id: oas
260 + name: Organization of American States
261 + domain: oas.org
262 + homepage: https://www.oas.org
263 + categories: [international, politics]
264 + tier: B
265 + aliases: [oas, oea, organization of american states]
266 + discover: { rss: true, sitemap: true, pages: true }
267 + sensors:
268 + - { name: press releases, url: "https://www.oas.org/en/media_center/press_releases.asp", type: HTML, connector: http, tier: B }
269 + - id: commonwealth
270 + name: The Commonwealth
271 + domain: thecommonwealth.org
272 + categories: [international, politics]
273 + tier: C
274 + aliases: [commonwealth, commonwealth secretariat]
275 + discover: { rss: true, sitemap: true }
276 + notes: "Every URL answers 202 with an empty body (bot interstitial); nothing validated."
277 + - id: arab-league
278 + name: League of Arab States
279 + domain: lasportal.org
280 + homepage: http://www.lasportal.org
281 + categories: [international, politics]
282 + tier: C
283 + aliases: [arab league, league of arab states]
284 + discover: { rss: true, sitemap: true }
285 + notes: "Arabic-only SharePoint portal, /ar/rss returns HTML; nothing validated."
286 + - id: pacific-islands-forum
287 + name: Pacific Islands Forum
288 + domain: forumsec.org
289 + categories: [international, politics]
290 + tier: C
291 + aliases: [pacific islands forum, pif, forum secretariat]
292 + discover: { rss: true }
293 + sensors:
294 + - { name: news feed, url: "https://forumsec.org/rss.xml", type: RSS, connector: rss, tier: C }
295 + - id: mercosur
296 + name: Mercosur
297 + domain: mercosur.int
298 + homepage: https://www.mercosur.int
299 + categories: [international, commerce]
300 + tier: C
301 + aliases: [mercosur, mercosul]
302 + discover: { rss: true, sitemap: true }
303 + notes: "WordPress feed answers 403 to non-browser clients; nothing validated."
304 + - id: francophonie
305 + name: Organisation internationale de la Francophonie
306 + domain: francophonie.org
307 + homepage: https://www.francophonie.org
308 + categories: [international, politics]
309 + tier: B
310 + aliases: [oif, francophonie, organisation internationale de la francophonie]
311 + discover: { rss: true, sitemap: true }
312 + sensors:
313 + - { name: actualités feed, url: "https://www.francophonie.org/rss.xml", type: RSS, connector: rss, tier: B }
314 + - { name: sitemap, url: "https://www.francophonie.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
315 + - id: interpol
316 + name: INTERPOL
317 + domain: interpol.int
318 + homepage: https://www.interpol.int
319 + categories: [international, cyber, legal]
320 + tier: B
321 + weight: 1.2
322 + aliases: [interpol]
323 + discover: { rss: true, sitemap: true, pages: true }
324 + sensors:
325 + - { name: news, url: "https://www.interpol.int/en/News-and-Events/News", type: HTML, connector: http, tier: B }
326 + - { name: sitemap, url: "https://www.interpol.int/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
327 + - id: europol
328 + name: Europol
329 + domain: europol.europa.eu
330 + homepage: https://www.europol.europa.eu
331 + categories: [international, cyber, legal]
332 + tier: B
333 + weight: 1.2
334 + aliases: [europol, ec3]
335 + discover: { rss: true }
336 + sensors:
337 + - { name: news feed, url: "https://www.europol.europa.eu/cms/api/rss/news", type: RSS, connector: rss, tier: B }
338 + - id: enisa
339 + name: ENISA — EU Agency for Cybersecurity
340 + domain: enisa.europa.eu
341 + homepage: https://www.enisa.europa.eu
342 + categories: [international, cyber]
343 + tier: B
344 + weight: 1.2
345 + aliases: [enisa]
346 + discover: { rss: true, sitemap: true, pages: true }
347 + sensors:
348 + - { name: news, url: "https://www.enisa.europa.eu/news", type: HTML, connector: http, tier: B }
349 + - { name: sitemap, url: "https://www.enisa.europa.eu/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
350 + - id: eurojust
351 + name: Eurojust
352 + domain: eurojust.europa.eu
353 + homepage: https://www.eurojust.europa.eu
354 + categories: [international, legal]
355 + tier: C
356 + aliases: [eurojust]
357 + discover: { rss: true, sitemap: true }
358 + sensors:
359 + - { name: sitemap, url: "https://www.eurojust.europa.eu/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
360 + - id: frontex
361 + name: Frontex
362 + domain: frontex.europa.eu
363 + homepage: https://www.frontex.europa.eu
364 + categories: [international]
365 + tier: B
366 + aliases: [frontex, european border and coast guard agency]
367 + discover: { rss: true, sitemap: true }
368 + sensors:
369 + - { name: news releases feed, url: "https://www.frontex.europa.eu/media-centre/news/news-release/feed", type: ATOM, connector: rss, tier: B }
370 + - id: edpb
371 + name: European Data Protection Board
372 + domain: edpb.europa.eu
373 + homepage: https://www.edpb.europa.eu
374 + categories: [international, legal, web-policy]
375 + tier: B
376 + weight: 1.2
377 + aliases: [edpb, european data protection board, gdpr]
378 + discover: { rss: true }
379 + sensors:
380 + - { name: news feed, url: "https://www.edpb.europa.eu/feed/news_en", type: RSS, connector: rss, tier: B }
381 + - id: world-economic-forum
382 + name: World Economic Forum
383 + domain: weforum.org
384 + homepage: https://www.weforum.org
385 + categories: [international, finance]
386 + tier: B
387 + weight: 1.1
388 + aliases: [wef, world economic forum, davos]
389 + discover: { rss: true, sitemap: true }
390 + notes: "All feed paths (/rss, /feeds/agenda.rss, /stories/feed/) answer 403 (Akamai); nothing validated."
391 + - id: adb
392 + name: Asian Development Bank
393 + domain: adb.org
394 + homepage: https://www.adb.org
395 + categories: [international, finance]
396 + tier: B
397 + weight: 1.1
398 + aliases: [adb, asian development bank]
399 + discover: { rss: true, sitemap: true }
400 + sensors:
401 + - { name: news feed, url: "https://feeds.feedburner.com/adb_news", type: RSS, connector: rss, tier: B }
402 + - { name: sitemap, url: "https://www.adb.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
403 + - id: aiib
404 + name: Asian Infrastructure Investment Bank
405 + domain: aiib.org
406 + homepage: https://www.aiib.org
407 + categories: [international, finance]
408 + tier: C
409 + aliases: [aiib]
410 + discover: { rss: true, sitemap: true }
411 + sensors:
412 + - { name: sitemap, url: "https://www.aiib.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
413 + - id: afdb
414 + name: African Development Bank
415 + domain: afdb.org
416 + homepage: https://www.afdb.org
417 + categories: [international, finance]
418 + tier: C
419 + aliases: [afdb, african development bank, bad]
420 + discover: { rss: true, sitemap: true }
421 + notes: "rss.xml answers 403 to non-browser clients; only the homepage is reachable; nothing validated."
422 + - id: idb
423 + name: Inter-American Development Bank
424 + domain: iadb.org
425 + homepage: https://www.iadb.org
426 + categories: [international, finance]
427 + tier: C
428 + aliases: [idb, iadb, inter-american development bank, bid]
429 + discover: { rss: true, sitemap: true }
430 + notes: "Site answers 403 to non-browser clients; nothing validated."
431 + - id: ebrd
432 + name: European Bank for Reconstruction and Development
433 + domain: ebrd.com
434 + homepage: https://www.ebrd.com
435 + categories: [international, finance]
436 + tier: B
437 + aliases: [ebrd, berd]
438 + discover: { rss: true, sitemap: true, pages: true }
439 + sensors:
440 + - { name: news and events, url: "https://www.ebrd.com/home/news-and-events.html", type: HTML, connector: http, tier: B }
441 + - { name: sitemap, url: "https://www.ebrd.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
442 + - id: eib
443 + name: European Investment Bank
444 + domain: eib.org
445 + homepage: https://www.eib.org
446 + categories: [international, finance]
447 + tier: B
448 + weight: 1.1
449 + aliases: [eib, bei, european investment bank]
450 + discover: { rss: true, sitemap: true, pages: true }
451 + sensors:
452 + - { name: press releases, url: "https://www.eib.org/en/press/index.htm", type: HTML, connector: http, tier: B }
453 + - { name: sitemap en, url: "https://www.eib.org/sitemaps-en.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
454 + - id: ifc
455 + name: International Finance Corporation
456 + domain: ifc.org
457 + homepage: https://www.ifc.org
458 + categories: [international, finance]
459 + tier: B
460 + aliases: [ifc, international finance corporation]
461 + discover: { rss: true, sitemap: true, pages: true }
462 + sensors:
463 + - { name: news, url: "https://www.ifc.org/en/news", type: HTML, connector: http, tier: B }
464 + - { name: sitemap, url: "https://www.ifc.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
465 + - id: miga
466 + name: Multilateral Investment Guarantee Agency
467 + domain: miga.org
468 + homepage: https://www.miga.org
469 + categories: [international, finance]
470 + tier: C
471 + aliases: [miga]
472 + discover: { rss: true }
473 + sensors:
474 + - { name: news feed, url: "https://www.miga.org/rss.xml", type: RSS, connector: rss, tier: C }
475 + - id: opec-fund
476 + name: OPEC Fund for International Development
477 + domain: opecfund.org
478 + categories: [international, finance, energy]
479 + tier: C
480 + aliases: [opec fund, ofid]
481 + discover: { rss: true, sitemap: true }
482 + sensors:
483 + - { name: sitemap, url: "https://opecfund.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
484 + - id: green-climate-fund
485 + name: Green Climate Fund
486 + domain: greenclimate.fund
487 + homepage: https://www.greenclimate.fund
488 + categories: [international, climate, finance]
489 + tier: C
490 + aliases: [gcf, green climate fund]
491 + discover: { rss: true, sitemap: true, pages: true }
492 + sensors:
493 + - { name: news and updates, url: "https://www.greenclimate.fund/about/news-and-updates", type: HTML, connector: http, tier: C }
494 + - { name: sitemap, url: "https://www.greenclimate.fund/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
495 + - id: gef
496 + name: Global Environment Facility
497 + domain: thegef.org
498 + homepage: https://www.thegef.org
499 + categories: [international, climate, finance]
500 + tier: C
501 + aliases: [gef, global environment facility]
502 + discover: { rss: true }
503 + sensors:
504 + - { name: news feed, url: "https://www.thegef.org/rss.xml", type: RSS, connector: rss, tier: C }
505 +
506 + # ───────────────────────── Humanitarian & rights NGOs ─────────────────────────
507 + - id: icrc
508 + name: International Committee of the Red Cross
509 + domain: icrc.org
510 + homepage: https://www.icrc.org
511 + categories: [ngo, international]
512 + tier: A
513 + weight: 1.3
514 + aliases: [icrc, cicr, red cross]
515 + discover: { rss: true, sitemap: true }
516 + sensors:
517 + - { name: news releases, url: "https://www.icrc.org/en/rss/news", type: RSS, connector: rss, tier: A }
518 + - { name: all content feed, url: "https://www.icrc.org/en/rss/general", type: RSS, connector: rss, tier: B, config: { maxItems: 100 } }
519 + - id: ifrc
520 + name: International Federation of Red Cross and Red Crescent Societies
521 + domain: ifrc.org
522 + homepage: https://www.ifrc.org
523 + categories: [ngo, international]
524 + tier: B
525 + weight: 1.1
526 + aliases: [ifrc, red crescent]
527 + discover: { rss: true, sitemap: true }
528 + sensors:
529 + - { name: news feed, url: "https://www.ifrc.org/rss.xml", type: RSS, connector: rss, tier: B }
530 + - id: msf
531 + name: Médecins Sans Frontières
532 + domain: msf.org
533 + homepage: https://www.msf.org
534 + categories: [ngo, health]
535 + tier: A
536 + weight: 1.3
537 + aliases: [msf, doctors without borders, medecins sans frontieres]
538 + discover: { rss: true }
539 + sensors:
540 + - { name: news feed, url: "https://www.msf.org/rss/all", type: RSS, connector: rss, tier: A }
541 + - { name: msf usa feed, url: "https://www.doctorswithoutborders.org/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 100 } }
542 + - id: oxfam
543 + name: Oxfam International
544 + domain: oxfam.org
545 + homepage: https://www.oxfam.org
546 + categories: [ngo]
547 + tier: B
548 + weight: 1.1
549 + aliases: [oxfam]
550 + discover: { rss: true, sitemap: true }
551 + sensors:
552 + - { name: news feed, url: "https://www.oxfam.org/en/rss.xml", type: RSS, connector: rss, tier: B }
553 + - id: save-the-children
554 + name: Save the Children International
555 + domain: savethechildren.net
556 + homepage: https://www.savethechildren.net
557 + categories: [ngo]
558 + tier: B
559 + weight: 1.1
560 + aliases: [save the children]
561 + discover: { rss: true, sitemap: true, pages: true }
562 + sensors:
563 + - { name: news, url: "https://www.savethechildren.net/news", type: HTML, connector: http, tier: B }
564 + - { name: sitemap, url: "https://www.savethechildren.net/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
565 + - id: care
566 + name: CARE
567 + domain: care.org
568 + homepage: https://www.care.org
569 + categories: [ngo]
570 + tier: B
571 + aliases: [care, care international, care usa]
572 + discover: { rss: true }
573 + sensors:
574 + - { name: news feed, url: "https://www.care.org/feed/", type: RSS, connector: rss, tier: B }
575 + - id: amnesty-international
576 + name: Amnesty International
577 + domain: amnesty.org
578 + homepage: https://www.amnesty.org
579 + categories: [ngo, politics]
580 + tier: A
581 + weight: 1.3
582 + aliases: [amnesty, amnesty international, amnistie internationale]
583 + discover: { rss: true }
584 + sensors:
585 + - { name: news feed, url: "https://www.amnesty.org/en/latest/news/feed/", type: RSS, connector: rss, tier: A }
586 + - id: human-rights-watch
587 + name: Human Rights Watch
588 + domain: hrw.org
589 + homepage: https://www.hrw.org
590 + categories: [ngo, politics]
591 + tier: A
592 + weight: 1.3
593 + aliases: [hrw, human rights watch]
594 + discover: { rss: true }
595 + sensors:
596 + - { name: news feed, url: "https://www.hrw.org/rss/news", type: RSS, connector: rss, tier: A }
597 + - id: rsf
598 + name: Reporters Without Borders
599 + domain: rsf.org
600 + categories: [ngo, media]
601 + tier: B
602 + weight: 1.1
603 + aliases: [rsf, reporters sans frontieres, reporters without borders]
604 + discover: { rss: true, sitemap: true, pages: true }
605 + sensors:
606 + - { name: publications, url: "https://rsf.org/en/news", type: HTML, connector: http, tier: B }
607 + - { name: sitemap, url: "https://rsf.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
608 + - id: cpj
609 + name: Committee to Protect Journalists
610 + domain: cpj.org
611 + categories: [ngo, media]
612 + tier: B
613 + weight: 1.1
614 + aliases: [cpj]
615 + discover: { rss: true }
616 + sensors:
617 + - { name: news feed, url: "https://cpj.org/feed/", type: RSS, connector: rss, tier: B }
618 + - id: transparency-international
619 + name: Transparency International
620 + domain: transparency.org
621 + homepage: https://www.transparency.org
622 + categories: [ngo, politics]
623 + tier: B
624 + weight: 1.1
625 + aliases: [transparency international, ti, corruption perceptions index]
626 + products:
627 + - { name: Corruption Perceptions Index, type: index, aliases: [cpi] }
628 + discover: { rss: true, sitemap: true, pages: true }
629 + sensors:
630 + - { name: press, url: "https://www.transparency.org/en/press", type: HTML, connector: http, tier: B }
631 + - { name: sitemap, url: "https://www.transparency.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
632 + - id: freedom-house
633 + name: Freedom House
634 + domain: freedomhouse.org
635 + categories: [ngo, politics, research]
636 + tier: B
637 + weight: 1.1
638 + aliases: [freedom house]
639 + products:
640 + - { name: Freedom in the World, type: index }
641 + - { name: Freedom on the Net, type: index }
642 + discover: { rss: true, sitemap: true }
643 + sensors:
644 + - { name: news feed, url: "https://freedomhouse.org/rss.xml", type: RSS, connector: rss, tier: B }
645 + - id: aclu
646 + name: American Civil Liberties Union
647 + domain: aclu.org
648 + homepage: https://www.aclu.org
649 + categories: [ngo, legal, politics]
650 + tier: B
651 + weight: 1.1
652 + aliases: [aclu]
653 + discover: { rss: true }
654 + sensors:
655 + - { name: news feed, url: "https://www.aclu.org/news/feed", type: RSS, connector: rss, tier: B }
656 + - id: eff
657 + name: Electronic Frontier Foundation
658 + domain: eff.org
659 + homepage: https://www.eff.org
660 + categories: [ngo, cyber, web-policy]
661 + tier: B
662 + weight: 1.2
663 + aliases: [eff, electronic frontier foundation]
664 + discover: { rss: true }
665 + sensors:
666 + - { name: updates feed, url: "https://www.eff.org/rss/updates.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 100 } }
667 + - id: access-now
668 + name: Access Now
669 + domain: accessnow.org
670 + homepage: https://www.accessnow.org
671 + categories: [ngo, cyber, web-policy]
672 + tier: B
673 + aliases: [access now, keepiton]
674 + discover: { rss: true }
675 + sensors:
676 + - { name: news feed, url: "https://www.accessnow.org/feed/", type: RSS, connector: rss, tier: B }
677 + - id: article-19
678 + name: ARTICLE 19
679 + domain: article19.org
680 + homepage: https://www.article19.org
681 + categories: [ngo, media, web-policy]
682 + tier: C
683 + aliases: [article 19]
684 + discover: { rss: true }
685 + sensors:
686 + - { name: news feed, url: "https://www.article19.org/feed/", type: RSS, connector: rss, tier: C }
687 + - id: open-society-foundations
688 + name: Open Society Foundations
689 + domain: opensocietyfoundations.org
690 + homepage: https://www.opensocietyfoundations.org
691 + categories: [ngo, politics]
692 + tier: C
693 + aliases: [open society, osf, open society foundations]
694 + discover: { rss: true, pages: true }
695 + sensors:
696 + - { name: newsroom, url: "https://www.opensocietyfoundations.org/newsroom", type: HTML, connector: http, tier: C }
697 + - id: human-rights-first
698 + name: Human Rights First
699 + domain: humanrightsfirst.org
700 + categories: [ngo, politics]
701 + tier: C
702 + aliases: [human rights first]
703 + discover: { rss: true, sitemap: true }
704 + sensors:
705 + - { name: sitemap, url: "https://www.humanrightsfirst.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
706 + - id: doctors-of-the-world
707 + name: Doctors of the World / Médecins du Monde
708 + domain: medecinsdumonde.org
709 + homepage: https://www.medecinsdumonde.org
710 + categories: [ngo, health]
711 + tier: C
712 + aliases: [medecins du monde, doctors of the world, mdm]
713 + discover: { rss: true }
714 + sensors:
715 + - { name: doctors of the world uk feed, url: "https://www.doctorsoftheworld.org.uk/feed/", type: RSS, connector: rss, tier: C }
716 + - id: international-rescue-committee
717 + name: International Rescue Committee
718 + domain: rescue.org
719 + homepage: https://www.rescue.org
720 + categories: [ngo]
721 + tier: B
722 + aliases: [irc, international rescue committee]
723 + discover: { rss: true, sitemap: true, pages: true }
724 + sensors:
725 + - { name: latest, url: "https://www.rescue.org/latest", type: HTML, connector: http, tier: B }
726 + - { name: sitemap, url: "https://www.rescue.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
727 + - id: norwegian-refugee-council
728 + name: Norwegian Refugee Council
729 + domain: nrc.no
730 + homepage: https://www.nrc.no
731 + categories: [ngo]
732 + tier: C
733 + aliases: [nrc, norwegian refugee council, flyktninghjelpen]
734 + discover: { rss: true, sitemap: true }
735 + sensors:
736 + - { name: sitemap, url: "https://www.nrc.no/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
737 + - id: mercy-corps
738 + name: Mercy Corps
739 + domain: mercycorps.org
740 + homepage: https://www.mercycorps.org
741 + categories: [ngo]
742 + tier: C
743 + aliases: [mercy corps]
744 + discover: { rss: true }
745 + sensors:
746 + - { name: news feed, url: "https://www.mercycorps.org/rss.xml", type: RSS, connector: rss, tier: C }
747 + - id: world-vision
748 + name: World Vision
749 + domain: wvi.org
750 + homepage: https://www.wvi.org
751 + categories: [ngo]
752 + tier: C
753 + aliases: [world vision, world vision international]
754 + discover: { rss: true }
755 + sensors:
756 + - { name: world vision us feed, url: "https://www.worldvision.org/feed", type: RSS, connector: rss, tier: C }
757 + - id: plan-international
758 + name: Plan International
759 + domain: plan-international.org
760 + categories: [ngo]
761 + tier: C
762 + aliases: [plan international]
763 + discover: { rss: true, sitemap: true }
764 + sensors:
765 + - { name: news sitemap, url: "https://plan-international.org/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
766 + - id: direct-relief
767 + name: Direct Relief
768 + domain: directrelief.org
769 + homepage: https://www.directrelief.org
770 + categories: [ngo, health]
771 + tier: C
772 + aliases: [direct relief]
773 + discover: { rss: true }
774 + sensors:
775 + - { name: news feed, url: "https://www.directrelief.org/feed/", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
776 +
777 + # ───────────────────────── Environment & development NGOs, foundations ─────────────────────────
778 + - id: wwf
779 + name: WWF
780 + domain: worldwildlife.org
781 + homepage: https://www.worldwildlife.org
782 + categories: [ngo, climate]
783 + tier: B
784 + weight: 1.2
785 + aliases: [wwf, world wildlife fund, world wide fund for nature]
786 + discover: { rss: true, sitemap: true }
787 + notes: "worldwildlife.org and wwf.panda.org both answer 403 (Akamai) to non-browser clients; nothing validated."
788 + - id: greenpeace
789 + name: Greenpeace International
790 + domain: greenpeace.org
791 + homepage: https://www.greenpeace.org/international/
792 + categories: [ngo, climate]
793 + tier: B
794 + weight: 1.2
795 + aliases: [greenpeace]
796 + discover: { rss: true }
797 + sensors:
798 + - { name: news feed, url: "https://www.greenpeace.org/international/feed/", type: RSS, connector: rss, tier: B }
799 + - id: nature-conservancy
800 + name: The Nature Conservancy
801 + domain: nature.org
802 + homepage: https://www.nature.org
803 + categories: [ngo, climate]
804 + tier: C
805 + aliases: [tnc, nature conservancy]
806 + discover: { rss: true, sitemap: true, pages: true }
807 + sensors:
808 + - { name: newsroom, url: "https://www.nature.org/en-us/featured-news/?vu=newsroom", type: HTML, connector: http, tier: C }
809 + - id: conservation-international
810 + name: Conservation International
811 + domain: conservation.org
812 + homepage: https://www.conservation.org
813 + categories: [ngo, climate]
814 + tier: C
815 + aliases: [conservation international]
816 + discover: { rss: true, sitemap: true }
817 + sensors:
818 + - { name: feed, url: "https://www.conservation.org/feed.xml", type: RSS, connector: rss, tier: C, config: { maxItems: 100 } }
819 + - id: wri
820 + name: World Resources Institute
821 + domain: wri.org
822 + homepage: https://www.wri.org
823 + categories: [ngo, climate, research]
824 + tier: B
825 + weight: 1.1
826 + aliases: [wri, world resources institute]
827 + discover: { rss: true, sitemap: true, pages: true }
828 + sensors:
829 + - { name: news, url: "https://www.wri.org/news", type: HTML, connector: http, tier: B }
830 + - { name: insights feed, url: "https://www.wri.org/blog/rss.xml", type: RSS, connector: rss, tier: B }
831 + - id: iucn
832 + name: IUCN
833 + domain: iucn.org
834 + homepage: https://iucn.org
835 + categories: [ngo, climate, science]
836 + tier: B
837 + weight: 1.1
838 + aliases: [iucn, red list, international union for conservation of nature]
839 + products:
840 + - { name: IUCN Red List, type: index, aliases: [red list] }
841 + discover: { rss: true, sitemap: true }
842 + sensors:
843 + - { name: news feed, url: "https://iucn.org/rss.xml", type: RSS, connector: rss, tier: B }
844 + - id: 350-org
845 + name: 350.org
846 + domain: 350.org
847 + categories: [ngo, climate]
848 + tier: C
849 + aliases: ["350.org", "350"]
850 + discover: { rss: true }
851 + sensors:
852 + - { name: news feed, url: "https://350.org/feed/", type: RSS, connector: rss, tier: C }
853 + - id: sierra-club
854 + name: Sierra Club
855 + domain: sierraclub.org
856 + homepage: https://www.sierraclub.org
857 + categories: [ngo, climate]
858 + tier: C
859 + aliases: [sierra club]
860 + discover: { rss: true, sitemap: true }
861 + notes: "Every URL answers a 302 to itself (JS cookie challenge); nothing validated."
862 + - id: environmental-defense-fund
863 + name: Environmental Defense Fund
864 + domain: edf.org
865 + homepage: https://www.edf.org
866 + categories: [ngo, climate]
867 + tier: C
868 + aliases: [edf, environmental defense fund]
869 + discover: { rss: true, sitemap: true, pages: true }
870 + sensors:
871 + - { name: news and stories, url: "https://www.edf.org/news-and-stories", type: HTML, connector: http, tier: C }
872 + - { name: voices blog feed, url: "https://www.edf.org/blog/feed", type: RSS, connector: rss, tier: C }
873 + - id: nrdc
874 + name: Natural Resources Defense Council
875 + domain: nrdc.org
876 + homepage: https://www.nrdc.org
877 + categories: [ngo, climate]
878 + tier: C
879 + aliases: [nrdc]
880 + discover: { rss: true, sitemap: true }
881 + notes: "Feed and sitemap answer 403 to non-browser clients; nothing validated."
882 + - id: rainforest-alliance
883 + name: Rainforest Alliance
884 + domain: rainforest-alliance.org
885 + homepage: https://www.rainforest-alliance.org
886 + categories: [ngo, climate, agriculture]
887 + tier: C
888 + aliases: [rainforest alliance]
889 + discover: { rss: true, sitemap: true }
890 + sensors:
891 + - { name: news sitemap, url: "https://www.rainforest-alliance.org/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
892 + - id: ocean-conservancy
893 + name: Ocean Conservancy
894 + domain: oceanconservancy.org
895 + categories: [ngo, climate]
896 + tier: C
897 + aliases: [ocean conservancy]
898 + discover: { rss: true }
899 + sensors:
900 + - { name: news feed, url: "https://oceanconservancy.org/feed/", type: RSS, connector: rss, tier: C }
901 + - id: oceana
902 + name: Oceana
903 + domain: oceana.org
904 + categories: [ngo, climate]
905 + tier: C
906 + aliases: [oceana]
907 + discover: { rss: true }
908 + sensors:
909 + - { name: news feed, url: "https://oceana.org/feed/", type: RSS, connector: rss, tier: C }
910 + - id: david-suzuki-foundation
911 + name: David Suzuki Foundation
912 + domain: davidsuzuki.org
913 + categories: [ngo, climate]
914 + tier: C
915 + aliases: [david suzuki foundation, fondation david suzuki]
916 + discover: { rss: true, sitemap: true }
917 + notes: "WordPress feeds (/feed/, press-release feed) answer 200 but carry zero items; nothing validated."
918 + - id: equiterre
919 + name: Équiterre
920 + domain: equiterre.org
921 + homepage: https://www.equiterre.org
922 + categories: [ngo, climate]
923 + tier: C
924 + aliases: [equiterre, équiterre]
925 + discover: { rss: true, sitemap: true }
926 + notes: "Every request (feed, sitemap, pages) answers 429 to non-browser clients; nothing validated."
927 + - id: nature-quebec
928 + name: Nature Québec
929 + domain: naturequebec.org
930 + categories: [ngo, climate]
931 + tier: C
932 + aliases: [nature quebec, nature québec]
933 + discover: { rss: true }
934 + sensors:
935 + - { name: feed, url: "https://naturequebec.org/feed/", type: RSS, connector: rss, tier: C }
936 + - id: givewell
937 + name: GiveWell
938 + domain: givewell.org
939 + homepage: https://www.givewell.org
940 + categories: [ngo, research]
941 + tier: C
942 + aliases: [givewell]
943 + discover: { rss: true }
944 + sensors:
945 + - { name: blog feed, url: "https://blog.givewell.org/feed/", type: RSS, connector: rss, tier: C }
946 + - id: open-philanthropy
947 + name: Open Philanthropy (Coefficient Giving)
948 + domain: openphilanthropy.org
949 + homepage: https://www.openphilanthropy.org
950 + categories: [ngo, research, ai]
951 + tier: C
952 + aliases: [open philanthropy, open phil, coefficient giving]
953 + discover: { rss: true, sitemap: true }
954 + notes: "Renamed Coefficient Giving (2026); openphilanthropy.org redirects to coefficientgiving.org which answers 403 to non-browser clients."
955 + - id: rockefeller-foundation
956 + name: The Rockefeller Foundation
957 + domain: rockefellerfoundation.org
958 + homepage: https://www.rockefellerfoundation.org
959 + categories: [ngo]
960 + tier: C
961 + aliases: [rockefeller foundation]
962 + discover: { rss: true }
963 + sensors:
964 + - { name: feed, url: "https://www.rockefellerfoundation.org/feed/", type: RSS, connector: rss, tier: C }
965 + - id: ford-foundation
966 + name: Ford Foundation
967 + domain: fordfoundation.org
968 + homepage: https://www.fordfoundation.org
969 + categories: [ngo]
970 + tier: C
971 + aliases: [ford foundation]
972 + discover: { rss: true }
973 + sensors:
974 + - { name: feed, url: "https://www.fordfoundation.org/feed/", type: RSS, connector: rss, tier: C }
975 + - id: macarthur-foundation
976 + name: MacArthur Foundation
977 + domain: macfound.org
978 + homepage: https://www.macfound.org
979 + categories: [ngo]
980 + tier: C
981 + aliases: [macarthur foundation, macarthur]
982 + discover: { rss: true, sitemap: true }
983 + sensors:
984 + - { name: sitemap, url: "https://www.macfound.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxUrls: 3000 } }
985 + - id: bloomberg-philanthropies
986 + name: Bloomberg Philanthropies
987 + domain: bloomberg.org
988 + homepage: https://www.bloomberg.org
989 + categories: [ngo]
990 + tier: C
991 + aliases: [bloomberg philanthropies]
992 + discover: { rss: true, sitemap: true }
993 + sensors:
994 + - { name: press feed, url: "https://www.bloomberg.org/press/feed/", type: RSS, connector: rss, tier: C }
995 +
996 + # ───────────────────────── Standards bodies & industry consortia ─────────────────────────
997 + - id: iso
998 + name: International Organization for Standardization
999 + domain: iso.org
1000 + homepage: https://www.iso.org
1001 + categories: [standards, international]
1002 + tier: B
1003 + weight: 1.3
1004 + aliases: [iso, international organization for standardization]
1005 + discover: { rss: true, sitemap: true }
1006 + notes: "Whole site (news, sitemap, homepage) answers 403 to non-browser clients (Akamai bot manager); nothing validated."
1007 + - id: iec
1008 + name: International Electrotechnical Commission
1009 + domain: iec.ch
1010 + homepage: https://www.iec.ch
1011 + categories: [standards, international]
1012 + tier: B
1013 + weight: 1.1
1014 + aliases: [iec, cei]
1015 + discover: { rss: true, sitemap: true }
1016 + notes: "All paths (rss.xml, blog, news, sitemap) answer 403 to non-browser clients; nothing validated."
1017 + - id: ieee
1018 + name: IEEE
1019 + domain: ieee.org
1020 + homepage: https://www.ieee.org
1021 + categories: [standards, technology, research]
1022 + tier: B
1023 + weight: 1.2
1024 + aliases: [ieee, institute of electrical and electronics engineers, ieee spectrum]
1025 + products:
1026 + - { name: IEEE Spectrum, type: product, aliases: [spectrum] }
1027 + discover: { rss: true }
1028 + sensors:
1029 + - { name: ieee spectrum feed, url: "https://spectrum.ieee.org/feeds/feed.rss", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
1030 + - id: ieee-sa
1031 + name: IEEE Standards Association
1032 + domain: standards.ieee.org
1033 + categories: [standards, technology]
1034 + tier: B
1035 + weight: 1.1
1036 + aliases: [ieee sa, ieee standards association, ieee 802]
1037 + discover: { rss: true, pages: true }
1038 + sensors:
1039 + - { name: beyond standards feed, url: "https://standards.ieee.org/feed/", type: RSS, connector: rss, tier: B }
1040 + - { name: news, url: "https://standards.ieee.org/news/", type: HTML, connector: http, tier: B }
1041 + - id: etsi
1042 + name: ETSI
1043 + domain: etsi.org
1044 + homepage: https://www.etsi.org
1045 + categories: [standards, telecom]
1046 + tier: B
1047 + weight: 1.1
1048 + aliases: [etsi, european telecommunications standards institute]
1049 + discover: { rss: true }
1050 + sensors:
1051 + - { name: newsroom feed, url: "https://www.etsi.org/newsroom/feed/", type: RSS, connector: rss, tier: B }
1052 + - id: ecma-international
1053 + name: Ecma International
1054 + domain: ecma-international.org
1055 + categories: [standards, developer]
1056 + tier: B
1057 + aliases: [ecma, ecma international, ecmascript]
1058 + products:
1059 + - { name: ECMAScript, type: software, aliases: [ecma-262, ecmascript] }
1060 + discover: { rss: true }
1061 + sensors:
1062 + - { name: news feed, url: "https://ecma-international.org/news/feed/", type: RSS, connector: rss, tier: B }
1063 + - { name: ecma-262 releases, url: "https://github.com/tc39/ecma262/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: tc39/ecma262, kind: releases } }
1064 + - id: tc39
1065 + name: TC39 (ECMAScript committee)
1066 + domain: tc39.es
1067 + categories: [standards, developer]
1068 + tier: B
1069 + weight: 1.1
1070 + aliases: [tc39, ecmascript proposals]
1071 + discover: { rss: false }
1072 + sensors:
1073 + - { name: proposals commits, url: "https://github.com/tc39/proposals/commits/main.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: tc39/proposals, kind: commits } }
1074 + - id: whatwg
1075 + name: WHATWG
1076 + domain: whatwg.org
1077 + categories: [standards, developer, internet]
1078 + tier: B
1079 + weight: 1.1
1080 + aliases: [whatwg, html living standard]
1081 + products:
1082 + - { name: HTML Living Standard, type: software, aliases: [html standard] }
1083 + discover: { rss: true }
1084 + sensors:
1085 + - { name: html standard commits, url: "https://github.com/whatwg/html/commits/main.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: whatwg/html, kind: commits } }
1086 + - id: oasis-open
1087 + name: OASIS Open
1088 + domain: oasis-open.org
1089 + homepage: https://www.oasis-open.org
1090 + categories: [standards, developer]
1091 + tier: C
1092 + aliases: [oasis, oasis open]
1093 + discover: { rss: true }
1094 + sensors:
1095 + - { name: news feed, url: "https://www.oasis-open.org/feed/", type: RSS, connector: rss, tier: C }
1096 + - id: khronos-group
1097 + name: Khronos Group
1098 + domain: khronos.org
1099 + homepage: https://www.khronos.org
1100 + categories: [standards, developer, gaming]
1101 + tier: B
1102 + aliases: [khronos, khronos group, vulkan, opengl, webgpu]
1103 + products:
1104 + - { name: Vulkan, type: software }
1105 + - { name: OpenGL, type: software }
1106 + - { name: glTF, type: software }
1107 + discover: { rss: true }
1108 + sensors:
1109 + - { name: news feed, url: "https://www.khronos.org/feeds/news_feed", type: RSS, connector: rss, tier: B }
1110 + - id: bluetooth-sig
1111 + name: Bluetooth SIG
1112 + domain: bluetooth.com
1113 + homepage: https://www.bluetooth.com
1114 + categories: [standards, consumer-tech]
1115 + tier: B
1116 + aliases: [bluetooth sig, bluetooth]
1117 + discover: { rss: true }
1118 + sensors:
1119 + - { name: blog feed, url: "https://www.bluetooth.com/feed/", type: RSS, connector: rss, tier: B }
1120 + - id: usb-if
1121 + name: USB Implementers Forum
1122 + domain: usb.org
1123 + homepage: https://www.usb.org
1124 + categories: [standards, consumer-tech]
1125 + tier: C
1126 + aliases: [usb-if, usb implementers forum, usb]
1127 + discover: { rss: true }
1128 + sensors:
1129 + - { name: news feed, url: "https://www.usb.org/rss.xml", type: RSS, connector: rss, tier: C }
1130 + - id: wi-fi-alliance
1131 + name: Wi-Fi Alliance
1132 + domain: wi-fi.org
1133 + homepage: https://www.wi-fi.org
1134 + categories: [standards, telecom, consumer-tech]
1135 + tier: B
1136 + aliases: [wi-fi alliance, wifi alliance, wi-fi]
1137 + discover: { rss: true }
1138 + sensors:
1139 + - { name: news feed, url: "https://www.wi-fi.org/rss.xml", type: RSS, connector: rss, tier: B }
1140 + - id: hdmi-forum
1141 + name: HDMI Forum / HDMI Licensing Administrator
1142 + domain: hdmi.org
1143 + homepage: https://www.hdmi.org
1144 + categories: [standards, consumer-tech]
1145 + tier: C
1146 + aliases: [hdmi forum, hdmi la, hdmi]
1147 + discover: { rss: true, sitemap: true, pages: true }
1148 + sensors:
1149 + - { name: sitemap, url: "https://www.hdmi.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1150 + - id: connectivity-standards-alliance
1151 + name: Connectivity Standards Alliance (Matter)
1152 + domain: csa-iot.org
1153 + categories: [standards, consumer-tech]
1154 + tier: B
1155 + aliases: [csa, connectivity standards alliance, matter, zigbee alliance]
1156 + products:
1157 + - { name: Matter, type: software, aliases: [matter standard] }
1158 + discover: { rss: true }
1159 + sensors:
1160 + - { name: news feed, url: "https://csa-iot.org/feed/", type: RSS, connector: rss, tier: B }
1161 + - id: thread-group
1162 + name: Thread Group
1163 + domain: threadgroup.org
1164 + categories: [standards, consumer-tech]
1165 + tier: C
1166 + aliases: [thread group, thread]
1167 + discover: { rss: true, pages: true }
1168 + sensors:
1169 + - { name: newsroom, url: "https://threadgroup.org/newsroom", type: HTML, connector: http, tier: C }
1170 + - id: omg
1171 + name: Object Management Group
1172 + domain: omg.org
1173 + homepage: https://www.omg.org
1174 + categories: [standards, enterprise]
1175 + tier: C
1176 + aliases: [omg, object management group, uml, bpmn]
1177 + discover: { rss: true, sitemap: true }
1178 + sensors:
1179 + - { name: news feed, url: "https://www.omg.org/feed", type: RSS, connector: rss, tier: C }
1180 + - id: openid-foundation
1181 + name: OpenID Foundation
1182 + domain: openid.net
1183 + categories: [standards, cyber, developer]
1184 + tier: B
1185 + aliases: [openid, openid foundation, openid connect]
1186 + discover: { rss: true }
1187 + sensors:
1188 + - { name: news feed, url: "https://openid.net/feed/", type: RSS, connector: rss, tier: B }
1189 + - id: fido-alliance
1190 + name: FIDO Alliance
1191 + domain: fidoalliance.org
1192 + categories: [standards, cyber]
1193 + tier: B
1194 + weight: 1.1
1195 + aliases: [fido, fido alliance, passkeys, webauthn]
1196 + products:
1197 + - { name: Passkeys, type: product, aliases: [passkey] }
1198 + discover: { rss: true }
1199 + sensors:
1200 + - { name: news feed, url: "https://fidoalliance.org/feed/", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
1201 + - id: pci-ssc
1202 + name: PCI Security Standards Council
1203 + domain: pcisecuritystandards.org
1204 + homepage: https://www.pcisecuritystandards.org
1205 + categories: [standards, cyber, payments]
1206 + tier: B
1207 + weight: 1.1
1208 + aliases: [pci ssc, pci dss, pci security standards council]
1209 + products:
1210 + - { name: PCI DSS, type: software, aliases: [pci dss 4.0] }
1211 + discover: { rss: true }
1212 + sensors:
1213 + - { name: blog feed, url: "https://blog.pcisecuritystandards.org/rss.xml", type: RSS, connector: rss, tier: B }
1214 + - id: unicode-consortium
1215 + name: Unicode Consortium
1216 + domain: unicode.org
1217 + homepage: https://home.unicode.org
1218 + categories: [standards, developer]
1219 + tier: B
1220 + aliases: [unicode, unicode consortium, cldr, icu]
1221 + discover: { rss: true, pages: true }
1222 + sensors:
1223 + - { name: blog feed, url: "https://blog.unicode.org/feeds/posts/default", type: ATOM, connector: rss, tier: B, config: { maxItems: 25 } }
1224 + - { name: recent releases, url: "https://www.unicode.org/releases/", type: HTML, connector: http, tier: C }
1225 + - id: iab-tech-lab
1226 + name: IAB Tech Lab
1227 + domain: iabtechlab.com
1228 + categories: [standards, web-policy, media]
1229 + tier: C
1230 + aliases: [iab tech lab, iab, openrtb, tcf]
1231 + discover: { rss: true }
1232 + sensors:
1233 + - { name: news feed, url: "https://iabtechlab.com/feed/", type: RSS, connector: rss, tier: C }
1234 + - id: openapi-initiative
1235 + name: OpenAPI Initiative
1236 + domain: openapis.org
1237 + homepage: https://www.openapis.org
1238 + categories: [standards, developer]
1239 + tier: B
1240 + aliases: [openapi, openapi initiative, oai, swagger]
1241 + products:
1242 + - { name: OpenAPI Specification, type: software, aliases: [oas, openapi spec] }
1243 + discover: { rss: true }
1244 + sensors:
1245 + - { name: blog feed, url: "https://www.openapis.org/feed", type: RSS, connector: rss, tier: B }
1246 + - { name: specification releases, url: "https://github.com/OAI/OpenAPI-Specification/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: OAI/OpenAPI-Specification, kind: releases } }
1247 + - id: owasp
1248 + name: OWASP Foundation
1249 + domain: owasp.org
1250 + categories: [standards, cyber, open-source]
1251 + tier: B
1252 + weight: 1.1
1253 + aliases: [owasp, owasp top 10]
1254 + products:
1255 + - { name: OWASP Top 10, type: product }
1256 + discover: { rss: true }
1257 + sensors:
1258 + - { name: news feed, url: "https://owasp.org/feed.xml", type: ATOM, connector: rss, tier: B }
1259 + - id: cis
1260 + name: Center for Internet Security
1261 + domain: cisecurity.org
1262 + homepage: https://www.cisecurity.org
1263 + categories: [standards, cyber]
1264 + tier: A
1265 + weight: 1.2
1266 + aliases: [cis, center for internet security, cis benchmarks, ms-isac]
1267 + products:
1268 + - { name: CIS Benchmarks, type: product }
1269 + - { name: CIS Controls, type: product }
1270 + discover: { rss: true, pages: true }
1271 + notes: "/feed/advisories and /feed/blog are Sitecore endpoints that intermittently answer 200 with an 'Object moved' HTML page instead of RSS — not stable enough to be sensors; the advisories index is server-rendered."
1272 + sensors:
1273 + - { name: advisories index, url: "https://www.cisecurity.org/advisories", type: HTML, connector: http, tier: A }
1274 + - id: first-org
1275 + name: FIRST — Forum of Incident Response and Security Teams
1276 + domain: first.org
1277 + homepage: https://www.first.org
1278 + categories: [standards, cyber]
1279 + tier: B
1280 + weight: 1.1
1281 + aliases: [first, first.org, cvss, epss]
1282 + products:
1283 + - { name: CVSS, type: software }
1284 + - { name: EPSS, type: software }
1285 + discover: { rss: true }
1286 + sensors:
1287 + - { name: news feed, url: "https://www.first.org/newsroom/news/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
1288 + - { name: blog feed, url: "https://www.first.org/blog/rss.xml", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
1289 + - id: isaca
1290 + name: ISACA
1291 + domain: isaca.org
1292 + homepage: https://www.isaca.org
1293 + categories: [standards, cyber, enterprise]
1294 + tier: C
1295 + aliases: [isaca, cobit, cisa certification]
1296 + discover: { rss: true, sitemap: true }
1297 + sensors:
1298 + - { name: news feed, url: "https://www.isaca.org/rss/news", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
1299 + - id: isc2
1300 + name: ISC2
1301 + domain: isc2.org
1302 + homepage: https://www.isc2.org
1303 + categories: [standards, cyber]
1304 + tier: C
1305 + aliases: [isc2, (isc)2, cissp]
1306 + discover: { rss: true, sitemap: true }
1307 + sensors:
1308 + - { name: sitemap, url: "https://www.isc2.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
1309 + - id: cloud-security-alliance
1310 + name: Cloud Security Alliance
1311 + domain: cloudsecurityalliance.org
1312 + categories: [standards, cyber, cloud]
1313 + tier: C
1314 + aliases: [csa, cloud security alliance, ccm, star registry]
1315 + discover: { rss: true }
1316 + sensors:
1317 + - { name: blog feed, url: "https://cloudsecurityalliance.org/feed", type: RSS, connector: rss, tier: C }
1318 + - id: sans-isc
1319 + name: SANS Internet Storm Center
1320 + domain: isc.sans.edu
1321 + categories: [cyber, research]
1322 + tier: A
1323 + weight: 1.2
1324 + aliases: [sans isc, internet storm center, isc diary, sans institute]
1325 + discover: { rss: true }
1326 + sensors:
1327 + - { name: diary feed, url: "https://isc.sans.edu/rssfeed_full.xml", type: RSS, connector: rss, tier: A }
1328 + - id: open-compute-project
1329 + name: Open Compute Project
1330 + domain: opencompute.org
1331 + homepage: https://www.opencompute.org
1332 + categories: [standards, cloud, infrastructure]
1333 + tier: C
1334 + aliases: [ocp, open compute project]
1335 + discover: { rss: true, pages: true }
1336 + notes: "WordPress feeds and the blog listing answer 403 to non-browser clients; nothing validated."
1337 + - id: risc-v-international
1338 + name: RISC-V International
1339 + domain: riscv.org
1340 + categories: [standards, semiconductors, open-source]
1341 + tier: B
1342 + weight: 1.1
1343 + aliases: [risc-v, riscv, risc-v international]
1344 + discover: { rss: true }
1345 + sensors:
1346 + - { name: news feed, url: "https://riscv.org/feed/", type: RSS, connector: rss, tier: B }
1347 + - id: jedec
1348 + name: JEDEC
1349 + domain: jedec.org
1350 + homepage: https://www.jedec.org
1351 + categories: [standards, semiconductors]
1352 + tier: C
1353 + aliases: [jedec, jedec solid state technology association]
1354 + discover: { rss: true }
1355 + sensors:
1356 + - { name: news feed, url: "https://www.jedec.org/rss.xml", type: RSS, connector: rss, tier: C }
1357 + - id: mipi-alliance
1358 + name: MIPI Alliance
1359 + domain: mipi.org
1360 + homepage: https://www.mipi.org
1361 + categories: [standards, semiconductors]
1362 + tier: C
1363 + aliases: [mipi, mipi alliance]
1364 + discover: { rss: true }
1365 + sensors:
1366 + - { name: blog feed, url: "https://www.mipi.org/blog/rss.xml", type: RSS, connector: rss, tier: C }
1367 + - id: pci-sig
1368 + name: PCI-SIG
1369 + domain: pcisig.com
1370 + categories: [standards, semiconductors]
1371 + tier: C
1372 + aliases: [pci-sig, pcie, pci express]
1373 + discover: { rss: true, pages: true }
1374 + notes: "Drupal feeds and newsroom answer 403 to non-browser clients; nothing validated."
1375 + - id: 3gpp
1376 + name: 3GPP
1377 + domain: 3gpp.org
1378 + homepage: https://www.3gpp.org
1379 + categories: [standards, telecom]
1380 + tier: B
1381 + weight: 1.1
1382 + aliases: [3gpp, 5g standards, release 19, release 20]
1383 + discover: { rss: true }
1384 + sensors:
1385 + - { name: news feed, url: "https://www.3gpp.org/news-events/3gpp-news?format=feed&type=rss", type: RSS, connector: rss, tier: B }
1386 + - id: gsma
1387 + name: GSMA
1388 + domain: gsma.com
1389 + homepage: https://www.gsma.com
1390 + categories: [standards, telecom]
1391 + tier: B
1392 + weight: 1.1
1393 + aliases: [gsma, mwc, mobile world congress]
1394 + discover: { rss: true }
1395 + sensors:
1396 + - { name: newsroom feed, url: "https://www.gsma.com/newsroom/feed/", type: RSS, connector: rss, tier: B }
1397 + - id: isa
1398 + name: International Society of Automation
1399 + domain: isa.org
1400 + homepage: https://www.isa.org
1401 + categories: [standards, cyber, infrastructure]
1402 + tier: C
1403 + aliases: [isa, isa/iec 62443, international society of automation]
1404 + products:
1405 + - { name: ISA/IEC 62443, type: software, aliases: [iec 62443] }
1406 + discover: { rss: true, pages: true }
1407 + sensors:
1408 + - { name: news and press releases, url: "https://www.isa.org/news-press-releases", type: HTML, connector: http, tier: C }
1409 + - id: astm
1410 + name: ASTM International
1411 + domain: astm.org
1412 + homepage: https://www.astm.org
1413 + categories: [standards]
1414 + tier: C
1415 + aliases: [astm, astm international]
1416 + discover: { rss: true, sitemap: true }
1417 + notes: "Site answers 403 to non-browser clients (news, rss); newsroom.astm.org unreachable; nothing validated."
1418 + - id: ansi
1419 + name: American National Standards Institute
1420 + domain: ansi.org
1421 + homepage: https://www.ansi.org
1422 + categories: [standards]
1423 + tier: C
1424 + aliases: [ansi]
1425 + discover: { rss: true, sitemap: true }
1426 + notes: "All paths (news, rss, feed) answer 403 to non-browser clients; nothing validated."
1427 + - id: bsi-group
1428 + name: BSI Group
1429 + domain: bsigroup.com
1430 + homepage: https://www.bsigroup.com
1431 + categories: [standards]
1432 + tier: C
1433 + aliases: [bsi, bsi group, british standards institution]
1434 + discover: { rss: true, sitemap: true }
1435 + sensors:
1436 + - { name: sitemap, url: "https://www.bsigroup.com/sitemap/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
1437 + - id: din
1438 + name: DIN — German Institute for Standardization
1439 + domain: din.de
1440 + homepage: https://www.din.de
1441 + categories: [standards]
1442 + tier: C
1443 + aliases: [din, deutsches institut für normung]
1444 + discover: { rss: true, sitemap: true }
1445 + sensors:
1446 + - { name: sitemap en, url: "https://www.din.de/service-sitemap-din-en-sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
1447 + - id: afnor
1448 + name: AFNOR
1449 + domain: afnor.org
1450 + homepage: https://www.afnor.org
1451 + categories: [standards]
1452 + tier: C
1453 + aliases: [afnor, association française de normalisation]
1454 + discover: { rss: true, sitemap: true }
1455 + sensors:
1456 + - { name: sitemap, url: "https://www.afnor.org/sitemaps/", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
1457 + - id: scc-canada
1458 + name: Standards Council of Canada
1459 + domain: scc.ca
1460 + homepage: https://www.scc.ca
1461 + categories: [standards, government]
1462 + tier: C
1463 + aliases: [scc, standards council of canada, conseil canadien des normes, ccn]
1464 + discover: { rss: true, sitemap: true }
1465 + notes: "scc.ca redirects to scc-ccn.ca which answers 403 to non-browser clients; nothing validated."
1466 + - id: bnq
1467 + name: Bureau de normalisation du Québec
1468 + domain: bnq.qc.ca
1469 + homepage: https://www.bnq.qc.ca
1470 + categories: [standards, government]
1471 + tier: D
1472 + aliases: [bnq, bureau de normalisation du québec]
1473 + discover: { rss: true, sitemap: true }
1474 + notes: "No feed or sitemap; news paths return the 404 page; nothing validated."
1475 + - id: csa-group
1476 + name: CSA Group
1477 + domain: csagroup.org
1478 + homepage: https://www.csagroup.org
1479 + categories: [standards]
1480 + tier: C
1481 + aliases: [csa group, canadian standards association]
1482 + discover: { rss: true, sitemap: true }
1483 + notes: "WordPress feeds answer 403 to non-browser clients; nothing validated."
1484 + - id: ul-solutions
1485 + name: UL Solutions
1486 + domain: ul.com
1487 + homepage: https://www.ul.com
1488 + categories: [standards, consumer-safety]
1489 + tier: C
1490 + aliases: [ul, ul solutions, underwriters laboratories]
1491 + discover: { rss: true, sitemap: true, pages: true }
1492 + sensors:
1493 + - { name: news, url: "https://www.ul.com/news", type: HTML, connector: http, tier: C }
1494 + - id: open-source-initiative
1495 + name: Open Source Initiative
1496 + domain: opensource.org
1497 + categories: [open-source, standards]
1498 + tier: C
1499 + aliases: [osi, open source initiative, open source definition]
1500 + discover: { rss: true }
1501 + sensors:
1502 + - { name: blog feed, url: "https://opensource.org/feed", type: RSS, connector: rss, tier: C }
1503 + - id: free-software-foundation
1504 + name: Free Software Foundation
1505 + domain: fsf.org
1506 + homepage: https://www.fsf.org
1507 + categories: [open-source, ngo]
1508 + tier: C
1509 + aliases: [fsf, free software foundation, gnu]
1510 + discover: { rss: true }
1511 + sensors:
1512 + - { name: news feed, url: "https://static.fsf.org/fsforg/rss/news.xml", type: RSS, connector: rss, tier: C }
1513 + - { name: blogs feed, url: "https://static.fsf.org/fsforg/rss/blogs.xml", type: RSS, connector: rss, tier: C }
1514 + - id: creative-commons
1515 + name: Creative Commons
1516 + domain: creativecommons.org
1517 + categories: [open-source, ngo, legal]
1518 + tier: C
1519 + aliases: [creative commons, cc licenses]
1520 + discover: { rss: true }
1521 + sensors:
1522 + - { name: blog feed, url: "https://creativecommons.org/feed/", type: RSS, connector: rss, tier: C }
1523 + - id: software-heritage
1524 + name: Software Heritage
1525 + domain: softwareheritage.org
1526 + homepage: https://www.softwareheritage.org
1527 + categories: [open-source, research]
1528 + tier: C
1529 + aliases: [software heritage, swh]
1530 + discover: { rss: true }
1531 + notes: "www.softwareheritage.org/feed/ is a valid RSS but the server sends an incomplete TLS chain (Node: unable to get local issuer certificate); re-add when fixed."
1532 + - id: internet-archive
1533 + name: Internet Archive
1534 + domain: archive.org
1535 + categories: [internet, ngo, open-data]
1536 + tier: B
1537 + weight: 1.2
1538 + aliases: [internet archive, wayback machine, archive.org]
1539 + products:
1540 + - { name: Wayback Machine, type: service }
1541 + discover: { rss: true, sitemap: true }
1542 + sensors:
1543 + - { name: blog feed, url: "https://blog.archive.org/feed/", type: RSS, connector: rss, tier: B }
1544 +
1545 + # ───────────────────────── Think tanks, polling, AI policy & safety ─────────────────────────
1546 + - id: brookings
1547 + name: Brookings Institution
1548 + domain: brookings.edu
1549 + homepage: https://www.brookings.edu
1550 + categories: [research, politics]
1551 + tier: B
1552 + weight: 1.2
1553 + aliases: [brookings, brookings institution]
1554 + discover: { rss: true, sitemap: true }
1555 + sensors:
1556 + - { name: news sitemap, url: "https://www.brookings.edu/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 1000 } }
1557 + - id: rand
1558 + name: RAND Corporation
1559 + domain: rand.org
1560 + homepage: https://www.rand.org
1561 + categories: [research, politics]
1562 + tier: B
1563 + weight: 1.2
1564 + aliases: [rand, rand corporation]
1565 + discover: { rss: true }
1566 + sensors:
1567 + - { name: new publications, url: "https://www.rand.org/pubs/new.xml", type: ATOM, connector: rss, tier: B }
1568 + - { name: press releases, url: "https://www.rand.org/news/press.xml", type: ATOM, connector: rss, tier: B }
1569 + - { name: commentary, url: "https://www.rand.org/pubs/commentary.xml", type: ATOM, connector: rss, tier: C }
1570 + - id: cfr
1571 + name: Council on Foreign Relations
1572 + domain: cfr.org
1573 + homepage: https://www.cfr.org
1574 + categories: [research, politics]
1575 + tier: B
1576 + weight: 1.1
1577 + aliases: [cfr, council on foreign relations, foreign affairs]
1578 + discover: { rss: true, sitemap: true }
1579 + sensors:
1580 + - { name: feed, url: "https://www.cfr.org/feed", type: RSS, connector: rss, tier: B }
1581 + - id: csis
1582 + name: Center for Strategic and International Studies
1583 + domain: csis.org
1584 + homepage: https://www.csis.org
1585 + categories: [research, politics]
1586 + tier: B
1587 + weight: 1.1
1588 + aliases: [csis]
1589 + discover: { rss: true }
1590 + sensors:
1591 + - { name: analysis feed, url: "https://www.csis.org/rss.xml", type: RSS, connector: rss, tier: B }
1592 + - id: carnegie-endowment
1593 + name: Carnegie Endowment for International Peace
1594 + domain: carnegieendowment.org
1595 + categories: [research, politics]
1596 + tier: B
1597 + aliases: [carnegie endowment, carnegie]
1598 + discover: { rss: true, sitemap: true }
1599 + sensors:
1600 + - { name: sitemap, url: "https://carnegieendowment.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
1601 + - id: atlantic-council
1602 + name: Atlantic Council
1603 + domain: atlanticcouncil.org
1604 + homepage: https://www.atlanticcouncil.org
1605 + categories: [research, politics]
1606 + tier: B
1607 + aliases: [atlantic council]
1608 + discover: { rss: true }
1609 + sensors:
1610 + - { name: feed, url: "https://www.atlanticcouncil.org/feed/", type: RSS, connector: rss, tier: B }
1611 + - id: chatham-house
1612 + name: Chatham House
1613 + domain: chathamhouse.org
1614 + homepage: https://www.chathamhouse.org
1615 + categories: [research, politics]
1616 + tier: B
1617 + aliases: [chatham house, royal institute of international affairs]
1618 + discover: { rss: true, sitemap: true }
1619 + notes: "Feed, sitemap and news pages answer 403 to non-browser clients; nothing validated."
1620 + - id: iiss
1621 + name: International Institute for Strategic Studies
1622 + domain: iiss.org
1623 + homepage: https://www.iiss.org
1624 + categories: [research, politics]
1625 + tier: C
1626 + aliases: [iiss, military balance]
1627 + products:
1628 + - { name: The Military Balance, type: product }
1629 + discover: { rss: true, sitemap: true }
1630 + sensors:
1631 + - { name: sitemap, url: "https://www.iiss.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
1632 + - id: sipri
1633 + name: SIPRI
1634 + domain: sipri.org
1635 + homepage: https://www.sipri.org
1636 + categories: [research, politics]
1637 + tier: B
1638 + aliases: [sipri, stockholm international peace research institute]
1639 + discover: { rss: true, sitemap: true, pages: true }
1640 + sensors:
1641 + - { name: news and events, url: "https://www.sipri.org/news", type: HTML, connector: http, tier: B }
1642 + - { name: sitemap, url: "https://www.sipri.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
1643 + - id: bruegel
1644 + name: Bruegel
1645 + domain: bruegel.org
1646 + homepage: https://www.bruegel.org
1647 + categories: [research, finance, politics]
1648 + tier: B
1649 + aliases: [bruegel]
1650 + discover: { rss: true }
1651 + sensors:
1652 + - { name: feed, url: "https://www.bruegel.org/rss.xml", type: RSS, connector: rss, tier: B }
1653 + - id: cepr
1654 + name: CEPR — Centre for Economic Policy Research
1655 + domain: cepr.org
1656 + categories: [research, finance]
1657 + tier: B
1658 + aliases: [cepr, voxeu]
1659 + products:
1660 + - { name: VoxEU, type: product }
1661 + discover: { rss: true }
1662 + sensors:
1663 + - { name: feed, url: "https://cepr.org/rss.xml", type: RSS, connector: rss, tier: B }
1664 + - id: peterson-institute
1665 + name: Peterson Institute for International Economics
1666 + domain: piie.com
1667 + homepage: https://www.piie.com
1668 + categories: [research, finance]
1669 + tier: B
1670 + aliases: [piie, peterson institute]
1671 + discover: { rss: true, sitemap: true, pages: true }
1672 + sensors:
1673 + - { name: newsroom, url: "https://www.piie.com/newsroom", type: HTML, connector: http, tier: B }
1674 + - { name: sitemap, url: "https://www.piie.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
1675 + - id: cato-institute
1676 + name: Cato Institute
1677 + domain: cato.org
1678 + homepage: https://www.cato.org
1679 + categories: [research, politics]
1680 + tier: C
1681 + aliases: [cato, cato institute]
1682 + discover: { rss: true, sitemap: true }
1683 + notes: "All paths (rss, sitemap) answer 403 to non-browser clients; nothing validated."
1684 + - id: heritage-foundation
1685 + name: The Heritage Foundation
1686 + domain: heritage.org
1687 + homepage: https://www.heritage.org
1688 + categories: [research, politics]
1689 + tier: C
1690 + aliases: [heritage foundation, heritage]
1691 + discover: { rss: true }
1692 + sensors:
1693 + - { name: feed, url: "https://www.heritage.org/rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
1694 + - id: aei
1695 + name: American Enterprise Institute
1696 + domain: aei.org
1697 + homepage: https://www.aei.org
1698 + categories: [research, politics]
1699 + tier: C
1700 + aliases: [aei, american enterprise institute]
1701 + discover: { rss: true }
1702 + sensors:
1703 + - { name: feed, url: "https://www.aei.org/feed/", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
1704 + - id: urban-institute
1705 + name: Urban Institute
1706 + domain: urban.org
1707 + homepage: https://www.urban.org
1708 + categories: [research, politics]
1709 + tier: C
1710 + aliases: [urban institute]
1711 + discover: { rss: true, sitemap: true }
1712 + notes: "Feeds and sitemap answer 403 to non-browser clients; nothing validated."
1713 + - id: center-for-american-progress
1714 + name: Center for American Progress
1715 + domain: americanprogress.org
1716 + homepage: https://www.americanprogress.org
1717 + categories: [research, politics]
1718 + tier: C
1719 + aliases: [cap, center for american progress]
1720 + discover: { rss: true, sitemap: true }
1721 + notes: "WordPress feed answers 403 to non-browser clients; nothing validated."
1722 + - id: pew-research
1723 + name: Pew Research Center
1724 + domain: pewresearch.org
1725 + homepage: https://www.pewresearch.org
1726 + categories: [research, statistics, politics]
1727 + tier: A
1728 + weight: 1.3
1729 + aliases: [pew, pew research, pew research center]
1730 + discover: { rss: true }
1731 + sensors:
1732 + - { name: publications feed, url: "https://www.pewresearch.org/feed/", type: RSS, connector: rss, tier: A }
1733 + - { name: short reads feed, url: "https://www.pewresearch.org/short-reads/feed/", type: RSS, connector: rss, tier: B }
1734 + - id: gallup
1735 + name: Gallup
1736 + domain: gallup.com
1737 + homepage: https://news.gallup.com
1738 + categories: [research, statistics, politics]
1739 + tier: B
1740 + weight: 1.2
1741 + aliases: [gallup, gallup poll]
1742 + discover: { rss: true, sitemap: true }
1743 + notes: "No feed or sitemap exposed on news.gallup.com (all /rss paths 404); nothing validated."
1744 + - id: cd-howe-institute
1745 + name: C.D. Howe Institute
1746 + domain: cdhowe.org
1747 + homepage: https://www.cdhowe.org
1748 + categories: [research, finance, politics]
1749 + tier: B
1750 + aliases: [c.d. howe, cd howe institute, institut c.d. howe]
1751 + discover: { rss: true }
1752 + sensors:
1753 + - { name: publications feed, url: "https://cdhowe.org/publication/feed/", type: RSS, connector: rss, tier: B }
1754 + - id: irpp
1755 + name: Institute for Research on Public Policy
1756 + domain: irpp.org
1757 + categories: [research, politics]
1758 + tier: B
1759 + aliases: [irpp, institute for research on public policy, policy options, options politiques]
1760 + products:
1761 + - { name: Policy Options, type: product, aliases: [policy options magazine] }
1762 + discover: { rss: true }
1763 + sensors:
1764 + - { name: irpp feed, url: "https://irpp.org/feed/", type: RSS, connector: rss, tier: B }
1765 + - { name: policy options feed, url: "https://policyoptions.irpp.org/feed/", type: RSS, connector: rss, tier: B }
1766 + - id: fraser-institute
1767 + name: Fraser Institute
1768 + domain: fraserinstitute.org
1769 + homepage: https://www.fraserinstitute.org
1770 + categories: [research, politics]
1771 + tier: C
1772 + aliases: [fraser institute, institut fraser]
1773 + discover: { rss: true }
1774 + sensors:
1775 + - { name: feed, url: "https://www.fraserinstitute.org/rss.xml", type: RSS, connector: rss, tier: C }
1776 + - id: institut-du-quebec
1777 + name: Institut du Québec
1778 + domain: institutduquebec.ca
1779 + categories: [research, finance, politics]
1780 + tier: C
1781 + aliases: [institut du québec, idq]
1782 + discover: { rss: true, sitemap: true }
1783 + sensors:
1784 + - { name: sitemap, url: "https://institutduquebec.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1785 + - id: cirano
1786 + name: CIRANO
1787 + domain: cirano.qc.ca
1788 + categories: [research, finance]
1789 + tier: C
1790 + aliases: [cirano]
1791 + discover: { rss: true, pages: true }
1792 + sensors:
1793 + - { name: nouvelles, url: "https://cirano.qc.ca/fr/nouvelles", type: HTML, connector: http, tier: C }
1794 + - id: conference-board-of-canada
1795 + name: Conference Board of Canada
1796 + domain: conferenceboard.ca
1797 + homepage: https://www.conferenceboard.ca
1798 + categories: [research, finance]
1799 + tier: C
1800 + aliases: [conference board of canada]
1801 + discover: { rss: true, sitemap: true }
1802 + notes: "Every conferenceboard.ca path now redirects to conference-board.org/north-america (SPA); nothing validated."
1803 + - id: canada-west-foundation
1804 + name: Canada West Foundation
1805 + domain: cwf.ca
1806 + categories: [research, politics]
1807 + tier: C
1808 + aliases: [canada west foundation, cwf]
1809 + discover: { rss: true }
1810 + sensors:
1811 + - { name: feed, url: "https://cwf.ca/feed/", type: RSS, connector: rss, tier: C }
1812 + - id: macdonald-laurier-institute
1813 + name: Macdonald-Laurier Institute
1814 + domain: macdonaldlaurier.ca
1815 + categories: [research, politics]
1816 + tier: C
1817 + aliases: [macdonald-laurier institute, mli]
1818 + discover: { rss: true }
1819 + sensors:
1820 + - { name: feed, url: "https://macdonaldlaurier.ca/feed/", type: RSS, connector: rss, tier: C }
1821 + - id: broadbent-institute
1822 + name: Broadbent Institute
1823 + domain: broadbentinstitute.ca
1824 + homepage: https://www.broadbentinstitute.ca
1825 + categories: [research, politics]
1826 + tier: C
1827 + aliases: [broadbent institute, institut broadbent]
1828 + discover: { rss: true }
1829 + sensors:
1830 + - { name: feed, url: "https://www.broadbentinstitute.ca/feed", type: RSS, connector: rss, tier: C }
1831 + - id: center-for-ai-safety
1832 + name: Center for AI Safety
1833 + domain: safe.ai
1834 + categories: [ai, research]
1835 + tier: B
1836 + weight: 1.1
1837 + aliases: [cais, center for ai safety, ai safety newsletter]
1838 + discover: { rss: true, sitemap: true, pages: true }
1839 + sensors:
1840 + - { name: newsroom, url: "https://safe.ai/news", type: HTML, connector: http, tier: B }
1841 + - { name: ai safety newsletter feed, url: "https://newsletter.safe.ai/feed", type: RSS, connector: rss, tier: B, config: { maxItems: 30 } }
1842 + - id: epoch-ai
1843 + name: Epoch AI
1844 + domain: epoch.ai
1845 + categories: [ai, research, statistics]
1846 + tier: B
1847 + weight: 1.1
1848 + aliases: [epoch ai, epoch]
1849 + discover: { rss: true, sitemap: true, pages: true }
1850 + sensors:
1851 + - { name: latest, url: "https://epoch.ai/latest", type: HTML, connector: http, tier: B }
1852 + - { name: gradient updates feed, url: "https://epochai.substack.com/feed", type: RSS, connector: rss, tier: C, config: { maxItems: 30 } }
1853 + - id: ai-now-institute
1854 + name: AI Now Institute
1855 + domain: ainowinstitute.org
1856 + categories: [ai, research, politics]
1857 + tier: C
1858 + aliases: [ai now, ai now institute]
1859 + discover: { rss: true }
1860 + sensors:
1861 + - { name: feed, url: "https://ainowinstitute.org/feed", type: RSS, connector: rss, tier: C }
1862 + - id: stanford-hai
1863 + name: Stanford HAI
1864 + domain: hai.stanford.edu
1865 + categories: [ai, research]
1866 + tier: B
1867 + weight: 1.1
1868 + aliases: [stanford hai, human-centered ai, ai index]
1869 + products:
1870 + - { name: AI Index, type: index, aliases: [ai index report] }
1871 + discover: { rss: true, sitemap: true }
1872 + sensors:
1873 + - { name: sitemap, url: "https://hai.stanford.edu/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
1874 + - id: partnership-on-ai
1875 + name: Partnership on AI
1876 + domain: partnershiponai.org
1877 + categories: [ai, research]
1878 + tier: C
1879 + aliases: [partnership on ai, pai]
1880 + discover: { rss: true }
1881 + sensors:
1882 + - { name: feed, url: "https://partnershiponai.org/feed/", type: RSS, connector: rss, tier: C }
1883 + - id: future-of-life-institute
1884 + name: Future of Life Institute
1885 + domain: futureoflife.org
1886 + categories: [ai, research, ngo]
1887 + tier: C
1888 + aliases: [fli, future of life institute]
1889 + discover: { rss: true }
1890 + sensors:
1891 + - { name: feed, url: "https://futureoflife.org/feed/", type: RSS, connector: rss, tier: C }
1892 + - id: govai
1893 + name: Centre for the Governance of AI
1894 + domain: governance.ai
1895 + homepage: https://www.governance.ai
1896 + categories: [ai, research, politics]
1897 + tier: C
1898 + aliases: [govai, centre for the governance of ai]
1899 + discover: { rss: true }
1900 + sensors:
1901 + - { name: blog feed, url: "https://www.governance.ai/post/rss.xml", type: RSS, connector: rss, tier: C }
1902 + - id: cset
1903 + name: Center for Security and Emerging Technology
1904 + domain: cset.georgetown.edu
1905 + categories: [ai, research, politics]
1906 + tier: B
1907 + aliases: [cset, georgetown cset]
1908 + discover: { rss: true }
1909 + sensors:
1910 + - { name: feed, url: "https://cset.georgetown.edu/feed/", type: RSS, connector: rss, tier: B }
1911 + - { name: publications feed, url: "https://cset.georgetown.edu/publications/feed/", type: RSS, connector: rss, tier: B }
1912 + - id: ada-lovelace-institute
1913 + name: Ada Lovelace Institute
1914 + domain: adalovelaceinstitute.org
1915 + homepage: https://www.adalovelaceinstitute.org
1916 + categories: [ai, research, politics]
1917 + tier: C
1918 + aliases: [ada lovelace institute]
1919 + discover: { rss: true, sitemap: true }
1920 + sensors:
1921 + - { name: sitemap, url: "https://www.adalovelaceinstitute.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
1922 + - id: alan-turing-institute
1923 + name: The Alan Turing Institute
1924 + domain: turing.ac.uk
1925 + homepage: https://www.turing.ac.uk
1926 + categories: [ai, research]
1927 + tier: C
1928 + aliases: [alan turing institute, turing institute]
1929 + discover: { rss: true, sitemap: true, pages: true }
1930 + notes: "Feeds answer 403; /news is a client-rendered listing (thin); nothing validated."
1931 + - id: metr
1932 + name: METR
1933 + domain: metr.org
1934 + categories: [ai, research]
1935 + tier: B
1936 + weight: 1.1
1937 + aliases: [metr, model evaluation and threat research, arc evals]
1938 + discover: { rss: true }
1939 + sensors:
1940 + - { name: feed, url: "https://metr.org/feed.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 30 } }
1941 + - id: apollo-research
1942 + name: Apollo Research
1943 + domain: apolloresearch.ai
1944 + homepage: https://www.apolloresearch.ai
1945 + categories: [ai, research]
1946 + tier: C
1947 + aliases: [apollo research]
1948 + discover: { rss: true, sitemap: true, pages: true }
1949 + sensors:
1950 + - { name: blog, url: "https://www.apolloresearch.ai/blog", type: HTML, connector: http, tier: C }
1951 + - { name: sitemap, url: "https://www.apolloresearch.ai/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1952 + - id: miri
1953 + name: Machine Intelligence Research Institute
1954 + domain: intelligence.org
1955 + categories: [ai, research]
1956 + tier: C
1957 + aliases: [miri, machine intelligence research institute]
1958 + discover: { rss: true }
1959 + sensors:
1960 + - { name: feed, url: "https://intelligence.org/feed/", type: RSS, connector: rss, tier: C }
1961 + - id: uk-aisi
1962 + name: UK AI Security Institute
1963 + domain: aisi.gov.uk
1964 + homepage: https://www.aisi.gov.uk
1965 + categories: [ai, government, research]
1966 + tier: B
1967 + weight: 1.2
1968 + aliases: [aisi, ai security institute, ai safety institute, uk aisi]
1969 + discover: { rss: true, sitemap: true, pages: true }
1970 + sensors:
1971 + - { name: blog, url: "https://www.aisi.gov.uk/blog", type: HTML, connector: http, tier: B }
1972 + - { name: sitemap, url: "https://www.aisi.gov.uk/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 1000 } }
1973 + - id: institute-for-progress
1974 + name: Institute for Progress
1975 + domain: ifp.org
1976 + categories: [research, politics, ai]
1977 + tier: C
1978 + aliases: [ifp, institute for progress]
1979 + discover: { rss: true }
1980 + sensors:
1981 + - { name: feed, url: "https://ifp.org/feed/", type: RSS, connector: rss, tier: C }
1982 + - id: itif
1983 + name: Information Technology and Innovation Foundation
1984 + domain: itif.org
1985 + categories: [research, politics, technology]
1986 + tier: C
1987 + aliases: [itif]
1988 + discover: { rss: true }
1989 + sensors:
1990 + - { name: feed, url: "https://itif.org/feed/rss.xml", type: RSS, connector: rss, tier: C }
1991 + - id: new-america
1992 + name: New America
1993 + domain: newamerica.org
1994 + homepage: https://www.newamerica.org
1995 + categories: [research, politics, technology]
1996 + tier: C
1997 + aliases: [new america, oti, open technology institute]
1998 + discover: { rss: true, sitemap: true }
1999 + sensors:
2000 + - { name: sitemap, url: "https://www.newamerica.org/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 4 } }
2001 + - id: data-and-society
2002 + name: Data & Society
2003 + domain: datasociety.net
2004 + categories: [research, technology, politics]
2005 + tier: C
2006 + aliases: [data & society, data and society]
2007 + discover: { rss: true }
2008 + notes: "/feed/ answers 200 with zero items and /library/feed/ answers 403; nothing validated."
2009 + - id: bellingcat
2010 + name: Bellingcat
2011 + domain: bellingcat.com
2012 + homepage: https://www.bellingcat.com
2013 + categories: [media, research, ngo]
2014 + tier: B
2015 + weight: 1.1
2016 + aliases: [bellingcat, osint]
2017 + discover: { rss: true }
2018 + sensors:
2019 + - { name: feed, url: "https://www.bellingcat.com/feed/", type: RSS, connector: rss, tier: B }
2020 + - id: icij
2021 + name: International Consortium of Investigative Journalists
2022 + domain: icij.org
2023 + homepage: https://www.icij.org
2024 + categories: [media, ngo]
2025 + tier: B
2026 + weight: 1.1
2027 + aliases: [icij, panama papers, pandora papers]
2028 + discover: { rss: true }
2029 + sensors:
2030 + - { name: feed, url: "https://www.icij.org/feed/", type: RSS, connector: rss, tier: B }
2031 + - id: occrp
2032 + name: Organized Crime and Corruption Reporting Project
2033 + domain: occrp.org
2034 + homepage: https://www.occrp.org
2035 + categories: [media, ngo]
2036 + tier: B
2037 + aliases: [occrp]
2038 + discover: { rss: true }
2039 + sensors:
2040 + - { name: feed, url: "https://www.occrp.org/en/feed", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
2041 + - id: gijn
2042 + name: Global Investigative Journalism Network
2043 + domain: gijn.org
2044 + categories: [media, ngo]
2045 + tier: C
2046 + aliases: [gijn]
2047 + discover: { rss: true, sitemap: true }
2048 + notes: "/rss and /feed/ answer 403 to non-browser clients (intermittently 200); nothing validated."
2049 +
2050 + # ───────────────────────── Extensions of founding-file organizations ─────────────────────────
2051 + - id: w3c
2052 + extend: true
2053 + sensors:
2054 + - { name: blog feed, url: "https://www.w3.org/blog/feed/", type: RSS, connector: rss, tier: B }
2055 + - id: ietf
2056 + extend: true
2057 + sensors:
2058 + - { name: last calls feed, url: "https://datatracker.ietf.org/feed/last-call/", type: ATOM, connector: rss, tier: B }
2059 + - id: icann
2060 + extend: true
2061 + sensors:
2062 + - { name: content feed, url: "https://www.icann.org/en/feed", type: RSS, connector: rss, tier: B }
2063 + - id: mozilla
2064 + extend: true
2065 + aliases: [mozilla foundation]
2066 + sensors:
2067 + - { name: foundation blog feed, url: "https://www.mozillafoundation.org/en/blog/rss/", type: RSS, connector: rss, tier: C }
2068 + - { name: security blog feed, url: "https://blog.mozilla.org/security/feed/", type: RSS, connector: rss, tier: B }
2069 + - id: wikimedia
2070 + extend: true
2071 + sensors:
2072 + - { name: diff blog feed, url: "https://diff.wikimedia.org/feed/", type: RSS, connector: rss, tier: C }
added config/sources.d/18-sports.yaml +1673 −0
@@ -0,0 +1,1673 @@
1 +# config/sources.d/18-sports.yaml — sports: leagues, federations, Olympic movement, anti-doping, teams & venues,
2 +# sports media/data/betting, gear & fitness. Authored 2026-09-08; every sensor validated with
3 +# apps/engine/src/validate.ts (rss · sitemap · statuspage · github · jsonlist · http only).
4 +# Blocked / client-rendered sites are recorded in `notes:` rather than added as sensors.
5 +sources:
6 + # ───────────────────────── A · North-American leagues ─────────────────────────
7 + - id: nhl
8 + name: National Hockey League
9 + domain: nhl.com
10 + homepage: https://www.nhl.com
11 + categories: [sports, hockey]
12 + tier: A
13 + weight: 1.3
14 + aliases: [nhl, ligue nationale de hockey, lnh]
15 + discover: { rss: false, sitemap: true, pages: true }
16 + llm: false
17 + notes: "nhl.com news is client-rendered; no RSS. Stories sitemap is the only structured feed."
18 + sensors:
19 + - { name: stories sitemap, url: "https://www.nhl.com/sitemap/sitemap-stories.xml", type: SITEMAP, connector: sitemap, tier: A, config: { maxUrls: 2000 } }
20 + - { name: news page, url: "https://www.nhl.com/news/", type: HTML, connector: http, tier: A }
21 + - id: nba
22 + name: National Basketball Association
23 + domain: nba.com
24 + homepage: https://www.nba.com
25 + categories: [sports, basketball]
26 + tier: A
27 + weight: 1.3
28 + aliases: [nba]
29 + discover: { rss: false, sitemap: true }
30 + llm: false
31 + notes: "nba.com is client-rendered; article sitemaps behind bot protection (403). News sitemap index only."
32 + sensors:
33 + - { name: news sitemap, url: "https://www.nba.com/sitemap_news.xml", type: SITEMAP, connector: sitemap, tier: A, config: { maxUrls: 2000 } }
34 + - id: mlb
35 + name: Major League Baseball
36 + domain: mlb.com
37 + homepage: https://www.mlb.com
38 + categories: [sports, baseball]
39 + tier: A
40 + weight: 1.3
41 + aliases: [mlb, baseball majeur]
42 + discover: { rss: true, sitemap: true, pages: true }
43 + llm: false
44 + sensors:
45 + - { name: news feed, url: "https://www.mlb.com/feeds/news/rss.xml", type: RSS, connector: rss, tier: A }
46 + - { name: 48h news sitemap, url: "https://www.mlb.com/sitemaps/48-hr-news.xml.gz", type: SITEMAP, connector: sitemap, tier: A, config: { maxUrls: 2000 } }
47 + - id: nfl
48 + name: National Football League
49 + domain: nfl.com
50 + homepage: https://www.nfl.com
51 + categories: [sports, football]
52 + tier: A
53 + weight: 1.3
54 + aliases: [nfl]
55 + discover: { rss: false, sitemap: true, pages: true }
56 + llm: false
57 + sensors:
58 + - { name: fast-changing sitemap, url: "https://www.nfl.com/sitemap-fast-changing.xml", type: SITEMAP, connector: sitemap, tier: A, config: { maxUrls: 2000 } }
59 + - { name: news page, url: "https://www.nfl.com/news", type: HTML, connector: http, tier: A }
60 + - id: mls
61 + name: Major League Soccer
62 + domain: mlssoccer.com
63 + homepage: https://www.mlssoccer.com
64 + categories: [sports, soccer]
65 + tier: B
66 + weight: 1.1
67 + aliases: [mls, major league soccer]
68 + discover: { rss: false, sitemap: true, pages: true }
69 + llm: false
70 + sensors:
71 + - { name: stories sitemap, url: "https://www.mlssoccer.com/sitemap-stories.xml", type: SITEMAP, connector: sitemap, tier: A, config: { maxUrls: 2000 } }
72 + - { name: news page, url: "https://www.mlssoccer.com/news/", type: HTML, connector: http, tier: B }
73 + - id: wnba
74 + name: Women's National Basketball Association
75 + domain: wnba.com
76 + homepage: https://www.wnba.com
77 + categories: [sports, basketball]
78 + tier: B
79 + aliases: [wnba]
80 + discover: { rss: false, sitemap: true }
81 + llm: false
82 + sensors:
83 + - { name: news sitemap, url: "https://www.wnba.com/sitemap_news.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
84 + - id: nwsl
85 + name: National Women's Soccer League
86 + domain: nwslsoccer.com
87 + homepage: https://www.nwslsoccer.com
88 + categories: [sports, soccer]
89 + tier: B
90 + aliases: [nwsl]
91 + discover: { rss: false, sitemap: true }
92 + llm: false
93 + sensors:
94 + - { name: article sitemap, url: "https://www.nwslsoccer.com/sitemap-article.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
95 + - id: cfl
96 + name: Canadian Football League
97 + domain: cfl.ca
98 + homepage: https://www.cfl.ca
99 + categories: [sports, football]
100 + tier: B
101 + weight: 1.1
102 + aliases: [cfl, ligue canadienne de football, lcf]
103 + discover: { rss: true, sitemap: true }
104 + llm: false
105 + sensors:
106 + - { name: sitemap, url: "https://cfl.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000, maxChildren: 10 } }
107 + - id: pwhl
108 + name: Professional Women's Hockey League
109 + domain: thepwhl.com
110 + homepage: https://www.thepwhl.com
111 + categories: [sports, hockey]
112 + tier: B
113 + aliases: [pwhl, lphf, ligue professionnelle de hockey féminin]
114 + discover: { rss: true, sitemap: true, pages: true }
115 + llm: false
116 + sensors:
117 + - { name: sitemap (en), url: "https://www.thepwhl.com/en/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
118 + - id: ncaa
119 + name: NCAA
120 + domain: ncaa.com
121 + homepage: https://www.ncaa.com
122 + categories: [sports, education]
123 + tier: B
124 + weight: 1.1
125 + aliases: [ncaa, national collegiate athletic association, march madness]
126 + discover: { rss: true, sitemap: true }
127 + llm: false
128 + sensors:
129 + - { name: news sitemap, url: "https://www.ncaa.com/sitemap/news.xml", type: SITEMAP, connector: sitemap, tier: A, config: { maxUrls: 2000 } }
130 + # ───────────────────────── B · Football (soccer) federations & leagues ─────────────────────────
131 + - id: fifa
132 + name: FIFA
133 + domain: fifa.com
134 + homepage: https://www.fifa.com
135 + categories: [sports, soccer, international]
136 + tier: A
137 + weight: 1.4
138 + aliases: [fifa, fédération internationale de football association, world cup 2026]
139 + discover: { rss: true, sitemap: true, pages: true }
140 + llm: true
141 + notes: "fifa.com and inside.fifa.com are client-rendered (Next.js). Only the FIFA+ web API sitemap index is structured."
142 + sensors:
143 + - { name: fifa+ sitemap (en), url: "https://cxm-api.fifa.com/fifaplusweb/api/sitemap-en", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
144 + - id: uefa
145 + name: UEFA
146 + domain: uefa.com
147 + homepage: https://www.uefa.com
148 + categories: [sports, soccer, international]
149 + tier: A
150 + weight: 1.3
151 + aliases: [uefa, champions league, europa league, euro 2028]
152 + discover: { rss: true, sitemap: true }
153 + llm: false
154 + sensors:
155 + - { name: latest news sitemap, url: "https://www.uefa.com/sitemap/news/latest.xml", type: SITEMAP, connector: sitemap, tier: A, config: { maxUrls: 2000 } }
156 + - { name: documents sitemap, url: "https://www.uefa.com/sitemap/document/index.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000, maxChildren: 10 } }
157 + - id: concacaf
158 + name: Concacaf
159 + domain: concacaf.com
160 + homepage: https://www.concacaf.com
161 + categories: [sports, soccer, international]
162 + tier: B
163 + aliases: [concacaf, gold cup, champions cup]
164 + discover: { rss: true, sitemap: true, pages: true }
165 + llm: false
166 + sensors:
167 + - { name: article sitemap, url: "https://www.concacaf.com/sitemap-article.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
168 + - { name: news page, url: "https://www.concacaf.com/news", type: HTML, connector: http, tier: B }
169 + - id: conmebol
170 + name: CONMEBOL
171 + domain: conmebol.com
172 + homepage: https://www.conmebol.com
173 + categories: [sports, soccer, international]
174 + tier: B
175 + aliases: [conmebol, copa libertadores, copa américa]
176 + discover: { rss: true, sitemap: true }
177 + llm: false
178 + sensors:
179 + - { name: news feed, url: "https://www.conmebol.com/feed/", type: RSS, connector: rss, tier: B }
180 + - id: canada-soccer
181 + name: Canada Soccer
182 + domain: canadasoccer.com
183 + homepage: https://www.canadasoccer.com
184 + categories: [sports, soccer]
185 + tier: B
186 + weight: 1.1
187 + aliases: [canada soccer, soccer canada, canmnt, canwnt]
188 + discover: { rss: true, sitemap: true }
189 + sensors:
190 + - { name: pressroom feed, url: "https://news.canadasoccer.com/feed", type: RSS, connector: rss, tier: B }
191 + - id: la-liga
192 + name: LALIGA
193 + domain: laliga.com
194 + homepage: https://www.laliga.com
195 + categories: [sports, soccer]
196 + tier: B
197 + weight: 1.1
198 + aliases: [laliga, la liga, liga española]
199 + discover: { rss: false, sitemap: true, pages: true }
200 + llm: false
201 + notes: "News sitemaps (assets.laliga.com/sitemap/sitemap-news-N.xml) are 40 MB archives — not polled."
202 + sensors:
203 + - { name: news page, url: "https://www.laliga.com/news", type: HTML, connector: http, tier: B }
204 + - id: bundesliga
205 + name: Bundesliga (DFL)
206 + domain: bundesliga.com
207 + homepage: https://www.bundesliga.com
208 + categories: [sports, soccer]
209 + tier: B
210 + weight: 1.1
211 + aliases: [bundesliga, dfl, deutsche fußball liga]
212 + discover: { rss: true, sitemap: true }
213 + llm: false
214 + sensors:
215 + - { name: news feed (en), url: "https://www.bundesliga.com/rss/en/rss-news.rss", type: RSS, connector: rss, tier: A }
216 + - { name: news sitemap (en), url: "https://www.bundesliga.com/sitemaps/en/sitemap-news.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
217 + - id: serie-a
218 + name: Lega Serie A
219 + domain: legaseriea.it
220 + homepage: https://www.legaseriea.it
221 + categories: [sports, soccer]
222 + tier: B
223 + aliases: [serie a, lega serie a, lega calcio]
224 + discover: { rss: false, sitemap: true }
225 + llm: false
226 + sensors:
227 + - { name: article sitemap, url: "https://www.legaseriea.it/sitemap-article.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
228 + - id: ligue-1
229 + name: Ligue 1 (LFP)
230 + domain: ligue1.com
231 + homepage: https://www.ligue1.com
232 + categories: [sports, soccer]
233 + tier: B
234 + aliases: [ligue 1, ligue 1 mcdonald's, lfp, ligue de football professionnel]
235 + discover: { rss: false, sitemap: true }
236 + llm: false
237 + sensors:
238 + - { name: articles sitemap (en), url: "https://ligue1.com/api/sitemap/sitemap-articles-l1-en", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
239 + - { name: articles sitemap (fr), url: "https://ligue1.com/api/sitemap/sitemap-articles-l1-fr", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
240 + - id: premier-league
241 + name: Premier League
242 + domain: premierleague.com
243 + homepage: https://www.premierleague.com
244 + categories: [sports, soccer]
245 + tier: B
246 + weight: 1.2
247 + aliases: [premier league, epl]
248 + discover: { rss: false, sitemap: false }
249 + notes: "premierleague.com answers 429 to sitemap/feed requests and the news pages are client-rendered — no validated sensor (2026-09-08)."
250 + - id: us-soccer
251 + name: U.S. Soccer
252 + domain: ussoccer.com
253 + homepage: https://www.ussoccer.com
254 + categories: [sports, soccer]
255 + tier: C
256 + aliases: [us soccer, usmnt, uswnt, united states soccer federation]
257 + discover: { rss: true, sitemap: true }
258 + notes: "ussoccer.com is a client-rendered SPA (sitemap.xml and /rss return HTML) — no validated sensor (2026-09-08)."
259 + # ───────────────────────── C · Motorsport ─────────────────────────
260 + - id: fia
261 + name: FIA
262 + domain: fia.com
263 + homepage: https://www.fia.com
264 + categories: [sports, motorsport, international]
265 + tier: B
266 + weight: 1.2
267 + aliases: [fia, fédération internationale de l'automobile]
268 + discover: { rss: true, sitemap: true, pages: true }
269 + sensors:
270 + - { name: news feed, url: "https://www.fia.com/rss/news", type: RSS, connector: rss, tier: A }
271 + - { name: newsroom page, url: "https://www.fia.com/newsroom", type: HTML, connector: http, tier: B }
272 + - id: formula-1
273 + name: Formula 1
274 + domain: formula1.com
275 + homepage: https://www.formula1.com
276 + categories: [sports, motorsport]
277 + tier: A
278 + weight: 1.3
279 + aliases: [formula 1, f1, formule 1, formula one]
280 + discover: { rss: false, sitemap: true }
281 + llm: false
282 + sensors:
283 + - { name: article sitemap, url: "https://www.formula1.com/en/latest/article/sitemap.xml", type: SITEMAP, connector: sitemap, tier: A, config: { maxUrls: 2000, maxChildren: 3 } }
284 + - id: indycar
285 + name: INDYCAR
286 + domain: indycar.com
287 + homepage: https://www.indycar.com
288 + categories: [sports, motorsport]
289 + tier: B
290 + aliases: [indycar, ntt indycar series, indy 500, indianapolis 500]
291 + discover: { rss: false, sitemap: true, pages: true }
292 + llm: false
293 + sensors:
294 + - { name: news page, url: "https://www.indycar.com/news", type: HTML, connector: http, tier: B }
295 + - id: fia-wec
296 + name: FIA World Endurance Championship
297 + domain: fiawec.com
298 + homepage: https://www.fiawec.com
299 + categories: [sports, motorsport]
300 + tier: B
301 + aliases: [wec, fia wec, 24 heures du mans, le mans]
302 + discover: { rss: false, sitemap: true }
303 + llm: false
304 + sensors:
305 + - { name: articles sitemap, url: "https://www.fiawec.com/sitemap-articles.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
306 + - id: nascar
307 + name: NASCAR
308 + domain: nascar.com
309 + homepage: https://www.nascar.com
310 + categories: [sports, motorsport]
311 + tier: B
312 + aliases: [nascar, cup series]
313 + discover: { rss: false, sitemap: false }
314 + notes: "nascar.com answers 403 (bot management) to feeds, sitemaps and news pages — no validated sensor (2026-09-08)."
315 + - id: motogp
316 + name: MotoGP (Dorna)
317 + domain: motogp.com
318 + homepage: https://www.motogp.com
319 + categories: [sports, motorsport]
320 + tier: B
321 + aliases: [motogp, dorna sports]
322 + discover: { rss: false, sitemap: false, pages: true }
323 + llm: false
324 + sensors:
325 + - { name: news page, url: "https://www.motogp.com/en/news", type: HTML, connector: http, tier: B }
326 + # ───────────────────────── D · Tennis & golf ─────────────────────────
327 + - id: atp-tour
328 + name: ATP Tour
329 + domain: atptour.com
330 + homepage: https://www.atptour.com
331 + categories: [sports, tennis]
332 + tier: B
333 + aliases: [atp, atp tour]
334 + discover: { rss: false, sitemap: false }
335 + notes: "atptour.com is behind bot management (403 on news, RSS and sitemap) — no validated sensor (2026-09-08)."
336 + - id: wta
337 + name: WTA
338 + domain: wtatennis.com
339 + homepage: https://www.wtatennis.com
340 + categories: [sports, tennis]
341 + tier: B
342 + aliases: [wta, women's tennis association]
343 + discover: { rss: false, sitemap: false, pages: true }
344 + llm: false
345 + sensors:
346 + - { name: news page, url: "https://www.wtatennis.com/news", type: HTML, connector: http, tier: B }
347 + - id: itf
348 + name: International Tennis Federation
349 + domain: itftennis.com
350 + homepage: https://www.itftennis.com
351 + categories: [sports, tennis, international]
352 + tier: C
353 + aliases: [itf, davis cup, billie jean king cup]
354 + discover: { rss: true, sitemap: true }
355 + notes: "itftennis.com is client-rendered (news list returns a 200-byte shell) — no validated sensor (2026-09-08)."
356 + - id: tennis-canada
357 + name: Tennis Canada
358 + domain: tenniscanada.com
359 + homepage: https://www.tenniscanada.com
360 + categories: [sports, tennis]
361 + tier: B
362 + aliases: [tennis canada, national bank open, omnium banque nationale]
363 + products:
364 + - { name: National Bank Open, type: service, aliases: [nbo, omnium banque nationale, rogers cup] }
365 + discover: { rss: true, sitemap: true, pages: true }
366 + llm: false
367 + sensors:
368 + - { name: sitemap index, url: "https://www.tenniscanada.com/sitemaps-1-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000, maxChildren: 16 } }
369 + - { name: national bank open news, url: "https://nationalbankopen.com/news", type: HTML, connector: http, tier: B }
370 + - id: pga-tour
371 + name: PGA TOUR
372 + domain: pgatour.com
373 + homepage: https://www.pgatour.com
374 + categories: [sports, golf]
375 + tier: B
376 + weight: 1.1
377 + aliases: [pga tour, pga]
378 + discover: { rss: false, sitemap: true, pages: true }
379 + llm: false
380 + sensors:
381 + - { name: articles sitemap, url: "https://www.pgatour.com/sitemap/articles.xml", type: SITEMAP, connector: sitemap, tier: A, config: { maxUrls: 2000 } }
382 + - { name: news page, url: "https://www.pgatour.com/news", type: HTML, connector: http, tier: B }
383 + - id: lpga
384 + name: LPGA
385 + domain: lpga.com
386 + homepage: https://www.lpga.com
387 + categories: [sports, golf]
388 + tier: B
389 + aliases: [lpga, ladies professional golf association]
390 + discover: { rss: false, sitemap: false, pages: true }
391 + llm: false
392 + sensors:
393 + - { name: news page, url: "https://www.lpga.com/news", type: HTML, connector: http, tier: B }
394 + - id: dp-world-tour
395 + name: DP World Tour
396 + domain: europeantour.com
397 + homepage: https://www.europeantour.com
398 + categories: [sports, golf]
399 + tier: B
400 + aliases: [dp world tour, european tour, ryder cup europe]
401 + discover: { rss: false, sitemap: true }
402 + llm: false
403 + sensors:
404 + - { name: article sitemap, url: "https://www.europeantour.com/sitemap-article.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
405 + - id: usga
406 + name: USGA
407 + domain: usga.org
408 + homepage: https://www.usga.org
409 + categories: [sports, golf]
410 + tier: C
411 + aliases: [usga, united states golf association, us open golf]
412 + discover: { rss: false, sitemap: false }
413 + notes: "usga.org answers 403 to sitemap and news pages (Adobe AEM bot rules) — no validated sensor (2026-09-08)."
414 + - id: r-and-a
415 + name: The R&A
416 + domain: randa.org
417 + homepage: https://www.randa.org
418 + categories: [sports, golf]
419 + tier: C
420 + aliases: [r&a, the r&a, royal and ancient, the open championship]
421 + discover: { rss: false, sitemap: true }
422 + llm: false
423 + sensors:
424 + - { name: sitemap, url: "https://www.randa.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
425 + - id: golf-canada
426 + name: Golf Canada
427 + domain: golfcanada.ca
428 + homepage: https://www.golfcanada.ca
429 + categories: [sports, golf]
430 + tier: B
431 + aliases: [golf canada, rbc canadian open, cpkc women's open]
432 + discover: { rss: true, sitemap: true }
433 + sensors:
434 + - { name: news feed, url: "https://www.golfcanada.ca/feed/", type: RSS, connector: rss, tier: B }
435 + # ───────────────────────── E · Combat sports & entertainment ─────────────────────────
436 + - id: ufc
437 + name: UFC
438 + domain: ufc.com
439 + homepage: https://www.ufc.com
440 + categories: [sports, combat-sports]
441 + tier: B
442 + weight: 1.1
443 + aliases: [ufc, ultimate fighting championship]
444 + discover: { rss: true, sitemap: true }
445 + llm: false
446 + sensors:
447 + - { name: news feed, url: "https://www.ufc.com/rss/news", type: RSS, connector: rss, tier: A }
448 + - { name: news sitemap, url: "https://www.ufc.com/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
449 + - id: tko-group
450 + name: TKO Group Holdings (WWE · UFC · Zuffa Boxing)
451 + domain: tkogrp.com
452 + homepage: https://tkogrp.com
453 + categories: [sports, combat-sports, entertainment, finance]
454 + tier: B
455 + weight: 1.1
456 + aliases: [tko, tko group, wwe, world wrestling entertainment, zuffa]
457 + products:
458 + - { name: WWE, type: product, aliases: [wwe, wrestlemania, raw, smackdown] }
459 + discover: { rss: true, sitemap: true }
460 + sensors:
461 + - { name: press releases feed, url: "https://tkogrp.com/news/feed/", type: RSS, connector: rss, tier: B }
462 + - { name: wwe news page, url: "https://www.wwe.com/news", type: HTML, connector: http, tier: B }
463 + - id: pfl
464 + name: Professional Fighters League
465 + domain: pflmma.com
466 + homepage: https://pflmma.com
467 + categories: [sports, combat-sports]
468 + tier: C
469 + aliases: [pfl, professional fighters league]
470 + discover: { rss: false, sitemap: true, pages: true }
471 + llm: false
472 + sensors:
473 + - { name: news page, url: "https://pflmma.com/news", type: HTML, connector: http, tier: C }
474 + # ───────────────────────── F · International federations ─────────────────────────
475 + - id: world-athletics
476 + name: World Athletics
477 + domain: worldathletics.org
478 + homepage: https://worldathletics.org
479 + categories: [sports, athletics, international]
480 + tier: B
481 + weight: 1.1
482 + aliases: [world athletics, iaaf]
483 + discover: { rss: true, sitemap: true }
484 + sensors:
485 + - { name: news feed, url: "https://worldathletics.org/news/rss", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
486 + - id: world-aquatics
487 + name: World Aquatics
488 + domain: worldaquatics.com
489 + homepage: https://www.worldaquatics.com
490 + categories: [sports, aquatics, international]
491 + tier: C
492 + aliases: [world aquatics, fina]
493 + discover: { rss: false, sitemap: false, pages: true }
494 + llm: false
495 + sensors:
496 + - { name: news page, url: "https://www.worldaquatics.com/news", type: HTML, connector: http, tier: C }
497 + - id: fig
498 + name: International Gymnastics Federation
499 + domain: gymnastics.sport
500 + homepage: https://www.gymnastics.sport
501 + categories: [sports, gymnastics, international]
502 + tier: C
503 + aliases: [fig, fédération internationale de gymnastique, world gymnastics]
504 + discover: { rss: false, sitemap: false, pages: true }
505 + llm: false
506 + sensors:
507 + - { name: news page, url: "https://www.gymnastics.sport/site/pages/news.php", type: HTML, connector: http, tier: C }
508 + - id: fis-ski
509 + name: FIS (International Ski and Snowboard Federation)
510 + domain: fis-ski.com
511 + homepage: https://www.fis-ski.com
512 + categories: [sports, winter-sports, international]
513 + tier: C
514 + aliases: [fis, fédération internationale de ski, ski and snowboard federation]
515 + discover: { rss: false, sitemap: true }
516 + llm: false
517 + notes: "fis-ski.com has no news feed; the single sitemap.xml lists ~22 000 URLs (capped)."
518 + sensors:
519 + - { name: sitemap, url: "https://www.fis-ski.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
520 + - id: iihf
521 + name: IIHF
522 + domain: iihf.com
523 + homepage: https://www.iihf.com
524 + categories: [sports, hockey, international]
525 + tier: B
526 + aliases: [iihf, international ice hockey federation, world juniors, championnat du monde de hockey]
527 + discover: { rss: false, sitemap: false, pages: true }
528 + llm: false
529 + notes: "iihf.com returns 403 on sitemap.xml and /en/rss (Cloudflare); only the news HTML page is reachable."
530 + sensors:
531 + - { name: news page, url: "https://www.iihf.com/en/news", type: HTML, connector: http, tier: B }
532 + - id: fiba
533 + name: FIBA
534 + domain: fiba.basketball
535 + homepage: https://www.fiba.basketball
536 + categories: [sports, basketball, international]
537 + tier: B
538 + aliases: [fiba, international basketball federation]
539 + discover: { rss: false, sitemap: false, pages: true }
540 + llm: false
541 + sensors:
542 + - { name: news page, url: "https://www.fiba.basketball/en/news", type: HTML, connector: http, tier: B }
543 + - id: world-rugby
544 + name: World Rugby
545 + domain: world.rugby
546 + homepage: https://www.world.rugby
547 + categories: [sports, rugby, international]
548 + tier: B
549 + aliases: [world rugby, rugby world cup]
550 + discover: { rss: true, sitemap: true }
551 + sensors:
552 + - { name: news feed, url: "https://www.world.rugby/rss.xml", type: RSS, connector: rss, tier: B }
553 + - id: icc
554 + name: International Cricket Council
555 + domain: icc-cricket.com
556 + homepage: https://www.icc-cricket.com
557 + categories: [sports, cricket, international]
558 + tier: B
559 + weight: 1.1
560 + aliases: [icc, international cricket council, cricket world cup]
561 + discover: { rss: false, sitemap: true, pages: true }
562 + llm: false
563 + sensors:
564 + - { name: article sitemap index, url: "https://www.icc-cricket.com/sitemap-article-index.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000, maxChildren: 2 } }
565 + - { name: news page, url: "https://www.icc-cricket.com/news", type: HTML, connector: http, tier: B }
566 + - id: wbsc
567 + name: WBSC
568 + domain: wbsc.org
569 + homepage: https://www.wbsc.org
570 + categories: [sports, baseball, international]
571 + tier: C
572 + aliases: [wbsc, world baseball softball confederation]
573 + discover: { rss: false, sitemap: false }
574 + notes: "wbsc.org answers 403 to bot user agents on news and sitemap — no validated sensor (2026-09-08)."
575 + - id: tour-de-france
576 + name: Tour de France (A.S.O.)
577 + domain: letour.fr
578 + homepage: https://www.letour.fr
579 + categories: [sports, cycling]
580 + tier: B
581 + aliases: [tour de france, aso, amaury sport organisation, le tour]
582 + discover: { rss: false, sitemap: true, pages: true }
583 + llm: false
584 + sensors:
585 + - { name: news page (en), url: "https://www.letour.fr/en/news", type: HTML, connector: http, tier: B }
586 + - { name: sitemap, url: "https://www.letour.fr/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 5 } }
587 + - id: uci
588 + name: UCI (Union Cycliste Internationale)
589 + domain: uci.org
590 + homepage: https://www.uci.org
591 + categories: [sports, cycling, international]
592 + tier: B
593 + aliases: [uci, union cycliste internationale]
594 + discover: { rss: false, sitemap: true, pages: true }
595 + llm: false
596 + sensors:
597 + - { name: sitemap, url: "https://www.uci.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
598 + - id: fei
599 + name: FEI (Fédération Équestre Internationale)
600 + domain: fei.org
601 + homepage: https://www.fei.org
602 + categories: [sports, equestrian, international]
603 + tier: C
604 + aliases: [fei, fédération équestre internationale]
605 + discover: { rss: false, sitemap: false, pages: true }
606 + llm: false
607 + notes: "www.fei.org/news is 403; inside.fei.org (official media site) is server-rendered."
608 + sensors:
609 + - { name: inside fei news, url: "https://inside.fei.org/news", type: HTML, connector: http, tier: C }
610 + - id: isu
611 + name: International Skating Union
612 + domain: isu.org
613 + homepage: https://www.isu.org
614 + categories: [sports, winter-sports, international]
615 + tier: C
616 + aliases: [isu, international skating union]
617 + discover: { rss: false, sitemap: false }
618 + notes: "isu.org is a client-rendered SPA (every path returns the same 48 KB shell, sitemap.xml is HTML) — no validated sensor (2026-09-08)."
619 + - id: ibu
620 + name: International Biathlon Union
621 + domain: biathlonworld.com
622 + homepage: https://www.biathlonworld.com
623 + categories: [sports, winter-sports, international]
624 + tier: C
625 + aliases: [ibu, international biathlon union, biathlon]
626 + discover: { rss: false, sitemap: true, pages: true }
627 + llm: false
628 + sensors:
629 + - { name: news page, url: "https://www.biathlonworld.com/news", type: HTML, connector: http, tier: C }
630 + - { name: sitemap, url: "https://www.biathlonworld.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
631 + - id: fil-luge
632 + name: International Luge Federation
633 + domain: fil-luge.org
634 + homepage: https://www.fil-luge.org
635 + categories: [sports, winter-sports, international]
636 + tier: D
637 + aliases: [fil, international luge federation, luge]
638 + discover: { rss: false, sitemap: true }
639 + llm: false
640 + notes: "/en/news returns HTTP 500 to non-browser clients; the sitemap is the only structured endpoint."
641 + sensors:
642 + - { name: sitemap, url: "https://www.fil-luge.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxUrls: 2000 } }
643 + - id: ibsf
644 + name: IBSF (Bobsleigh & Skeleton)
645 + domain: ibsf.org
646 + homepage: https://www.ibsf.org
647 + categories: [sports, winter-sports, international]
648 + tier: D
649 + aliases: [ibsf, fibt, international bobsleigh and skeleton federation]
650 + discover: { rss: false, sitemap: false, pages: true }
651 + llm: false
652 + sensors:
653 + - { name: news page, url: "https://www.ibsf.org/en/news", type: HTML, connector: http, tier: D }
654 + - id: world-curling
655 + name: World Curling
656 + domain: worldcurling.org
657 + homepage: https://worldcurling.org
658 + categories: [sports, curling, international]
659 + tier: C
660 + aliases: [world curling, wcf, world curling federation]
661 + discover: { rss: true, sitemap: true }
662 + sensors:
663 + - { name: news feed, url: "https://worldcurling.org/feed/", type: RSS, connector: rss, tier: C }
664 + # ───────────────────────── G · Canadian national sport organizations ─────────────────────────
665 + - id: hockey-canada
666 + name: Hockey Canada
667 + domain: hockeycanada.ca
668 + homepage: https://www.hockeycanada.ca
669 + categories: [sports, hockey]
670 + tier: B
671 + weight: 1.1
672 + aliases: [hockey canada]
673 + discover: { rss: false, sitemap: false }
674 + notes: "hockeycanada.ca answers 403 to non-browser clients on /news, sitemap.xml and the RSS path — no validated sensor (2026-09-08)."
675 + - id: canada-basketball
676 + name: Canada Basketball
677 + domain: basketball.ca
678 + homepage: https://www.basketball.ca
679 + categories: [sports, basketball]
680 + tier: C
681 + aliases: [canada basketball]
682 + discover: { rss: false, sitemap: true }
683 + llm: false
684 + sensors:
685 + - { name: sitemap, url: "https://basketball.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
686 + - id: baseball-canada
687 + name: Baseball Canada
688 + domain: baseball.ca
689 + homepage: https://baseball.ca
690 + categories: [sports, baseball]
691 + tier: C
692 + aliases: [baseball canada]
693 + discover: { rss: false, sitemap: false, pages: true }
694 + llm: false
695 + sensors:
696 + - { name: news page, url: "https://baseball.ca/news", type: HTML, connector: http, tier: C }
697 + - id: rugby-canada
698 + name: Rugby Canada
699 + domain: rugby.ca
700 + homepage: https://rugby.ca
701 + categories: [sports, rugby]
702 + tier: C
703 + aliases: [rugby canada]
704 + discover: { rss: false, sitemap: true }
705 + llm: false
706 + sensors:
707 + - { name: sitemap, url: "https://rugby.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
708 + - id: cycling-canada
709 + name: Cycling Canada
710 + domain: cyclingcanada.ca
711 + homepage: https://cyclingcanada.ca
712 + categories: [sports, cycling]
713 + tier: C
714 + aliases: [cycling canada, cyclisme canada]
715 + discover: { rss: true, sitemap: true }
716 + sensors:
717 + - { name: news feed, url: "https://cyclingcanada.ca/feed/", type: RSS, connector: rss, tier: C }
718 + - id: skate-canada
719 + name: Skate Canada
720 + domain: skatecanada.ca
721 + homepage: https://skatecanada.ca
722 + categories: [sports, winter-sports]
723 + tier: C
724 + aliases: [skate canada, patinage canada]
725 + discover: { rss: true, sitemap: true }
726 + sensors:
727 + - { name: news feed, url: "https://skatecanada.ca/feed/", type: RSS, connector: rss, tier: C }
728 + - id: curling-canada
729 + name: Curling Canada
730 + domain: curling.ca
731 + homepage: https://www.curling.ca
732 + categories: [sports, curling]
733 + tier: C
734 + aliases: [curling canada, brier, scotties tournament of hearts]
735 + discover: { rss: true, sitemap: true }
736 + sensors:
737 + - { name: news feed, url: "https://www.curling.ca/feed/", type: RSS, connector: rss, tier: C }
738 + - id: alpine-canada
739 + name: Alpine Canada
740 + domain: alpinecanada.org
741 + homepage: https://alpinecanada.org
742 + categories: [sports, winter-sports]
743 + tier: C
744 + aliases: [alpine canada, canada alpin]
745 + discover: { rss: false, sitemap: false, pages: true }
746 + llm: false
747 + sensors:
748 + - { name: news page, url: "https://alpinecanada.org/news", type: HTML, connector: http, tier: C }
749 + - id: freestyle-canada
750 + name: Freestyle Canada
751 + domain: freestylecanada.ski
752 + homepage: https://www.freestylecanada.ski
753 + categories: [sports, winter-sports]
754 + tier: D
755 + aliases: [freestyle canada]
756 + discover: { rss: false, sitemap: true, pages: true }
757 + llm: false
758 + sensors:
759 + - { name: sitemap, url: "https://www.freestylecanada.ski/sitemap.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxUrls: 2000 } }
760 + - id: speed-skating-canada
761 + name: Speed Skating Canada
762 + domain: speedskating.ca
763 + homepage: https://speedskating.ca
764 + categories: [sports, winter-sports]
765 + tier: C
766 + aliases: [speed skating canada, patinage de vitesse canada]
767 + discover: { rss: true, sitemap: true }
768 + sensors:
769 + - { name: news feed, url: "https://speedskating.ca/news/feed/", type: RSS, connector: rss, tier: C }
770 + - id: swimming-canada
771 + name: Swimming Canada
772 + domain: swimming.ca
773 + homepage: https://www.swimming.ca
774 + categories: [sports, aquatics]
775 + tier: C
776 + aliases: [swimming canada, natation canada]
777 + discover: { rss: true, sitemap: true, pages: true }
778 + llm: false
779 + sensors:
780 + - { name: news page, url: "https://www.swimming.ca/en/news/", type: HTML, connector: http, tier: C }
781 + - { name: sitemap index, url: "https://www.swimming.ca/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 11 } }
782 + - id: athletics-canada
783 + name: Athletics Canada
784 + domain: athletics.ca
785 + homepage: https://athletics.ca
786 + categories: [sports, athletics]
787 + tier: C
788 + aliases: [athletics canada, athlétisme canada]
789 + discover: { rss: true, sitemap: true }
790 + sensors:
791 + - { name: news feed, url: "https://athletics.ca/feed/", type: RSS, connector: rss, tier: C, config: { maxItems: 60 } }
792 + - id: own-the-podium
793 + name: Own the Podium
794 + domain: ownthepodium.org
795 + homepage: https://www.ownthepodium.org
796 + categories: [sports, government]
797 + tier: D
798 + aliases: [own the podium, otp, à nous le podium]
799 + discover: { rss: false, sitemap: true }
800 + llm: false
801 + sensors:
802 + - { name: sitemap, url: "https://www.ownthepodium.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxUrls: 2000 } }
803 + - id: canadian-olympic-committee
804 + name: Canadian Olympic Committee (Team Canada)
805 + domain: olympic.ca
806 + homepage: https://olympic.ca
807 + categories: [sports, olympics]
808 + tier: B
809 + weight: 1.1
810 + aliases: [canadian olympic committee, coc, team canada, équipe canada, comité olympique canadien]
811 + discover: { rss: true, sitemap: true }
812 + sensors:
813 + - { name: news feed, url: "https://olympic.ca/category/news/feed/", type: RSS, connector: rss, tier: B }
814 + - id: canadian-paralympic-committee
815 + name: Canadian Paralympic Committee
816 + domain: paralympic.ca
817 + homepage: https://paralympic.ca
818 + categories: [sports, olympics]
819 + tier: B
820 + aliases: [canadian paralympic committee, cpc, comité paralympique canadien]
821 + discover: { rss: true, sitemap: true }
822 + sensors:
823 + - { name: news feed, url: "https://paralympic.ca/news/feed/", type: RSS, connector: rss, tier: B }
824 + - id: sports-quebec
825 + name: Sports Québec
826 + domain: sportsquebec.com
827 + homepage: https://www.sportsquebec.com
828 + categories: [sports, quebec]
829 + tier: C
830 + aliases: [sports québec, sportsquébec, jeux du québec]
831 + discover: { rss: true, sitemap: true }
832 + sensors:
833 + - { name: news feed, url: "https://www.sportsquebec.com/feed/", type: RSS, connector: rss, tier: C }
834 + - id: ins-quebec
835 + name: Institut national du sport du Québec
836 + domain: insquebec.org
837 + homepage: https://www.insquebec.org
838 + categories: [sports, quebec, research]
839 + tier: D
840 + aliases: [ins québec, institut national du sport du québec, insq]
841 + discover: { rss: true, sitemap: true, pages: true }
842 + llm: false
843 + sensors:
844 + - { name: nouvelles page, url: "https://www.insquebec.org/nouvelles/", type: HTML, connector: http, tier: D }
845 + - { name: sitemap, url: "https://www.insquebec.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxUrls: 2000 } }
846 + - id: rseq
847 + name: RSEQ (Réseau du sport étudiant du Québec)
848 + domain: rseq.ca
849 + homepage: https://rseq.ca
850 + categories: [sports, quebec, education]
851 + tier: D
852 + aliases: [rseq, réseau du sport étudiant du québec]
853 + discover: { rss: true, sitemap: true }
854 + notes: "rseq.ca has no feed or news sitemap reachable (404 on /feed/, /nouvelles/) — no validated sensor (2026-09-08)."
855 + # ───────────────────────── H · Olympic movement, anti-doping, sport justice ─────────────────────────
856 + - id: ioc
857 + name: International Olympic Committee
858 + domain: olympics.com
859 + homepage: https://olympics.com/ioc
860 + categories: [sports, olympics, international]
861 + tier: A
862 + weight: 1.4
863 + aliases: [ioc, cio, international olympic committee, comité international olympique, olympics, olympic games, milano cortina 2026]
864 + products:
865 + - { name: Milano Cortina 2026, type: service, aliases: [milan cortina 2026, winter olympics 2026] }
866 + discover: { rss: false, sitemap: false }
867 + notes: "olympics.com (incl. /ioc/news and milanocortina2026.olympics.com) never answers non-browser clients — Akamai holds the connection open; no validated sensor (2026-09-08)."
868 + - id: la28
869 + name: LA28 Olympic & Paralympic Games
870 + domain: la28.org
871 + homepage: https://la28.org
872 + categories: [sports, olympics]
873 + tier: C
874 + aliases: [la28, los angeles 2028, la 2028]
875 + discover: { rss: false, sitemap: true }
876 + llm: false
877 + sensors:
878 + - { name: sitemap, url: "https://la28.org/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
879 + - id: ipc
880 + name: International Paralympic Committee
881 + domain: paralympic.org
882 + homepage: https://www.paralympic.org
883 + categories: [sports, olympics, international]
884 + tier: B
885 + aliases: [ipc, international paralympic committee, paralympics, paralympic games]
886 + discover: { rss: false, sitemap: false, pages: true }
887 + llm: false
888 + sensors:
889 + - { name: news page, url: "https://www.paralympic.org/news", type: HTML, connector: http, tier: B }
890 + - id: commonwealth-sport
891 + name: Commonwealth Sport
892 + domain: commonwealthsport.com
893 + homepage: https://www.commonwealthsport.com
894 + categories: [sports, international]
895 + tier: C
896 + aliases: [commonwealth sport, commonwealth games, glasgow 2026]
897 + discover: { rss: false, sitemap: false, pages: true }
898 + llm: false
899 + sensors:
900 + - { name: news page, url: "https://www.commonwealthsport.com/news", type: HTML, connector: http, tier: C }
901 + - id: wada
902 + name: World Anti-Doping Agency
903 + domain: wada-ama.org
904 + homepage: https://www.wada-ama.org
905 + categories: [sports, anti-doping, international]
906 + tier: B
907 + weight: 1.2
908 + aliases: [wada, ama, agence mondiale antidopage, world anti-doping agency]
909 + discover: { rss: false, sitemap: false }
910 + notes: "wada-ama.org returns HTTP 202 with an empty body to non-browser clients (bot challenge) — no validated sensor (2026-09-08)."
911 + - id: usada
912 + name: U.S. Anti-Doping Agency
913 + domain: usada.org
914 + homepage: https://www.usada.org
915 + categories: [sports, anti-doping]
916 + tier: B
917 + aliases: [usada]
918 + discover: { rss: true, sitemap: true, pages: true }
919 + sensors:
920 + - { name: news feed, url: "https://www.usada.org/feed/", type: RSS, connector: rss, tier: B }
921 + - { name: news page, url: "https://www.usada.org/news/", type: HTML, connector: http, tier: C }
922 + - id: cces
923 + name: Sport Integrity Canada (CCES)
924 + domain: sportintegrity.ca
925 + homepage: https://sportintegrity.ca
926 + categories: [sports, anti-doping]
927 + tier: B
928 + aliases: [cces, canadian centre for ethics in sport, centre canadien pour l'éthique dans le sport, sport integrity canada]
929 + discover: { rss: true, sitemap: true, pages: true }
930 + sensors:
931 + - { name: media releases page, url: "https://sportintegrity.ca/news", type: HTML, connector: http, tier: B }
932 + - { name: rss feed, url: "https://sportintegrity.ca/rss.xml", type: RSS, connector: rss, tier: B }
933 + - id: cas
934 + name: Court of Arbitration for Sport (CAS/TAS)
935 + domain: tas-cas.org
936 + homepage: https://www.tas-cas.org
937 + categories: [sports, legal, international]
938 + tier: B
939 + weight: 1.1
940 + aliases: [cas, tas, court of arbitration for sport, tribunal arbitral du sport]
941 + discover: { rss: false, sitemap: false }
942 + notes: "tas-cas.org is a client-rendered shell (media releases list, sitemap.xml and RSS paths all return the same 25 KB HTML) — no validated sensor (2026-09-08)."
943 + # ───────────────────────── I · Canadian teams & venues ─────────────────────────
944 + - id: montreal-canadiens
945 + name: Montreal Canadiens
946 + domain: nhl.com
947 + homepage: https://www.nhl.com/canadiens
948 + categories: [sports, hockey, quebec]
949 + tier: B
950 + weight: 1.2
951 + aliases: [canadiens, montreal canadiens, canadiens de montréal, habs, ch]
952 + discover: { rss: false, sitemap: false, pages: true }
953 + llm: false
954 + sensors:
955 + - { name: news page, url: "https://www.nhl.com/canadiens/news", type: HTML, connector: http, tier: B }
956 + - id: toronto-maple-leafs
957 + name: Toronto Maple Leafs
958 + domain: nhl.com
959 + homepage: https://www.nhl.com/mapleleafs
960 + categories: [sports, hockey]
961 + tier: B
962 + weight: 1.1
963 + aliases: [maple leafs, toronto maple leafs, leafs]
964 + discover: { rss: false, sitemap: false, pages: true }
965 + llm: false
966 + sensors:
967 + - { name: news page, url: "https://www.nhl.com/mapleleafs/news", type: HTML, connector: http, tier: B }
968 + - id: ottawa-senators
969 + name: Ottawa Senators
970 + domain: nhl.com
971 + homepage: https://www.nhl.com/senators
972 + categories: [sports, hockey]
973 + tier: C
974 + aliases: [senators, ottawa senators, sens]
975 + discover: { rss: false, sitemap: false, pages: true }
976 + llm: false
977 + sensors:
978 + - { name: news page, url: "https://www.nhl.com/senators/news", type: HTML, connector: http, tier: C }
979 + - id: vancouver-canucks
980 + name: Vancouver Canucks
981 + domain: nhl.com
982 + homepage: https://www.nhl.com/canucks
983 + categories: [sports, hockey]
984 + tier: C
985 + aliases: [canucks, vancouver canucks]
986 + discover: { rss: false, sitemap: false, pages: true }
987 + llm: false
988 + sensors:
989 + - { name: news page, url: "https://www.nhl.com/canucks/news", type: HTML, connector: http, tier: C }
990 + - id: edmonton-oilers
991 + name: Edmonton Oilers
992 + domain: nhl.com
993 + homepage: https://www.nhl.com/oilers
994 + categories: [sports, hockey]
995 + tier: C
996 + aliases: [oilers, edmonton oilers]
997 + discover: { rss: false, sitemap: false, pages: true }
998 + llm: false
999 + sensors:
1000 + - { name: news page, url: "https://www.nhl.com/oilers/news", type: HTML, connector: http, tier: C }
1001 + - id: calgary-flames
1002 + name: Calgary Flames
1003 + domain: nhl.com
1004 + homepage: https://www.nhl.com/flames
1005 + categories: [sports, hockey]
1006 + tier: C
1007 + aliases: [flames, calgary flames]
1008 + discover: { rss: false, sitemap: false, pages: true }
1009 + llm: false
1010 + sensors:
1011 + - { name: news page, url: "https://www.nhl.com/flames/news", type: HTML, connector: http, tier: C }
1012 + - id: winnipeg-jets
1013 + name: Winnipeg Jets
1014 + domain: nhl.com
1015 + homepage: https://www.nhl.com/jets
1016 + categories: [sports, hockey]
1017 + tier: C
1018 + aliases: [jets, winnipeg jets]
1019 + discover: { rss: false, sitemap: false, pages: true }
1020 + llm: false
1021 + sensors:
1022 + - { name: news page, url: "https://www.nhl.com/jets/news", type: HTML, connector: http, tier: C }
1023 + - id: toronto-blue-jays
1024 + name: Toronto Blue Jays
1025 + domain: mlb.com
1026 + homepage: https://www.mlb.com/bluejays
1027 + categories: [sports, baseball]
1028 + tier: B
1029 + weight: 1.1
1030 + aliases: [blue jays, toronto blue jays, jays]
1031 + discover: { rss: false, sitemap: false }
1032 + llm: false
1033 + sensors:
1034 + - { name: news feed, url: "https://www.mlb.com/bluejays/feeds/news/rss.xml", type: RSS, connector: rss, tier: B }
1035 + - id: cf-montreal
1036 + name: CF Montréal
1037 + domain: cfmontreal.com
1038 + homepage: https://www.cfmontreal.com
1039 + categories: [sports, soccer, quebec]
1040 + tier: B
1041 + aliases: [cf montréal, cf montreal, impact de montréal, montreal impact]
1042 + discover: { rss: false, sitemap: true, pages: true }
1043 + llm: false
1044 + sensors:
1045 + - { name: stories sitemap, url: "https://www.cfmontreal.com/sitemap-stories.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
1046 + - id: toronto-fc
1047 + name: Toronto FC
1048 + domain: torontofc.ca
1049 + homepage: https://www.torontofc.ca
1050 + categories: [sports, soccer]
1051 + tier: C
1052 + aliases: [toronto fc, tfc]
1053 + discover: { rss: false, sitemap: true, pages: true }
1054 + llm: false
1055 + sensors:
1056 + - { name: stories sitemap, url: "https://www.torontofc.ca/sitemap-stories.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1057 + - { name: news page, url: "https://www.torontofc.ca/news/", type: HTML, connector: http, tier: C }
1058 + - id: vancouver-whitecaps
1059 + name: Vancouver Whitecaps FC
1060 + domain: whitecapsfc.com
1061 + homepage: https://www.whitecapsfc.com
1062 + categories: [sports, soccer]
1063 + tier: C
1064 + aliases: [whitecaps, vancouver whitecaps]
1065 + discover: { rss: false, sitemap: true, pages: true }
1066 + llm: false
1067 + sensors:
1068 + - { name: stories sitemap, url: "https://www.whitecapsfc.com/sitemap-stories.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1069 + - { name: news page, url: "https://www.whitecapsfc.com/news/", type: HTML, connector: http, tier: C }
1070 + - id: montreal-alouettes
1071 + name: Alouettes de Montréal
1072 + domain: montrealalouettes.com
1073 + homepage: https://montrealalouettes.com
1074 + categories: [sports, football, quebec]
1075 + tier: C
1076 + aliases: [alouettes, montreal alouettes, alouettes de montréal]
1077 + discover: { rss: false, sitemap: true, pages: true }
1078 + llm: false
1079 + sensors:
1080 + - { name: actualités page, url: "https://montrealalouettes.com/actualites", type: HTML, connector: http, tier: C }
1081 + - { name: sitemap, url: "https://montrealalouettes.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1082 + - id: toronto-argonauts
1083 + name: Toronto Argonauts
1084 + domain: argonauts.ca
1085 + homepage: https://argonauts.ca
1086 + categories: [sports, football]
1087 + tier: C
1088 + aliases: [argonauts, toronto argonauts, argos]
1089 + discover: { rss: false, sitemap: true, pages: true }
1090 + llm: false
1091 + sensors:
1092 + - { name: news page, url: "https://argonauts.ca/news", type: HTML, connector: http, tier: C }
1093 + - { name: sitemap, url: "https://argonauts.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
1094 + - id: montreal-victoire
1095 + name: Montréal Victoire (PWHL)
1096 + domain: thepwhl.com
1097 + homepage: https://www.thepwhl.com/en/victoire
1098 + categories: [sports, hockey, quebec]
1099 + tier: C
1100 + aliases: [victoire, montréal victoire, montreal victoire, victoire de montréal]
1101 + discover: { rss: false, sitemap: false, pages: true }
1102 + llm: false
1103 + sensors:
1104 + - { name: news page, url: "https://www.thepwhl.com/en/victoire/news", type: HTML, connector: http, tier: C }
1105 + - id: canadian-grand-prix
1106 + name: Formula 1 Grand Prix du Canada
1107 + domain: gpcanada.ca
1108 + homepage: https://gpcanada.ca
1109 + categories: [sports, motorsport, quebec]
1110 + tier: C
1111 + aliases: [canadian grand prix, grand prix du canada, gp du canada, circuit gilles-villeneuve]
1112 + discover: { rss: false, sitemap: true }
1113 + llm: false
1114 + sensors:
1115 + - { name: sitemap, url: "https://gpcanada.ca/sitemap.php", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1116 + - id: mlse
1117 + name: Maple Leaf Sports & Entertainment
1118 + domain: mlse.com
1119 + homepage: https://www.mlse.com
1120 + categories: [sports, entertainment]
1121 + tier: C
1122 + aliases: [mlse, maple leaf sports & entertainment, scotiabank arena, toronto raptors, raptors, bmo field, rogers centre]
1123 + products:
1124 + - { name: Toronto Raptors, type: service, aliases: [raptors, toronto raptors] }
1125 + discover: { rss: false, sitemap: true, pages: true }
1126 + llm: false
1127 + notes: "nba.com/raptors returns 404 to non-browser clients (client-rendered team hub) — Raptors covered via MLSE + NBA."
1128 + sensors:
1129 + - { name: sitemap, url: "https://www.mlse.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1130 + - id: groupe-ch
1131 + name: Groupe CH / Centre Bell
1132 + domain: centrebell.ca
1133 + homepage: https://centrebell.ca
1134 + categories: [sports, entertainment, quebec]
1135 + tier: D
1136 + aliases: [groupe ch, centre bell, bell centre, place bell]
1137 + discover: { rss: false, sitemap: true }
1138 + llm: false
1139 + notes: "groupech.com exposes no feed or sitemap; the Bell Centre pages sitemap is the structured endpoint."
1140 + sensors:
1141 + - { name: pages sitemap, url: "https://centrebell.ca/sitemap/pages.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxUrls: 1000 } }
1142 + - id: evenko
1143 + name: evenko
1144 + domain: evenko.ca
1145 + homepage: https://evenko.ca
1146 + categories: [entertainment, sports, quebec]
1147 + tier: C
1148 + aliases: [evenko, osheaga, ilesoniq, lasso]
1149 + discover: { rss: false, sitemap: true }
1150 + llm: false
1151 + sensors:
1152 + - { name: events sitemap index, url: "https://evenko.ca/server-sitemap-index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 3 } }
1153 + # ───────────────────────── J · Sports media ─────────────────────────
1154 + - id: espn
1155 + name: ESPN
1156 + domain: espn.com
1157 + homepage: https://www.espn.com
1158 + categories: [sports, media, news]
1159 + tier: A
1160 + weight: 1.3
1161 + aliases: [espn]
1162 + discover: { rss: true, sitemap: false }
1163 + llm: false
1164 + sensors:
1165 + - { name: top news feed, url: "https://www.espn.com/espn/rss/news", type: RSS, connector: rss, tier: A, config: { maxItems: 60 } }
1166 + - { name: nhl news feed, url: "https://www.espn.com/espn/rss/nhl/news", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
1167 + - id: nytimes
1168 + extend: true
1169 + aliases: [the athletic]
1170 + products:
1171 + - { name: The Athletic, type: product, aliases: [the athletic, athletic] }
1172 + sensors:
1173 + - { name: the athletic headlines feed, url: "https://www.nytimes.com/athletic/rss/news/", type: RSS, connector: rss, tier: A, config: { maxItems: 100 } }
1174 + - id: bbc-news
1175 + extend: true
1176 + sensors:
1177 + - { name: bbc sport feed, url: "https://feeds.bbci.co.uk/sport/rss.xml", type: RSS, connector: rss, tier: A, config: { maxItems: 60 } }
1178 + - id: sportsnet
1179 + name: Sportsnet
1180 + domain: sportsnet.ca
1181 + homepage: https://www.sportsnet.ca
1182 + categories: [sports, media, news]
1183 + tier: A
1184 + weight: 1.1
1185 + aliases: [sportsnet, rogers sportsnet]
1186 + discover: { rss: true, sitemap: false }
1187 + llm: false
1188 + sensors:
1189 + - { name: news feed, url: "https://www.sportsnet.ca/feed/", type: RSS, connector: rss, tier: A, config: { maxItems: 80 } }
1190 + - id: tsn
1191 + name: TSN
1192 + domain: tsn.ca
1193 + homepage: https://www.tsn.ca
1194 + categories: [sports, media, news]
1195 + tier: A
1196 + weight: 1.1
1197 + aliases: [tsn, the sports network]
1198 + discover: { rss: true, sitemap: true }
1199 + llm: false
1200 + sensors:
1201 + - { name: news feed, url: "https://www.tsn.ca/arc/outboundfeeds/rss/", type: RSS, connector: rss, tier: A, config: { maxItems: 80 } }
1202 + - { name: latest news sitemap, url: "https://www.tsn.ca/arc/outboundfeeds/sitemap-news/latest/", type: SITEMAP, connector: sitemap, tier: A, config: { maxUrls: 1000 } }
1203 + - id: rds
1204 + name: RDS
1205 + domain: rds.ca
1206 + homepage: https://www.rds.ca
1207 + categories: [sports, media, news, quebec]
1208 + tier: A
1209 + weight: 1.1
1210 + aliases: [rds, réseau des sports]
1211 + discover: { rss: true, sitemap: true }
1212 + llm: false
1213 + sensors:
1214 + - { name: fil de nouvelles, url: "https://www.rds.ca/arc/outboundfeeds/rss/", type: RSS, connector: rss, tier: A, config: { maxItems: 80 } }
1215 + - { name: latest news sitemap, url: "https://www.rds.ca/arc/outboundfeeds/sitemap-news/latest/", type: SITEMAP, connector: sitemap, tier: A, config: { maxUrls: 1000 } }
1216 + - id: bleacher-report
1217 + name: Bleacher Report
1218 + domain: bleacherreport.com
1219 + homepage: https://bleacherreport.com
1220 + categories: [sports, media, news]
1221 + tier: B
1222 + aliases: [bleacher report, b/r]
1223 + discover: { rss: true, sitemap: true }
1224 + llm: false
1225 + sensors:
1226 + - { name: front page feed, url: "https://feeds.bleacherreport.com/articles", type: RSS, connector: rss, tier: B, config: { maxItems: 100 } }
1227 + - { name: google news sitemap, url: "https://bleacherreport.com/sitemaps/google-news", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 1000 } }
1228 + - id: sports-illustrated
1229 + name: Sports Illustrated
1230 + domain: si.com
1231 + homepage: https://www.si.com
1232 + categories: [sports, media, news]
1233 + tier: B
1234 + aliases: [sports illustrated, si]
1235 + discover: { rss: true, sitemap: true }
1236 + llm: false
1237 + sensors:
1238 + - { name: news feed, url: "https://www.si.com/feed", type: RSS, connector: rss, tier: B, config: { maxItems: 100 } }
1239 + - { name: news sitemap, url: "https://www.si.com/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 1000 } }
1240 + - id: lequipe
1241 + name: L'Équipe
1242 + domain: lequipe.fr
1243 + homepage: https://www.lequipe.fr
1244 + categories: [sports, media, news]
1245 + tier: A
1246 + weight: 1.1
1247 + aliases: [l'équipe, lequipe]
1248 + discover: { rss: true, sitemap: true }
1249 + llm: false
1250 + sensors:
1251 + - { name: news sitemap, url: "https://www.lequipe.fr/dynamic-sitemap/sitemap_news.xml", type: SITEMAP, connector: sitemap, tier: A, config: { maxUrls: 1000 } }
1252 + - id: marca
1253 + name: Marca
1254 + domain: marca.com
1255 + homepage: https://www.marca.com
1256 + categories: [sports, media, news]
1257 + tier: B
1258 + aliases: [marca, diario marca]
1259 + discover: { rss: true, sitemap: true }
1260 + llm: false
1261 + sensors:
1262 + - { name: portada feed, url: "https://www.marca.com/rss/googlenews/portada.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 80 } }
1263 + - id: kicker
1264 + name: kicker
1265 + domain: kicker.de
1266 + homepage: https://www.kicker.de
1267 + categories: [sports, media, news]
1268 + tier: B
1269 + aliases: [kicker, kicker sportmagazin]
1270 + discover: { rss: true, sitemap: true }
1271 + llm: false
1272 + sensors:
1273 + - { name: aktuell feed, url: "https://newsfeed.kicker.de/news/aktuell", type: RSS, connector: rss, tier: B, config: { maxItems: 80 } }
1274 + - { name: google news sitemap, url: "https://newsfeed.kicker.de/googlesitemapnews.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 1000 } }
1275 + - id: sky-sports
1276 + name: Sky Sports
1277 + domain: skysports.com
1278 + homepage: https://www.skysports.com
1279 + categories: [sports, media, news]
1280 + tier: A
1281 + weight: 1.1
1282 + aliases: [sky sports]
1283 + discover: { rss: true, sitemap: true }
1284 + llm: false
1285 + sensors:
1286 + - { name: news feed, url: "https://www.skysports.com/rss/12040", type: RSS, connector: rss, tier: A, config: { maxItems: 80 } }
1287 + - { name: news wire page, url: "https://www.skysports.com/news-wire", type: HTML, connector: http, tier: B }
1288 + # ───────────────────────── K · Sports data & betting ─────────────────────────
1289 + - id: stats-perform
1290 + name: Stats Perform (Opta)
1291 + domain: statsperform.com
1292 + homepage: https://www.statsperform.com
1293 + categories: [sports, technology, media]
1294 + tier: C
1295 + aliases: [stats perform, opta, opta sports]
1296 + products:
1297 + - { name: Opta, type: product, aliases: [opta, opta data] }
1298 + discover: { rss: true, sitemap: true }
1299 + sensors:
1300 + - { name: news sitemap, url: "https://www.statsperform.com/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1301 + - id: sportradar
1302 + name: Sportradar
1303 + domain: sportradar.com
1304 + homepage: https://sportradar.com
1305 + categories: [sports, technology, finance]
1306 + tier: C
1307 + weight: 1.1
1308 + aliases: [sportradar]
1309 + discover: { rss: true, sitemap: true, status: true, pages: true }
1310 + notes: "status.sportradar.com does not answer non-browser clients (2026-09-08)."
1311 + sensors:
1312 + - { name: news page, url: "https://sportradar.com/content-type/news/", type: HTML, connector: http, tier: C }
1313 + - id: genius-sports
1314 + name: Genius Sports
1315 + domain: geniussports.com
1316 + homepage: https://www.geniussports.com
1317 + categories: [sports, technology, finance]
1318 + tier: C
1319 + aliases: [genius sports]
1320 + discover: { rss: true, sitemap: true, pages: true }
1321 + sensors:
1322 + - { name: newsroom page, url: "https://www.geniussports.com/newsroom/", type: HTML, connector: http, tier: C }
1323 + - id: draftkings
1324 + name: DraftKings
1325 + domain: draftkings.com
1326 + homepage: https://www.draftkings.com
1327 + categories: [sports, betting, finance]
1328 + tier: C
1329 + weight: 1.1
1330 + aliases: [draftkings, dk]
1331 + discover: { rss: false, sitemap: false, status: false }
1332 + notes: "draftkings.com is 403 (Akamai), status.draftkings.com has no Statuspage API, the IR host (gcs-web) drops the connection — no validated sensor (2026-09-08)."
1333 + - id: fanduel
1334 + name: FanDuel
1335 + domain: fanduel.com
1336 + homepage: https://www.fanduel.com
1337 + categories: [sports, betting]
1338 + tier: C
1339 + weight: 1.1
1340 + aliases: [fanduel]
1341 + discover: { rss: false, sitemap: true, status: false }
1342 + llm: false
1343 + notes: "status.fanduel.com answers 403 to the Statuspage API; only the CMS sitemap is reachable."
1344 + sensors:
1345 + - { name: cms sitemap, url: "https://www.fanduel.com/cms-sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
1346 + - id: flutter-entertainment
1347 + name: Flutter Entertainment
1348 + domain: flutter.com
1349 + homepage: https://www.flutter.com
1350 + categories: [sports, betting, finance]
1351 + tier: C
1352 + weight: 1.1
1353 + aliases: [flutter, flutter entertainment, paddy power, betfair, sky bet, pokerstars]
1354 + discover: { rss: true, sitemap: true, pages: true }
1355 + sensors:
1356 + - { name: news and insights page, url: "https://www.flutter.com/news-and-insights/", type: HTML, connector: http, tier: C }
1357 + - { name: sitemap, url: "https://www.flutter.com/sitemap-xml/", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1358 + - id: entain
1359 + name: Entain
1360 + domain: entaingroup.com
1361 + homepage: https://www.entaingroup.com
1362 + categories: [sports, betting, finance]
1363 + tier: C
1364 + aliases: [entain, ladbrokes, coral, bwin, sports interaction]
1365 + discover: { rss: true, sitemap: true, pages: true }
1366 + sensors:
1367 + - { name: sitemap, url: "https://www.entaingroup.com/xmlsitemap", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1368 + - id: bet365
1369 + name: bet365
1370 + domain: bet365.com
1371 + homepage: https://www.bet365.com
1372 + categories: [sports, betting]
1373 + tier: C
1374 + aliases: [bet365]
1375 + discover: { rss: false, sitemap: false }
1376 + notes: "bet365.com exposes no feed, sitemap or server-rendered news page — no validated sensor (2026-09-08)."
1377 + - id: betway
1378 + name: Betway
1379 + domain: betway.com
1380 + homepage: https://www.betway.com
1381 + categories: [sports, betting]
1382 + tier: D
1383 + aliases: [betway, super group]
1384 + discover: { rss: false, sitemap: false }
1385 + notes: "betway.com exposes no feed, sitemap or server-rendered news page — no validated sensor (2026-09-08)."
1386 + - id: kambi
1387 + name: Kambi
1388 + domain: kambi.com
1389 + homepage: https://www.kambi.com
1390 + categories: [sports, betting, technology]
1391 + tier: D
1392 + aliases: [kambi, kambi group]
1393 + discover: { rss: false, sitemap: true }
1394 + llm: false
1395 + notes: "kambi.com/feed/ returns 500; the WordPress sitemap index is the structured endpoint."
1396 + sensors:
1397 + - { name: sitemap index, url: "https://www.kambi.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxUrls: 2000, maxChildren: 17 } }
1398 + - id: evolution
1399 + name: Evolution (Evolution Gaming)
1400 + domain: evolution.com
1401 + homepage: https://www.evolution.com
1402 + categories: [gaming, betting, finance]
1403 + tier: C
1404 + aliases: [evolution, evolution gaming, evolution ab]
1405 + discover: { rss: false, sitemap: true, pages: true }
1406 + sensors:
1407 + - { name: newsroom page, url: "https://www.evolution.com/news", type: HTML, connector: http, tier: C }
1408 + - id: igaming-ontario
1409 + name: iGaming Ontario
1410 + domain: igamingontario.ca
1411 + homepage: https://igamingontario.ca
1412 + categories: [betting, government, sports]
1413 + tier: C
1414 + aliases: [igaming ontario, igo]
1415 + discover: { rss: true, sitemap: true, pages: true }
1416 + sensors:
1417 + - { name: news page, url: "https://igamingontario.ca/en/news", type: HTML, connector: http, tier: C }
1418 + - id: agco-ontario
1419 + name: Alcohol and Gaming Commission of Ontario
1420 + domain: agco.ca
1421 + homepage: https://www.agco.ca
1422 + categories: [betting, government]
1423 + tier: C
1424 + aliases: [agco, alcohol and gaming commission of ontario]
1425 + discover: { rss: false, sitemap: true }
1426 + llm: false
1427 + sensors:
1428 + - { name: sitemap, url: "https://www.agco.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000, maxChildren: 3 } }
1429 + - id: loto-quebec
1430 + name: Loto-Québec
1431 + domain: lotoquebec.com
1432 + homepage: https://www.lotoquebec.com
1433 + categories: [betting, government, quebec]
1434 + tier: C
1435 + weight: 1.1
1436 + aliases: [loto-québec, loto quebec, mise-o-jeu, espacejeux]
1437 + products:
1438 + - { name: Mise-o-jeu, type: product, aliases: [mise-o-jeu, mise o jeu] }
1439 + discover: { rss: true, sitemap: true, pages: true }
1440 + notes: "No press-release feed or sitemap reachable on lotoquebec.com / societe.lotoquebec.com (salle de presse returns 404 to non-browser clients); Mise-o-jeu host does not answer — no validated sensor (2026-09-08)."
1441 + - id: bclc
1442 + name: British Columbia Lottery Corporation
1443 + domain: bclc.com
1444 + homepage: https://www.bclc.com
1445 + categories: [betting, government]
1446 + tier: D
1447 + aliases: [bclc, playnow]
1448 + discover: { rss: false, sitemap: false }
1449 + notes: "bclc.com and corporate.bclc.com answer 403 to non-browser clients — no validated sensor (2026-09-08)."
1450 + - id: olg
1451 + name: Ontario Lottery and Gaming Corporation
1452 + domain: olg.ca
1453 + homepage: https://www.olg.ca
1454 + categories: [betting, government]
1455 + tier: C
1456 + aliases: [olg, proline, ontario lottery and gaming]
1457 + discover: { rss: false, sitemap: true, pages: true }
1458 + llm: false
1459 + sensors:
1460 + - { name: news page, url: "https://about.olg.ca/news/", type: HTML, connector: http, tier: C }
1461 + - { name: sitemap (en), url: "https://www.olg.ca/content/olg/en.sitemap.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxUrls: 3000 } }
1462 + - id: nevada-gaming-control-board
1463 + name: Nevada Gaming Control Board
1464 + domain: gaming.nv.gov
1465 + homepage: https://www.gaming.nv.gov
1466 + categories: [betting, government]
1467 + tier: C
1468 + aliases: [nevada gaming control board, ngcb, nevada gaming commission]
1469 + discover: { rss: false, sitemap: true }
1470 + llm: false
1471 + sensors:
1472 + - { name: sitemap, url: "https://www.gaming.nv.gov/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 1000 } }
1473 + - id: uk-gambling-commission
1474 + name: UK Gambling Commission
1475 + domain: gamblingcommission.gov.uk
1476 + homepage: https://www.gamblingcommission.gov.uk
1477 + categories: [betting, government, legal]
1478 + tier: C
1479 + weight: 1.1
1480 + aliases: [gambling commission, ukgc, uk gambling commission]
1481 + discover: { rss: true, sitemap: false, pages: true }
1482 + sensors:
1483 + - { name: news page, url: "https://www.gamblingcommission.gov.uk/news", type: HTML, connector: http, tier: C }
1484 + # ───────────────────────── L · Gear & fitness ─────────────────────────
1485 + - id: peloton
1486 + extend: true
1487 + categories: [sports, consumer-tech, fitness]
1488 + aliases: [peloton, peloton interactive]
1489 + sensors:
1490 + - {connector: statuspage, name: status, tier: S, type: STATUSPAGE, url: 'https://status.onepeloton.com/api/v2/summary.json'}
1491 + - {connector: http, name: blog page, tier: C, type: HTML, url: 'https://www.onepeloton.com/blog'}
1492 + - id: garmin
1493 + extend: true
1494 + categories: [sports, consumer-tech, fitness]
1495 + aliases: [garmin, garmin connect]
1496 + notes: "status.garmin.com does not answer non-browser clients (2026-09-08)."
1497 + products: [{aliases: [garmin connect], name: Garmin Connect, type: service}]
1498 + sensors:
1499 + - {connector: rss, name: blog feed, tier: B, type: RSS, url: 'https://www.garmin.com/en-CA/blog/feed/'}
1500 + - {connector: http, name: newsroom page, tier: B, type: HTML, url: 'https://www.garmin.com/en-US/newsroom/'}
1501 + - id: strava
1502 + name: Strava
1503 + domain: strava.com
1504 + homepage: https://www.strava.com
1505 + categories: [sports, consumer-tech, fitness]
1506 + tier: B
1507 + aliases: [strava]
1508 + discover: { rss: true, sitemap: false, status: true, pages: true }
1509 + sensors:
1510 + - { name: status, url: "https://status.strava.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1511 + - { name: press page, url: "https://press.strava.com/", type: HTML, connector: http, tier: C }
1512 + - { name: pricing, url: "https://www.strava.com/pricing", type: HTML, connector: http, tier: C }
1513 + - id: whoop
1514 + name: WHOOP
1515 + domain: whoop.com
1516 + homepage: https://www.whoop.com
1517 + categories: [sports, consumer-tech, fitness]
1518 + tier: B
1519 + aliases: [whoop]
1520 + discover: { rss: false, sitemap: false, status: true }
1521 + notes: "whoop.com pages and sitemap answer 403 to non-browser clients; only the Statuspage API is open."
1522 + sensors:
1523 + - { name: status, url: "https://status.whoop.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1524 + - id: oura
1525 + name: Oura
1526 + domain: ouraring.com
1527 + homepage: https://ouraring.com
1528 + categories: [sports, consumer-tech, fitness, health]
1529 + tier: B
1530 + aliases: [oura, oura ring]
1531 + discover: { rss: true, sitemap: true, status: true, pages: true }
1532 + sensors:
1533 + - { name: status, url: "https://status.ouraring.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1534 + - { name: blog feed, url: "https://ouraring.com/blog/feed/", type: RSS, connector: rss, tier: B }
1535 + - { name: newsroom page, url: "https://ouraring.com/newsroom", type: HTML, connector: http, tier: C }
1536 + - id: under-armour
1537 + name: Under Armour
1538 + domain: underarmour.com
1539 + homepage: https://www.underarmour.com
1540 + categories: [sports, retail, consumer-tech]
1541 + tier: C
1542 + aliases: [under armour, ua]
1543 + discover: { rss: false, sitemap: true }
1544 + llm: false
1545 + sensors:
1546 + - { name: sitemap index, url: "https://www.underarmour.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxUrls: 3000, maxChildren: 8 } }
1547 + - id: puma
1548 + name: PUMA
1549 + domain: about.puma.com
1550 + homepage: https://about.puma.com
1551 + categories: [sports, retail, finance]
1552 + tier: C
1553 + weight: 1.1
1554 + aliases: [puma, puma se]
1555 + discover: { rss: true, sitemap: true, pages: true }
1556 + sensors:
1557 + - { name: corporate news feed, url: "https://about.puma.com/en/rss.xml", type: RSS, connector: rss, tier: B }
1558 + - id: new-balance
1559 + name: New Balance
1560 + domain: newbalance.com
1561 + homepage: https://www.newbalance.com
1562 + categories: [sports, retail]
1563 + tier: D
1564 + aliases: [new balance]
1565 + discover: { rss: false, sitemap: false }
1566 + notes: "newbalance.com answers 403 to non-browser clients and the newsroom host does not respond — no validated sensor (2026-09-08)."
1567 + - id: decathlon
1568 + name: Decathlon
1569 + domain: decathlon.com
1570 + homepage: https://www.decathlon.com
1571 + categories: [sports, retail]
1572 + tier: D
1573 + aliases: [decathlon]
1574 + discover: { rss: false, sitemap: false }
1575 + notes: "decathlon.com (Shopify) rate-limits sitemap fetches with 429 — no validated sensor (2026-09-08)."
1576 + - id: bauer
1577 + name: Bauer Hockey
1578 + domain: bauer.com
1579 + homepage: https://www.bauer.com
1580 + categories: [sports, retail, hockey]
1581 + tier: D
1582 + aliases: [bauer, bauer hockey]
1583 + discover: { rss: false, sitemap: false }
1584 + notes: "bauer.com (Shopify) rate-limits sitemap fetches with 429 and has no news page — no validated sensor (2026-09-08)."
1585 + - id: ccm-hockey
1586 + name: CCM Hockey
1587 + domain: ccmhockey.com
1588 + homepage: https://ccmhockey.com
1589 + categories: [sports, retail, hockey, quebec]
1590 + tier: D
1591 + aliases: [ccm, ccm hockey]
1592 + discover: { rss: false, sitemap: false }
1593 + notes: "ccmhockey.com/feed/ returns 500 and the sitemap index only lists European storefront locales (no en-ca/en-us, no news) — no validated sensor (2026-09-08)."
1594 + - id: wilson
1595 + name: Wilson Sporting Goods
1596 + domain: wilson.com
1597 + homepage: https://www.wilson.com
1598 + categories: [sports, retail]
1599 + tier: D
1600 + aliases: [wilson, wilson sporting goods, amer sports]
1601 + discover: { rss: false, sitemap: false }
1602 + notes: "wilson.com and salomon.com (Amer Sports) answer 403 to non-browser clients on news and sitemap paths — no validated sensor (2026-09-08)."
1603 + - id: rawlings
1604 + name: Rawlings
1605 + domain: rawlings.com
1606 + homepage: https://www.rawlings.com
1607 + categories: [sports, retail, baseball]
1608 + tier: D
1609 + aliases: [rawlings]
1610 + discover: { rss: false, sitemap: false, pages: true }
1611 + llm: false
1612 + sensors:
1613 + - { name: blog page, url: "https://www.rawlings.com/blog", type: HTML, connector: http, tier: D }
1614 + - id: callaway
1615 + name: Callaway Golf (Topgolf Callaway Brands)
1616 + domain: callawaygolf.com
1617 + homepage: https://www.callawaygolf.com
1618 + categories: [sports, retail, golf]
1619 + tier: D
1620 + aliases: [callaway, callaway golf, topgolf callaway brands]
1621 + discover: { rss: false, sitemap: true }
1622 + llm: false
1623 + sensors:
1624 + - { name: sitemap, url: "https://www.callawaygolf.com/sitemap_0.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxUrls: 3000 } }
1625 + - id: ping
1626 + name: PING
1627 + domain: ping.com
1628 + homepage: https://ping.com
1629 + categories: [sports, retail, golf]
1630 + tier: D
1631 + aliases: [ping, ping golf]
1632 + discover: { rss: false, sitemap: true }
1633 + llm: false
1634 + sensors:
1635 + - { name: sitemap (en-us), url: "https://ping.com/en-us/sitemap.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxUrls: 2000 } }
1636 + - id: rossignol
1637 + name: Rossignol
1638 + domain: rossignol.com
1639 + homepage: https://www.rossignol.com
1640 + categories: [sports, retail, winter-sports]
1641 + tier: D
1642 + aliases: [rossignol, groupe rossignol]
1643 + discover: { rss: false, sitemap: true }
1644 + llm: false
1645 + sensors:
1646 + - { name: sitemap index, url: "https://www.rossignol.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxUrls: 3000, maxChildren: 5 } }
1647 + - id: salomon
1648 + name: Salomon
1649 + domain: salomon.com
1650 + homepage: https://www.salomon.com
1651 + categories: [sports, retail, winter-sports]
1652 + tier: D
1653 + aliases: [salomon]
1654 + discover: { rss: false, sitemap: true }
1655 + llm: false
1656 + sensors:
1657 + - { name: sitemap index, url: "https://www.salomon.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxUrls: 3000, maxChildren: 5 } }
1658 + - id: arcteryx
1659 + name: Arc'teryx
1660 + domain: arcteryx.com
1661 + homepage: https://arcteryx.com
1662 + categories: [sports, retail]
1663 + tier: D
1664 + aliases: [arc'teryx, arcteryx]
1665 + discover: { rss: false, sitemap: true }
1666 + llm: false
1667 + sensors:
1668 + - { name: sitemap, url: "https://arcteryx.com/sitemap_1.xml", type: SITEMAP, connector: sitemap, tier: D, config: { maxUrls: 3000 } }
1669 + - id: lululemon
1670 + extend: true
1671 + categories: [sports, retail, finance]
1672 + aliases: [lululemon, lululemon athletica]
1673 + notes: "corporate.lululemon.com / investor.lululemon.com (Q4 IR) answer 403 to non-browser clients and shop.lululemon.com drops the connection — no validated sensor (2026-09-08)."
added config/sources.d/19-crypto-web3.yaml +1221 −0
@@ -0,0 +1,1221 @@
1 +# config/sources.d/19-crypto-web3.yaml — crypto & web3: chains and foundations, exchanges and custody,
2 +# stablecoins and tokenization, DeFi/NFT and infrastructure, data/analytics, policy bodies and investment
3 +# products. Written 2026-09-08. Every sensor validated (OK) with apps/engine/src/validate.ts on that date.
4 +# Many crypto sites are client-rendered (Next.js/Webflow/Framer) or Cloudflare-challenged (mirror.xyz,
5 +# coinbase.com/blog, dune.com, grayscale.com, messari.io) — preferred endpoints are GitHub release feeds,
6 +# Medium/Ghost feeds, Discourse governance forums (`/latest.rss`), exchange announcement APIs and Atlassian
7 +# status pages. Governance forums are tier C (high volume, community-generated) and their sources keep llm on
8 +# only when the organisation matters.
9 +sources:
10 + # ───────────────────────── A · Chains & foundations ─────────────────────────
11 + - id: bitcoin-core
12 + name: Bitcoin Core
13 + domain: bitcoincore.org
14 + categories: [crypto, open-source, developer]
15 + tier: A
16 + weight: 1.5
17 + aliases: [bitcoin, btc, bitcoin core]
18 + products:
19 + - { name: Bitcoin Core, type: software, aliases: [bitcoind] }
20 + discover: { rss: true, sitemap: false }
21 + sensors:
22 + - { name: releases, url: "https://github.com/bitcoin/bitcoin/releases.atom", type: GITHUB_RELEASE, connector: github, tier: A, config: { repo: bitcoin/bitcoin, kind: releases } }
23 + - { name: site feed (releases + notices), url: "https://bitcoincore.org/en/rss.xml", type: RSS, connector: rss, tier: B }
24 + - id: bitcoin-optech
25 + name: Bitcoin Optech
26 + domain: bitcoinops.org
27 + categories: [crypto, developer]
28 + tier: B
29 + aliases: [optech]
30 + discover: { rss: true }
31 + sensors:
32 + - { name: newsletter feed, url: "https://bitcoinops.org/feed.xml", type: ATOM, connector: rss, tier: B }
33 + - id: ethereum-foundation
34 + name: Ethereum Foundation
35 + domain: ethereum.org
36 + homepage: https://ethereum.foundation
37 + categories: [crypto, open-source, developer]
38 + tier: A
39 + weight: 1.5
40 + aliases: [ethereum, eth, ef]
41 + products:
42 + - { name: go-ethereum, type: software, aliases: [geth] }
43 + - { name: EIPs, type: standard, aliases: [ethereum improvement proposals, eip] }
44 + discover: { rss: true, sitemap: false }
45 + sensors:
46 + - { name: blog feed, url: "https://blog.ethereum.org/feed.xml", type: RSS, connector: rss, tier: A }
47 + - { name: eips commits, url: "https://github.com/ethereum/EIPs/commits/master.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: ethereum/EIPs, kind: commits, branch: master } }
48 + - { name: go-ethereum releases, url: "https://github.com/ethereum/go-ethereum/releases.atom", type: GITHUB_RELEASE, connector: github, tier: A, config: { repo: ethereum/go-ethereum, kind: releases } }
49 + - id: solana
50 + name: Solana Foundation
51 + domain: solana.com
52 + categories: [crypto, infrastructure]
53 + tier: A
54 + weight: 1.3
55 + aliases: [solana, sol, solana labs]
56 + products:
57 + - { name: Agave validator, type: software, aliases: [agave] }
58 + discover: { rss: true, status: true }
59 + sensors:
60 + - { name: status, url: "https://status.solana.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
61 + - { name: news feed, url: "https://solana.com/news/rss.xml", type: RSS, connector: rss, tier: B }
62 + - { name: agave releases, url: "https://github.com/anza-xyz/agave/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: anza-xyz/agave, kind: releases } }
63 + - id: polygon
64 + name: Polygon Labs
65 + domain: polygon.technology
66 + categories: [crypto, infrastructure]
67 + tier: B
68 + aliases: [polygon, matic, pol]
69 + discover: { rss: false, status: true }
70 + sensors:
71 + - { name: status, url: "https://status.polygon.technology/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
72 + - { name: governance forum, url: "https://forum.polygon.technology/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
73 + - { name: bor releases, url: "https://github.com/0xPolygon/bor/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: 0xPolygon/bor, kind: releases } }
74 + - id: arbitrum
75 + name: Arbitrum (Offchain Labs)
76 + domain: arbitrum.io
77 + categories: [crypto, infrastructure]
78 + tier: B
79 + weight: 1.1
80 + aliases: [arbitrum, offchain labs, arb]
81 + discover: { rss: false, status: true }
82 + sensors:
83 + - { name: status, url: "https://status.arbitrum.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
84 + - { name: offchain labs blog (medium), url: "https://medium.com/feed/offchainlabs", type: RSS, connector: rss, tier: B }
85 + - { name: governance forum, url: "https://forum.arbitrum.foundation/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
86 + - { name: nitro releases, url: "https://github.com/OffchainLabs/nitro/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: OffchainLabs/nitro, kind: releases } }
87 + - id: optimism
88 + name: Optimism (OP Labs)
89 + domain: optimism.io
90 + categories: [crypto, infrastructure]
91 + tier: B
92 + weight: 1.1
93 + aliases: [optimism, op labs, op mainnet, superchain]
94 + discover: { rss: false, status: true }
95 + sensors:
96 + - { name: status, url: "https://status.optimism.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
97 + - { name: governance forum, url: "https://gov.optimism.io/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
98 + - { name: monorepo releases, url: "https://github.com/ethereum-optimism/optimism/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: ethereum-optimism/optimism, kind: releases } }
99 + - id: base
100 + name: Base
101 + domain: base.org
102 + categories: [crypto, infrastructure]
103 + tier: B
104 + weight: 1.1
105 + aliases: [base chain, base l2]
106 + discover: { rss: false, status: true }
107 + sensors:
108 + - { name: status, url: "https://status.base.org/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
109 + - { name: node releases, url: "https://github.com/base/node/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: base/node, kind: releases } }
110 + - id: avalanche
111 + name: Avalanche (Ava Labs)
112 + domain: avax.network
113 + categories: [crypto, infrastructure]
114 + tier: B
115 + aliases: [avalanche, avax, ava labs]
116 + discover: { rss: false, status: true }
117 + sensors:
118 + - { name: status, url: "https://status.avax.network/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
119 + - { name: blog (medium), url: "https://medium.com/feed/avalancheavax", type: RSS, connector: rss, tier: B }
120 + - { name: avalanchego releases, url: "https://github.com/ava-labs/avalanchego/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: ava-labs/avalanchego, kind: releases } }
121 + - id: cardano
122 + name: Cardano (Input Output)
123 + domain: iog.io
124 + homepage: https://www.iog.io
125 + categories: [crypto, infrastructure]
126 + tier: B
127 + aliases: [cardano, ada, iog, iohk, input output]
128 + discover: { rss: true }
129 + sensors:
130 + - { name: iog feed, url: "https://www.iog.io/feed.xml", type: RSS, connector: rss, tier: B }
131 + - { name: community forum, url: "https://forum.cardano.org/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
132 + - { name: cardano-node releases, url: "https://github.com/IntersectMBO/cardano-node/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: IntersectMBO/cardano-node, kind: releases } }
133 + - id: polkadot
134 + name: Polkadot / Web3 Foundation
135 + domain: polkadot.com
136 + categories: [crypto, infrastructure]
137 + tier: B
138 + aliases: [polkadot, dot, web3 foundation, parity]
139 + discover: { rss: false }
140 + sensors:
141 + - { name: web3 foundation blog (medium), url: "https://medium.com/feed/web3foundation", type: RSS, connector: rss, tier: B }
142 + - { name: polkadot forum, url: "https://forum.polkadot.network/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
143 + - { name: polkadot-sdk releases, url: "https://github.com/paritytech/polkadot-sdk/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: paritytech/polkadot-sdk, kind: releases } }
144 + - id: cosmos
145 + name: Cosmos (Interchain)
146 + domain: cosmos.network
147 + categories: [crypto, infrastructure]
148 + tier: B
149 + aliases: [cosmos, atom, interchain foundation, cosmos hub]
150 + discover: { rss: false }
151 + sensors:
152 + - { name: forum, url: "https://forum.cosmos.network/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
153 + - { name: cosmos-sdk releases, url: "https://github.com/cosmos/cosmos-sdk/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: cosmos/cosmos-sdk, kind: releases } }
154 + - id: near
155 + name: NEAR Protocol
156 + domain: near.org
157 + categories: [crypto, infrastructure]
158 + tier: B
159 + aliases: [near, near foundation]
160 + discover: { rss: false }
161 + sensors:
162 + - { name: governance forum, url: "https://gov.near.org/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
163 + - { name: nearcore releases, url: "https://github.com/near/nearcore/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: near/nearcore, kind: releases } }
164 + - id: sui
165 + name: Sui (Mysten Labs)
166 + domain: sui.io
167 + categories: [crypto, infrastructure]
168 + tier: B
169 + aliases: [sui, mysten labs]
170 + discover: { rss: true, status: true }
171 + sensors:
172 + - { name: status, url: "https://status.sui.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
173 + - { name: blog feed, url: "https://www.sui.io/blog/rss.xml", type: RSS, connector: rss, tier: B }
174 + - { name: sui releases, url: "https://github.com/MystenLabs/sui/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: MystenLabs/sui, kind: releases } }
175 + - id: aptos
176 + name: Aptos Labs
177 + domain: aptoslabs.com
178 + categories: [crypto, infrastructure]
179 + tier: B
180 + aliases: [aptos, apt]
181 + discover: { rss: false }
182 + sensors:
183 + - { name: blog (medium), url: "https://medium.com/feed/aptoslabs", type: RSS, connector: rss, tier: B }
184 + - { name: aptos-core releases, url: "https://github.com/aptos-labs/aptos-core/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: aptos-labs/aptos-core, kind: releases } }
185 + - id: ton
186 + name: TON Foundation
187 + domain: ton.org
188 + categories: [crypto, infrastructure]
189 + tier: B
190 + aliases: [ton, the open network, toncoin]
191 + discover: { rss: true }
192 + notes: "blog.ton.org unreachable from the validator; only the node repository is covered."
193 + sensors:
194 + - { name: node releases, url: "https://github.com/ton-blockchain/ton/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: ton-blockchain/ton, kind: releases } }
195 + - id: tron
196 + name: TRON
197 + domain: tron.network
198 + categories: [crypto, infrastructure]
199 + tier: B
200 + aliases: [tron, trx, tron dao]
201 + discover: { rss: false }
202 + sensors:
203 + - { name: tron dao (medium), url: "https://medium.com/feed/@Tronfoundation", type: RSS, connector: rss, tier: B }
204 + - { name: java-tron releases, url: "https://github.com/tronprotocol/java-tron/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: tronprotocol/java-tron, kind: releases } }
205 + - id: ripple
206 + name: Ripple / XRP Ledger
207 + domain: ripple.com
208 + categories: [crypto, payments, finance]
209 + tier: B
210 + weight: 1.1
211 + aliases: [ripple, xrp, xrpl, xrp ledger, rlusd]
212 + discover: { rss: false, pages: true }
213 + sensors:
214 + - { name: press releases, url: "https://ripple.com/press-releases/", type: HTML, connector: http, tier: B }
215 + - { name: rippled releases, url: "https://github.com/XRPLF/rippled/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: XRPLF/rippled, kind: releases } }
216 + - id: stellar
217 + name: Stellar Development Foundation
218 + domain: stellar.org
219 + categories: [crypto, payments]
220 + tier: B
221 + aliases: [stellar, xlm, sdf]
222 + discover: { rss: true, status: true }
223 + sensors:
224 + - { name: status, url: "https://status.stellar.org/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
225 + - { name: blog feed, url: "https://stellar.org/blog/rss.xml", type: RSS, connector: rss, tier: B }
226 + - { name: stellar-core releases, url: "https://github.com/stellar/stellar-core/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: stellar/stellar-core, kind: releases } }
227 + - id: algorand
228 + name: Algorand Foundation
229 + domain: algorand.co
230 + categories: [crypto, infrastructure]
231 + tier: B
232 + aliases: [algorand, algo]
233 + discover: { rss: true }
234 + sensors:
235 + - { name: blog feed, url: "https://algorand.co/blog/rss.xml", type: RSS, connector: rss, tier: B }
236 + - { name: go-algorand releases, url: "https://github.com/algorand/go-algorand/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: algorand/go-algorand, kind: releases } }
237 + - id: tezos
238 + name: Tezos
239 + domain: tezos.com
240 + categories: [crypto, infrastructure]
241 + tier: B
242 + aliases: [tezos, xtz, nomadic labs, tezos foundation]
243 + discover: { rss: false }
244 + sensors:
245 + - { name: agora forum, url: "https://forum.tezosagora.org/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
246 + - { name: octez tags (gitlab), url: "https://gitlab.com/tezos/tezos/-/tags?format=atom", type: ATOM, connector: rss, tier: B }
247 + - id: hedera
248 + name: Hedera
249 + domain: hedera.com
250 + categories: [crypto, infrastructure]
251 + tier: B
252 + aliases: [hedera, hbar, hashgraph, hiero]
253 + discover: { rss: true, status: true }
254 + sensors:
255 + - { name: status, url: "https://status.hedera.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
256 + - { name: blog feed, url: "https://hedera.com/blog/feed", type: RSS, connector: rss, tier: B }
257 + - { name: consensus node releases, url: "https://github.com/hiero-ledger/hiero-consensus-node/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: hiero-ledger/hiero-consensus-node, kind: releases } }
258 + - id: chainlink
259 + name: Chainlink Labs
260 + domain: chain.link
261 + categories: [crypto, infrastructure]
262 + tier: B
263 + weight: 1.1
264 + aliases: [chainlink, link, ccip]
265 + discover: { rss: false, sitemap: true, pages: true }
266 + sensors:
267 + - { name: blog index, url: "https://chain.link/blog", type: HTML, connector: http, tier: B }
268 + - { name: node releases, url: "https://github.com/smartcontractkit/chainlink/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: smartcontractkit/chainlink, kind: releases } }
269 + - id: filecoin
270 + name: Filecoin Foundation / Protocol Labs
271 + domain: filecoin.io
272 + homepage: https://www.filecoin.io
273 + categories: [crypto, infrastructure]
274 + tier: B
275 + aliases: [filecoin, fil, protocol labs, ipfs]
276 + discover: { rss: true, status: true }
277 + sensors:
278 + - { name: status, url: "https://status.filecoin.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
279 + - { name: blog feed, url: "https://www.filecoin.io/blog/rss.xml", type: RSS, connector: rss, tier: B }
280 + - { name: lotus releases, url: "https://github.com/filecoin-project/lotus/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: filecoin-project/lotus, kind: releases } }
281 + - id: lightning-labs
282 + name: Lightning Labs
283 + domain: lightning.engineering
284 + categories: [crypto, developer]
285 + tier: B
286 + aliases: [lightning labs, lnd, lightning network, taproot assets]
287 + discover: { rss: false, pages: true }
288 + sensors:
289 + - { name: blog index, url: "https://lightning.engineering/blog/index.html", type: HTML, connector: http, tier: B }
290 + - { name: lnd releases, url: "https://github.com/lightningnetwork/lnd/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: lightningnetwork/lnd, kind: releases } }
291 + - id: starknet
292 + name: Starknet (StarkWare)
293 + domain: starknet.io
294 + categories: [crypto, infrastructure]
295 + tier: B
296 + aliases: [starknet, starkware, strk, cairo]
297 + discover: { rss: false, status: true }
298 + sensors:
299 + - { name: status, url: "https://status.starknet.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
300 + - { name: community forum, url: "https://community.starknet.io/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
301 + - { name: cairo releases, url: "https://github.com/starkware-libs/cairo/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: starkware-libs/cairo, kind: releases } }
302 + - id: zksync
303 + name: ZKsync (Matter Labs)
304 + domain: zksync.io
305 + categories: [crypto, infrastructure]
306 + tier: B
307 + aliases: [zksync, matter labs, zk sync, elastic network]
308 + discover: { rss: false, pages: true }
309 + sensors:
310 + - { name: news index, url: "https://www.zksync.io/news", type: HTML, connector: http, tier: B }
311 + - { name: zksync-era releases, url: "https://github.com/matter-labs/zksync-era/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: matter-labs/zksync-era, kind: releases } }
312 + - id: scroll
313 + name: Scroll
314 + domain: scroll.io
315 + categories: [crypto, infrastructure]
316 + tier: B
317 + aliases: [scroll, scroll zkevm]
318 + discover: { rss: false }
319 + sensors:
320 + - { name: governance forum, url: "https://forum.scroll.io/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
321 + - { name: scroll releases, url: "https://github.com/scroll-tech/scroll/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: scroll-tech/scroll, kind: releases } }
322 + - id: celestia
323 + name: Celestia
324 + domain: celestia.org
325 + categories: [crypto, infrastructure]
326 + tier: B
327 + aliases: [celestia, tia]
328 + discover: { rss: true }
329 + sensors:
330 + - { name: blog feed, url: "https://blog.celestia.org/rss/", type: RSS, connector: rss, tier: B }
331 + - { name: forum, url: "https://forum.celestia.org/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
332 + - { name: celestia-node releases, url: "https://github.com/celestiaorg/celestia-node/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: celestiaorg/celestia-node, kind: releases } }
333 + - id: eigenlayer
334 + name: EigenLayer (Eigen Labs)
335 + domain: eigenlayer.xyz
336 + categories: [crypto, infrastructure]
337 + tier: B
338 + aliases: [eigenlayer, eigen labs, eigencloud, eigenda, restaking]
339 + discover: { rss: false }
340 + sensors:
341 + - { name: blog feed, url: "https://www.eigenlabs.org/blog/rss/", type: RSS, connector: rss, tier: B }
342 + - { name: forum, url: "https://forum.eigenlayer.xyz/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
343 + - { name: contracts releases, url: "https://github.com/Layr-Labs/eigenlayer-contracts/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: Layr-Labs/eigenlayer-contracts, kind: releases } }
344 + - id: monero
345 + name: Monero
346 + domain: getmonero.org
347 + categories: [crypto, open-source]
348 + tier: B
349 + aliases: [monero, xmr]
350 + discover: { rss: true }
351 + sensors:
352 + - { name: site feed, url: "https://www.getmonero.org/feed.xml", type: ATOM, connector: rss, tier: B }
353 + - { name: releases, url: "https://github.com/monero-project/monero/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: monero-project/monero, kind: releases } }
354 + - id: litecoin
355 + name: Litecoin Foundation
356 + domain: litecoin.com
357 + categories: [crypto]
358 + tier: C
359 + aliases: [litecoin, ltc]
360 + discover: { rss: true }
361 + sensors:
362 + - { name: news feed, url: "https://litecoin.com/news/rss.xml", type: RSS, connector: rss, tier: B }
363 + - { name: litecoin core releases, url: "https://github.com/litecoin-project/litecoin/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: litecoin-project/litecoin, kind: releases } }
364 + - id: dogecoin
365 + name: Dogecoin
366 + domain: dogecoin.com
367 + categories: [crypto]
368 + tier: C
369 + aliases: [dogecoin, doge, dogecoin foundation]
370 + discover: { rss: false }
371 + sensors:
372 + - { name: dogecoin core releases, url: "https://github.com/dogecoin/dogecoin/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: dogecoin/dogecoin, kind: releases } }
373 + - id: zcash
374 + name: Zcash / Electric Coin Company
375 + domain: z.cash
376 + categories: [crypto, open-source]
377 + tier: B
378 + aliases: [zcash, zec, electric coin company, ecc]
379 + discover: { rss: true }
380 + notes: "electriccoin.co returned 521 (origin down) on 2026-09-08."
381 + sensors:
382 + - { name: z.cash feed, url: "https://z.cash/feed/", type: RSS, connector: rss, tier: B }
383 + - { name: community forum, url: "https://forum.zcashcommunity.com/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
384 + - { name: zcashd releases, url: "https://github.com/zcash/zcash/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: zcash/zcash, kind: releases } }
385 +
386 + # ───────────────────────── B · Exchanges & custody ─────────────────────────
387 + - id: binance
388 + name: Binance
389 + domain: binance.com
390 + homepage: https://www.binance.com
391 + categories: [crypto, finance]
392 + tier: A
393 + weight: 1.4
394 + aliases: [binance, bnb]
395 + llm: false
396 + discover: { rss: false }
397 + notes: "Announcements via the public CMS API (catalog 48 = new listings, 49 = latest news, 161 = delisting, 157 = maintenance, 51 = API updates). Blog/support pages are client-rendered."
398 + sensors:
399 + - { name: new listings, url: "https://www.binance.com/bapi/composite/v1/public/cms/article/catalog/list/query?catalogId=48&pageNo=1&pageSize=20", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: data.articles, keyField: code, titleField: title, urlTemplate: "https://www.binance.com/en/support/announcement/detail/{key}", maxItems: 20 } }
400 + - { name: delistings, url: "https://www.binance.com/bapi/composite/v1/public/cms/article/catalog/list/query?catalogId=161&pageNo=1&pageSize=20", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: data.articles, keyField: code, titleField: title, urlTemplate: "https://www.binance.com/en/support/announcement/detail/{key}", maxItems: 20 } }
401 + - { name: api updates, url: "https://www.binance.com/bapi/composite/v1/public/cms/article/catalog/list/query?catalogId=51&pageNo=1&pageSize=20", type: REST_API, connector: jsonlist, tier: B, config: { itemsPath: data.articles, keyField: code, titleField: title, urlTemplate: "https://www.binance.com/en/support/announcement/detail/{key}", maxItems: 20 } }
402 + - { name: spot api docs commits, url: "https://github.com/binance/binance-spot-api-docs/commits/master.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: binance/binance-spot-api-docs, kind: commits, branch: master } }
403 + - id: gemini
404 + name: Gemini
405 + domain: gemini.com
406 + homepage: https://www.gemini.com
407 + categories: [crypto, finance]
408 + tier: B
409 + aliases: [gemini exchange, gemini trust]
410 + discover: { rss: false, status: true }
411 + notes: "Blog is client-rendered (no feed); status page only."
412 + sensors:
413 + - { name: status, url: "https://status.gemini.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
414 + - id: bitstamp
415 + name: Bitstamp
416 + domain: bitstamp.net
417 + homepage: https://www.bitstamp.net
418 + categories: [crypto, finance]
419 + tier: B
420 + aliases: [bitstamp]
421 + discover: { rss: false, status: true }
422 + sensors:
423 + - { name: status, url: "https://status.bitstamp.net/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
424 + - id: bitfinex
425 + name: Bitfinex
426 + domain: bitfinex.com
427 + homepage: https://www.bitfinex.com
428 + categories: [crypto, finance]
429 + tier: B
430 + aliases: [bitfinex]
431 + discover: { rss: true, status: true }
432 + sensors:
433 + - { name: status, url: "https://bitfinex.statuspage.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
434 + - { name: blog feed, url: "https://blog.bitfinex.com/feed/", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
435 + - id: okx
436 + name: OKX
437 + domain: okx.com
438 + homepage: https://www.okx.com
439 + categories: [crypto, finance]
440 + tier: A
441 + weight: 1.2
442 + aliases: [okx, okex]
443 + llm: false
444 + discover: { rss: false }
445 + sensors:
446 + - { name: announcements api, url: "https://www.okx.com/api/v5/support/announcements?page=1", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: data.0.details, keyField: url, titleField: title, urlField: url, compareFields: [title, annType], maxItems: 20 } }
447 + - id: bybit
448 + name: Bybit
449 + domain: bybit.com
450 + homepage: https://www.bybit.com
451 + categories: [crypto, finance]
452 + tier: A
453 + weight: 1.2
454 + aliases: [bybit]
455 + llm: false
456 + discover: { rss: false }
457 + sensors:
458 + - { name: announcements api, url: "https://api.bybit.com/v5/announcements/index?locale=en-US&limit=20", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: result.list, keyField: url, titleField: title, urlField: url, summaryField: description, maxItems: 20 } }
459 + - id: kucoin
460 + name: KuCoin
461 + domain: kucoin.com
462 + homepage: https://www.kucoin.com
463 + categories: [crypto, finance]
464 + tier: B
465 + aliases: [kucoin]
466 + llm: false
467 + discover: { rss: false }
468 + sensors:
469 + - { name: announcements api, url: "https://api.kucoin.com/api/v3/announcements?lang=en_US", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: data.items, keyField: annId, titleField: annTitle, urlField: annUrl, summaryField: annDesc, maxItems: 20 } }
470 + - id: crypto-com
471 + name: Crypto.com
472 + domain: crypto.com
473 + categories: [crypto, finance]
474 + tier: B
475 + weight: 1.1
476 + aliases: [crypto.com, cro, cronos]
477 + discover: { rss: false, status: true }
478 + sensors:
479 + - { name: status, url: "https://status.crypto.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
480 + - id: bitget
481 + name: Bitget
482 + domain: bitget.com
483 + homepage: https://www.bitget.com
484 + categories: [crypto, finance]
485 + tier: B
486 + aliases: [bitget]
487 + llm: false
488 + discover: { rss: false }
489 + sensors:
490 + - { name: announcements api, url: "https://api.bitget.com/api/v2/public/annoucements?language=en_US", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: data, keyField: annId, titleField: annTitle, urlField: annUrl, compareFields: [annTitle, annType], maxItems: 30 } }
491 + - id: gate
492 + name: Gate
493 + domain: gate.com
494 + homepage: https://www.gate.com
495 + categories: [crypto, finance]
496 + tier: B
497 + aliases: [gate.io, gate.com, gate exchange]
498 + llm: false
499 + discover: { rss: true, sitemap: true }
500 + sensors:
501 + - { name: news feed, url: "https://www.gate.com/news/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
502 + - { name: news sitemap, url: "https://www.gate.com/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 500 } }
503 + - id: htx
504 + name: HTX (Huobi)
505 + domain: htx.com
506 + homepage: https://www.htx.com
507 + categories: [crypto, finance]
508 + tier: C
509 + aliases: [htx, huobi]
510 + llm: false
511 + discover: { sitemap: true }
512 + sensors:
513 + - { name: news sitemap, url: "https://www.htx.com/news/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 500 } }
514 + - id: bitso
515 + name: Bitso
516 + domain: bitso.com
517 + categories: [crypto, finance, payments]
518 + tier: B
519 + aliases: [bitso]
520 + discover: { rss: false, status: true }
521 + sensors:
522 + - { name: status, url: "https://status.bitso.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
523 + - id: bullish
524 + name: Bullish
525 + domain: bullish.com
526 + categories: [crypto, finance]
527 + tier: C
528 + aliases: [bullish exchange]
529 + discover: { rss: false, status: true }
530 + sensors:
531 + - { name: status, url: "https://status.bullish.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
532 + - id: wonderfi
533 + name: WonderFi (Bitbuy)
534 + domain: bitbuy.ca
535 + categories: [crypto, finance]
536 + tier: C
537 + aliases: [wonderfi, bitbuy, coinsmart]
538 + discover: { rss: false, status: true }
539 + sensors:
540 + - { name: status (bitbuy), url: "https://status.bitbuy.ca/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
541 + - id: newton
542 + name: Newton
543 + domain: newton.co
544 + homepage: https://www.newton.co
545 + categories: [crypto, finance]
546 + tier: C
547 + aliases: [newton crypto]
548 + discover: { rss: false, status: true }
549 + notes: "Blog behind Cloudflare challenge (403)."
550 + sensors:
551 + - { name: status, url: "https://status.newton.co/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
552 + - id: shakepay
553 + name: Shakepay
554 + domain: shakepay.com
555 + categories: [crypto, finance, payments]
556 + tier: C
557 + aliases: [shakepay]
558 + discover: { rss: false, status: true, pages: true }
559 + sensors:
560 + - { name: status, url: "https://status.shakepay.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
561 + - { name: blog index, url: "https://blog.shakepay.com/", type: HTML, connector: http, tier: C }
562 + - id: coinsquare
563 + name: Coinsquare
564 + domain: coinsquare.com
565 + categories: [crypto, finance]
566 + tier: C
567 + aliases: [coinsquare]
568 + discover: { rss: false, status: true }
569 + sensors:
570 + - { name: status, url: "https://status.coinsquare.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
571 + - id: bitgo
572 + name: BitGo
573 + domain: bitgo.com
574 + homepage: https://www.bitgo.com
575 + categories: [crypto, finance, infrastructure]
576 + tier: B
577 + aliases: [bitgo]
578 + discover: { rss: false, status: true }
579 + sensors:
580 + - { name: status, url: "https://status.bitgo.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
581 + - { name: bitgojs releases, url: "https://github.com/BitGo/BitGoJS/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: BitGo/BitGoJS, kind: releases } }
582 + - id: fireblocks
583 + name: Fireblocks
584 + domain: fireblocks.com
585 + homepage: https://www.fireblocks.com
586 + categories: [crypto, finance, infrastructure]
587 + tier: B
588 + weight: 1.1
589 + aliases: [fireblocks]
590 + discover: { rss: true, status: true }
591 + sensors:
592 + - { name: status, url: "https://status.fireblocks.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
593 + - { name: blog feed, url: "https://www.fireblocks.com/blog/feed/", type: RSS, connector: rss, tier: B }
594 + - id: anchorage-digital
595 + name: Anchorage Digital
596 + domain: anchorage.com
597 + homepage: https://www.anchorage.com
598 + categories: [crypto, finance]
599 + tier: C
600 + aliases: [anchorage, anchorage digital]
601 + discover: { sitemap: true }
602 + sensors:
603 + - { name: sitemap, url: "https://www.anchorage.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 1000 } }
604 + - id: copper
605 + name: Copper
606 + domain: copper.co
607 + categories: [crypto, finance]
608 + tier: C
609 + aliases: [copper.co, copper custody, clearloop]
610 + discover: { sitemap: true }
611 + sensors:
612 + - { name: sitemap, url: "https://copper.co/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
613 + - id: ledger
614 + name: Ledger
615 + domain: ledger.com
616 + homepage: https://www.ledger.com
617 + categories: [crypto, consumer-tech, cyber]
618 + tier: B
619 + weight: 1.1
620 + aliases: [ledger, ledger live, ledger nano]
621 + products:
622 + - { name: Ledger Live, type: software }
623 + discover: { rss: false, status: true }
624 + notes: "ledger.com/blog/feed requires authentication (401)."
625 + sensors:
626 + - { name: status, url: "https://status.ledger.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
627 + - { name: ledger live releases, url: "https://github.com/LedgerHQ/ledger-live/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: LedgerHQ/ledger-live, kind: releases } }
628 + - id: trezor
629 + name: Trezor (SatoshiLabs)
630 + domain: trezor.io
631 + categories: [crypto, consumer-tech, cyber]
632 + tier: B
633 + aliases: [trezor, satoshilabs, trezor suite]
634 + products:
635 + - { name: Trezor Suite, type: software }
636 + discover: { rss: false }
637 + sensors:
638 + - { name: blog (medium), url: "https://blog.trezor.io/feed", type: RSS, connector: rss, tier: B }
639 + - { name: trezor suite releases, url: "https://github.com/trezor/trezor-suite/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: trezor/trezor-suite, kind: releases } }
640 + - id: metamask
641 + name: MetaMask (Consensys)
642 + domain: metamask.io
643 + categories: [crypto, consumer-tech, developer]
644 + tier: B
645 + weight: 1.1
646 + aliases: [metamask, consensys]
647 + discover: { rss: true, pages: true }
648 + sensors:
649 + - { name: news feed, url: "https://metamask.io/news-rss.xml", type: RSS, connector: rss, tier: B }
650 + - { name: extension releases, url: "https://github.com/MetaMask/metamask-extension/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: MetaMask/metamask-extension, kind: releases } }
651 + - id: rainbow
652 + name: Rainbow Wallet
653 + domain: rainbow.me
654 + categories: [crypto, consumer-tech]
655 + tier: C
656 + aliases: [rainbow wallet]
657 + discover: { rss: false }
658 + sensors:
659 + - { name: app releases, url: "https://github.com/rainbow-me/rainbow/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: rainbow-me/rainbow, kind: releases } }
660 + - id: coinbase
661 + extend: true
662 + aliases: [coinbase developer platform, cdp]
663 + notes: "coinbase.com/blog and the Medium mirror are Cloudflare-challenged; docs.cdp.coinbase.com changelog is client-rendered (404 to the fetcher). Developer signal via the CDP SDK releases."
664 + sensors:
665 + - { name: cdp sdk releases, url: "https://github.com/coinbase/cdp-sdk/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: coinbase/cdp-sdk, kind: releases } }
666 + - id: kraken
667 + extend: true
668 + sensors:
669 + - { name: api changelog, url: "https://docs.kraken.com/api/docs/change-log", type: HTML, connector: http, tier: B }
670 +
671 + # ───────────────────────── C · Stablecoins & tokenization ─────────────────────────
672 + - id: circle
673 + name: Circle
674 + domain: circle.com
675 + homepage: https://www.circle.com
676 + categories: [crypto, payments, finance]
677 + tier: A
678 + weight: 1.3
679 + aliases: [circle, usdc, eurc, circle internet group]
680 + products:
681 + - { name: USDC, type: product, aliases: [usd coin] }
682 + discover: { rss: false, status: true, pages: true }
683 + sensors:
684 + - { name: status, url: "https://status.circle.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
685 + - { name: blog index, url: "https://www.circle.com/blog", type: HTML, connector: http, tier: B }
686 + - { name: stablecoin-evm releases, url: "https://github.com/circlefin/stablecoin-evm/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: circlefin/stablecoin-evm, kind: releases } }
687 + - id: tether
688 + name: Tether
689 + domain: tether.io
690 + categories: [crypto, payments, finance]
691 + tier: A
692 + weight: 1.3
693 + aliases: [tether, usdt]
694 + products:
695 + - { name: USDT, type: product, aliases: [tether usd] }
696 + discover: { rss: true }
697 + sensors:
698 + - { name: site feed, url: "https://tether.io/feed/", type: RSS, connector: rss, tier: A }
699 + - id: paxos
700 + name: Paxos
701 + domain: paxos.com
702 + homepage: https://www.paxos.com
703 + categories: [crypto, payments, finance]
704 + tier: B
705 + aliases: [paxos, pyusd, usdg, pax gold]
706 + discover: { rss: false, status: true, pages: true }
707 + sensors:
708 + - { name: status, url: "https://status.paxos.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
709 + - { name: blog index, url: "https://www.paxos.com/blog", type: HTML, connector: http, tier: B }
710 + - id: sky
711 + name: Sky (MakerDAO)
712 + domain: sky.money
713 + categories: [crypto, finance]
714 + tier: B
715 + aliases: [sky, makerdao, maker, dai, usds]
716 + discover: { rss: false }
717 + sensors:
718 + - { name: governance forum, url: "https://forum.sky.money/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
719 + - id: frax
720 + name: Frax Finance
721 + domain: frax.finance
722 + categories: [crypto, finance]
723 + tier: C
724 + aliases: [frax, frxusd, fraxtal]
725 + discover: { rss: false }
726 + sensors:
727 + - { name: governance forum, url: "https://gov.frax.finance/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
728 + - id: ethena
729 + name: Ethena
730 + domain: ethena.fi
731 + categories: [crypto, finance]
732 + tier: C
733 + aliases: [ethena, usde, ena]
734 + discover: { sitemap: true }
735 + sensors:
736 + - { name: sitemap, url: "https://ethena.fi/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 500 } }
737 + - id: ondo
738 + name: Ondo Finance
739 + domain: ondo.finance
740 + categories: [crypto, finance]
741 + tier: C
742 + aliases: [ondo, ousg, usdy]
743 + discover: { sitemap: true, pages: true }
744 + sensors:
745 + - { name: blog index, url: "https://ondo.finance/blog", type: HTML, connector: http, tier: B }
746 + - { name: sitemap, url: "https://ondo.finance/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 500 } }
747 + - id: securitize
748 + name: Securitize
749 + domain: securitize.io
750 + categories: [crypto, finance]
751 + tier: C
752 + aliases: [securitize, buidl]
753 + discover: { sitemap: true }
754 + sensors:
755 + - { name: sitemap, url: "https://securitize.io/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 500 } }
756 +
757 + # ───────────────────────── D · DeFi, NFT & infrastructure ─────────────────────────
758 + - id: uniswap
759 + name: Uniswap Labs
760 + domain: uniswap.org
761 + categories: [crypto, finance]
762 + tier: B
763 + weight: 1.1
764 + aliases: [uniswap, uni]
765 + discover: { rss: false }
766 + sensors:
767 + - { name: governance forum, url: "https://gov.uniswap.org/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
768 + - { name: interface releases, url: "https://github.com/Uniswap/interface/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: Uniswap/interface, kind: releases } }
769 + - id: aave
770 + name: Aave
771 + domain: aave.com
772 + categories: [crypto, finance]
773 + tier: B
774 + weight: 1.1
775 + aliases: [aave, gho, aave labs, avara]
776 + discover: { rss: true }
777 + sensors:
778 + - { name: blog feed, url: "https://aave.com/blog/rss.xml", type: RSS, connector: rss, tier: B }
779 + - { name: governance forum, url: "https://governance.aave.com/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
780 + - { name: address book releases, url: "https://github.com/bgd-labs/aave-address-book/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: bgd-labs/aave-address-book, kind: releases } }
781 + - id: compound
782 + name: Compound
783 + domain: compound.finance
784 + categories: [crypto, finance]
785 + tier: C
786 + aliases: [compound, comp, comet]
787 + discover: { rss: false }
788 + sensors:
789 + - { name: governance forum, url: "https://www.comp.xyz/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
790 + - { name: comet releases, url: "https://github.com/compound-finance/comet/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: compound-finance/comet, kind: releases } }
791 + - id: lido
792 + name: Lido
793 + domain: lido.fi
794 + categories: [crypto, finance, infrastructure]
795 + tier: B
796 + weight: 1.1
797 + aliases: [lido, steth, wsteth, lido dao]
798 + discover: { rss: false }
799 + sensors:
800 + - { name: blog feed, url: "https://blog.lido.fi/rss/", type: RSS, connector: rss, tier: B }
801 + - { name: research forum, url: "https://research.lido.fi/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
802 + - { name: core releases, url: "https://github.com/lidofinance/core/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: lidofinance/core, kind: releases } }
803 + - id: curve
804 + name: Curve Finance
805 + domain: curve.finance
806 + categories: [crypto, finance]
807 + tier: C
808 + aliases: [curve, crv, crvusd]
809 + discover: { rss: false }
810 + notes: "gov.curve.finance is Cloudflare-challenged; the Ghost news feed works."
811 + sensors:
812 + - { name: news feed, url: "https://news.curve.finance/rss/", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
813 + - id: dydx
814 + name: dYdX
815 + domain: dydx.exchange
816 + categories: [crypto, finance]
817 + tier: C
818 + aliases: [dydx]
819 + discover: { rss: false }
820 + notes: "status.dydx.exchange (dydx1.statuspage.io) is inactive (401)."
821 + sensors:
822 + - { name: governance forum, url: "https://dydx.forum/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
823 + - { name: v4-chain releases, url: "https://github.com/dydxprotocol/v4-chain/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: dydxprotocol/v4-chain, kind: releases } }
824 + - id: gmx
825 + name: GMX
826 + domain: gmx.io
827 + categories: [crypto, finance]
828 + tier: C
829 + aliases: [gmx]
830 + discover: { rss: false }
831 + sensors:
832 + - { name: governance forum, url: "https://gov.gmx.io/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
833 + - id: raydium
834 + name: Raydium
835 + domain: raydium.io
836 + categories: [crypto, finance]
837 + tier: C
838 + aliases: [raydium, ray]
839 + discover: { rss: false }
840 + sensors:
841 + - { name: sdk v2 releases, url: "https://github.com/raydium-io/raydium-sdk-V2/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: raydium-io/raydium-sdk-V2, kind: releases } }
842 + - id: pancakeswap
843 + name: PancakeSwap
844 + domain: pancakeswap.finance
845 + categories: [crypto, finance]
846 + tier: C
847 + aliases: [pancakeswap, cake]
848 + discover: { rss: false }
849 + notes: "GitHub repos publish no releases (pancake-frontend 404, infinity-core empty feed)."
850 + sensors:
851 + - { name: governance forum, url: "https://forum.pancakeswap.finance/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
852 + - id: opensea
853 + name: OpenSea
854 + domain: opensea.io
855 + categories: [crypto, commerce]
856 + tier: B
857 + aliases: [opensea, sea]
858 + discover: { rss: false, status: true }
859 + sensors:
860 + - { name: status, url: "https://status.opensea.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
861 + - id: magic-eden
862 + name: Magic Eden
863 + domain: magiceden.io
864 + categories: [crypto, commerce]
865 + tier: C
866 + aliases: [magic eden, me]
867 + discover: { rss: false, status: true }
868 + sensors:
869 + - { name: status, url: "https://status.magiceden.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
870 + - id: alchemy
871 + name: Alchemy
872 + domain: alchemy.com
873 + homepage: https://www.alchemy.com
874 + categories: [crypto, infrastructure, developer]
875 + tier: B
876 + weight: 1.1
877 + aliases: [alchemy]
878 + discover: { rss: false, status: true }
879 + sensors:
880 + - { name: status, url: "https://status.alchemy.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
881 + - { name: sdk releases, url: "https://github.com/alchemyplatform/alchemy-sdk-js/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: alchemyplatform/alchemy-sdk-js, kind: releases } }
882 + - id: infura
883 + name: Infura (Consensys)
884 + domain: infura.io
885 + homepage: https://www.infura.io
886 + categories: [crypto, infrastructure, developer]
887 + tier: B
888 + weight: 1.1
889 + aliases: [infura]
890 + discover: { rss: false, status: true }
891 + sensors:
892 + - { name: status, url: "https://status.infura.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
893 + - id: quicknode
894 + name: QuickNode
895 + domain: quicknode.com
896 + homepage: https://www.quicknode.com
897 + categories: [crypto, infrastructure, developer]
898 + tier: B
899 + aliases: [quicknode]
900 + discover: { rss: true, status: true }
901 + sensors:
902 + - { name: status, url: "https://status.quicknode.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
903 + - { name: blog feed, url: "https://www.quicknode.com/blog/rss", type: RSS, connector: rss, tier: B, config: { maxItems: 30 } }
904 + - id: chainstack
905 + name: Chainstack
906 + domain: chainstack.com
907 + categories: [crypto, infrastructure, developer]
908 + tier: C
909 + aliases: [chainstack]
910 + discover: { rss: true, status: true }
911 + sensors:
912 + - { name: status, url: "https://status.chainstack.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
913 + - { name: blog feed, url: "https://chainstack.com/feed/", type: RSS, connector: rss, tier: B }
914 + - id: the-graph
915 + name: The Graph
916 + domain: thegraph.com
917 + categories: [crypto, infrastructure, developer]
918 + tier: C
919 + aliases: [the graph, grt, edge & node]
920 + discover: { rss: false }
921 + notes: "status.thegraph.com is Cloudflare-challenged; blog has no feed."
922 + sensors:
923 + - { name: graph-node releases, url: "https://github.com/graphprotocol/graph-node/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: graphprotocol/graph-node, kind: releases } }
924 + - id: dune
925 + name: Dune
926 + domain: dune.com
927 + categories: [crypto, infrastructure, developer]
928 + tier: C
929 + aliases: [dune analytics]
930 + discover: { rss: false }
931 + notes: "dune.com is Cloudflare-challenged (blog, status)."
932 + sensors:
933 + - { name: python client releases, url: "https://github.com/duneanalytics/dune-client/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: duneanalytics/dune-client, kind: releases } }
934 + - id: etherscan
935 + name: Etherscan
936 + domain: etherscan.io
937 + categories: [crypto, infrastructure, developer]
938 + tier: B
939 + weight: 1.1
940 + aliases: [etherscan]
941 + discover: { rss: false, status: true }
942 + sensors:
943 + - { name: status, url: "https://status.etherscan.io/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
944 + - id: chainalysis
945 + name: Chainalysis
946 + domain: chainalysis.com
947 + homepage: https://www.chainalysis.com
948 + categories: [crypto, cyber, finance]
949 + tier: B
950 + weight: 1.1
951 + aliases: [chainalysis]
952 + discover: { rss: true }
953 + sensors:
954 + - { name: blog feed, url: "https://www.chainalysis.com/blog/feed/", type: RSS, connector: rss, tier: B }
955 + - id: coinmarketcap
956 + name: CoinMarketCap
957 + domain: coinmarketcap.com
958 + categories: [crypto, finance]
959 + tier: B
960 + aliases: [coinmarketcap, cmc]
961 + discover: { rss: false, status: true }
962 + sensors:
963 + - { name: status, url: "https://status.coinmarketcap.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
964 + - id: glassnode
965 + name: Glassnode
966 + domain: glassnode.com
967 + categories: [crypto, finance]
968 + tier: C
969 + aliases: [glassnode]
970 + discover: { rss: true }
971 + sensors:
972 + - { name: research feed, url: "https://research.glassnode.com/rss/", type: RSS, connector: rss, tier: B }
973 + - id: defillama
974 + name: DefiLlama
975 + domain: defillama.com
976 + categories: [crypto, finance, open-data]
977 + tier: C
978 + aliases: [defillama, defi llama, llama corp]
979 + discover: { rss: false, sitemap: false }
980 + notes: "defillama.com (site, sitemaps) is Cloudflare-challenged; the open api.llama.fi is not. The hacks dataset is an unordered root array without ids (keyed by protocol name; a repeat exploit of the same protocol shows up as a record update)."
981 + sensors:
982 + - { name: hacks dataset (api.llama.fi), url: "https://api.llama.fi/hacks", type: REST_API, connector: jsonlist, tier: B, config: { itemsPath: "", keyField: name, titleTemplate: "{name} — {classification} ({targetType})", urlTemplate: "https://defillama.com/hacks", summaryField: technique, compareFields: [date, amount, chain, classification, technique], maxItems: 2000 } }
983 + - id: l2beat
984 + name: L2BEAT
985 + domain: l2beat.com
986 + categories: [crypto, research, open-data]
987 + tier: C
988 + aliases: [l2beat]
989 + discover: { sitemap: true, pages: true }
990 + sensors:
991 + - { name: changelog, url: "https://l2beat.com/changelog", type: HTML, connector: http, tier: B }
992 + - { name: sitemap, url: "https://l2beat.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 800 } }
993 + - id: flashbots
994 + name: Flashbots
995 + domain: flashbots.net
996 + categories: [crypto, research, infrastructure]
997 + tier: B
998 + aliases: [flashbots, mev-boost, suave]
999 + discover: { rss: true }
1000 + sensors:
1001 + - { name: writings feed, url: "https://writings.flashbots.net/rss.xml", type: RSS, connector: rss, tier: B }
1002 + - { name: collective forum, url: "https://collective.flashbots.net/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
1003 + - { name: mev-boost releases, url: "https://github.com/flashbots/mev-boost/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: flashbots/mev-boost, kind: releases } }
1004 + - id: safe
1005 + name: Safe (Gnosis Safe)
1006 + domain: safe.global
1007 + categories: [crypto, infrastructure, cyber]
1008 + tier: B
1009 + weight: 1.1
1010 + aliases: [safe, gnosis safe, safe wallet]
1011 + discover: { rss: false }
1012 + sensors:
1013 + - { name: governance forum, url: "https://forum.safe.global/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
1014 + - { name: smart account releases, url: "https://github.com/safe-global/safe-smart-account/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: safe-global/safe-smart-account, kind: releases } }
1015 + - id: reown
1016 + name: Reown (WalletConnect)
1017 + domain: reown.com
1018 + categories: [crypto, infrastructure, developer]
1019 + tier: B
1020 + aliases: [reown, walletconnect, wallet connect, appkit]
1021 + discover: { rss: false, status: true }
1022 + sensors:
1023 + - { name: status, url: "https://status.reown.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1024 + - { name: appkit releases, url: "https://github.com/reown-com/appkit/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: reown-com/appkit, kind: releases } }
1025 + - id: ens
1026 + name: ENS (Ethereum Name Service)
1027 + domain: ens.domains
1028 + categories: [crypto, infrastructure, internet]
1029 + tier: B
1030 + aliases: [ens, ethereum name service, ens labs]
1031 + discover: { rss: false }
1032 + sensors:
1033 + - { name: governance forum, url: "https://discuss.ens.domains/latest.rss", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
1034 + - { name: contracts releases, url: "https://github.com/ensdomains/ens-contracts/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: ensdomains/ens-contracts, kind: releases } }
1035 + - id: farcaster
1036 + name: Farcaster
1037 + domain: farcaster.xyz
1038 + categories: [crypto, internet]
1039 + tier: C
1040 + aliases: [farcaster, warpcast, merkle manufactory]
1041 + discover: { sitemap: true }
1042 + sensors:
1043 + - { name: hub monorepo releases, url: "https://github.com/farcasterxyz/hub-monorepo/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: farcasterxyz/hub-monorepo, kind: releases } }
1044 + - id: lens
1045 + name: Lens Protocol (Avara)
1046 + domain: lens.xyz
1047 + categories: [crypto, internet]
1048 + tier: C
1049 + aliases: [lens protocol, lens chain]
1050 + discover: { pages: true }
1051 + sensors:
1052 + - { name: news index, url: "https://lens.xyz/news", type: HTML, connector: http, tier: B }
1053 + - id: world
1054 + name: World (Tools for Humanity)
1055 + domain: world.org
1056 + categories: [crypto, ai, internet]
1057 + tier: C
1058 + aliases: [worldcoin, world id, tools for humanity, tfh, world chain]
1059 + discover: { rss: false }
1060 + sensors:
1061 + - { name: idkit releases, url: "https://github.com/worldcoin/idkit-js/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: worldcoin/idkit-js, kind: releases } }
1062 + - id: helium
1063 + name: Helium Foundation
1064 + domain: helium.com
1065 + homepage: https://www.helium.com
1066 + categories: [crypto, telecom]
1067 + tier: C
1068 + aliases: [helium, hnt, nova labs]
1069 + discover: { rss: false, status: true }
1070 + sensors:
1071 + - { name: status, url: "https://status.helium.com/api/v2/summary.json", type: STATUSPAGE, connector: statuspage, tier: S }
1072 + - id: render-network
1073 + name: Render Network
1074 + domain: rendernetwork.com
1075 + categories: [crypto, infrastructure, ai]
1076 + tier: C
1077 + aliases: [render network, render, rndr]
1078 + discover: { sitemap: true }
1079 + sensors:
1080 + - { name: blog (medium), url: "https://rendernetwork.medium.com/feed", type: RSS, connector: rss, tier: B }
1081 + - id: akash
1082 + name: Akash Network
1083 + domain: akash.network
1084 + categories: [crypto, cloud, infrastructure]
1085 + tier: C
1086 + aliases: [akash, akt]
1087 + discover: { rss: false }
1088 + sensors:
1089 + - { name: node releases, url: "https://github.com/akash-network/node/releases.atom", type: GITHUB_RELEASE, connector: github, tier: B, config: { repo: akash-network/node, kind: releases } }
1090 + - id: ocean-protocol
1091 + name: Ocean Protocol
1092 + domain: oceanprotocol.com
1093 + categories: [crypto, ai, open-data]
1094 + tier: C
1095 + aliases: [ocean protocol, ocean]
1096 + discover: { rss: false }
1097 + sensors:
1098 + - { name: blog (medium), url: "https://blog.oceanprotocol.com/feed", type: RSS, connector: rss, tier: B }
1099 +
1100 + # ───────────────────────── E · Policy, regulation & investment products ─────────────────────────
1101 + # OFAC recent actions: already covered by `us-treasury` (ofac.treasury.gov/rss.xml, founding file).
1102 + # FinCEN: already covered by `fincen` in 11-central-banks-finance.yaml (fincen.gov/news).
1103 + - id: crypto-council-for-innovation
1104 + name: Crypto Council for Innovation
1105 + domain: cryptoforinnovation.org
1106 + categories: [crypto, politics, ngo]
1107 + tier: C
1108 + aliases: [cci, crypto council]
1109 + discover: { rss: true }
1110 + sensors:
1111 + - { name: site feed, url: "https://cryptoforinnovation.org/feed/", type: RSS, connector: rss, tier: B }
1112 + - id: coin-center
1113 + name: Coin Center
1114 + domain: coincenter.org
1115 + categories: [crypto, politics, ngo]
1116 + tier: C
1117 + aliases: [coin center]
1118 + discover: { rss: true }
1119 + sensors:
1120 + - { name: site feed, url: "https://coincenter.org/feed/", type: RSS, connector: rss, tier: B }
1121 + - id: defi-education-fund
1122 + name: DeFi Education Fund
1123 + domain: defieducationfund.org
1124 + homepage: https://www.defieducationfund.org
1125 + categories: [crypto, politics, ngo]
1126 + tier: C
1127 + aliases: [defi education fund, def]
1128 + discover: { rss: true }
1129 + sensors:
1130 + - { name: site feed, url: "https://www.defieducationfund.org/feed/", type: RSS, connector: rss, tier: B }
1131 + - id: ark-invest
1132 + name: ARK Invest
1133 + domain: ark-invest.com
1134 + homepage: https://www.ark-invest.com
1135 + categories: [finance, crypto, research]
1136 + tier: B
1137 + aliases: [ark invest, ark, arkb, cathie wood]
1138 + discover: { rss: true }
1139 + sensors:
1140 + - { name: sitewide feed, url: "https://www.ark-invest.com/feed", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
1141 + - id: bitwise
1142 + name: Bitwise Asset Management
1143 + domain: bitwiseinvestments.com
1144 + categories: [finance, crypto]
1145 + tier: C
1146 + aliases: [bitwise, bitb]
1147 + discover: { sitemap: true, pages: true }
1148 + sensors:
1149 + - { name: newsroom, url: "https://bitwiseinvestments.com/newsroom", type: HTML, connector: http, tier: B }
1150 + - id: 21shares
1151 + name: 21Shares
1152 + domain: 21shares.com
1153 + homepage: https://www.21shares.com
1154 + categories: [finance, crypto]
1155 + tier: C
1156 + aliases: [21shares, 21 shares]
1157 + discover: { sitemap: true, pages: true }
1158 + sensors:
1159 + - { name: insights index, url: "https://www.21shares.com/en-eu/insights", type: HTML, connector: http, tier: B }
1160 + - id: vaneck-digital-assets
1161 + name: VanEck Digital Assets
1162 + domain: vaneck.com
1163 + homepage: https://www.vaneck.com/us/en/blogs/digital-assets/
1164 + categories: [finance, crypto]
1165 + tier: C
1166 + aliases: [vaneck, hodl etf]
1167 + discover: { rss: false, pages: true }
1168 + sensors:
1169 + - { name: digital assets blog index, url: "https://www.vaneck.com/us/en/blogs/digital-assets/", type: HTML, connector: http, tier: C }
1170 + - id: fidelity-digital-assets
1171 + name: Fidelity Digital Assets
1172 + domain: fidelitydigitalassets.com
1173 + homepage: https://www.fidelitydigitalassets.com
1174 + categories: [finance, crypto]
1175 + tier: C
1176 + aliases: [fidelity digital assets, fbtc]
1177 + discover: { rss: false, pages: true }
1178 + sensors:
1179 + - { name: research and insights, url: "https://www.fidelitydigitalassets.com/research-and-insights", type: HTML, connector: http, tier: C }
1180 + - id: galaxy-digital
1181 + name: Galaxy Digital
1182 + domain: galaxy.com
1183 + homepage: https://www.galaxy.com
1184 + categories: [finance, crypto]
1185 + tier: C
1186 + aliases: [galaxy digital, galaxy, glxy]
1187 + discover: { sitemap: true, pages: true }
1188 + sensors:
1189 + - { name: newsroom, url: "https://www.galaxy.com/newsroom", type: HTML, connector: http, tier: B }
1190 + - id: riot-platforms
1191 + name: Riot Platforms
1192 + domain: riotplatforms.com
1193 + homepage: https://www.riotplatforms.com
1194 + categories: [crypto, energy, finance]
1195 + tier: C
1196 + aliases: [riot platforms, riot blockchain, riot]
1197 + discover: { rss: true }
1198 + sensors:
1199 + - { name: site feed, url: "https://www.riotplatforms.com/feed/", type: RSS, connector: rss, tier: B }
1200 + - id: hive-digital
1201 + name: HIVE Digital Technologies
1202 + domain: hivedigitaltechnologies.com
1203 + homepage: https://www.hivedigitaltechnologies.com
1204 + categories: [crypto, energy, finance]
1205 + tier: C
1206 + aliases: [hive digital, hive blockchain, hive]
1207 + discover: { sitemap: true, pages: true }
1208 + sensors:
1209 + - { name: news index, url: "https://www.hivedigitaltechnologies.com/news/", type: HTML, connector: http, tier: B }
1210 + - id: keel-infrastructure
1211 + name: Keel Infrastructure (formerly Bitfarms)
1212 + domain: keelinfra.com
1213 + homepage: https://www.keelinfra.com
1214 + categories: [crypto, energy, finance]
1215 + tier: C
1216 + aliases: [bitfarms, keel]
1217 + discover: { sitemap: true, pages: true }
1218 + notes: "bitfarms.com redirects to keelinfra.com (rebrand)."
1219 + sensors:
1220 + - { name: news index, url: "https://www.keelinfra.com/news", type: HTML, connector: http, tier: B }
1221 + - { name: sitemap, url: "https://www.keelinfra.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 300 } }
added config/sources.d/20-transport-logistics-aviation-space.yaml +2164 −0
@@ -0,0 +1,2164 @@
1 +# config/sources.d/20-transport-logistics-aviation-space.yaml — aviation regulators & bodies, airports, airlines,
2 +# aerospace manufacturers, space agencies & companies, rail & transit, maritime & logistics, road & border agencies.
3 +# Written 2026-09-08. Every sensor below was fetched and parsed with apps/engine/src/validate.ts (OK only).
4 +# Blocked sites (Akamai/Cloudflare/Imperva/Radware 403, client-rendered shells) are recorded in `notes:` rather than
5 +# pretending. Categories: aviation · space · transport · logistics (+ government / industry where relevant).
6 +sources:
7 + # ───────────────────────── A · Aviation regulators, safety boards & industry bodies ─────────────────────────
8 + - id: faa
9 + name: FAA
10 + domain: faa.gov
11 + homepage: https://www.faa.gov
12 + categories: [aviation, government]
13 + tier: A
14 + weight: 1.4
15 + aliases: [federal aviation administration]
16 + discover: { rss: false }
17 + notes: "www.faa.gov (newsroom, RSS, robots.txt) is Akamai-protected → 403 for bots. The NAS Status API (nasstatus.faa.gov) is open: ground stops, ground delay programs, airport closures."
18 + sensors:
19 + - { name: nas airport status, url: "https://nasstatus.faa.gov/api/airport-status-information", type: XML, connector: http, tier: A }
20 + - id: easa
21 + name: EASA
22 + domain: easa.europa.eu
23 + homepage: https://www.easa.europa.eu
24 + categories: [aviation, government]
25 + tier: B
26 + weight: 1.3
27 + aliases: [european union aviation safety agency]
28 + discover: { rss: true, sitemap: true }
29 + sensors:
30 + - { name: news, url: "https://www.easa.europa.eu/en/newsroom-and-events/news", type: HTML, connector: http, tier: B }
31 + - { name: sitemap, url: "https://www.easa.europa.eu/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxChildren: 12 } }
32 + - id: icao
33 + name: ICAO
34 + domain: icao.int
35 + homepage: https://www.icao.int
36 + categories: [aviation, international]
37 + tier: B
38 + weight: 1.3
39 + aliases: [international civil aviation organization]
40 + discover: { rss: true, sitemap: true }
41 + notes: "icao.int/news is a client-rendered shell (thin); the Drupal sitemap index is the usable signal."
42 + sensors:
43 + - { name: sitemap, url: "https://www.icao.int/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxChildren: 15 } }
44 + - id: eurocontrol
45 + name: EUROCONTROL
46 + domain: eurocontrol.int
47 + homepage: https://www.eurocontrol.int
48 + categories: [aviation, international]
49 + tier: B
50 + weight: 1.2
51 + discover: { rss: true, sitemap: true }
52 + sensors:
53 + - { name: news feed, url: "https://www.eurocontrol.int/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
54 + - id: uk-caa
55 + name: UK Civil Aviation Authority
56 + domain: caa.co.uk
57 + homepage: https://www.caa.co.uk
58 + categories: [aviation, government]
59 + tier: B
60 + aliases: [uk caa, civil aviation authority]
61 + discover: { rss: true, sitemap: true }
62 + sensors:
63 + - { name: gov.uk publications feed, url: "https://www.gov.uk/government/organisations/civil-aviation-authority.atom", type: ATOM, connector: rss, tier: B }
64 + - { name: newsroom, url: "https://www.caa.co.uk/newsroom/", type: HTML, connector: http, tier: B }
65 + - id: aaib
66 + name: Air Accidents Investigation Branch
67 + domain: gov.uk
68 + homepage: https://www.gov.uk/government/organisations/air-accidents-investigation-branch
69 + categories: [aviation, government]
70 + tier: B
71 + aliases: [aaib]
72 + discover: { rss: false }
73 + sensors:
74 + - { name: gov.uk feed, url: "https://www.gov.uk/government/organisations/air-accidents-investigation-branch.atom", type: ATOM, connector: rss, tier: B }
75 + - id: uk-dft
76 + name: UK Department for Transport
77 + domain: gov.uk
78 + homepage: https://www.gov.uk/government/organisations/department-for-transport
79 + categories: [transport, government]
80 + tier: B
81 + aliases: [dft, department for transport]
82 + discover: { rss: false }
83 + sensors:
84 + - { name: gov.uk feed, url: "https://www.gov.uk/government/organisations/department-for-transport.atom", type: ATOM, connector: rss, tier: B }
85 + - { name: office of rail and road feed, url: "https://www.gov.uk/government/organisations/office-of-rail-and-road.atom", type: ATOM, connector: rss, tier: C }
86 + - id: ntsb
87 + name: NTSB
88 + domain: ntsb.gov
89 + homepage: https://www.ntsb.gov
90 + categories: [aviation, transport, government]
91 + tier: B
92 + weight: 1.3
93 + aliases: [national transportation safety board]
94 + discover: { rss: true }
95 + sensors:
96 + - { name: press releases, url: "https://www.ntsb.gov/news/press-releases/Pages/default.aspx", type: HTML, connector: http, tier: B }
97 + - { name: news and events, url: "https://www.ntsb.gov/news/Pages/default.aspx", type: HTML, connector: http, tier: B }
98 + - id: bea-aero
99 + name: BEA (Bureau d'Enquêtes et d'Analyses)
100 + domain: bea.aero
101 + homepage: https://bea.aero
102 + categories: [aviation, government]
103 + tier: B
104 + aliases: [bea aero, bureau d'enquêtes et d'analyses]
105 + discover: { rss: true }
106 + sensors:
107 + - { name: notified events, url: "https://bea.aero/en/investigation-reports/notified-events/", type: HTML, connector: http, tier: B }
108 + - id: tsb-canada
109 + name: Transportation Safety Board of Canada
110 + domain: tsb.gc.ca
111 + homepage: https://www.tsb.gc.ca
112 + categories: [aviation, transport, government]
113 + tier: B
114 + aliases: [tsb, bst, bureau de la sécurité des transports]
115 + discover: { rss: false }
116 + notes: "tsb.gc.ca sits behind Azure Application Gateway → 403 for bots (RSS and news pages); no Canada News Centre department id worked (2026-09-08)."
117 + - id: nav-canada
118 + name: NAV CANADA
119 + domain: navcanada.ca
120 + homepage: https://www.navcanada.ca
121 + categories: [aviation]
122 + tier: B
123 + aliases: [navcanada]
124 + discover: { rss: false }
125 + notes: "navcanada.ca returns 403 to bots (Imperva); no feed found (2026-09-08)."
126 + - id: jcab
127 + name: Japan Civil Aviation Bureau (MLIT)
128 + domain: mlit.go.jp
129 + homepage: https://www.mlit.go.jp/koku/
130 + categories: [aviation, government]
131 + tier: C
132 + aliases: [jcab, mlit koku]
133 + discover: { rss: true }
134 + sensors:
135 + - { name: koku index, url: "https://www.mlit.go.jp/koku/index.html", type: HTML, connector: http, tier: C }
136 + - id: lba
137 + name: Luftfahrt-Bundesamt
138 + domain: lba.de
139 + homepage: https://www.lba.de
140 + categories: [aviation, government]
141 + tier: C
142 + aliases: [lba]
143 + discover: { rss: true, sitemap: true }
144 + sensors:
145 + - { name: sitemap, url: "https://www.lba.de/Sitemap_Index.xml", type: SITEMAP, connector: sitemap, tier: C }
146 + - id: iata
147 + name: IATA
148 + domain: iata.org
149 + homepage: https://www.iata.org
150 + categories: [aviation, industry]
151 + tier: B
152 + weight: 1.3
153 + aliases: [international air transport association]
154 + discover: { rss: true, sitemap: true }
155 + sensors:
156 + - { name: pressroom, url: "https://www.iata.org/en/pressroom/", type: HTML, connector: http, tier: B }
157 + - id: aci-world
158 + name: ACI World
159 + domain: aci.aero
160 + homepage: https://aci.aero
161 + categories: [aviation, industry]
162 + tier: B
163 + aliases: [airports council international, aci]
164 + discover: { rss: true, sitemap: true }
165 + sensors:
166 + - { name: news feed, url: "https://aci.aero/feed/", type: RSS, connector: rss, tier: B }
167 + - id: airlines-for-america
168 + name: Airlines for America
169 + domain: airlines.org
170 + homepage: https://airlines.org
171 + categories: [aviation, industry]
172 + tier: B
173 + aliases: [a4a]
174 + discover: { rss: true, sitemap: true }
175 + sensors:
176 + - { name: news feed, url: "https://airlines.org/feed/", type: RSS, connector: rss, tier: B }
177 + - id: nbaa
178 + name: NBAA
179 + domain: nbaa.org
180 + homepage: https://nbaa.org
181 + categories: [aviation, industry]
182 + tier: C
183 + aliases: [national business aviation association]
184 + discover: { rss: true, sitemap: true }
185 + sensors:
186 + - { name: news feed, url: "https://nbaa.org/feed/", type: RSS, connector: rss, tier: C }
187 + # ───────────────────────── B · Airports ─────────────────────────
188 + - id: toronto-pearson
189 + name: Toronto Pearson (GTAA)
190 + domain: torontopearson.com
191 + homepage: https://www.torontopearson.com
192 + categories: [aviation, transport]
193 + tier: B
194 + aliases: [gtaa, yyz, greater toronto airports authority]
195 + discover: { sitemap: true }
196 + notes: "News pages are behind a Radware bot captcha; the sitemap is open."
197 + sensors:
198 + - { name: sitemap (en), url: "https://www.torontopearson.com/sitemap_yyz_en.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 3000 } }
199 + - id: yyc-calgary
200 + name: Calgary Airport Authority (YYC)
201 + domain: yyc.com
202 + homepage: https://www.yyc.com
203 + categories: [aviation, transport]
204 + tier: C
205 + aliases: [yyc, calgary international airport]
206 + discover: { sitemap: true }
207 + sensors:
208 + - { name: sitemap, url: "https://www.yyc.com/en-us/SiteMap.aspx", type: SITEMAP, connector: sitemap, tier: C }
209 + - id: aeroports-de-montreal
210 + name: Aéroports de Montréal (YUL)
211 + domain: admtl.com
212 + homepage: https://www.admtl.com
213 + categories: [aviation, transport]
214 + tier: C
215 + aliases: [adm, yul, montréal-trudeau]
216 + discover: { sitemap: true }
217 + notes: "admtl.com (news pages and sitemap) returns 403 (Imperva) to bots (2026-09-08)."
218 + - id: vancouver-airport
219 + name: Vancouver Airport Authority (YVR)
220 + domain: yvr.ca
221 + homepage: https://www.yvr.ca
222 + categories: [aviation, transport]
223 + tier: C
224 + aliases: [yvr]
225 + discover: { rss: false }
226 + notes: "yvr.ca returns 403 (Imperva) to bots (2026-09-08)."
227 + - id: panynj
228 + name: Port Authority of New York and New Jersey
229 + domain: panynj.gov
230 + homepage: https://www.panynj.gov
231 + categories: [aviation, transport, logistics]
232 + tier: B
233 + aliases: [port authority ny nj, jfk, ewr, lga]
234 + discover: { sitemap: true }
235 + notes: "Press-release archive is client-rendered; sitemap is open."
236 + sensors:
237 + - { name: sitemap, url: "https://www.panynj.gov/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B }
238 + - id: lax
239 + name: Los Angeles World Airports (LAX)
240 + domain: flylax.com
241 + homepage: https://www.flylax.com
242 + categories: [aviation, transport]
243 + tier: C
244 + aliases: [lawa, los angeles international airport]
245 + discover: { rss: false }
246 + notes: "flylax.com is behind a Cloudflare challenge (2026-09-08)."
247 + - id: heathrow
248 + name: Heathrow Airport
249 + domain: heathrow.com
250 + homepage: https://www.heathrow.com
251 + categories: [aviation, transport]
252 + tier: B
253 + weight: 1.1
254 + aliases: [lhr, heathrow airport holdings]
255 + discover: { rss: true, sitemap: true }
256 + sensors:
257 + - { name: press releases, url: "https://mediacentre.heathrow.com/pressrelease", type: HTML, connector: http, tier: B }
258 + - { name: sitemap index, url: "https://www.heathrow.com/sitemap-index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 8, maxUrls: 4000 } }
259 + - id: groupe-adp
260 + name: Groupe ADP (Paris Aéroport)
261 + domain: parisaeroport.fr
262 + homepage: https://www.parisaeroport.fr
263 + categories: [aviation, transport]
264 + tier: C
265 + aliases: [aéroports de paris, adp, cdg, orly]
266 + discover: { sitemap: true }
267 + notes: "presse.groupeadp.fr is bot-blocked (403); the parisaeroport.fr sitemap is open."
268 + sensors:
269 + - { name: sitemap, url: "https://www.parisaeroport.fr/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
270 + - id: schiphol
271 + name: Royal Schiphol Group
272 + domain: schiphol.nl
273 + homepage: https://www.schiphol.nl
274 + categories: [aviation, transport]
275 + tier: B
276 + aliases: [amsterdam airport schiphol, ams]
277 + discover: { rss: true }
278 + sensors:
279 + - { name: newsroom, url: "https://news.schiphol.com/", type: HTML, connector: http, tier: B }
280 + - id: fraport
281 + name: Fraport
282 + domain: fraport.com
283 + homepage: https://www.fraport.com
284 + categories: [aviation, transport]
285 + tier: B
286 + aliases: [frankfurt airport, fra]
287 + discover: { rss: true, sitemap: true }
288 + sensors:
289 + - { name: press releases, url: "https://www.fraport.com/en/newsroom/pressreleases.html", type: HTML, connector: http, tier: B }
290 + - id: changi-airport
291 + name: Changi Airport Group
292 + domain: changiairport.com
293 + homepage: https://www.changiairport.com
294 + categories: [aviation, transport]
295 + tier: C
296 + aliases: [sin, singapore changi]
297 + discover: { sitemap: true }
298 + sensors:
299 + - { name: sitemap, url: "https://www.changiairport.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
300 + - id: hong-kong-airport
301 + name: Hong Kong International Airport
302 + domain: hongkongairport.com
303 + homepage: https://www.hongkongairport.com
304 + categories: [aviation, transport]
305 + tier: B
306 + aliases: [hkia, airport authority hong kong, hkg]
307 + discover: { rss: true }
308 + sensors:
309 + - { name: press releases, url: "https://www.hongkongairport.com/en/media-centre/press-release/", type: HTML, connector: http, tier: B }
310 + - id: narita-airport
311 + name: Narita International Airport
312 + domain: narita-airport.jp
313 + homepage: https://www.narita-airport.jp
314 + categories: [aviation, transport]
315 + tier: C
316 + aliases: [nrt, naa]
317 + discover: { rss: true }
318 + sensors:
319 + - { name: news, url: "https://www.narita-airport.jp/en/news/", type: HTML, connector: http, tier: C }
320 + # ───────────────────────── C · Airlines ─────────────────────────
321 + - id: air-canada
322 + name: Air Canada
323 + domain: aircanada.com
324 + homepage: https://www.aircanada.com
325 + categories: [aviation, travel]
326 + tier: B
327 + weight: 1.2
328 + aliases: [air canada rouge, aeroplan]
329 + discover: { rss: true }
330 + sensors:
331 + - { name: media newsroom, url: "https://www.aircanada.com/media/", type: HTML, connector: http, tier: B }
332 + - { name: travel news and updates, url: "https://www.aircanada.com/ca/en/aco/home/book/travel-news-and-updates.html", type: HTML, connector: http, tier: B }
333 + - id: westjet
334 + name: WestJet
335 + domain: westjet.com
336 + homepage: https://www.westjet.com
337 + categories: [aviation, travel]
338 + tier: B
339 + aliases: [westjet airlines, swoop]
340 + discover: { rss: true }
341 + sensors:
342 + - { name: newsroom, url: "https://www.westjet.com/en-ca/news", type: HTML, connector: http, tier: B }
343 + - id: porter-airlines
344 + name: Porter Airlines
345 + domain: flyporter.com
346 + homepage: https://www.flyporter.com
347 + categories: [aviation, travel]
348 + tier: C
349 + aliases: [porter]
350 + discover: { rss: false }
351 + notes: "flyporter.com is behind a Cloudflare challenge (2026-09-08)."
352 + - id: air-transat
353 + name: Air Transat
354 + domain: airtransat.com
355 + homepage: https://www.airtransat.com
356 + categories: [aviation, travel]
357 + tier: C
358 + aliases: [transat, transat a.t.]
359 + discover: { sitemap: true }
360 + notes: "News page is a client-rendered shell; transat.com media room returned 404. Sitemap index is open."
361 + sensors:
362 + - { name: sitemap index, url: "https://www.airtransat.com/sitemaps", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 4 } }
363 + - id: flair-airlines
364 + name: Flair Airlines
365 + domain: flyflair.com
366 + homepage: https://flyflair.com
367 + categories: [aviation, travel]
368 + tier: C
369 + aliases: [flair]
370 + discover: { rss: false }
371 + notes: "flyflair.com returns 403 (Imperva) to bots (2026-09-08)."
372 + - id: delta
373 + name: Delta Air Lines
374 + domain: delta.com
375 + homepage: https://www.delta.com
376 + categories: [aviation, travel]
377 + tier: B
378 + weight: 1.3
379 + aliases: [delta air lines, delta airlines]
380 + discover: { rss: true }
381 + sensors:
382 + - { name: news hub feed, url: "https://news.delta.com/rss.xml", type: RSS, connector: rss, tier: B }
383 + - id: united-airlines
384 + name: United Airlines
385 + domain: united.com
386 + homepage: https://www.united.com
387 + categories: [aviation, travel]
388 + tier: B
389 + weight: 1.3
390 + aliases: [united]
391 + discover: { rss: false }
392 + notes: "united.com and hub.united.com (newsroom) time out / block non-browser clients (Akamai); no open feed (2026-09-08)."
393 + - id: american-airlines
394 + name: American Airlines
395 + domain: aa.com
396 + homepage: https://www.aa.com
397 + categories: [aviation, travel]
398 + tier: B
399 + weight: 1.3
400 + aliases: [american, american airlines group]
401 + discover: { rss: false }
402 + notes: "aa.com and news.aa.com (Q4 newsroom incl. RSS) sit behind a Cloudflare challenge (2026-09-08)."
403 + - id: southwest
404 + name: Southwest Airlines
405 + domain: southwest.com
406 + homepage: https://www.southwest.com
407 + categories: [aviation, travel]
408 + tier: B
409 + weight: 1.2
410 + aliases: [southwest airlines]
411 + discover: { sitemap: true }
412 + notes: "swamedia.com newsroom is a Salesforce client-rendered app; the investor-relations sitemap is open."
413 + sensors:
414 + - { name: investors sitemap, url: "https://investors.southwest.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
415 + - id: jetblue
416 + name: JetBlue
417 + domain: jetblue.com
418 + homepage: https://www.jetblue.com
419 + categories: [aviation, travel]
420 + tier: C
421 + aliases: [jetblue airways]
422 + discover: { sitemap: true }
423 + notes: "news.jetblue.com (Q4 newsroom + RSS) is behind a Cloudflare challenge; the CMS sitemap is open."
424 + sensors:
425 + - { name: sitemap, url: "https://legacycms.jetblue.com/public/.rest/sitemap/v1/seo/home/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
426 + - id: alaska-airlines
427 + name: Alaska Airlines
428 + domain: alaskaair.com
429 + homepage: https://www.alaskaair.com
430 + categories: [aviation, travel]
431 + tier: B
432 + aliases: [alaska air group, hawaiian airlines]
433 + discover: { rss: true, sitemap: true }
434 + sensors:
435 + - { name: newsroom feed, url: "https://news.alaskaair.com/feed/", type: RSS, connector: rss, tier: B }
436 + - id: spirit-airlines
437 + name: Spirit Airlines
438 + domain: spirit.com
439 + homepage: https://www.spirit.com
440 + categories: [aviation, travel]
441 + tier: C
442 + aliases: [spirit]
443 + discover: { rss: false }
444 + notes: "spirit.com blocks bots; ir.spirit.com redirects to spiritrestructuring.com (404 on feeds) — 2026-09-08."
445 + - id: frontier-airlines
446 + name: Frontier Airlines
447 + domain: flyfrontier.com
448 + homepage: https://www.flyfrontier.com
449 + categories: [aviation, travel]
450 + tier: C
451 + aliases: [frontier, frontier group holdings]
452 + discover: { rss: false }
453 + notes: "flyfrontier.com serves an 'Unauthorized Activity' interstitial and ir.flyfrontier.com a Cloudflare challenge (2026-09-08)."
454 + - id: lufthansa-group
455 + name: Lufthansa Group
456 + domain: lufthansagroup.com
457 + homepage: https://www.lufthansagroup.com
458 + categories: [aviation, travel]
459 + tier: B
460 + weight: 1.3
461 + aliases: [lufthansa, swiss, austrian airlines, brussels airlines, eurowings]
462 + discover: { rss: true }
463 + notes: "lufthansagroup.com returns 403 to bots; the Presspage newsroom (newsroom.lufthansagroup.com) is open."
464 + sensors:
465 + - { name: newsroom, url: "https://newsroom.lufthansagroup.com/en/", type: HTML, connector: http, tier: B }
466 + - id: air-france-klm
467 + name: Air France-KLM
468 + domain: airfranceklm.com
469 + homepage: https://www.airfranceklm.com
470 + categories: [aviation, travel]
471 + tier: B
472 + weight: 1.3
473 + aliases: [air france, klm, afklm, transavia]
474 + discover: { rss: true }
475 + notes: "airfranceklm.com and corporate.airfrance.com are behind a Cloudflare challenge; KLM's Presspage newsroom is open."
476 + sensors:
477 + - { name: klm newsroom, url: "https://news.klm.com/", type: HTML, connector: http, tier: B }
478 + - id: iag
479 + name: International Airlines Group
480 + domain: iairgroup.com
481 + homepage: https://www.iairgroup.com
482 + categories: [aviation, travel]
483 + tier: C
484 + weight: 1.2
485 + aliases: [iag, british airways, iberia, vueling, aer lingus]
486 + discover: { sitemap: true }
487 + notes: "iberia.com and ba.com block bots; the IAG corporate sitemap is open."
488 + sensors:
489 + - { name: sitemap, url: "https://www.iairgroup.com/xmlsitemap", type: SITEMAP, connector: sitemap, tier: C }
490 + - id: ryanair
491 + name: Ryanair
492 + domain: ryanair.com
493 + homepage: https://www.ryanair.com
494 + categories: [aviation, travel]
495 + tier: B
496 + weight: 1.2
497 + aliases: [ryanair holdings]
498 + discover: { rss: true }
499 + sensors:
500 + - { name: corporate news (wp api), url: "https://corporate.ryanair.com/wp-json/wp/v2/posts?per_page=20&_fields=id,date,link,title,excerpt", type: REST_API, connector: jsonlist, tier: B, config: { keyField: id, titleField: title.rendered, urlField: link, dateField: date, summaryField: excerpt.rendered, compareFields: [title.rendered] } }
501 + - id: easyjet
502 + name: easyJet
503 + domain: easyjet.com
504 + homepage: https://www.easyjet.com
505 + categories: [aviation, travel]
506 + tier: C
507 + weight: 1.1
508 + discover: { rss: false }
509 + notes: "easyjet.com and mediacentre.easyjet.com are Akamai-protected (403) — 2026-09-08."
510 + - id: wizz-air
511 + name: Wizz Air
512 + domain: wizzair.com
513 + homepage: https://wizzair.com
514 + categories: [aviation, travel]
515 + tier: C
516 + aliases: [wizz]
517 + discover: { sitemap: true }
518 + notes: "wizzair.com press pages are client-rendered and the sitemap index resolves to empty child maps for bots (2026-09-08)."
519 + - id: norwegian
520 + name: Norwegian Air Shuttle
521 + domain: norwegian.com
522 + homepage: https://www.norwegian.com
523 + categories: [aviation, travel]
524 + tier: C
525 + aliases: [norwegian air]
526 + discover: { sitemap: true }
527 + notes: "media.norwegian.com (Mynewsdesk) shows an 'Are you human?' wall and norwegian.com/sitemap.xml returns 403 on repeat fetches (2026-09-08)."
528 + - id: sas
529 + name: SAS Scandinavian Airlines
530 + domain: sasgroup.net
531 + homepage: https://www.sasgroup.net
532 + categories: [aviation, travel]
533 + tier: C
534 + aliases: [sas, scandinavian airlines]
535 + discover: { rss: true, sitemap: true }
536 + sensors:
537 + - { name: press releases, url: "https://www.sasgroup.net/newsroom/press-releases/", type: HTML, connector: http, tier: C }
538 + - id: cathay-pacific
539 + name: Cathay Pacific
540 + domain: cathaypacific.com
541 + homepage: https://www.cathaypacific.com
542 + categories: [aviation, travel]
543 + tier: B
544 + aliases: [cathay]
545 + discover: { rss: true }
546 + sensors:
547 + - { name: newsroom, url: "https://news.cathaypacific.com/", type: HTML, connector: http, tier: B }
548 + - id: air-new-zealand
549 + name: Air New Zealand
550 + domain: airnewzealand.co.nz
551 + homepage: https://www.airnewzealand.co.nz
552 + categories: [aviation, travel]
553 + tier: C
554 + aliases: [air nz]
555 + discover: { sitemap: true }
556 + sensors:
557 + - { name: sitemap, url: "https://www.airnewzealand.com/sitemap/en-nz.xml", type: SITEMAP, connector: sitemap, tier: C }
558 + - id: korean-air
559 + name: Korean Air
560 + domain: koreanair.com
561 + homepage: https://www.koreanair.com
562 + categories: [aviation, travel]
563 + tier: B
564 + aliases: [대한항공, asiana]
565 + discover: { rss: true }
566 + sensors:
567 + - { name: newsroom feed, url: "https://news.koreanair.com/feed/", type: RSS, connector: rss, tier: B }
568 + - id: ethiopian-airlines
569 + name: Ethiopian Airlines
570 + domain: ethiopianairlines.com
571 + homepage: https://www.ethiopianairlines.com
572 + categories: [aviation, travel]
573 + tier: C
574 + aliases: [ethiopian]
575 + discover: { rss: true }
576 + sensors:
577 + - { name: press releases, url: "https://corporate.ethiopianairlines.com/media/press-release", type: HTML, connector: http, tier: C }
578 + - id: kenya-airways
579 + name: Kenya Airways
580 + domain: kenya-airways.com
581 + homepage: https://www.kenya-airways.com
582 + categories: [aviation, travel]
583 + tier: C
584 + aliases: [kq]
585 + discover: { sitemap: true }
586 + sensors:
587 + - { name: sitemap, url: "https://www.kenya-airways.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
588 + - id: airasia
589 + name: AirAsia (Capital A)
590 + domain: airasia.com
591 + homepage: https://www.airasia.com
592 + categories: [aviation, travel]
593 + tier: C
594 + aliases: [capital a, airasia move]
595 + discover: { rss: true }
596 + notes: "airasia.com rate-limits bots (Cloudflare 429) and newsroom.airasia.com is a client-rendered shell (thin) — 2026-09-08."
597 + - id: cebu-pacific
598 + name: Cebu Pacific
599 + domain: cebupacificair.com
600 + homepage: https://www.cebupacificair.com
601 + categories: [aviation, travel]
602 + tier: C
603 + aliases: [cebu pacific air, 5j]
604 + discover: { rss: true }
605 + notes: "cebupacificair.com newsroom is a client-rendered shell (thin) — 2026-09-08."
606 + # ───────────────────────── D · Aerospace & defence manufacturers, eVTOL ─────────────────────────
607 + - id: boeing
608 + name: Boeing
609 + domain: boeing.com
610 + homepage: https://www.boeing.com
611 + categories: [aviation, space, industry]
612 + tier: A
613 + weight: 1.5
614 + aliases: [the boeing company]
615 + products:
616 + - { name: 737 MAX, type: product, aliases: ["737 max", "737-8", "737-9"] }
617 + - { name: 787 Dreamliner, type: product, aliases: ["787 dreamliner"] }
618 + - { name: 777X, type: product }
619 + - { name: Starliner, type: product }
620 + discover: { rss: true, sitemap: true }
621 + sensors:
622 + - { name: news releases feed, url: "https://boeing.mediaroom.com/news-releases-statements?pagetemplate=rss", type: RSS, connector: rss, tier: A }
623 + - { name: news sitemap, url: "https://www.boeing.com/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B }
624 + - id: airbus
625 + name: Airbus
626 + domain: airbus.com
627 + homepage: https://www.airbus.com
628 + categories: [aviation, space, industry]
629 + tier: A
630 + weight: 1.5
631 + aliases: [airbus se, airbus group]
632 + products:
633 + - { name: A320neo, type: product, aliases: [a320neo, a321neo, a321xlr] }
634 + - { name: A350, type: product }
635 + - { name: A220, type: product }
636 + discover: { rss: true, sitemap: true }
637 + sensors:
638 + - { name: news feed, url: "https://www.airbus.com/en/rss.xml", type: RSS, connector: rss, tier: A }
639 + - id: embraer
640 + name: Embraer
641 + domain: embraer.com
642 + homepage: https://embraer.com
643 + categories: [aviation, industry]
644 + tier: B
645 + weight: 1.1
646 + aliases: [embraer s.a., eve air mobility]
647 + products:
648 + - { name: E2 family, type: product, aliases: [e195-e2, e190-e2] }
649 + discover: { rss: true, sitemap: true }
650 + notes: "eveairmobility.com (Eve) is Imperva-protected (403); Embraer's own sitemap is open."
651 + sensors:
652 + - { name: sitemap, url: "https://embraer.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B }
653 + - id: bombardier
654 + name: Bombardier
655 + domain: bombardier.com
656 + homepage: https://bombardier.com
657 + categories: [aviation, industry]
658 + tier: B
659 + aliases: [bombardier inc., global 7500, challenger]
660 + discover: { rss: false }
661 + notes: "bombardier.com (and Héroux-Devtek) serve an Imperva bot-wall shell (NOINDEX, ~1 KB) to non-browser clients (2026-09-08)."
662 + - id: heroux-devtek
663 + name: Héroux-Devtek
664 + domain: herouxdevtek.com
665 + homepage: https://www.herouxdevtek.com
666 + categories: [aviation, industry]
667 + tier: C
668 + aliases: [heroux devtek]
669 + discover: { rss: false }
670 + notes: "herouxdevtek.com serves an Imperva bot-wall shell to non-browser clients (2026-09-08)."
671 + - id: general-dynamics
672 + name: General Dynamics
673 + domain: gd.com
674 + homepage: https://www.gd.com
675 + categories: [aviation, industry]
676 + tier: B
677 + weight: 1.1
678 + aliases: [gulfstream, gulfstream aerospace, gd]
679 + discover: { rss: true }
680 + notes: "gulfstreamnews.com returns 403; General Dynamics' corporate press feed covers Gulfstream announcements."
681 + sensors:
682 + - { name: press releases feed, url: "https://www.gd.com/feed.xml", type: RSS, connector: rss, tier: B }
683 + - id: dassault-aviation
684 + name: Dassault Aviation
685 + domain: dassault-aviation.com
686 + homepage: https://www.dassault-aviation.com
687 + categories: [aviation, industry]
688 + tier: B
689 + aliases: [dassault, falcon, rafale]
690 + discover: { rss: true, sitemap: true }
691 + sensors:
692 + - { name: news feed (en), url: "https://www.dassault-aviation.com/en/feed/", type: RSS, connector: rss, tier: B, config: { maxItems: 30 } }
693 + - id: textron-aviation
694 + name: Textron Aviation
695 + domain: txtav.com
696 + homepage: https://txtav.com
697 + categories: [aviation, industry]
698 + tier: B
699 + aliases: [cessna, beechcraft, textron]
700 + discover: { rss: true, sitemap: true }
701 + sensors:
702 + - { name: newsroom, url: "https://media.txtav.com/", type: HTML, connector: http, tier: B }
703 + - { name: sitemap, url: "https://txtav.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
704 + - id: rtx
705 + name: RTX (Pratt & Whitney, Collins Aerospace, Raytheon)
706 + domain: rtx.com
707 + homepage: https://www.rtx.com
708 + categories: [aviation, industry]
709 + tier: B
710 + weight: 1.3
711 + aliases: [raytheon technologies, pratt & whitney, pratt and whitney, collins aerospace, raytheon]
712 + products:
713 + - { name: PW1100G GTF, type: product, aliases: [gtf, geared turbofan, pw1100g] }
714 + discover: { rss: true, sitemap: true }
715 + notes: "prattwhitney.com and collinsaerospace.com newsrooms are behind a Cloudflare challenge; rtx.com is open."
716 + sensors:
717 + - { name: news, url: "https://www.rtx.com/news", type: HTML, connector: http, tier: B }
718 + - { name: sitemap, url: "https://www.rtx.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
719 + - id: ge-aerospace
720 + name: GE Aerospace
721 + domain: geaerospace.com
722 + homepage: https://www.geaerospace.com
723 + categories: [aviation, industry]
724 + tier: B
725 + weight: 1.3
726 + aliases: [ge aviation, cfm international, leap engine]
727 + discover: { rss: true, sitemap: true }
728 + sensors:
729 + - { name: news feed, url: "https://www.geaerospace.com/news/rss.xml", type: RSS, connector: rss, tier: B }
730 + - id: rolls-royce
731 + name: Rolls-Royce Holdings
732 + domain: rolls-royce.com
733 + homepage: https://www.rolls-royce.com
734 + categories: [aviation, industry]
735 + tier: B
736 + weight: 1.2
737 + aliases: [rolls royce, trent xwb]
738 + discover: { rss: false }
739 + notes: "rolls-royce.com is Imperva-protected (403 for bots) — 2026-09-08."
740 + - id: safran
741 + name: Safran
742 + domain: safran-group.com
743 + homepage: https://www.safran-group.com
744 + categories: [aviation, industry]
745 + tier: B
746 + weight: 1.2
747 + discover: { rss: true }
748 + sensors:
749 + - { name: pressroom, url: "https://www.safran-group.com/pressroom", type: HTML, connector: http, tier: B }
750 + - id: cae
751 + name: CAE
752 + domain: cae.com
753 + homepage: https://www.cae.com
754 + categories: [aviation, industry]
755 + tier: B
756 + aliases: [cae inc.]
757 + discover: { rss: true, sitemap: true }
758 + notes: "cae.com sitemaps (news.xml, sitemap.xml) answer 200 once then 403 on repeat fetches (bot management) — 2026-09-08."
759 + - id: honeywell-aerospace
760 + name: Honeywell Aerospace
761 + domain: honeywellaerospace.com
762 + homepage: https://aerospace.honeywell.com
763 + categories: [aviation, industry]
764 + tier: C
765 + aliases: [honeywell]
766 + discover: { rss: true }
767 + sensors:
768 + - { name: newsroom, url: "https://www.honeywellaerospace.com/us/en/company/newsroom", type: HTML, connector: http, tier: C }
769 + - id: thales
770 + name: Thales
771 + domain: thalesgroup.com
772 + homepage: https://www.thalesgroup.com
773 + categories: [aviation, space, industry]
774 + tier: B
775 + weight: 1.2
776 + aliases: [thales group, thales alenia space]
777 + discover: { rss: true, sitemap: true }
778 + notes: "thalesgroup.com (rss.xml, sitemap) answers once then switches to a 403/302 bot challenge on repeat fetches (2026-09-08); no stable sensor kept."
779 + - id: leonardo
780 + name: Leonardo
781 + domain: leonardo.com
782 + homepage: https://www.leonardo.com
783 + categories: [aviation, space, industry]
784 + tier: C
785 + aliases: [leonardo s.p.a., agustawestland, telespazio]
786 + discover: { sitemap: true }
787 + sensors:
788 + - { name: sitemap (en), url: "https://www.leonardo.com/sitemap_EN.xml", type: SITEMAP, connector: sitemap, tier: C }
789 + - id: saab
790 + name: Saab
791 + domain: saab.com
792 + homepage: https://www.saab.com
793 + categories: [aviation, industry]
794 + tier: B
795 + aliases: [saab ab, gripen]
796 + discover: { rss: true, sitemap: true }
797 + sensors:
798 + - { name: press releases, url: "https://www.saab.com/newsroom/press-releases", type: HTML, connector: http, tier: B }
799 + - id: lockheed-martin
800 + name: Lockheed Martin
801 + domain: lockheedmartin.com
802 + homepage: https://www.lockheedmartin.com
803 + categories: [aviation, space, industry]
804 + tier: B
805 + weight: 1.3
806 + aliases: [lockheed, f-35, skunk works]
807 + discover: { rss: true, sitemap: true }
808 + sensors:
809 + - { name: news releases feed, url: "https://news.lockheedmartin.com/news-releases?pagetemplate=rss", type: RSS, connector: rss, tier: B }
810 + - { name: sitemap (en-us), url: "https://www.lockheedmartin.com/sitemap-en-us.xml", type: SITEMAP, connector: sitemap, tier: C }
811 + - id: northrop-grumman
812 + name: Northrop Grumman
813 + domain: northropgrumman.com
814 + homepage: https://www.northropgrumman.com
815 + categories: [aviation, space, industry]
816 + tier: B
817 + weight: 1.2
818 + aliases: [northrop, b-21 raider]
819 + discover: { rss: true, sitemap: true }
820 + notes: "news.northropgrumman.com is a Next.js shell (RSS endpoints 403 on Vercel, HTML nearly empty); the corporate sitemap is open."
821 + sensors:
822 + - { name: sitemap, url: "https://www.northropgrumman.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
823 + - id: l3harris
824 + name: L3Harris Technologies
825 + domain: l3harris.com
826 + homepage: https://www.l3harris.com
827 + categories: [aviation, space, industry]
828 + tier: B
829 + aliases: [l3harris, aerojet rocketdyne]
830 + discover: { rss: true, sitemap: true }
831 + sensors:
832 + - { name: newsroom feed, url: "https://www.l3harris.com/feeds/newsroom/rss.xml?rid=12281", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
833 + - id: bae-systems
834 + name: BAE Systems
835 + domain: baesystems.com
836 + homepage: https://www.baesystems.com
837 + categories: [aviation, industry]
838 + tier: B
839 + weight: 1.1
840 + aliases: [bae]
841 + discover: { rss: false }
842 + notes: "baesystems.com serves an Imperva bot-wall (403) to non-browser clients (2026-09-08)."
843 + - id: joby-aviation
844 + name: Joby Aviation
845 + domain: jobyaviation.com
846 + homepage: https://www.jobyaviation.com
847 + categories: [aviation, technology]
848 + tier: B
849 + aliases: [joby, evtol]
850 + discover: { rss: true, sitemap: true }
851 + sensors:
852 + - { name: news, url: "https://www.jobyaviation.com/news", type: HTML, connector: http, tier: B }
853 + - { name: sitemap, url: "https://www.jobyaviation.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
854 + - id: archer-aviation
855 + name: Archer Aviation
856 + domain: archer.com
857 + homepage: https://archer.com
858 + categories: [aviation, technology]
859 + tier: C
860 + aliases: [archer, midnight evtol]
861 + discover: { sitemap: true }
862 + notes: "archer.com/news is a client-rendered app and investors.archer.com (Q4 RSS) is behind a Cloudflare challenge; sitemap index is open."
863 + sensors:
864 + - { name: sitemap index, url: "https://archer.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
865 + - id: wisk-aero
866 + name: Wisk Aero
867 + domain: wisk.aero
868 + homepage: https://wisk.aero
869 + categories: [aviation, technology]
870 + tier: C
871 + aliases: [wisk]
872 + discover: { rss: true, sitemap: true }
873 + sensors:
874 + - { name: newsroom, url: "https://wisk.aero/newsroom", type: HTML, connector: http, tier: C }
875 + - id: beta-technologies
876 + name: BETA Technologies
877 + domain: beta.team
878 + homepage: https://beta.team
879 + categories: [aviation, technology]
880 + tier: C
881 + aliases: [beta, alia]
882 + discover: { rss: true, sitemap: true }
883 + sensors:
884 + - { name: news stories, url: "https://beta.team/stories", type: HTML, connector: http, tier: C }
885 + - id: vertical-aerospace
886 + name: Vertical Aerospace
887 + domain: vertical-aerospace.com
888 + homepage: https://vertical-aerospace.com
889 + categories: [aviation, technology]
890 + tier: C
891 + aliases: [vx4]
892 + discover: { rss: true, sitemap: true }
893 + sensors:
894 + - { name: news feed, url: "https://vertical-aerospace.com/news/feed/", type: RSS, connector: rss, tier: C }
895 + # ───────────────────────── E · Space agencies, launch & satellite companies ─────────────────────────
896 + - id: the-space-devs
897 + name: The Space Devs (Launch Library 2)
898 + domain: thespacedevs.com
899 + homepage: https://thespacedevs.com
900 + categories: [space, open-data]
901 + tier: B
902 + weight: 1.2
903 + aliases: [launch library, launch library 2, ll2]
904 + products:
905 + - { name: Launch Library 2 API, type: API, aliases: [ll2 api] }
906 + discover: { rss: false }
907 + llm: false
908 + notes: "Community-maintained launch manifest (net = no-earlier-than); free tier ~15 req/h, so tier B only, never S/A."
909 + sensors:
910 + - { name: upcoming launches, url: "https://ll.thespacedevs.com/2.2.0/launch/upcoming/?limit=30&mode=list", type: REST_API, connector: jsonlist, tier: B, config: { itemsPath: results, keyField: id, titleField: name, dateField: net, summaryField: status.name, compareFields: [net, status.name], urlTemplate: "https://ll.thespacedevs.com/2.2.0/launch/{key}/" } }
911 + - id: spacex
912 + name: SpaceX
913 + domain: spacex.com
914 + homepage: https://www.spacex.com
915 + categories: [space, technology]
916 + tier: A
917 + weight: 1.5
918 + aliases: [space exploration technologies, starship, falcon 9, starlink]
919 + products:
920 + - { name: Starship, type: product }
921 + - { name: Falcon 9, type: product, aliases: [falcon heavy] }
922 + - { name: Starlink, type: service }
923 + discover: { rss: false }
924 + notes: "spacex.com (updates, launches) is a ~3 KB client-rendered shell with no feed or API; launches are covered by the Launch Library sensor (the-space-devs)."
925 + - id: blue-origin
926 + name: Blue Origin
927 + domain: blueorigin.com
928 + homepage: https://www.blueorigin.com
929 + categories: [space, technology]
930 + tier: B
931 + weight: 1.2
932 + aliases: [new glenn, new shepard, blue moon]
933 + discover: { rss: false }
934 + notes: "blueorigin.com/news answers 429 (Vercel rate-limit) to non-browser clients — 2026-09-08."
935 + - id: rocket-lab
936 + name: Rocket Lab
937 + domain: rocketlabcorp.com
938 + homepage: https://rocketlabcorp.com
939 + categories: [space, technology]
940 + tier: B
941 + weight: 1.2
942 + aliases: [rocket lab usa, electron, neutron]
943 + discover: { rss: true, sitemap: true }
944 + sensors:
945 + - { name: updates, url: "https://rocketlabcorp.com/updates/", type: HTML, connector: http, tier: B }
946 + - id: ula
947 + name: United Launch Alliance
948 + domain: ulalaunch.com
949 + homepage: https://www.ulalaunch.com
950 + categories: [space, industry]
951 + tier: B
952 + aliases: [ula, vulcan centaur, atlas v]
953 + discover: { rss: true, sitemap: true }
954 + sensors:
955 + - { name: news, url: "https://www.ulalaunch.com/about/news", type: HTML, connector: http, tier: B }
956 + - id: arianespace
957 + name: Arianespace
958 + domain: arianespace.com
959 + homepage: https://www.arianespace.com
960 + categories: [space, industry]
961 + tier: B
962 + weight: 1.1
963 + aliases: [ariane 6, vega c, arianegroup]
964 + discover: { rss: true, sitemap: true }
965 + sensors:
966 + - { name: news sitemap, url: "https://www.arianespace.com/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B }
967 + - id: firefly-aerospace
968 + name: Firefly Aerospace
969 + domain: fireflyspace.com
970 + homepage: https://fireflyspace.com
971 + categories: [space, technology]
972 + tier: B
973 + aliases: [firefly, alpha rocket, blue ghost]
974 + discover: { rss: true, sitemap: true }
975 + sensors:
976 + - { name: news feed, url: "https://fireflyspace.com/news/feed/", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
977 + - id: relativity-space
978 + name: Relativity Space
979 + domain: relativityspace.com
980 + homepage: https://www.relativityspace.com
981 + categories: [space, technology]
982 + tier: C
983 + aliases: [terran r]
984 + discover: { sitemap: true }
985 + sensors:
986 + - { name: sitemap, url: "https://www.relativityspace.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
987 + - id: stoke-space
988 + name: Stoke Space
989 + domain: stokespace.com
990 + homepage: https://www.stokespace.com
991 + categories: [space, technology]
992 + tier: C
993 + aliases: [nova rocket]
994 + discover: { rss: true }
995 + sensors:
996 + - { name: news, url: "https://www.stokespace.com/news", type: HTML, connector: http, tier: C }
997 + - id: sierra-space
998 + name: Sierra Space
999 + domain: sierraspace.com
1000 + homepage: https://www.sierraspace.com
1001 + categories: [space, technology]
1002 + tier: B
1003 + aliases: [dream chaser, life habitat]
1004 + discover: { rss: true, sitemap: true }
1005 + sensors:
1006 + - { name: news feed, url: "https://www.sierraspace.com/feed/", type: RSS, connector: rss, tier: B }
1007 + - id: axiom-space
1008 + name: Axiom Space
1009 + domain: axiomspace.com
1010 + homepage: https://axiomspace.com
1011 + categories: [space, technology]
1012 + tier: B
1013 + aliases: [axiom station, axiom mission]
1014 + discover: { rss: true, sitemap: true }
1015 + sensors:
1016 + - { name: news feed, url: "https://axiomspace.com/news/rss.xml", type: RSS, connector: rss, tier: B }
1017 + - id: vast
1018 + name: Vast
1019 + domain: vastspace.com
1020 + homepage: https://www.vastspace.com
1021 + categories: [space, technology]
1022 + tier: C
1023 + aliases: [vast space, haven-1]
1024 + discover: { rss: true }
1025 + sensors:
1026 + - { name: updates, url: "https://www.vastspace.com/updates", type: HTML, connector: http, tier: C }
1027 + - id: planet-labs
1028 + name: Planet Labs
1029 + domain: planet.com
1030 + homepage: https://www.planet.com
1031 + categories: [space, technology]
1032 + tier: B
1033 + aliases: [planet, planetscope, skysat]
1034 + discover: { rss: true, sitemap: true }
1035 + notes: "investors.planet.com (Q4 RSS) is behind a Cloudflare challenge; the Pulse blog and sitemap are open."
1036 + sensors:
1037 + - { name: pulse blog, url: "https://www.planet.com/pulse/", type: HTML, connector: http, tier: B }
1038 + - { name: sitemap, url: "https://www.planet.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
1039 + - id: maxar
1040 + name: Maxar (Vantor)
1041 + domain: maxar.com
1042 + homepage: https://vantor.com
1043 + categories: [space, technology]
1044 + tier: C
1045 + aliases: [vantor, maxar intelligence, maxar technologies, worldview legion]
1046 + discover: { rss: false }
1047 + notes: "maxar.com now redirects to vantor.com (rebrand); the Nuxt site ships 2+ MB pages with no feed and /news is 404 — no sensor kept (2026-09-08)."
1048 + - id: blacksky
1049 + name: BlackSky
1050 + domain: blacksky.com
1051 + homepage: https://blacksky.com
1052 + categories: [space, technology]
1053 + tier: C
1054 + discover: { sitemap: true }
1055 + sensors:
1056 + - { name: sitemap index, url: "https://blacksky.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C }
1057 + - id: iridium
1058 + name: Iridium Communications
1059 + domain: iridium.com
1060 + homepage: https://www.iridium.com
1061 + categories: [space, telecom]
1062 + tier: C
1063 + aliases: [iridium]
1064 + discover: { rss: false }
1065 + notes: "iridium.com returns 403 to bots and investor.iridium.com has no RSS (2026-09-08)."
1066 + - id: viasat
1067 + name: Viasat
1068 + domain: viasat.com
1069 + homepage: https://www.viasat.com
1070 + categories: [space, telecom]
1071 + tier: B
1072 + aliases: [inmarsat]
1073 + discover: { rss: true, sitemap: true }
1074 + sensors:
1075 + - { name: latest news, url: "https://www.viasat.com/news/latest-news/", type: HTML, connector: http, tier: B }
1076 + - id: telesat
1077 + name: Telesat
1078 + domain: telesat.com
1079 + homepage: https://www.telesat.com
1080 + categories: [space, telecom]
1081 + tier: B
1082 + aliases: [telesat lightspeed]
1083 + discover: { rss: true, sitemap: true }
1084 + sensors:
1085 + - { name: press, url: "https://www.telesat.com/press/", type: HTML, connector: http, tier: B }
1086 + - id: mda-space
1087 + name: MDA Space
1088 + domain: mda.space
1089 + homepage: https://mda.space
1090 + categories: [space, technology]
1091 + tier: B
1092 + weight: 1.1
1093 + aliases: [mda, canadarm3, mda ltd]
1094 + discover: { rss: true, sitemap: true }
1095 + sensors:
1096 + - { name: news releases, url: "https://mda.space/news", type: HTML, connector: http, tier: B }
1097 + - id: ghgsat
1098 + name: GHGSat
1099 + domain: ghgsat.com
1100 + homepage: https://www.ghgsat.com
1101 + categories: [space, climate]
1102 + tier: C
1103 + discover: { rss: true, sitemap: true }
1104 + sensors:
1105 + - { name: resources and news, url: "https://www.ghgsat.com/resources/", type: HTML, connector: http, tier: C }
1106 + - id: northstar
1107 + name: NorthStar Earth & Space
1108 + domain: northstar-data.com
1109 + homepage: https://northstar-data.com
1110 + categories: [space, technology]
1111 + tier: C
1112 + aliases: [northstar earth and space]
1113 + discover: { rss: true, sitemap: true }
1114 + sensors:
1115 + - { name: news feed, url: "https://northstar-data.com/feed/", type: RSS, connector: rss, tier: C }
1116 + - id: isro
1117 + name: ISRO
1118 + domain: isro.gov.in
1119 + homepage: https://www.isro.gov.in
1120 + categories: [space, government]
1121 + tier: B
1122 + weight: 1.3
1123 + aliases: [indian space research organisation, gaganyaan, chandrayaan]
1124 + discover: { rss: true }
1125 + sensors:
1126 + - { name: press, url: "https://www.isro.gov.in/Press.html", type: HTML, connector: http, tier: B }
1127 + - id: jaxa
1128 + name: JAXA
1129 + domain: jaxa.jp
1130 + homepage: https://global.jaxa.jp
1131 + categories: [space, government]
1132 + tier: B
1133 + weight: 1.3
1134 + aliases: [japan aerospace exploration agency, h3 rocket]
1135 + discover: { rss: true }
1136 + sensors:
1137 + - { name: press releases feed, url: "https://global.jaxa.jp/rss/press.rdf", type: RSS, connector: rss, tier: B }
1138 + - { name: what's new, url: "https://global.jaxa.jp/news/", type: HTML, connector: http, tier: B }
1139 + - id: cnes
1140 + name: CNES
1141 + domain: cnes.fr
1142 + homepage: https://cnes.fr
1143 + categories: [space, government]
1144 + tier: B
1145 + weight: 1.2
1146 + aliases: [centre national d'études spatiales]
1147 + discover: { rss: true, sitemap: true }
1148 + sensors:
1149 + - { name: news feed, url: "https://cnes.fr/rss/news", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
1150 + - id: dlr
1151 + name: DLR
1152 + domain: dlr.de
1153 + homepage: https://www.dlr.de
1154 + categories: [space, aviation, research]
1155 + tier: B
1156 + weight: 1.1
1157 + aliases: [deutsches zentrum für luft- und raumfahrt, german aerospace center]
1158 + discover: { rss: true, sitemap: true }
1159 + notes: "dlr.de/en/latest/news is a React app (the /rss path returns the same HTML); the sitemap index is open."
1160 + sensors:
1161 + - { name: sitemap index, url: "https://www.dlr.de/sitemap-index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 12, maxUrls: 4000 } }
1162 + - id: asi
1163 + name: ASI (Agenzia Spaziale Italiana)
1164 + domain: asi.it
1165 + homepage: https://www.asi.it
1166 + categories: [space, government]
1167 + tier: C
1168 + aliases: [italian space agency, agenzia spaziale italiana]
1169 + discover: { rss: true }
1170 + sensors:
1171 + - { name: news feed (en), url: "https://www.asi.it/en/feed/", type: RSS, connector: rss, tier: C }
1172 + - id: uk-space-agency
1173 + name: UK Space Agency
1174 + domain: gov.uk
1175 + homepage: https://www.gov.uk/government/organisations/uk-space-agency
1176 + categories: [space, government]
1177 + tier: B
1178 + aliases: [uksa]
1179 + discover: { rss: false }
1180 + sensors:
1181 + - { name: gov.uk feed, url: "https://www.gov.uk/government/organisations/uk-space-agency.atom", type: ATOM, connector: rss, tier: B }
1182 + - id: canadian-space-agency
1183 + name: Canadian Space Agency
1184 + domain: asc-csa.gc.ca
1185 + homepage: https://www.asc-csa.gc.ca
1186 + categories: [space, government]
1187 + tier: B
1188 + weight: 1.1
1189 + aliases: [csa, asc, agence spatiale canadienne]
1190 + discover: { rss: true, sitemap: true }
1191 + sensors:
1192 + - { name: news, url: "https://www.asc-csa.gc.ca/eng/news/", type: HTML, connector: http, tier: B }
1193 + - { name: sitemap (pages), url: "https://www.asc-csa.gc.ca/sitemaps/sitemap-pages.xml", type: SITEMAP, connector: sitemap, tier: C }
1194 + - id: kasa
1195 + name: Korea AeroSpace Administration
1196 + domain: kasa.go.kr
1197 + homepage: https://www.kasa.go.kr
1198 + categories: [space, government]
1199 + tier: C
1200 + aliases: [kasa, kari, korea aerospace research institute]
1201 + discover: { sitemap: true }
1202 + sensors:
1203 + - { name: sitemap, url: "https://www.kasa.go.kr/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
1204 + - id: roscosmos
1205 + name: Roscosmos
1206 + domain: roscosmos.ru
1207 + homepage: https://www.roscosmos.ru
1208 + categories: [space, government]
1209 + tier: C
1210 + aliases: [роскосмос]
1211 + discover: { rss: false }
1212 + notes: "No feed, sitemap or server-rendered index found on roscosmos.ru (2026-09-08)."
1213 + - id: eumetsat
1214 + name: EUMETSAT
1215 + domain: eumetsat.int
1216 + homepage: https://www.eumetsat.int
1217 + categories: [space, weather, international]
1218 + tier: B
1219 + discover: { rss: true, sitemap: true }
1220 + sensors:
1221 + - { name: news feed, url: "https://www.eumetsat.int/news/feed", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
1222 + - id: euspa
1223 + name: EUSPA
1224 + domain: euspa.europa.eu
1225 + homepage: https://www.euspa.europa.eu
1226 + categories: [space, government]
1227 + tier: B
1228 + aliases: [eu agency for the space programme, galileo, copernicus, egnos]
1229 + discover: { rss: true }
1230 + sensors:
1231 + - { name: news feed, url: "https://www.euspa.europa.eu/rss.xml", type: RSS, connector: rss, tier: B }
1232 + - id: space-foundation
1233 + name: Space Foundation
1234 + domain: spacefoundation.org
1235 + homepage: https://www.spacefoundation.org
1236 + categories: [space, ngo]
1237 + tier: C
1238 + aliases: [space symposium]
1239 + discover: { rss: true }
1240 + sensors:
1241 + - { name: news feed, url: "https://www.spacefoundation.org/feed/", type: RSS, connector: rss, tier: C }
1242 + - id: secure-world-foundation
1243 + name: Secure World Foundation
1244 + domain: swfound.org
1245 + homepage: https://www.swfound.org
1246 + categories: [space, ngo]
1247 + tier: C
1248 + aliases: [swf]
1249 + discover: { rss: true, sitemap: true }
1250 + sensors:
1251 + - { name: news, url: "https://www.swfound.org/news", type: HTML, connector: http, tier: C }
1252 + - id: planetary-society
1253 + name: The Planetary Society
1254 + domain: planetary.org
1255 + homepage: https://www.planetary.org
1256 + categories: [space, ngo]
1257 + tier: C
1258 + discover: { rss: true, sitemap: true }
1259 + sensors:
1260 + - { name: articles, url: "https://www.planetary.org/articles", type: HTML, connector: http, tier: C }
1261 + # ───────────────────────── F · Rail & transit ─────────────────────────
1262 + - id: amtrak
1263 + name: Amtrak
1264 + domain: amtrak.com
1265 + homepage: https://www.amtrak.com
1266 + categories: [transport]
1267 + tier: B
1268 + weight: 1.1
1269 + aliases: [national railroad passenger corporation, acela]
1270 + discover: { rss: true, sitemap: true }
1271 + sensors:
1272 + - { name: media feed, url: "https://media.amtrak.com/feed/", type: RSS, connector: rss, tier: B }
1273 + - id: via-rail
1274 + name: VIA Rail Canada
1275 + domain: viarail.ca
1276 + homepage: https://www.viarail.ca
1277 + categories: [transport]
1278 + tier: B
1279 + aliases: [via rail, via]
1280 + discover: { rss: true }
1281 + sensors:
1282 + - { name: press releases, url: "https://media.viarail.ca/en/press-releases", type: HTML, connector: http, tier: B }
1283 + - id: cn-rail
1284 + name: CN (Canadian National Railway)
1285 + domain: cn.ca
1286 + homepage: https://www.cn.ca
1287 + categories: [transport, logistics]
1288 + tier: B
1289 + weight: 1.2
1290 + aliases: [cn, canadian national]
1291 + discover: { rss: true }
1292 + sensors:
1293 + - { name: media, url: "https://www.cn.ca/en/media/", type: HTML, connector: http, tier: B }
1294 + - id: cpkc
1295 + name: CPKC
1296 + domain: cpkcr.com
1297 + homepage: https://www.cpkcr.com
1298 + categories: [transport, logistics]
1299 + tier: B
1300 + weight: 1.1
1301 + aliases: [canadian pacific kansas city, canadian pacific, cp rail]
1302 + discover: { rss: false }
1303 + notes: "cpkcr.com times out for non-browser clients and investor.cpkcr.com (Q4 RSS) is behind a Cloudflare challenge (2026-09-08)."
1304 + - id: union-pacific
1305 + name: Union Pacific
1306 + domain: up.com
1307 + homepage: https://www.up.com
1308 + categories: [transport, logistics]
1309 + tier: B
1310 + weight: 1.1
1311 + aliases: [up, union pacific railroad]
1312 + discover: { rss: true }
1313 + sensors:
1314 + - { name: press releases, url: "https://www.up.com/press-releases", type: HTML, connector: http, tier: B }
1315 + - id: bnsf
1316 + name: BNSF Railway
1317 + domain: bnsf.com
1318 + homepage: https://www.bnsf.com
1319 + categories: [transport, logistics]
1320 + tier: B
1321 + aliases: [bnsf, burlington northern santa fe]
1322 + discover: { rss: true }
1323 + sensors:
1324 + - { name: news and media, url: "https://www.bnsf.com/news-media/index.page", type: HTML, connector: http, tier: B }
1325 + - id: csx
1326 + name: CSX
1327 + domain: csx.com
1328 + homepage: https://www.csx.com
1329 + categories: [transport, logistics]
1330 + tier: C
1331 + aliases: [csx transportation]
1332 + discover: { rss: false }
1333 + notes: "csx.com is Imperva-protected (403) and investors.csx.com sits behind a Cloudflare challenge (2026-09-08)."
1334 + - id: norfolk-southern
1335 + name: Norfolk Southern
1336 + domain: norfolksouthern.com
1337 + homepage: https://www.norfolksouthern.com
1338 + categories: [transport, logistics]
1339 + tier: B
1340 + aliases: [ns, norfolk southern railway]
1341 + discover: { rss: true, sitemap: true }
1342 + sensors:
1343 + - { name: newsroom, url: "https://www.norfolksouthern.com/en/newsroom", type: HTML, connector: http, tier: B }
1344 + - id: deutsche-bahn
1345 + name: Deutsche Bahn
1346 + domain: deutschebahn.com
1347 + homepage: https://www.deutschebahn.com
1348 + categories: [transport]
1349 + tier: B
1350 + weight: 1.2
1351 + aliases: [db, db ag]
1352 + discover: { rss: true }
1353 + sensors:
1354 + - { name: presse, url: "https://www.deutschebahn.com/de/presse", type: HTML, connector: http, tier: B }
1355 + - id: sncf
1356 + name: SNCF
1357 + domain: sncf.com
1358 + homepage: https://www.groupe-sncf.com
1359 + categories: [transport]
1360 + tier: B
1361 + weight: 1.2
1362 + aliases: [groupe sncf, sncf voyageurs, tgv inoui]
1363 + discover: { rss: false }
1364 + notes: "groupe-sncf.com and sncf.com are behind a DataDome challenge (403 'Please wait') — 2026-09-08."
1365 + - id: eurostar
1366 + name: Eurostar
1367 + domain: eurostar.com
1368 + homepage: https://www.eurostar.com
1369 + categories: [transport, travel]
1370 + tier: C
1371 + aliases: [eurostar group, thalys]
1372 + discover: { sitemap: true }
1373 + sensors:
1374 + - { name: sitemap index (uk-en), url: "https://www.eurostar.com/uk-en/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 10 } }
1375 + - id: jr-east
1376 + name: JR East
1377 + domain: jreast.co.jp
1378 + homepage: https://www.jreast.co.jp
1379 + categories: [transport]
1380 + tier: C
1381 + aliases: [east japan railway company]
1382 + discover: { rss: false }
1383 + notes: "jreast.co.jp press pages are Akamai-protected (403) — 2026-09-08."
1384 + - id: alstom
1385 + name: Alstom
1386 + domain: alstom.com
1387 + homepage: https://www.alstom.com
1388 + categories: [transport, industry]
1389 + tier: B
1390 + weight: 1.1
1391 + discover: { rss: true, sitemap: true }
1392 + sensors:
1393 + - { name: newsroom, url: "https://www.alstom.com/newsroom", type: HTML, connector: http, tier: B }
1394 + - id: siemens-mobility
1395 + name: Siemens Mobility
1396 + domain: mobility.siemens.com
1397 + homepage: https://www.mobility.siemens.com
1398 + categories: [transport, industry]
1399 + tier: C
1400 + aliases: [siemens mobility gmbh, velaro]
1401 + discover: { sitemap: true }
1402 + sensors:
1403 + - { name: sitemap index, url: "https://www.mobility.siemens.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxChildren: 10, maxUrls: 3000 } }
1404 + - id: stadler
1405 + name: Stadler Rail
1406 + domain: stadlerrail.com
1407 + homepage: https://www.stadlerrail.com
1408 + categories: [transport, industry]
1409 + tier: C
1410 + aliases: [stadler]
1411 + discover: { rss: true, sitemap: true }
1412 + sensors:
1413 + - { name: sitemap, url: "https://www.stadlerrail.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
1414 + - id: wabtec
1415 + name: Wabtec
1416 + domain: wabteccorp.com
1417 + homepage: https://www.wabteccorp.com
1418 + categories: [transport, industry]
1419 + tier: C
1420 + aliases: [westinghouse air brake technologies]
1421 + discover: { rss: true, sitemap: true }
1422 + sensors:
1423 + - { name: newsroom, url: "https://www.wabteccorp.com/newsroom", type: HTML, connector: http, tier: C }
1424 + - id: hitachi-rail
1425 + name: Hitachi Rail
1426 + domain: hitachirail.com
1427 + homepage: https://www.hitachirail.com
1428 + categories: [transport, industry]
1429 + tier: C
1430 + discover: { sitemap: true }
1431 + sensors:
1432 + - { name: sitemap, url: "https://www.hitachirail.com/xmlsitemap", type: SITEMAP, connector: sitemap, tier: C }
1433 + - id: stm
1434 + name: STM (Société de transport de Montréal)
1435 + domain: stm.info
1436 + homepage: https://www.stm.info
1437 + categories: [transport]
1438 + tier: B
1439 + weight: 1.1
1440 + aliases: [société de transport de montréal, métro de montréal]
1441 + discover: { rss: true }
1442 + sensors:
1443 + - { name: news feed (en), url: "https://www.stm.info/en/rss.xml", type: RSS, connector: rss, tier: B }
1444 + - id: exo
1445 + name: exo (Réseau de transport métropolitain)
1446 + domain: exo.quebec
1447 + homepage: https://exo.quebec
1448 + categories: [transport]
1449 + tier: C
1450 + aliases: [réseau de transport métropolitain, trains de banlieue]
1451 + discover: { sitemap: true }
1452 + sensors:
1453 + - { name: sitemap, url: "https://exo.quebec/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
1454 + - id: rem
1455 + name: REM (CDPQ Infra)
1456 + domain: rem.info
1457 + homepage: https://rem.info
1458 + categories: [transport]
1459 + tier: B
1460 + aliases: [réseau express métropolitain, cdpq infra]
1461 + discover: { rss: true, sitemap: true }
1462 + sensors:
1463 + - { name: news, url: "https://rem.info/en/news", type: HTML, connector: http, tier: B }
1464 + - id: artm
1465 + name: ARTM
1466 + domain: artm.quebec
1467 + homepage: https://www.artm.quebec
1468 + categories: [transport, government]
1469 + tier: C
1470 + aliases: [autorité régionale de transport métropolitain]
1471 + discover: { rss: true }
1472 + sensors:
1473 + - { name: news feed, url: "https://www.artm.quebec/feed/", type: RSS, connector: rss, tier: C }
1474 + - id: ttc
1475 + name: TTC (Toronto Transit Commission)
1476 + domain: ttc.ca
1477 + homepage: https://www.ttc.ca
1478 + categories: [transport]
1479 + tier: C
1480 + aliases: [toronto transit commission]
1481 + discover: { rss: false }
1482 + notes: "ttc.ca news and service alerts are client-rendered (Sitecore JSS); sitemap index only lists route schedules (2026-09-08)."
1483 + - id: metrolinx
1484 + name: Metrolinx
1485 + domain: metrolinx.com
1486 + homepage: https://www.metrolinx.com
1487 + categories: [transport, government]
1488 + tier: B
1489 + aliases: [go transit, up express, presto]
1490 + discover: { rss: true }
1491 + sensors:
1492 + - { name: press room, url: "https://www.metrolinx.com/en/news", type: HTML, connector: http, tier: B }
1493 + - id: translink
1494 + name: TransLink
1495 + domain: translink.ca
1496 + homepage: https://www.translink.ca
1497 + categories: [transport]
1498 + tier: C
1499 + aliases: [translink vancouver, skytrain]
1500 + discover: { sitemap: true }
1501 + sensors:
1502 + - { name: sitemap, url: "https://www.translink.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
1503 + - id: oc-transpo
1504 + name: OC Transpo
1505 + domain: octranspo.com
1506 + homepage: https://www.octranspo.com
1507 + categories: [transport]
1508 + tier: C
1509 + aliases: [o-train]
1510 + discover: { rss: true }
1511 + sensors:
1512 + - { name: news, url: "https://www.octranspo.com/news", type: HTML, connector: http, tier: C }
1513 + - id: mta
1514 + name: MTA (New York)
1515 + domain: mta.info
1516 + homepage: https://www.mta.info
1517 + categories: [transport]
1518 + tier: B
1519 + weight: 1.2
1520 + aliases: [metropolitan transportation authority, nyc subway, lirr, metro-north]
1521 + discover: { rss: true }
1522 + sensors:
1523 + - { name: news feed, url: "https://www.mta.info/rss.xml", type: RSS, connector: rss, tier: B }
1524 + - id: wmata
1525 + name: WMATA
1526 + domain: wmata.com
1527 + homepage: https://www.wmata.com
1528 + categories: [transport]
1529 + tier: B
1530 + aliases: [metro washington, washington metropolitan area transit authority]
1531 + discover: { rss: true, sitemap: true }
1532 + sensors:
1533 + - { name: sitemap, url: "https://www.wmata.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
1534 + - id: tfl
1535 + name: Transport for London
1536 + domain: tfl.gov.uk
1537 + homepage: https://tfl.gov.uk
1538 + categories: [transport, government]
1539 + tier: A
1540 + weight: 1.3
1541 + aliases: [tfl, london underground, elizabeth line]
1542 + products:
1543 + - { name: TfL Unified API, type: API, aliases: [tfl api] }
1544 + discover: { rss: true, sitemap: true }
1545 + sensors:
1546 + - { name: line status (tube/dlr/overground/elizabeth), url: "https://api.tfl.gov.uk/Line/Mode/tube,dlr,overground,elizabeth-line/Status", type: REST_API, connector: jsonlist, tier: A, config: { keyField: id, titleField: name, summaryField: "lineStatuses[0].statusSeverityDescription", dateField: modified, compareFields: ["lineStatuses[0].statusSeverityDescription", "lineStatuses[0].reason"], urlTemplate: "https://tfl.gov.uk/tube-dlr-overground/status/" } }
1547 + - { name: press releases, url: "https://tfl.gov.uk/info-for/media/press-releases", type: HTML, connector: http, tier: B }
1548 + - id: ratp
1549 + name: RATP
1550 + domain: ratp.fr
1551 + homepage: https://www.ratp.fr
1552 + categories: [transport]
1553 + tier: C
1554 + aliases: [ratp group, métro de paris]
1555 + discover: { rss: false }
1556 + notes: "ratp.fr is behind a Cloudflare challenge (2026-09-08)."
1557 + - id: mbta
1558 + name: MBTA
1559 + domain: mbta.com
1560 + homepage: https://www.mbta.com
1561 + categories: [transport]
1562 + tier: A
1563 + weight: 1.1
1564 + aliases: [massachusetts bay transportation authority, the t]
1565 + products:
1566 + - { name: MBTA V3 API, type: API }
1567 + discover: { rss: true }
1568 + sensors:
1569 + - { name: news feed, url: "https://cdn.mbta.com/news/rss.xml", type: RSS, connector: rss, tier: B }
1570 + - { name: subway alerts (v3 api), url: "https://api-v3.mbta.com/alerts?filter%5Broute_type%5D=0,1&sort=-updated_at&page%5Blimit%5D=50", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: data, keyField: id, titleField: attributes.header, summaryField: attributes.description, dateField: attributes.updated_at, compareFields: [attributes.header, attributes.effect, attributes.severity], urlTemplate: "https://www.mbta.com/alerts/subway" } }
1571 + - id: bart
1572 + name: BART
1573 + domain: bart.gov
1574 + homepage: https://www.bart.gov
1575 + categories: [transport]
1576 + tier: A
1577 + aliases: [bay area rapid transit]
1578 + products:
1579 + - { name: BART Legacy API, type: API }
1580 + discover: { rss: true, sitemap: true }
1581 + sensors:
1582 + - { name: service advisories (bsa api), url: "https://api.bart.gov/api/bsa.aspx?cmd=bsa&key=MW9S-E7SL-26DU-VV8V&json=y", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: root.bsa, keyField: "@id", titleField: "description.#cdata-section", summaryField: "sms_text.#cdata-section", dateField: posted, compareFields: ["description.#cdata-section", expires], urlTemplate: "https://www.bart.gov/schedules/advisories" } }
1583 + - id: septa
1584 + name: SEPTA
1585 + domain: septa.org
1586 + homepage: https://www.septa.org
1587 + categories: [transport]
1588 + tier: A
1589 + aliases: [southeastern pennsylvania transportation authority]
1590 + discover: { rss: false }
1591 + llm: false
1592 + sensors:
1593 + - { name: system alerts (api), url: "https://www3.septa.org/api/Alerts/index.php?req1=all", type: REST_API, connector: jsonlist, tier: A, config: { keyField: route_id, titleTemplate: "{mode} {route_name}", summaryField: description, dateField: last_updated, compareFields: [isalert, isdetour, issuspended, isdelays, alert, advisory], maxItems: 300, urlTemplate: "https://www.septa.org/alerts/" } }
1594 + - id: cta
1595 + name: CTA (Chicago Transit Authority)
1596 + domain: transitchicago.com
1597 + homepage: https://www.transitchicago.com
1598 + categories: [transport]
1599 + tier: A
1600 + aliases: [chicago transit authority, chicago l]
1601 + products:
1602 + - { name: CTA Customer Alerts API, type: API }
1603 + discover: { rss: true, sitemap: true }
1604 + llm: false
1605 + sensors:
1606 + - { name: customer alerts (api), url: "https://www.transitchicago.com/api/1.0/alerts.aspx?outputType=JSON&activeonly=true", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: CTAAlerts.Alert, keyField: AlertId, titleField: Headline, summaryField: ShortDescription, dateField: EventStart, urlField: "AlertURL.#cdata-section", compareFields: [Headline, SeverityScore, EventEnd], maxItems: 200 } }
1607 + - id: brightline
1608 + name: Brightline
1609 + domain: gobrightline.com
1610 + homepage: https://www.gobrightline.com
1611 + categories: [transport]
1612 + tier: C
1613 + aliases: [brightline west, brightline florida]
1614 + discover: { rss: true, sitemap: true }
1615 + sensors:
1616 + - { name: press room, url: "https://www.gobrightline.com/press-room", type: HTML, connector: http, tier: C }
1617 + - id: california-hsr
1618 + name: California High-Speed Rail Authority
1619 + domain: hsr.ca.gov
1620 + homepage: https://hsr.ca.gov
1621 + categories: [transport, government]
1622 + tier: C
1623 + aliases: [cahsr, california high speed rail]
1624 + discover: { sitemap: true }
1625 + notes: "hsr.ca.gov newsroom serves an Imperva bot-wall shell to non-browser clients; the WordPress sitemap index is open."
1626 + sensors:
1627 + - { name: sitemap index, url: "https://hsr.ca.gov/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: C }
1628 + - id: alto
1629 + name: Alto (Canada high-speed rail)
1630 + domain: altotrain.ca
1631 + homepage: https://www.altotrain.ca
1632 + categories: [transport, government]
1633 + tier: B
1634 + aliases: [alto train, tgv canada, vía hfr, high frequency rail]
1635 + discover: { rss: true, sitemap: true }
1636 + sensors:
1637 + - { name: news feed, url: "https://www.altotrain.ca/en/news/feed", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
1638 + # ───────────────────────── H · Road, security & border agencies ─────────────────────────
1639 + - id: tsa
1640 + name: TSA
1641 + domain: tsa.gov
1642 + homepage: https://www.tsa.gov
1643 + categories: [aviation, transport, government]
1644 + tier: B
1645 + weight: 1.2
1646 + aliases: [transportation security administration, tsa precheck]
1647 + discover: { rss: true, sitemap: true }
1648 + sensors:
1649 + - { name: news feed, url: "https://www.tsa.gov/rss.xml", type: RSS, connector: rss, tier: B }
1650 + - id: cbsa
1651 + name: Canada Border Services Agency
1652 + domain: cbsa-asfc.gc.ca
1653 + homepage: https://www.cbsa-asfc.gc.ca
1654 + categories: [transport, government]
1655 + tier: B
1656 + weight: 1.1
1657 + aliases: [cbsa, asfc, agence des services frontaliers du canada]
1658 + discover: { rss: false }
1659 + sensors:
1660 + - { name: news feed, url: "https://api.io.canada.ca/io-server/gc/news/en/v2?dept=canadaborderservicesagency&sort=publishedDate&orderBy=desc&pick=50&format=atom&atomtitle=CBSA", type: ATOM, connector: rss, tier: B }
1661 + - id: us-cbp
1662 + name: U.S. Customs and Border Protection
1663 + domain: cbp.gov
1664 + homepage: https://www.cbp.gov
1665 + categories: [transport, government]
1666 + tier: B
1667 + weight: 1.1
1668 + aliases: [cbp, customs and border protection]
1669 + discover: { rss: true, sitemap: true }
1670 + sensors:
1671 + - { name: news feed, url: "https://www.cbp.gov/rss.xml", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
1672 + - id: us-dot
1673 + name: U.S. Department of Transportation
1674 + domain: transportation.gov
1675 + homepage: https://www.transportation.gov
1676 + categories: [transport, government]
1677 + tier: B
1678 + weight: 1.2
1679 + aliases: [usdot, dot, fmcsa, federal motor carrier safety administration]
1680 + discover: { rss: false }
1681 + notes: "transportation.gov and fmcsa.dot.gov (newsroom, RSS) are Akamai-protected → 403 for bots (2026-09-08); FAA is a separate source."
1682 + - id: transport-for-nsw
1683 + name: Transport for NSW
1684 + domain: transport.nsw.gov.au
1685 + homepage: https://www.transport.nsw.gov.au
1686 + categories: [transport, government]
1687 + tier: C
1688 + aliases: [tfnsw]
1689 + discover: { rss: false }
1690 + notes: "transport.nsw.gov.au media releases return 403 to non-browser clients (2026-09-08)."
1691 + - id: saaq
1692 + name: SAAQ
1693 + domain: saaq.gouv.qc.ca
1694 + homepage: https://saaq.gouv.qc.ca
1695 + categories: [transport, government]
1696 + tier: C
1697 + aliases: [société de l'assurance automobile du québec]
1698 + discover: { sitemap: true }
1699 + sensors:
1700 + - { name: sitemap index, url: "https://saaq.gouv.qc.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
1701 + - id: quebec-511
1702 + name: Québec 511 (MTMD)
1703 + domain: quebec511.info
1704 + homepage: https://www.quebec511.info
1705 + categories: [transport, government]
1706 + tier: C
1707 + aliases: [québec 511, quebec 511, ministère des transports du québec, mtq, mtmd]
1708 + discover: { rss: false }
1709 + notes: "quebec511.info is Imperva-protected (403) and quebec.ca has no per-ministry news RSS; nothing open found (2026-09-08)."
1710 + - id: ontario-511
1711 + name: Ontario 511 (MTO)
1712 + domain: 511on.ca
1713 + homepage: https://511on.ca
1714 + categories: [transport, government, open-data]
1715 + tier: A
1716 + aliases: [ontario 511, ministry of transportation ontario, mto]
1717 + products:
1718 + - { name: Ontario 511 API, type: API }
1719 + discover: { rss: false }
1720 + llm: false
1721 + sensors:
1722 + - { name: road events (api), url: "https://511on.ca/api/v2/get/event", type: REST_API, connector: jsonlist, tier: A, config: { keyField: ID, titleTemplate: "{RoadwayName} {DirectionOfTravel}: {EventType}", summaryField: Description, dateField: LastUpdated, compareFields: [Description, IsFullClosure, LanesAffected], maxItems: 300, urlTemplate: "https://511on.ca/list/events" } }
1723 + - { name: newsroom, url: "https://511on.ca/newsroom", type: HTML, connector: http, tier: C }
1724 + - id: icbc
1725 + name: ICBC
1726 + domain: icbc.com
1727 + homepage: https://www.icbc.com
1728 + categories: [transport, government]
1729 + tier: C
1730 + aliases: [insurance corporation of british columbia]
1731 + discover: { rss: true, sitemap: true }
1732 + sensors:
1733 + - { name: newsroom, url: "https://icbc.com/about-icbc/newsroom", type: HTML, connector: http, tier: C }
1734 + # ───────────────────────── G · Maritime, ports, postal & logistics ─────────────────────────
1735 + - id: maersk
1736 + name: A.P. Moller - Maersk
1737 + domain: maersk.com
1738 + homepage: https://www.maersk.com
1739 + categories: [logistics, transport]
1740 + tier: B
1741 + weight: 1.3
1742 + aliases: [maersk, maersk line, apm terminals]
1743 + discover: { sitemap: true }
1744 + notes: "maersk.com news pages are client-rendered (press-releases path 404 for bots); the main sitemap is open."
1745 + sensors:
1746 + - { name: sitemap, url: "https://www.maersk.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 4000 } }
1747 + - id: msc
1748 + name: MSC Mediterranean Shipping Company
1749 + domain: msc.com
1750 + homepage: https://www.msc.com
1751 + categories: [logistics, transport]
1752 + tier: B
1753 + weight: 1.2
1754 + aliases: [msc, mediterranean shipping company]
1755 + discover: { rss: false }
1756 + notes: "msc.com is Akamai-protected (403 for bots) — 2026-09-08."
1757 + - id: cma-cgm
1758 + name: CMA CGM
1759 + domain: cma-cgm.com
1760 + homepage: https://www.cma-cgm.com
1761 + categories: [logistics, transport]
1762 + tier: B
1763 + weight: 1.1
1764 + aliases: [cma cgm group, ceva logistics]
1765 + discover: { rss: false }
1766 + notes: "cma-cgm.com and cmacgm-group.com are Next.js shells behind Dynatrace/bot management; no open feed found (2026-09-08)."
1767 + - id: hapag-lloyd
1768 + name: Hapag-Lloyd
1769 + domain: hapag-lloyd.com
1770 + homepage: https://www.hapag-lloyd.com
1771 + categories: [logistics, transport]
1772 + tier: B
1773 + weight: 1.1
1774 + aliases: [hapag lloyd]
1775 + discover: { rss: false }
1776 + notes: "hapag-lloyd.com serves a 'Security Check' interstitial (403) to non-browser clients (2026-09-08)."
1777 + - id: zim
1778 + name: ZIM Integrated Shipping Services
1779 + domain: zim.com
1780 + homepage: https://www.zim.com
1781 + categories: [logistics, transport]
1782 + tier: C
1783 + aliases: [zim]
1784 + discover: { rss: false }
1785 + notes: "zim.com is Akamai-protected (403) — 2026-09-08."
1786 + - id: port-of-montreal
1787 + name: Port of Montreal
1788 + domain: port-montreal.com
1789 + homepage: https://www.port-montreal.com
1790 + categories: [logistics, transport]
1791 + tier: B
1792 + aliases: [montreal port authority, administration portuaire de montréal, apm]
1793 + discover: { rss: false }
1794 + notes: "port-montreal.com is behind a Cloudflare challenge (2026-09-08)."
1795 + - id: port-of-vancouver
1796 + name: Vancouver Fraser Port Authority
1797 + domain: portvancouver.com
1798 + homepage: https://www.portvancouver.com
1799 + categories: [logistics, transport]
1800 + tier: B
1801 + aliases: [port of vancouver]
1802 + discover: { rss: false }
1803 + notes: "portvancouver.com is behind a Cloudflare challenge (2026-09-08)."
1804 + - id: port-of-halifax
1805 + name: Halifax Port Authority
1806 + domain: portofhalifax.ca
1807 + homepage: https://www.portofhalifax.ca
1808 + categories: [logistics, transport]
1809 + tier: C
1810 + aliases: [port of halifax]
1811 + discover: { rss: false }
1812 + notes: "portofhalifax.ca is behind a Cloudflare challenge (2026-09-08)."
1813 + - id: port-of-prince-rupert
1814 + name: Prince Rupert Port Authority
1815 + domain: rupertport.com
1816 + homepage: https://www.rupertport.com
1817 + categories: [logistics, transport]
1818 + tier: C
1819 + aliases: [port of prince rupert]
1820 + discover: { rss: true, sitemap: true }
1821 + sensors:
1822 + - { name: news feed, url: "https://www.rupertport.com/feed/", type: RSS, connector: rss, tier: C }
1823 + - id: port-of-los-angeles
1824 + name: Port of Los Angeles
1825 + domain: portoflosangeles.org
1826 + homepage: https://www.portoflosangeles.org
1827 + categories: [logistics, transport]
1828 + tier: B
1829 + weight: 1.1
1830 + aliases: [pola, port of la]
1831 + discover: { rss: true }
1832 + sensors:
1833 + - { name: news, url: "https://portoflosangeles.org/news", type: HTML, connector: http, tier: B }
1834 + - id: port-of-long-beach
1835 + name: Port of Long Beach
1836 + domain: polb.com
1837 + homepage: https://polb.com
1838 + categories: [logistics, transport]
1839 + tier: C
1840 + aliases: [polb]
1841 + discover: { sitemap: true }
1842 + sensors:
1843 + - { name: sitemap index, url: "https://polb.com/sitemap-index.xml", type: SITEMAP, connector: sitemap, tier: C }
1844 + - id: port-of-rotterdam
1845 + name: Port of Rotterdam
1846 + domain: portofrotterdam.com
1847 + homepage: https://www.portofrotterdam.com
1848 + categories: [logistics, transport]
1849 + tier: B
1850 + weight: 1.1
1851 + aliases: [havenbedrijf rotterdam]
1852 + discover: { rss: true, sitemap: true }
1853 + sensors:
1854 + - { name: news and press releases, url: "https://www.portofrotterdam.com/en/news-and-press-releases", type: HTML, connector: http, tier: B }
1855 + - id: port-of-antwerp-bruges
1856 + name: Port of Antwerp-Bruges
1857 + domain: portofantwerpbruges.com
1858 + homepage: https://www.portofantwerpbruges.com
1859 + categories: [logistics, transport]
1860 + tier: C
1861 + aliases: [port of antwerp, port of zeebrugge]
1862 + discover: { sitemap: true }
1863 + sensors:
1864 + - { name: sitemap, url: "https://www.portofantwerpbruges.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
1865 + - id: port-of-hamburg
1866 + name: Port of Hamburg
1867 + domain: hafen-hamburg.de
1868 + homepage: https://www.hafen-hamburg.de
1869 + categories: [logistics, transport]
1870 + tier: C
1871 + aliases: [hafen hamburg, hamburg port authority]
1872 + discover: { rss: true }
1873 + sensors:
1874 + - { name: press news, url: "https://www.hafen-hamburg.de/en/press/news/", type: HTML, connector: http, tier: C }
1875 + - id: mpa-singapore
1876 + name: Maritime and Port Authority of Singapore
1877 + domain: mpa.gov.sg
1878 + homepage: https://www.mpa.gov.sg
1879 + categories: [logistics, transport, government]
1880 + tier: C
1881 + aliases: [mpa, mpa singapore]
1882 + discover: { rss: true }
1883 + notes: "mpa.gov.sg media centre is a client-rendered Next.js shell (thin) — 2026-09-08."
1884 + - id: panama-canal
1885 + name: Panama Canal Authority
1886 + domain: pancanal.com
1887 + homepage: https://pancanal.com
1888 + categories: [logistics, transport]
1889 + tier: B
1890 + weight: 1.2
1891 + aliases: [autoridad del canal de panamá, acp, canal de panamá]
1892 + discover: { rss: true, sitemap: true }
1893 + sensors:
1894 + - { name: news feed (en), url: "https://pancanal.com/en/feed/", type: RSS, connector: rss, tier: B }
1895 + - id: suez-canal-authority
1896 + name: Suez Canal Authority
1897 + domain: suezcanal.gov.eg
1898 + homepage: https://www.suezcanal.gov.eg
1899 + categories: [logistics, transport, government]
1900 + tier: B
1901 + weight: 1.1
1902 + aliases: [sca, suez canal]
1903 + discover: { rss: false }
1904 + sensors:
1905 + - { name: news, url: "https://www.suezcanal.gov.eg/English/MediaCenter/News/Pages/default.aspx", type: HTML, connector: http, tier: C }
1906 + - id: st-lawrence-seaway
1907 + name: Great Lakes St. Lawrence Seaway
1908 + domain: greatlakes-seaway.com
1909 + homepage: https://greatlakes-seaway.com
1910 + categories: [logistics, transport]
1911 + tier: B
1912 + aliases: [st. lawrence seaway, seaway, voie maritime du saint-laurent]
1913 + discover: { rss: true, sitemap: true }
1914 + sensors:
1915 + - { name: news feed, url: "https://greatlakes-seaway.com/en/news/feed/", type: RSS, connector: rss, tier: B }
1916 + - id: imo
1917 + name: International Maritime Organization
1918 + domain: imo.org
1919 + homepage: https://www.imo.org
1920 + categories: [logistics, transport, international]
1921 + tier: B
1922 + weight: 1.2
1923 + aliases: [imo]
1924 + discover: { rss: true }
1925 + sensors:
1926 + - { name: press briefings, url: "https://www.imo.org/en/MediaCentre/PressBriefings/Pages/Default.aspx", type: HTML, connector: http, tier: B }
1927 + - id: bimco
1928 + name: BIMCO
1929 + domain: bimco.org
1930 + homepage: https://www.bimco.org
1931 + categories: [logistics, industry]
1932 + tier: C
1933 + discover: { rss: true, sitemap: true }
1934 + sensors:
1935 + - { name: news, url: "https://www.bimco.org/news-insights/bimco-news/", type: HTML, connector: http, tier: C }
1936 + - id: ics-shipping
1937 + name: International Chamber of Shipping
1938 + domain: ics-shipping.org
1939 + homepage: https://www.ics-shipping.org
1940 + categories: [logistics, industry]
1941 + tier: C
1942 + aliases: [ics]
1943 + discover: { rss: true }
1944 + notes: "ics-shipping.org news returns 403 to bots and its WordPress feed is empty (2026-09-08)."
1945 + - id: lloyds-register
1946 + name: Lloyd's Register
1947 + domain: lr.org
1948 + homepage: https://www.lr.org
1949 + categories: [logistics, industry]
1950 + tier: C
1951 + aliases: [lr, lloyd's register group]
1952 + discover: { rss: true, sitemap: true }
1953 + sensors:
1954 + - { name: press room, url: "https://www.lr.org/en/knowledge/press-room/", type: HTML, connector: http, tier: C }
1955 + - id: dnv
1956 + name: DNV
1957 + domain: dnv.com
1958 + homepage: https://www.dnv.com
1959 + categories: [logistics, energy, industry]
1960 + tier: B
1961 + aliases: [det norske veritas, dnv gl]
1962 + discover: { rss: true, sitemap: true }
1963 + sensors:
1964 + - { name: news feed, url: "https://www.dnv.com/news/rss/", type: RSS, connector: rss, tier: B }
1965 + - id: abs-shipping
1966 + name: ABS (American Bureau of Shipping)
1967 + domain: eagle.org
1968 + homepage: https://ww2.eagle.org
1969 + categories: [logistics, industry]
1970 + tier: C
1971 + aliases: [american bureau of shipping, abs]
1972 + discover: { rss: true }
1973 + sensors:
1974 + - { name: newsroom, url: "https://ww2.eagle.org/en/news/newsroom.html", type: HTML, connector: http, tier: C }
1975 + - id: dhl
1976 + name: DHL Group
1977 + domain: dhl.com
1978 + homepage: https://group.dhl.com
1979 + categories: [logistics]
1980 + tier: B
1981 + weight: 1.3
1982 + aliases: [deutsche post dhl, dhl express]
1983 + discover: { rss: false }
1984 + notes: "group.dhl.com and dhl.com time out / reset for non-browser clients (Akamai) — no open feed (2026-09-08)."
1985 + - id: fedex
1986 + name: FedEx
1987 + domain: fedex.com
1988 + homepage: https://www.fedex.com
1989 + categories: [logistics]
1990 + tier: A
1991 + weight: 1.4
1992 + aliases: [federal express, fedex express, fedex freight]
1993 + discover: { rss: true, sitemap: true }
1994 + sensors:
1995 + - { name: service alerts, url: "https://www.fedex.com/en-us/service-alerts.html", type: HTML, connector: http, tier: A }
1996 + - { name: newsroom, url: "https://newsroom.fedex.com/", type: HTML, connector: http, tier: B }
1997 + - id: ups
1998 + name: UPS
1999 + domain: ups.com
2000 + homepage: https://www.ups.com
2001 + categories: [logistics]
2002 + tier: A
2003 + weight: 1.4
2004 + aliases: [united parcel service]
2005 + discover: { rss: false }
2006 + notes: "ups.com (service alerts) and about.ups.com (newsroom) are Akamai-protected → timeout/403 for bots (2026-09-08)."
2007 + - id: usps
2008 + name: USPS
2009 + domain: usps.com
2010 + homepage: https://about.usps.com
2011 + categories: [logistics, government]
2012 + tier: A
2013 + weight: 1.3
2014 + aliases: [united states postal service, us postal service]
2015 + discover: { rss: true }
2016 + sensors:
2017 + - { name: service alerts, url: "https://about.usps.com/newsroom/service-alerts/", type: HTML, connector: http, tier: A }
2018 + - { name: news feed, url: "https://about.usps.com/news/latestnews.rss", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
2019 + - id: canada-post
2020 + name: Canada Post
2021 + domain: canadapost-postescanada.ca
2022 + homepage: https://www.canadapost-postescanada.ca
2023 + categories: [logistics, government]
2024 + tier: A
2025 + weight: 1.3
2026 + aliases: [postes canada, canada post corporation]
2027 + discover: { rss: false, sitemap: true }
2028 + sensors:
2029 + - { name: service alerts, url: "https://www.canadapost-postescanada.ca/cpc/en/our-company/news-and-media/service-alerts.page", type: HTML, connector: http, tier: A }
2030 + - { name: corporate news, url: "https://www.canadapost-postescanada.ca/cpc/en/our-company/news-and-media/corporate-news.page", type: HTML, connector: http, tier: B }
2031 + - id: purolator
2032 + name: Purolator
2033 + domain: purolator.com
2034 + homepage: https://www.purolator.com
2035 + categories: [logistics]
2036 + tier: C
2037 + discover: { rss: false }
2038 + notes: "purolator.com (incl. service alerts) is behind a Cloudflare challenge (2026-09-08)."
2039 + - id: kuehne-nagel
2040 + name: Kuehne+Nagel
2041 + domain: kuehne-nagel.com
2042 + homepage: https://www.kuehne-nagel.com
2043 + categories: [logistics]
2044 + tier: B
2045 + aliases: [kuehne nagel, kühne + nagel, k+n]
2046 + discover: { rss: true, sitemap: true }
2047 + sensors:
2048 + - { name: newsroom, url: "https://newsroom.kuehne-nagel.com/", type: HTML, connector: http, tier: B }
2049 + - id: dsv
2050 + name: DSV
2051 + domain: dsv.com
2052 + homepage: https://www.dsv.com
2053 + categories: [logistics]
2054 + tier: B
2055 + aliases: [dsv a/s, db schenker]
2056 + discover: { rss: true, sitemap: true }
2057 + notes: "dbschenker.com now redirects to dsv.com (DB Schenker acquired by DSV)."
2058 + sensors:
2059 + - { name: press, url: "https://www.dsv.com/en/about-dsv/press", type: HTML, connector: http, tier: B }
2060 + - id: ch-robinson
2061 + name: C.H. Robinson
2062 + domain: chrobinson.com
2063 + homepage: https://www.chrobinson.com
2064 + categories: [logistics]
2065 + tier: C
2066 + aliases: [chrw]
2067 + discover: { sitemap: true }
2068 + sensors:
2069 + - { name: sitemap (en-us), url: "https://www.chrobinson.com/chrobinson-en-us-sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
2070 + - id: xpo
2071 + name: XPO
2072 + domain: xpo.com
2073 + homepage: https://www.xpo.com
2074 + categories: [logistics]
2075 + tier: C
2076 + aliases: [xpo logistics]
2077 + discover: { sitemap: true }
2078 + sensors:
2079 + - { name: sitemap, url: "https://www.xpo.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C }
2080 + - id: jb-hunt
2081 + name: J.B. Hunt
2082 + domain: jbhunt.com
2083 + homepage: https://www.jbhunt.com
2084 + categories: [logistics]
2085 + tier: C
2086 + aliases: [jb hunt, j.b. hunt transport services]
2087 + discover: { rss: true }
2088 + sensors:
2089 + - { name: newsroom, url: "https://www.jbhunt.com/our-company/newsroom", type: HTML, connector: http, tier: C }
2090 + - id: tfi-international
2091 + name: TFI International
2092 + domain: tfiintl.com
2093 + homepage: https://tfiintl.com
2094 + categories: [logistics]
2095 + tier: C
2096 + aliases: [tfi, transforce]
2097 + discover: { rss: false }
2098 + notes: "tfiintl.com times out for non-browser clients (2026-09-08)."
2099 + - id: flexport
2100 + name: Flexport
2101 + domain: flexport.com
2102 + homepage: https://www.flexport.com
2103 + categories: [logistics, technology]
2104 + tier: C
2105 + discover: { rss: true, sitemap: true }
2106 + sensors:
2107 + - { name: blog, url: "https://www.flexport.com/blog/", type: HTML, connector: http, tier: C }
2108 + - id: freightos
2109 + name: Freightos
2110 + domain: freightos.com
2111 + homepage: https://www.freightos.com
2112 + categories: [logistics, technology]
2113 + tier: C
2114 + aliases: [freightos baltic index, fbx]
2115 + discover: { rss: true, sitemap: true }
2116 + sensors:
2117 + - { name: news feed, url: "https://www.freightos.com/feed/", type: RSS, connector: rss, tier: C }
2118 + - id: cargojet
2119 + name: Cargojet
2120 + domain: cargojet.com
2121 + homepage: https://cargojet.com
2122 + categories: [logistics, aviation]
2123 + tier: C
2124 + discover: { rss: true, sitemap: true }
2125 + sensors:
2126 + - { name: news feed, url: "https://cargojet.com/feed/", type: RSS, connector: rss, tier: C }
2127 + - id: atlas-air
2128 + name: Atlas Air Worldwide
2129 + domain: atlasairworldwide.com
2130 + homepage: https://www.atlasairworldwide.com
2131 + categories: [logistics, aviation]
2132 + tier: C
2133 + aliases: [atlas air]
2134 + discover: { rss: true, sitemap: true }
2135 + sensors:
2136 + - { name: news feed, url: "https://www.atlasairworldwide.com/feed/", type: RSS, connector: rss, tier: C }
2137 + - id: ryder
2138 + name: Ryder System
2139 + domain: ryder.com
2140 + homepage: https://www.ryder.com
2141 + categories: [logistics]
2142 + tier: C
2143 + aliases: [ryder]
2144 + discover: { rss: true, sitemap: true }
2145 + sensors:
2146 + - { name: news feed, url: "https://www.ryder.com/en-us/api/rssfeed/showrssfeed", type: RSS, connector: rss, tier: C, config: { maxItems: 50 } }
2147 + - id: penske
2148 + name: Penske Transportation Solutions
2149 + domain: gopenske.com
2150 + homepage: https://www.gopenske.com
2151 + categories: [logistics]
2152 + tier: C
2153 + aliases: [penske logistics, penske truck leasing]
2154 + discover: { rss: true }
2155 + notes: "gopenske.com newsroom (RebelMouse) renders client-side — only 133 chars of server text (2026-09-08)."
2156 + - id: uber-freight
2157 + name: Uber Freight
2158 + domain: uberfreight.com
2159 + homepage: https://www.uberfreight.com
2160 + categories: [logistics, technology]
2161 + tier: C
2162 + discover: { rss: true }
2163 + sensors:
2164 + - { name: blog, url: "https://www.uberfreight.com/en-US/blog", type: HTML, connector: http, tier: C }
added config/sources.d/21-consumer-safety-food-agri.yaml +770 −0
@@ -0,0 +1,770 @@
1 +# config/sources.d/21-consumer-safety-food-agri.yaml — recall & safety APIs, consumer-protection and competition
2 +# agencies, food & agriculture agencies and producer bodies, agribusiness & food companies (2026-09-08).
3 +# Every sensor below was fetched and parsed by apps/engine/src/validate.ts before being written.
4 +#
5 +# Not covered (blocked or client-rendered, kept out on purpose): USDA www/FSIS/NASS-RSS (Akamai 403 — AMS RSS and
6 +# ERS/NASS newsroom pages are used instead), ECHA (403 for non-browser clients), EU Safety Gate/RAPEX and RASFF
7 +# (Angular shells, POST-only APIs), Cargill and Metro AG (Akamai 403), Deere newsroom (403), George Weston
8 +# (Incapsula JS challenge), Louis Dreyfus / Bunge IR / Tyson IR / Sysco IR / Mosaic IR (Cloudflare "Just a moment"
9 +# on Q4 feeds — corporate newsroom pages used where server-rendered), Bayer Crop Science (maintenance/403),
10 +# CNH, Smithfield, Oatly, Beyond Meat, Impossible Foods (403), Ag Growth International, Farm Credit Canada, ICCO,
11 +# CCI India (JS shells / thin), MELCCFP Québec (no feed or news page), AAPCC poison centres (no feed), IGC / ISO
12 +# sugar (no feed), CDC food-safety feed (no clean media id in the tools.cdc.gov API), MAPAQ (no ministry-level
13 +# feed — the Québec fil de presse is attached to the existing `quebec` source instead).
14 +sources:
15 + # ───────────────────────── recall & product-safety APIs ─────────────────────────
16 + - id: fda
17 + extend: true
18 + notes: "openFDA enforcement API (food/drug/device recalls) — firehose, keyed by recall_number; classification/status changes count as updates."
19 + sensors:
20 + - { name: openfda food enforcement, url: "https://api.fda.gov/food/enforcement.json?sort=report_date:desc&limit=50", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: results, keyField: recall_number, titleTemplate: "{classification} recall — {recalling_firm}: {product_description}", summaryField: reason_for_recall, dateField: report_date, urlTemplate: "https://www.accessdata.fda.gov/scripts/ires/index.cfm?Product={key}", compareFields: [status, classification], maxItems: 50 } }
21 + - { name: openfda drug enforcement, url: "https://api.fda.gov/drug/enforcement.json?sort=report_date:desc&limit=50", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: results, keyField: recall_number, titleTemplate: "{classification} recall — {recalling_firm}: {product_description}", summaryField: reason_for_recall, dateField: report_date, urlTemplate: "https://www.accessdata.fda.gov/scripts/ires/index.cfm?Product={key}", compareFields: [status, classification], maxItems: 50 } }
22 + - { name: openfda device enforcement, url: "https://api.fda.gov/device/enforcement.json?sort=report_date:desc&limit=50", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: results, keyField: recall_number, titleTemplate: "{classification} recall — {recalling_firm}: {product_description}", summaryField: reason_for_recall, dateField: report_date, urlTemplate: "https://www.accessdata.fda.gov/scripts/ires/index.cfm?Product={key}", compareFields: [status, classification], maxItems: 50 } }
23 + - id: cpsc
24 + name: U.S. Consumer Product Safety Commission
25 + domain: cpsc.gov
26 + homepage: https://www.cpsc.gov
27 + categories: [consumer-safety, government]
28 + tier: A
29 + weight: 1.3
30 + aliases: [cpsc, consumer product safety commission, saferproducts]
31 + discover: { rss: false }
32 + notes: "Recalls via the SaferProducts REST API (rolling 30-day window); cpsc.gov has no RSS feed any more."
33 + sensors:
34 + - { name: recalls api, url: "https://www.saferproducts.gov/RestWebServices/Recall?format=json&RecallDateStart={now-30d}", type: REST_API, connector: jsonlist, tier: A, config: { keyField: RecallID, titleField: Title, urlField: URL, summaryField: Description, dateField: RecallDate, compareFields: [LastPublishDate], maxItems: 100, noConditional: true } }
35 + - { name: news releases, url: "https://www.cpsc.gov/Newsroom/News-Releases", type: HTML, connector: http, tier: B }
36 + - id: health-canada
37 + extend: true
38 + notes: "recalls-rappels.canada.ca category feeds (consumer products, health products, medical devices); PHAC public health notices page."
39 + sensors:
40 + - { name: consumer product recalls feed, url: "https://recalls-rappels.canada.ca/en/feed/consumer-products-alerts-recalls", type: RSS, connector: rss, tier: A }
41 + - { name: health product recalls feed, url: "https://recalls-rappels.canada.ca/en/feed/health-products-alerts-recalls", type: RSS, connector: rss, tier: A }
42 + - { name: medical device recalls feed, url: "https://recalls-rappels.canada.ca/en/feed/medical-devices-alerts-recalls", type: RSS, connector: rss, tier: A }
43 + - { name: phac public health notices, url: "https://www.canada.ca/en/public-health/services/public-health-notices.html", type: HTML, connector: http, tier: B }
44 + - id: cfia
45 + name: Canadian Food Inspection Agency
46 + domain: inspection.canada.ca
47 + categories: [food, consumer-safety, government]
48 + tier: A
49 + weight: 1.2
50 + aliases: [cfia, acia, agence canadienne d'inspection des aliments]
51 + discover: { rss: false, sitemap: false }
52 + notes: "Food recall warnings come from the shared recalls-rappels.canada.ca feed; CFIA newsroom on inspection.canada.ca returns 410 and the canada.ca news page is a JS shell."
53 + sensors:
54 + - { name: food recall warnings feed, url: "https://recalls-rappels.canada.ca/en/feed/cfia-alerts-recalls", type: RSS, connector: rss, tier: A }
55 + - id: fsa-uk
56 + name: Food Standards Agency (UK)
57 + domain: food.gov.uk
58 + homepage: https://www.food.gov.uk
59 + categories: [food, consumer-safety, government]
60 + tier: A
61 + weight: 1.1
62 + aliases: [fsa, food standards agency]
63 + discover: { rss: false }
64 + sensors:
65 + - { name: food alerts api, url: "https://data.food.gov.uk/food-alerts/id?_limit=50&_sort=-created", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: items, keyField: notation, titleField: title, urlField: alertURL, summaryField: shortTitle, dateField: created, compareFields: [modified], maxItems: 50 } }
66 + - { name: gov.uk activity feed, url: "https://www.gov.uk/government/organisations/food-standards-agency.atom", type: ATOM, connector: rss, tier: B }
67 + - id: food-standards-scotland
68 + name: Food Standards Scotland
69 + domain: foodstandards.gov.scot
70 + categories: [food, consumer-safety, government]
71 + tier: B
72 + aliases: [fss]
73 + discover: { rss: true }
74 + sensors:
75 + - { name: news, url: "https://www.foodstandards.gov.scot/news-and-alerts", type: HTML, connector: http, tier: B }
76 + - id: dgccrf
77 + name: DGCCRF / RappelConso
78 + domain: economie.gouv.fr
79 + homepage: https://www.economie.gouv.fr/dgccrf
80 + categories: [consumer-safety, food, government]
81 + tier: A
82 + weight: 1.1
83 + aliases: [dgccrf, rappelconso, rappel conso, répression des fraudes]
84 + discover: { rss: false }
85 + llm: false
86 + notes: "RappelConso open-data API (data.economie.gouv.fr, Opendatasoft) — every French product recall; ~20 records/day so heuristics only."
87 + sensors:
88 + - { name: rappelconso recalls api, url: "https://data.economie.gouv.fr/api/explore/v2.1/catalog/datasets/rappelconso-v2-gtin-espaces/records?order_by=date_publication%20desc&limit=50", type: REST_API, connector: jsonlist, tier: A, config: { itemsPath: results, keyField: id, titleTemplate: "{categorie_produit} — {marque_produit} {libelle}", summaryField: motif_rappel, dateField: date_publication, urlField: lien_vers_la_fiche_rappel, compareFields: [numero_version], maxItems: 50 } }
89 + - id: uk-opss
90 + name: Office for Product Safety and Standards (UK)
91 + domain: gov.uk
92 + homepage: https://www.gov.uk/government/organisations/office-for-product-safety-and-standards
93 + categories: [consumer-safety, government]
94 + tier: A
95 + aliases: [opss, office for product safety and standards]
96 + discover: { rss: false }
97 + sensors:
98 + - { name: product safety alerts and recalls feed, url: "https://www.gov.uk/product-safety-alerts-reports-recalls.atom", type: ATOM, connector: rss, tier: A }
99 + - { name: gov.uk activity feed, url: "https://www.gov.uk/search/all.atom?organisations%5B%5D=office-for-product-safety-and-standards&order=updated-newest", type: ATOM, connector: rss, tier: B }
100 + - id: accc
101 + name: ACCC
102 + domain: accc.gov.au
103 + homepage: https://www.accc.gov.au
104 + categories: [consumer-safety, government]
105 + tier: A
106 + weight: 1.1
107 + aliases: [accc, australian competition and consumer commission, product safety australia]
108 + discover: { rss: false }
109 + sensors:
110 + - { name: media releases feed, url: "https://www.accc.gov.au/rss/media_releases.xml", type: RSS, connector: rss, tier: A, config: { maxItems: 50 } }
111 + - { name: product safety recalls feed, url: "https://www.productsafety.gov.au/rss/recalls.xml", type: RSS, connector: rss, tier: A, config: { maxItems: 50 } }
112 + # ───────────────────────── environment & chemical safety ─────────────────────────
113 + - id: epa
114 + name: U.S. Environmental Protection Agency
115 + domain: epa.gov
116 + homepage: https://www.epa.gov
117 + categories: [government, climate, consumer-safety]
118 + tier: B
119 + weight: 1.2
120 + aliases: [epa, environmental protection agency]
121 + discover: { rss: false, sitemap: false }
122 + notes: "EPA's news-release RSS and search endpoints answer 405 to non-browser clients; the server-rendered newsroom listing is used."
123 + sensors:
124 + - { name: news releases, url: "https://www.epa.gov/newsroom/browse-news-releases", type: HTML, connector: http, tier: B }
125 + - id: carb
126 + name: California Air Resources Board
127 + domain: ww2.arb.ca.gov
128 + homepage: https://ww2.arb.ca.gov
129 + categories: [government, climate, automotive]
130 + tier: B
131 + aliases: [carb, california air resources board]
132 + discover: { rss: false }
133 + sensors:
134 + - { name: news feed, url: "https://ww2.arb.ca.gov/rss.xml", type: RSS, connector: rss, tier: B }
135 + - id: environment-agency-uk
136 + name: Environment Agency (UK)
137 + domain: gov.uk
138 + homepage: https://www.gov.uk/government/organisations/environment-agency
139 + categories: [government, climate]
140 + tier: B
141 + aliases: [environment agency]
142 + discover: { rss: false }
143 + sensors:
144 + - { name: gov.uk activity feed, url: "https://www.gov.uk/government/organisations/environment-agency.atom", type: ATOM, connector: rss, tier: B }
145 + - id: bape
146 + name: BAPE
147 + domain: bape.gouv.qc.ca
148 + homepage: https://www.bape.gouv.qc.ca
149 + categories: [government, climate]
150 + tier: C
151 + aliases: [bape, bureau d'audiences publiques sur l'environnement]
152 + discover: { rss: true }
153 + sensors:
154 + - { name: sitemap, url: "https://www.bape.gouv.qc.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
155 + # ───────────────────────── consumer protection & competition ─────────────────────────
156 + - id: competition-bureau-canada
157 + name: Competition Bureau Canada
158 + domain: competition-bureau.canada.ca
159 + categories: [government, consumer-safety, commerce]
160 + tier: B
161 + weight: 1.1
162 + aliases: [competition bureau, bureau de la concurrence]
163 + discover: { rss: false }
164 + sensors:
165 + - { name: news feed, url: "https://api.io.canada.ca/io-server/gc/news/en/v2?dept=competitionbureau&sort=publishedDate&orderBy=desc&pick=50&format=atom&atomtitle=Competition%20Bureau", type: ATOM, connector: rss, tier: B }
166 + - { name: sitemap, url: "https://competition-bureau.canada.ca/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
167 + - id: opc-quebec
168 + name: Office de la protection du consommateur
169 + domain: opc.gouv.qc.ca
170 + homepage: https://www.opc.gouv.qc.ca
171 + categories: [consumer-safety, government]
172 + tier: B
173 + aliases: [opc, office de la protection du consommateur]
174 + discover: { rss: false }
175 + sensors:
176 + - { name: communiqués feed, url: "https://www.opc.gouv.qc.ca/actualites/communiques/rss.xml", type: RSS, connector: rss, tier: B }
177 + - { name: toutes les actualités feed, url: "https://www.opc.gouv.qc.ca/actualite/toutes-les-actualites/rss.xml", type: RSS, connector: rss, tier: B }
178 + - id: uk-cma
179 + name: Competition and Markets Authority (UK)
180 + domain: gov.uk
181 + homepage: https://www.gov.uk/government/organisations/competition-and-markets-authority
182 + categories: [government, commerce, legal]
183 + tier: B
184 + weight: 1.1
185 + aliases: [cma, competition and markets authority]
186 + discover: { rss: false }
187 + sensors:
188 + - { name: gov.uk activity feed, url: "https://www.gov.uk/government/organisations/competition-and-markets-authority.atom", type: ATOM, connector: rss, tier: B }
189 + - id: european-commission
190 + extend: true
191 + aliases: [dg comp, dg competition]
192 + sensors:
193 + - { name: competition policy news feed, url: "https://competition-policy.ec.europa.eu/node/38/rss_en", type: RSS, connector: rss, tier: B }
194 + - id: autorite-de-la-concurrence
195 + name: Autorité de la concurrence
196 + domain: autoritedelaconcurrence.fr
197 + homepage: https://www.autoritedelaconcurrence.fr
198 + categories: [government, commerce, legal]
199 + tier: B
200 + aliases: [autorité de la concurrence, adlc]
201 + discover: { rss: false }
202 + sensors:
203 + - { name: actualités feed, url: "https://www.autoritedelaconcurrence.fr/fr/rss.xml", type: RSS, connector: rss, tier: B }
204 + - id: bundeskartellamt
205 + name: Bundeskartellamt
206 + domain: bundeskartellamt.de
207 + homepage: https://www.bundeskartellamt.de
208 + categories: [government, commerce, legal]
209 + tier: B
210 + aliases: [bundeskartellamt, german federal cartel office]
211 + discover: { rss: false }
212 + sensors:
213 + - { name: news feed, url: "https://www.bundeskartellamt.de/DE/Service/RSS/_documents/rssnewsfeed.xml", type: RSS, connector: rss, tier: B }
214 + - id: jftc
215 + name: Japan Fair Trade Commission
216 + domain: jftc.go.jp
217 + homepage: https://www.jftc.go.jp/en/
218 + categories: [government, commerce, legal]
219 + tier: B
220 + aliases: [jftc, japan fair trade commission]
221 + discover: { rss: false }
222 + sensors:
223 + - { name: press releases 2026, url: "https://www.jftc.go.jp/en/pressreleases/yearly-2026/index.html", type: HTML, connector: http, tier: B }
224 + - id: cci-india
225 + name: Competition Commission of India
226 + domain: cci.gov.in
227 + homepage: https://www.cci.gov.in
228 + categories: [government, commerce, legal]
229 + tier: B
230 + aliases: [cci, competition commission of india]
231 + discover: { rss: true, sitemap: true }
232 + notes: "Press-release and what's-new listings are client-rendered (short text) and there is no feed — discovery only."
233 + - id: acm-netherlands
234 + name: Autoriteit Consument & Markt
235 + domain: acm.nl
236 + homepage: https://www.acm.nl/en
237 + categories: [government, commerce, consumer-safety]
238 + tier: B
239 + aliases: [acm, autoriteit consument en markt, netherlands authority for consumers and markets]
240 + discover: { rss: false }
241 + sensors:
242 + - { name: press releases, url: "https://www.acm.nl/en/publications?type=press-release", type: HTML, connector: http, tier: B }
243 + - id: consumer-protection-bc
244 + name: Consumer Protection BC
245 + domain: consumerprotectionbc.ca
246 + homepage: https://www.consumerprotectionbc.ca
247 + categories: [consumer-safety, government]
248 + tier: C
249 + discover: { rss: false }
250 + sensors:
251 + - { name: news feed, url: "https://www.consumerprotectionbc.ca/feed/", type: RSS, connector: rss, tier: C }
252 + - id: which
253 + name: Which?
254 + domain: which.co.uk
255 + homepage: https://www.which.co.uk
256 + categories: [consumer-safety, ngo]
257 + tier: B
258 + aliases: ["which?", "consumers' association"]
259 + discover: { rss: false }
260 + sensors:
261 + - { name: news feed, url: "https://www.which.co.uk/news/feed", type: RSS, connector: rss, tier: B, config: { maxItems: 50 } }
262 + - id: beuc
263 + name: BEUC — The European Consumer Organisation
264 + domain: beuc.eu
265 + homepage: https://www.beuc.eu
266 + categories: [consumer-safety, ngo]
267 + tier: B
268 + aliases: [beuc, european consumer organisation]
269 + discover: { rss: false }
270 + sensors:
271 + - { name: news feed, url: "https://www.beuc.eu/rss.xml", type: RSS, connector: rss, tier: B }
272 + - id: ewg
273 + name: Environmental Working Group
274 + domain: ewg.org
275 + homepage: https://www.ewg.org
276 + categories: [consumer-safety, ngo, food]
277 + tier: B
278 + aliases: [ewg]
279 + discover: { rss: false }
280 + sensors:
281 + - { name: news feed, url: "https://www.ewg.org/rss.xml", type: RSS, connector: rss, tier: B }
282 + # ───────────────────────── food & agriculture agencies ─────────────────────────
283 + - id: usda
284 + name: USDA
285 + domain: usda.gov
286 + homepage: https://www.usda.gov
287 + categories: [agriculture, food, government]
288 + tier: A
289 + weight: 1.3
290 + aliases: [usda, u.s. department of agriculture, ers, nass, ams, fsis]
291 + discover: { rss: false, sitemap: false }
292 + notes: "www.usda.gov, FSIS and the NASS RSS are behind Akamai (403). Agency-level endpoints that answer: AMS RSS, ERS and NASS newsroom pages."
293 + sensors:
294 + - { name: ams news feed, url: "https://www.ams.usda.gov/rss.xml", type: RSS, connector: rss, tier: B }
295 + - { name: ers newsroom, url: "https://www.ers.usda.gov/newsroom", type: HTML, connector: http, tier: B }
296 + - { name: nass newsroom, url: "https://www.nass.usda.gov/Newsroom/index.php", type: HTML, connector: http, tier: B }
297 + - id: aafc
298 + name: Agriculture and Agri-Food Canada
299 + domain: agriculture.canada.ca
300 + categories: [agriculture, food, government]
301 + tier: B
302 + weight: 1.1
303 + aliases: [aafc, aac, agriculture et agroalimentaire canada]
304 + discover: { rss: false }
305 + sensors:
306 + - { name: news feed, url: "https://agriculture.canada.ca/en/rss.xml", type: RSS, connector: rss, tier: B }
307 + - id: quebec
308 + extend: true
309 + aliases: [mapaq]
310 + sensors:
311 + - { name: fil de presse feed, url: "https://www.quebec.ca/fil-de-presse.rss", type: RSS, connector: rss, tier: B, config: { maxItems: 60 } }
312 + - id: efsa
313 + name: European Food Safety Authority
314 + domain: efsa.europa.eu
315 + homepage: https://www.efsa.europa.eu
316 + categories: [food, health, government]
317 + tier: A
318 + weight: 1.2
319 + aliases: [efsa]
320 + discover: { rss: false }
321 + sensors:
322 + - { name: press feed, url: "https://www.efsa.europa.eu/en/press/rss", type: RSS, connector: rss, tier: A }
323 + - id: defra
324 + name: Department for Environment, Food & Rural Affairs (UK)
325 + domain: gov.uk
326 + homepage: https://www.gov.uk/government/organisations/department-for-environment-food-rural-affairs
327 + categories: [agriculture, food, government]
328 + tier: B
329 + aliases: [defra]
330 + discover: { rss: false }
331 + sensors:
332 + - { name: gov.uk activity feed, url: "https://www.gov.uk/government/organisations/department-for-environment-food-rural-affairs.atom", type: ATOM, connector: rss, tier: B }
333 + - id: fsanz
334 + name: Food Standards Australia New Zealand
335 + domain: foodstandards.gov.au
336 + homepage: https://www.foodstandards.gov.au
337 + categories: [food, consumer-safety, government]
338 + tier: B
339 + aliases: [fsanz]
340 + discover: { rss: false }
341 + sensors:
342 + - { name: news feed, url: "https://www.foodstandards.gov.au/rss.xml", type: RSS, connector: rss, tier: B }
343 + - id: anses
344 + name: ANSES
345 + domain: anses.fr
346 + homepage: https://www.anses.fr
347 + categories: [food, health, government]
348 + tier: B
349 + weight: 1.1
350 + aliases: [anses, agence nationale de sécurité sanitaire]
351 + discover: { rss: false }
352 + sensors:
353 + - { name: actualités feed, url: "https://www.anses.fr/fr/rss.xml", type: RSS, connector: rss, tier: B }
354 + - id: woah
355 + name: World Organisation for Animal Health
356 + domain: woah.org
357 + homepage: https://www.woah.org
358 + categories: [agriculture, health, international]
359 + tier: B
360 + weight: 1.1
361 + aliases: [woah, oie, world organisation for animal health]
362 + discover: { rss: false }
363 + sensors:
364 + - { name: news feed, url: "https://www.woah.org/en/feed/", type: RSS, connector: rss, tier: B }
365 + - id: codex-alimentarius
366 + name: Codex Alimentarius Commission
367 + domain: fao.org
368 + homepage: https://www.fao.org/fao-who-codexalimentarius/en/
369 + categories: [food, standards, international]
370 + tier: C
371 + aliases: [codex, codex alimentarius]
372 + discover: { rss: false, sitemap: false }
373 + sensors:
374 + - { name: news and events, url: "https://www.fao.org/fao-who-codexalimentarius/news-and-events/en/", type: HTML, connector: http, tier: C }
375 + - id: ippc
376 + name: International Plant Protection Convention
377 + domain: ippc.int
378 + homepage: https://www.ippc.int
379 + categories: [agriculture, international, standards]
380 + tier: C
381 + aliases: [ippc]
382 + discover: { rss: false }
383 + sensors:
384 + - { name: news, url: "https://www.ippc.int/en/news/", type: HTML, connector: http, tier: C }
385 + - id: icco
386 + name: International Cocoa Organization
387 + domain: icco.org
388 + homepage: https://www.icco.org
389 + categories: [agriculture, international, commerce]
390 + tier: C
391 + aliases: [icco, cocoa]
392 + discover: { rss: true, sitemap: true }
393 + notes: "News page is client-rendered (thin) and /feed redirects to the homepage — discovery only."
394 + - id: ico
395 + name: International Coffee Organization
396 + domain: ico.org
397 + homepage: https://www.ico.org
398 + categories: [agriculture, international, commerce]
399 + tier: C
400 + aliases: [ico, international coffee organization]
401 + discover: { rss: true }
402 + sensors:
403 + - { name: press releases, url: "https://ico.org/press-releases/", type: HTML, connector: http, tier: C }
404 + # ───────────────────────── farm & producer organizations ─────────────────────────
405 + - id: farm-credit-canada
406 + name: Farm Credit Canada
407 + domain: fcc-fac.ca
408 + homepage: https://www.fcc-fac.ca
409 + categories: [agriculture, finance]
410 + tier: C
411 + aliases: [fcc, financement agricole canada, fac]
412 + discover: { rss: true, sitemap: true }
413 + notes: "Newsroom is a client-rendered shell (thin); no feed found — discovery only."
414 + - id: upa
415 + name: Union des producteurs agricoles
416 + domain: upa.qc.ca
417 + homepage: https://www.upa.qc.ca
418 + categories: [agriculture, ngo]
419 + tier: C
420 + aliases: [upa, union des producteurs agricoles]
421 + discover: { rss: false }
422 + sensors:
423 + - { name: nouvelles, url: "https://www.upa.qc.ca/producteur/centre-des-communications/nouvelles", type: HTML, connector: http, tier: C }
424 + - id: cfa-fca
425 + name: Canadian Federation of Agriculture
426 + domain: cfa-fca.ca
427 + homepage: https://cfa-fca.ca
428 + categories: [agriculture, ngo]
429 + tier: C
430 + aliases: [cfa, fédération canadienne de l'agriculture]
431 + discover: { rss: false }
432 + sensors:
433 + - { name: news feed, url: "https://cfa-fca.ca/feed/", type: RSS, connector: rss, tier: C }
434 + - id: afbf
435 + name: American Farm Bureau Federation
436 + domain: fb.org
437 + homepage: https://www.fb.org
438 + categories: [agriculture, ngo]
439 + tier: C
440 + aliases: [afbf, farm bureau]
441 + discover: { rss: false }
442 + sensors:
443 + - { name: news releases, url: "https://www.fb.org/news-release", type: HTML, connector: http, tier: C }
444 + - id: gfo
445 + name: Grain Farmers of Ontario
446 + domain: gfo.ca
447 + homepage: https://gfo.ca
448 + categories: [agriculture, ngo]
449 + tier: C
450 + aliases: [gfo, grain farmers of ontario]
451 + discover: { rss: false }
452 + sensors:
453 + - { name: news feed, url: "https://gfo.ca/feed/", type: RSS, connector: rss, tier: C }
454 + - id: plq
455 + name: Les Producteurs de lait du Québec
456 + domain: lait.org
457 + homepage: https://lait.org
458 + categories: [agriculture, food, ngo]
459 + tier: C
460 + aliases: [plq, producteurs de lait du québec]
461 + discover: { rss: true }
462 + sensors:
463 + - { name: actualités, url: "https://lait.org/actualites/", type: HTML, connector: http, tier: C }
464 + - id: dairy-farmers-of-canada
465 + name: Dairy Farmers of Canada
466 + domain: dairyfarmersofcanada.ca
467 + homepage: https://dairyfarmersofcanada.ca
468 + categories: [agriculture, food, ngo]
469 + tier: C
470 + aliases: [dfc, producteurs laitiers du canada]
471 + discover: { rss: false }
472 + sensors:
473 + - { name: news releases, url: "https://dairyfarmersofcanada.ca/en/dairy-in-canada/news-releases", type: HTML, connector: http, tier: C }
474 + - id: cattle-ca
475 + name: Canadian Cattle Association
476 + domain: cattle.ca
477 + homepage: https://www.cattle.ca
478 + categories: [agriculture, ngo]
479 + tier: C
480 + aliases: [canadian cattle association, cca]
481 + discover: { rss: false }
482 + sensors:
483 + - { name: news feed, url: "https://www.cattle.ca/feed", type: RSS, connector: rss, tier: C }
484 + - id: cereals-canada
485 + name: Cereals Canada
486 + domain: cerealscanada.ca
487 + homepage: https://cerealscanada.ca
488 + categories: [agriculture, ngo]
489 + tier: C
490 + discover: { rss: false }
491 + sensors:
492 + - { name: news feed, url: "https://cerealscanada.ca/feed/", type: RSS, connector: rss, tier: C }
493 + - id: pulse-canada
494 + name: Pulse Canada
495 + domain: pulsecanada.com
496 + homepage: https://pulsecanada.com
497 + categories: [agriculture, ngo]
498 + tier: C
499 + discover: { rss: true }
500 + sensors:
501 + - { name: news, url: "https://pulsecanada.com/news", type: HTML, connector: http, tier: C }
502 + - id: canola-council
503 + name: Canola Council of Canada
504 + domain: canolacouncil.org
505 + homepage: https://www.canolacouncil.org
506 + categories: [agriculture, ngo]
507 + tier: C
508 + aliases: [canola council]
509 + discover: { rss: false }
510 + sensors:
511 + - { name: news feed, url: "https://www.canolacouncil.org/news/feed/", type: RSS, connector: rss, tier: C }
512 + # ───────────────────────── agribusiness, inputs & equipment ─────────────────────────
513 + - id: adm
514 + name: ADM
515 + domain: adm.com
516 + homepage: https://www.adm.com
517 + categories: [agriculture, food, commerce]
518 + tier: B
519 + weight: 1.2
520 + aliases: [adm, archer daniels midland, archer-daniels-midland]
521 + discover: { rss: false }
522 + sensors:
523 + - { name: news, url: "https://www.adm.com/news/", type: HTML, connector: http, tier: B }
524 + - { name: sitemap, url: "https://www.adm.com/en-us/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
525 + - id: bunge
526 + name: Bunge
527 + domain: bunge.com
528 + homepage: https://bunge.com
529 + categories: [agriculture, food, commerce]
530 + tier: B
531 + weight: 1.1
532 + aliases: [bunge global, bunge viterra]
533 + discover: { rss: true, sitemap: true }
534 + notes: "Media center and IR feeds sit behind a Cloudflare challenge (403) — discovery only."
535 + - id: nutrien
536 + name: Nutrien
537 + domain: nutrien.com
538 + homepage: https://www.nutrien.com
539 + categories: [agriculture, commerce]
540 + tier: B
541 + weight: 1.1
542 + aliases: [nutrien ag solutions]
543 + discover: { rss: false }
544 + sensors:
545 + - { name: news, url: "https://www.nutrien.com/news", type: HTML, connector: http, tier: B }
546 + - { name: sitemap, url: "https://www.nutrien.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
547 + - id: mosaic
548 + name: The Mosaic Company
549 + domain: mosaicco.com
550 + homepage: https://mosaicco.com
551 + categories: [agriculture, commerce]
552 + tier: B
553 + aliases: [mosaic, mosaic company]
554 + discover: { rss: false }
555 + sensors:
556 + - { name: news, url: "https://mosaicco.com/news", type: HTML, connector: http, tier: B }
557 + - id: cf-industries
558 + name: CF Industries
559 + domain: cfindustries.com
560 + homepage: https://www.cfindustries.com
561 + categories: [agriculture, energy, commerce]
562 + tier: B
563 + aliases: [cf industries]
564 + discover: { rss: false }
565 + sensors:
566 + - { name: newsroom, url: "https://www.cfindustries.com/newsroom", type: HTML, connector: http, tier: B }
567 + - id: corteva
568 + name: Corteva Agriscience
569 + domain: corteva.com
570 + homepage: https://www.corteva.com
571 + categories: [agriculture, science, commerce]
572 + tier: B
573 + weight: 1.1
574 + aliases: [corteva]
575 + discover: { rss: false }
576 + sensors:
577 + - { name: media center, url: "https://www.corteva.com/resources/media-center.html", type: HTML, connector: http, tier: B }
578 + - { name: sitemap, url: "https://www.corteva.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
579 + - id: syngenta
580 + name: Syngenta
581 + domain: syngenta.com
582 + homepage: https://www.syngenta.com
583 + categories: [agriculture, science, commerce]
584 + tier: B
585 + weight: 1.1
586 + aliases: [syngenta group]
587 + discover: { rss: false }
588 + sensors:
589 + - { name: media releases, url: "https://www.syngenta.com/media/media-releases", type: HTML, connector: http, tier: B }
590 + - { name: sitemap, url: "https://www.syngenta.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
591 + - id: agco-corp
592 + name: AGCO Corporation
593 + domain: agcocorp.com
594 + homepage: https://www.agcocorp.com
595 + categories: [agriculture, technology, commerce]
596 + tier: B
597 + aliases: [agco, fendt, massey ferguson, valtra]
598 + discover: { rss: false }
599 + sensors:
600 + - { name: newsroom, url: "https://news.agcocorp.com/", type: HTML, connector: http, tier: B }
601 + - id: kubota
602 + name: Kubota
603 + domain: kubota.com
604 + homepage: https://www.kubota.com
605 + categories: [agriculture, technology, commerce]
606 + tier: B
607 + aliases: [kubota corporation]
608 + discover: { rss: false }
609 + sensors:
610 + - { name: newsroom, url: "https://www.kubota.com/newsroom/", type: HTML, connector: http, tier: B }
611 + - id: premier-tech
612 + name: Premier Tech
613 + domain: premiertech.com
614 + homepage: https://www.premiertech.com
615 + categories: [agriculture, technology, commerce]
616 + tier: C
617 + discover: { rss: false }
618 + sensors:
619 + - { name: news feed, url: "https://www.premiertech.com/rss.xml", type: RSS, connector: rss, tier: C }
620 + # ───────────────────────── food processors, dairy & distributors ─────────────────────────
621 + - id: tyson-foods
622 + name: Tyson Foods
623 + domain: tysonfoods.com
624 + homepage: https://www.tysonfoods.com
625 + categories: [food, commerce]
626 + tier: B
627 + weight: 1.1
628 + aliases: [tyson]
629 + discover: { rss: false }
630 + sensors:
631 + - { name: news releases, url: "https://www.tysonfoods.com/news/news-releases", type: HTML, connector: http, tier: B }
632 + - id: jbs
633 + name: JBS
634 + domain: jbsfoodsgroup.com
635 + homepage: https://jbsfoodsgroup.com
636 + categories: [food, commerce]
637 + tier: B
638 + weight: 1.1
639 + aliases: [jbs foods, jbs s.a., pilgrim's]
640 + discover: { rss: false }
641 + sensors:
642 + - { name: news, url: "https://jbsfoodsgroup.com/news", type: HTML, connector: http, tier: B }
643 + - id: maple-leaf-foods
644 + name: Maple Leaf Foods
645 + domain: mapleleaffoods.com
646 + homepage: https://www.mapleleaffoods.com
647 + categories: [food, commerce]
648 + tier: B
649 + aliases: [maple leaf, aliments maple leaf]
650 + discover: { rss: false }
651 + sensors:
652 + - { name: news feed, url: "https://www.mapleleaffoods.com/feed/", type: RSS, connector: rss, tier: B }
653 + - id: olymel
654 + name: Olymel
655 + domain: olymel.com
656 + homepage: https://www.olymel.com
657 + categories: [food, commerce]
658 + tier: C
659 + discover: { rss: true }
660 + sensors:
661 + - { name: sitemap, url: "https://www.olymel.com/en-sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
662 + - id: hormel-foods
663 + name: Hormel Foods
664 + domain: hormelfoods.com
665 + homepage: https://www.hormelfoods.com
666 + categories: [food, commerce]
667 + tier: B
668 + aliases: [hormel]
669 + discover: { rss: false }
670 + sensors:
671 + - { name: news feed, url: "https://www.hormelfoods.com/feed/", type: RSS, connector: rss, tier: B }
672 + - id: conagra-brands
673 + name: Conagra Brands
674 + domain: conagrabrands.com
675 + homepage: https://www.conagrabrands.com
676 + categories: [food, commerce]
677 + tier: B
678 + aliases: [conagra]
679 + discover: { rss: false }
680 + sensors:
681 + - { name: news feed, url: "https://www.conagrabrands.com/rss.xml", type: RSS, connector: rss, tier: B }
682 + - id: campbells
683 + name: The Campbell's Company
684 + domain: thecampbellscompany.com
685 + homepage: https://www.thecampbellscompany.com
686 + categories: [food, commerce]
687 + tier: B
688 + aliases: [campbell's, campbell soup]
689 + discover: { rss: false }
690 + sensors:
691 + - { name: sitemap, url: "https://www.thecampbellscompany.com/sitemap_index.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
692 + - id: mccain
693 + name: McCain Foods
694 + domain: mccain.com
695 + homepage: https://www.mccain.com
696 + categories: [food, commerce]
697 + tier: B
698 + aliases: [mccain]
699 + discover: { rss: false }
700 + sensors:
701 + - { name: news, url: "https://www.mccain.com/information-centre/news/", type: HTML, connector: http, tier: B }
702 + - id: lactalis
703 + name: Lactalis
704 + domain: lactalis.com
705 + homepage: https://www.lactalis.com
706 + categories: [food, commerce]
707 + tier: B
708 + aliases: [groupe lactalis]
709 + discover: { rss: false }
710 + sensors:
711 + - { name: news, url: "https://www.lactalis.com/en/articles/news", type: HTML, connector: http, tier: B }
712 + - id: fonterra
713 + name: Fonterra
714 + domain: fonterra.com
715 + homepage: https://www.fonterra.com
716 + categories: [food, agriculture, commerce]
717 + tier: B
718 + discover: { rss: false }
719 + sensors:
720 + - { name: media releases, url: "https://www.fonterra.com/nz/en/our-stories/media.html", type: HTML, connector: http, tier: B }
721 + - id: arla
722 + name: Arla Foods
723 + domain: arla.com
724 + homepage: https://www.arla.com
725 + categories: [food, agriculture, commerce]
726 + tier: B
727 + aliases: [arla]
728 + discover: { rss: false }
729 + sensors:
730 + - { name: sitemap, url: "https://www.arla.com/sitemap.index.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000, maxChildren: 6 } }
731 + - id: frieslandcampina
732 + name: FrieslandCampina
733 + domain: frieslandcampina.com
734 + homepage: https://www.frieslandcampina.com
735 + categories: [food, agriculture, commerce]
736 + tier: B
737 + aliases: [royal frieslandcampina]
738 + discover: { rss: false }
739 + sensors:
740 + - { name: news feed, url: "https://www.frieslandcampina.com/rss", type: RSS, connector: rss, tier: B }
741 + - id: sysco
742 + name: Sysco
743 + domain: sysco.com
744 + homepage: https://www.sysco.com
745 + categories: [food, logistics, commerce]
746 + tier: B
747 + weight: 1.1
748 + discover: { rss: false }
749 + sensors:
750 + - { name: sitemap, url: "https://www.sysco.com/api/sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 2000 } }
751 + - id: gfs
752 + name: Gordon Food Service
753 + domain: gfs.com
754 + homepage: https://gfs.com
755 + categories: [food, logistics, commerce]
756 + tier: C
757 + aliases: [gordon food service]
758 + discover: { rss: false }
759 + sensors:
760 + - { name: news feed, url: "https://gfs.com/en-us/feed/", type: RSS, connector: rss, tier: C }
761 + - id: colabor
762 + name: Colabor
763 + domain: colabor.com
764 + homepage: https://colabor.com
765 + categories: [food, logistics, commerce]
766 + tier: C
767 + aliases: [groupe colabor]
768 + discover: { rss: false }
769 + sensors:
770 + - { name: news feed, url: "https://colabor.com/en/feed/", type: RSS, connector: rss, tier: C }
added config/sources.d/22-housing-labour-opendata.yaml +651 −0
@@ -0,0 +1,1101 @@
1 +# config/sources.d/22-housing-labour-opendata.yaml — housing & real estate, labour & workforce, open-data portals
2 +# (CKAN / Socrata / Opendatasoft / data.gouv.fr / data.europa.eu catalog APIs via jsonlist, llm: false) and national
3 +# statistics offices not yet covered by the founding file. Written 2026-09-08; every sensor validated with
4 +# apps/engine/src/validate.ts (OK only — no empty feeds, no thin pages).
5 +#
6 +# Not listed because blocked by design (bot management / WAF / no server-rendered content) — 2026-09-08:
7 +# housing: MBA (Cloudflare), Zoopla (Cloudflare), Domain.com.au (Akamai), SeLoger (Datadome), Notaires de France
8 +# (interstitial), S&P Dow Jones Indices RSS (403), ICE Mortgage Technology / ir.theice.com (Cloudflare),
9 +# Blackstone, RioCan, Cadillac Fairview, Colliers, CBRE (Cloudflare), Minto (403), ACQ (Cloudflare),
10 +# SHQ habitation.gouv.qc.ca (403), OREA (every path answers a soft 404), REBGV/gvrealtors.ca (Next.js shell, 403 on
11 +# reports), Realtor.ca (client-rendered), Halifax HPI (error page), Nationwide HPI microsite (redirects to
12 +# nationwide.co.uk — covered there), Brookfield Properties / Boardwalk / Simon / Vornado / Public Storage /
13 +# Ivanhoé Cambridge / Cushman & Wakefield / Sotheby's Canada (no feed, no server-rendered news index),
14 +# Allied / Canderel / Dream (WordPress feeds present but empty), Offerpad (articles index is a 79-char shell).
15 +# labour: OSHA (Akamai 403 on every path), Glassdoor Economic Research (403), AFL-CIO (rss.xml has no items,
16 +# /press 403), SEIU (feeds empty), LinkedIn Economic Graph (research/blog indexes are thin JS shells), Lightcast
17 +# (client-rendered blog), Ontario Ministry of Labour (news.ontario.ca RSS URLs return a JS shell), Commission des
18 +# normes du travail (merged into CNESST), ILO (international agents file).
19 +# open data: catalog.data.gov CKAN API answers 404 "Not Found" on every action (API gateway) — nothing to poll;
20 +# Open Data Charter feed is empty.
21 +# statistics: IBGE (Cloudflare), BPS Indonesia (Cloudflare), INEGI (press room 403, noticias.xml empty), INDEC
22 +# (novedades page is a thin shell), Statistics Norway RSS feeds (statistikk/nyheter) carry zero items,
23 +# Statistics Finland (client-rendered), Swiss FSO (client-rendered, no feed), DANE Colombia (Joomla shell),
24 +# e-Stat Japan (no feed; Statistics Bureau stat.go.jp covered instead), MOSPI India (rss.xml is an HTML page,
25 +# press-release index is a 1 KB shell), Statistics Netherlands press page 404 (news sitemap used instead).
26 +sources:
27 + # ───────────────────────── Housing & real estate — Canada ─────────────────────────
28 + - id: cmhc
29 + name: Canada Mortgage and Housing Corporation
30 + domain: cmhc-schl.gc.ca
31 + categories: [real-estate, government]
32 + tier: B
33 + weight: 1.3
34 + aliases: [cmhc, schl, société canadienne d'hypothèques et de logement]
35 + products:
36 + - { name: Housing Market Outlook, type: product }
37 + - { name: Rental Market Report, type: product }
38 + discover: { rss: true, sitemap: true, pages: true }
39 + notes: "No RSS; the Housing Observer index is server-rendered and lists new reports and press releases."
40 + sensors:
41 + - { name: housing observer, url: "https://www.cmhc-schl.gc.ca/observer", type: HTML, connector: http, tier: B }
42 + - id: crea
43 + name: Canadian Real Estate Association
44 + domain: crea.ca
45 + categories: [real-estate]
46 + tier: B
47 + weight: 1.2
48 + aliases: [crea, aci, mls hpi]
49 + products:
50 + - { name: MLS Home Price Index, type: index, aliases: [mls hpi] }
51 + - { name: REALTOR.ca, type: service, aliases: [realtor.ca] }
52 + discover: { rss: true, sitemap: true }
53 + notes: "realtor.ca listings are client-rendered (React) — not monitorable without a browser; CREA's WordPress feed carries stats releases and news."
54 + sensors:
55 + - { name: news feed, url: "https://www.crea.ca/feed/realtime/", type: RSS, connector: rss, tier: B }
56 + - id: apciq
57 + name: Association professionnelle des courtiers immobiliers du Québec
58 + domain: apciq.ca
59 + categories: [real-estate]
60 + tier: B
61 + aliases: [apciq, qpareb, centris, quebec professional association of real estate brokers]
62 + products:
63 + - { name: Centris, type: service }
64 + discover: { rss: true, sitemap: true }
65 + sensors:
66 + - { name: actualités (fr), url: "https://apciq.ca/feed/", type: RSS, connector: rss, tier: B }
67 + - { name: news (en), url: "https://apciq.ca/en/feed/", type: RSS, connector: rss, tier: B }
68 + - id: trreb
69 + name: Toronto Regional Real Estate Board
70 + domain: trreb.ca
71 + categories: [real-estate]
72 + tier: B
73 + aliases: [trreb, treb, toronto real estate board]
74 + discover: { rss: true, sitemap: true }
75 + sensors:
76 + - { name: news feed, url: "https://trreb.ca/feed/", type: RSS, connector: rss, tier: B }
77 + - id: tal-quebec
78 + name: Tribunal administratif du logement
79 + domain: tal.gouv.qc.ca
80 + categories: [real-estate, government, legal]
81 + tier: C
82 + aliases: [tal, tribunal administratif du logement, régie du logement]
83 + discover: { rss: true, sitemap: true, pages: true }
84 + sensors:
85 + - { name: actualités, url: "https://www.tal.gouv.qc.ca/fr/actualites/", type: HTML, connector: http, tier: C }
86 + - id: rbq
87 + name: Régie du bâtiment du Québec
88 + domain: rbq.gouv.qc.ca
89 + categories: [real-estate, government]
90 + tier: C
91 + aliases: [rbq, régie du bâtiment]
92 + discover: { rss: true, sitemap: true, pages: true }
93 + sensors:
94 + - { name: salle de presse, url: "https://www.rbq.gouv.qc.ca/salle-de-presse/", type: HTML, connector: http, tier: C }
95 + - id: chba
96 + name: Canadian Home Builders' Association
97 + domain: chba.ca
98 + categories: [real-estate]
99 + tier: C
100 + aliases: [chba]
101 + discover: { rss: true, sitemap: true }
102 + sensors:
103 + - { name: news feed, url: "https://www.chba.ca/feed/", type: RSS, connector: rss, tier: C }
104 + - id: apchq
105 + name: Association des professionnels de la construction et de l'habitation du Québec
106 + domain: apchq.com
107 + categories: [real-estate]
108 + tier: C
109 + aliases: [apchq]
110 + discover: { rss: true, sitemap: true }
111 + sensors:
112 + - { name: sitemap (fr), url: "https://www.apchq.com/__sitemap__/fr.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
113 + - id: remax
114 + name: RE/MAX
115 + domain: remax.com
116 + categories: [real-estate]
117 + tier: C
118 + aliases: [re/max, remax canada]
119 + discover: { rss: true }
120 + sensors:
121 + - { name: remax canada blog feed, url: "https://blog.remax.ca/feed/", type: RSS, connector: rss, tier: C }
122 + - { name: remax news feed, url: "https://news.remax.com/feed", type: RSS, connector: rss, tier: C }
123 + - id: royal-lepage
124 + name: Royal LePage
125 + domain: royallepage.ca
126 + categories: [real-estate]
127 + tier: C
128 + aliases: [royal lepage]
129 + products:
130 + - { name: Royal LePage House Price Survey, type: product }
131 + discover: { rss: true, sitemap: false, pages: true }
132 + notes: "Sitemap index only points to gzipped listing/agent maps (404); the news index is server-rendered."
133 + sensors:
134 + - { name: news, url: "https://www.royallepage.ca/en/realestate/news/", type: HTML, connector: http, tier: C }
135 + - id: capreit
136 + name: Canadian Apartment Properties REIT
137 + domain: capreit.ca
138 + categories: [real-estate, finance]
139 + tier: C
140 + aliases: [capreit, cap reit]
141 + discover: { rss: true }
142 + sensors:
143 + - { name: news feed, url: "https://www.capreit.ca/feed/", type: RSS, connector: rss, tier: C }
144 + - id: first-capital
145 + name: First Capital REIT
146 + domain: fcr.ca
147 + categories: [real-estate, finance]
148 + tier: C
149 + aliases: [first capital, fcr]
150 + discover: { rss: true }
151 + sensors:
152 + - { name: news feed, url: "https://fcr.ca/feed/", type: RSS, connector: rss, tier: C }
153 + - id: smartcentres
154 + name: SmartCentres REIT
155 + domain: smartcentres.com
156 + categories: [real-estate, finance]
157 + tier: C
158 + aliases: [smartcentres, smart centres]
159 + discover: { rss: true }
160 + sensors:
161 + - { name: news feed, url: "https://smartcentres.com/feed/", type: RSS, connector: rss, tier: C }
162 + - id: choice-properties
163 + name: Choice Properties REIT
164 + domain: choicereit.ca
165 + categories: [real-estate, finance]
166 + tier: C
167 + aliases: [choice properties, choice reit]
168 + discover: { rss: true }
169 + sensors:
170 + - { name: news feed, url: "https://www.choicereit.ca/feed/", type: RSS, connector: rss, tier: C }
171 + - id: cominar
172 + name: Cominar
173 + domain: cominar.com
174 + categories: [real-estate, finance]
175 + tier: C
176 + aliases: [cominar]
177 + discover: { rss: false, sitemap: true, pages: true }
178 + sensors:
179 + - { name: news, url: "https://www.cominar.com/en/news/", type: HTML, connector: http, tier: C }
180 + - id: oxford-properties
181 + name: Oxford Properties
182 + domain: oxfordproperties.com
183 + categories: [real-estate, finance]
184 + tier: C
185 + aliases: [oxford properties, omers]
186 + discover: { rss: false, sitemap: true }
187 + sensors:
188 + - { name: sitemap, url: "https://www.oxfordproperties.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 2000 } }
189 +
190 + # ───────────────────────── Housing & real estate — United States ─────────────────────────
191 + - id: zillow
192 + name: Zillow
193 + domain: zillow.com
194 + categories: [real-estate, technology]
195 + tier: B
196 + weight: 1.2
197 + aliases: [zillow group, zillow research]
198 + products:
199 + - { name: Zillow Home Value Index, type: index, aliases: [zhvi] }
200 + discover: { rss: false, sitemap: false }
201 + notes: "zillow.com (incl. /research/feed/) is behind bot management (403); the press room on mediaroom.com is open."
202 + sensors:
203 + - { name: press releases feed, url: "https://zillow.mediaroom.com/press-releases?pagetemplate=rss", type: RSS, connector: rss, tier: B }
204 + - id: redfin
205 + name: Redfin
206 + domain: redfin.com
207 + categories: [real-estate, technology]
208 + tier: B
209 + aliases: [redfin news]
210 + discover: { rss: true }
211 + sensors:
212 + - { name: news feed, url: "https://www.redfin.com/news/feed/", type: RSS, connector: rss, tier: B }
213 + - id: realtor-com
214 + name: Realtor.com
215 + domain: realtor.com
216 + categories: [real-estate, technology]
217 + tier: B
218 + aliases: [realtor.com research, move inc]
219 + discover: { rss: true }
220 + sensors:
221 + - { name: research feed, url: "https://www.realtor.com/research/feed/", type: RSS, connector: rss, tier: B }
222 + - id: nar
223 + name: National Association of REALTORS
224 + domain: nar.realtor
225 + categories: [real-estate]
226 + tier: B
227 + weight: 1.2
228 + aliases: [nar, national association of realtors, existing-home sales]
229 + products:
230 + - { name: Existing-Home Sales, type: index }
231 + - { name: Pending Home Sales Index, type: index }
232 + discover: { rss: false, sitemap: true, pages: true }
233 + notes: "The /rss-feeds page is a Next.js shell with no feed links; the press-release and Economists' Outlook indexes are server-rendered."
234 + sensors:
235 + - { name: press releases, url: "https://www.nar.realtor/press-releases", type: HTML, connector: http, tier: B }
236 + - { name: economists outlook, url: "https://www.nar.realtor/news/economists-outlook", type: HTML, connector: http, tier: C }
237 + - id: nahb
238 + name: National Association of Home Builders
239 + domain: nahb.org
240 + categories: [real-estate]
241 + tier: B
242 + aliases: [nahb, housing market index, hmi]
243 + products:
244 + - { name: Housing Market Index, type: index, aliases: [nahb hmi] }
245 + discover: { rss: true, sitemap: true }
246 + sensors:
247 + - { name: blog feed, url: "https://www.nahb.org/blog/feed", type: RSS, connector: rss, tier: B }
248 + - { name: news sitemap, url: "https://www.nahb.org/news-sitemap.xml", type: SITEMAP, connector: sitemap, tier: B, config: { maxUrls: 5000 } }
249 + - id: attom
250 + name: ATTOM Data Solutions
251 + domain: attomdata.com
252 + categories: [real-estate]
253 + tier: C
254 + aliases: [attom, attom data]
255 + discover: { rss: true }
256 + sensors:
257 + - { name: news feed, url: "https://www.attomdata.com/feed/", type: RSS, connector: rss, tier: C }
258 + - id: freddie-mac
259 + name: Freddie Mac
260 + domain: freddiemac.com
261 + categories: [real-estate, finance]
262 + tier: B
263 + weight: 1.2
264 + aliases: [freddie mac, fhlmc, pmms]
265 + products:
266 + - { name: Primary Mortgage Market Survey, type: index, aliases: [pmms, mortgage rates survey] }
267 + discover: { rss: true, sitemap: true, pages: true }
268 + sensors:
269 + - { name: pmms mortgage rates, url: "https://www.freddiemac.com/pmms", type: HTML, connector: http, tier: B }
270 + - { name: my home blog feed, url: "https://myhome.freddiemac.com/blog/feed", type: RSS, connector: rss, tier: C }
271 + - id: fannie-mae
272 + name: Fannie Mae
273 + domain: fanniemae.com
274 + categories: [real-estate, finance]
275 + tier: B
276 + weight: 1.2
277 + aliases: [fannie mae, fnma]
278 + discover: { rss: true, sitemap: true, pages: true }
279 + sensors:
280 + - { name: newsroom, url: "https://www.fanniemae.com/newsroom", type: HTML, connector: http, tier: B }
281 + - id: hud
282 + name: U.S. Department of Housing and Urban Development
283 + domain: hud.gov
284 + categories: [real-estate, government]
285 + tier: B
286 + weight: 1.2
287 + aliases: [hud]
288 + discover: { rss: true, sitemap: true, pages: true }
289 + notes: "huduser.gov RSS (pub.xml) answers 202 with an empty WAF challenge and /press is a thin shell; the /news index is server-rendered."
290 + sensors:
291 + - { name: news, url: "https://www.hud.gov/news", type: HTML, connector: http, tier: B }
292 + - id: fhfa
293 + name: Federal Housing Finance Agency
294 + domain: fhfa.gov
295 + categories: [real-estate, finance, government]
296 + tier: B
297 + aliases: [fhfa, house price index]
298 + products:
299 + - { name: FHFA House Price Index, type: index, aliases: [fhfa hpi] }
300 + discover: { rss: true, sitemap: true, pages: true }
301 + sensors:
302 + - { name: news releases, url: "https://www.fhfa.gov/news/news-release", type: HTML, connector: http, tier: B }
303 + - id: cotality
304 + name: Cotality (formerly CoreLogic)
305 + domain: cotality.com
306 + categories: [real-estate]
307 + tier: C
308 + aliases: [cotality, corelogic, core logic]
309 + discover: { rss: true, sitemap: true, pages: true }
310 + sensors:
311 + - { name: newsroom, url: "https://www.cotality.com/newsroom", type: HTML, connector: http, tier: C }
312 + - { name: sitemap, url: "https://www.cotality.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 4000 } }
313 + - id: prologis
314 + name: Prologis
315 + domain: prologis.com
316 + categories: [real-estate, logistics, finance]
317 + tier: C
318 + aliases: [prologis, pld]
319 + discover: { rss: false }
320 + notes: "prologis.com is behind Cloudflare (403); the investor-relations site publishes an open RSS."
321 + sensors:
322 + - { name: press releases feed, url: "https://ir.prologis.com/news-events/press-releases/rss", type: RSS, connector: rss, tier: C }
323 + - id: habitat-for-humanity
324 + name: Habitat for Humanity
325 + domain: habitat.org
326 + categories: [real-estate, ngo]
327 + tier: C
328 + aliases: [habitat for humanity, habitat]
329 + discover: { rss: true }
330 + sensors:
331 + - { name: news feed, url: "https://www.habitat.org/rss.xml", type: RSS, connector: rss, tier: C }
332 + - id: opendoor
333 + name: Opendoor
334 + domain: opendoor.com
335 + categories: [real-estate, technology]
336 + tier: C
337 + aliases: [opendoor]
338 + discover: { rss: true, sitemap: true, pages: true }
339 + sensors:
340 + - { name: newsroom, url: "https://www.opendoor.com/newsroom", type: HTML, connector: http, tier: C }
341 + - id: compass
342 + name: Compass
343 + domain: compass.com
344 + categories: [real-estate, technology]
345 + tier: C
346 + aliases: [compass real estate]
347 + discover: { rss: false, sitemap: false, pages: true }
348 + sensors:
349 + - { name: newsroom, url: "https://www.compass.com/newsroom/", type: HTML, connector: http, tier: C }
350 + - id: jll
351 + name: JLL
352 + domain: jll.com
353 + categories: [real-estate]
354 + tier: C
355 + aliases: [jll, jones lang lasalle]
356 + discover: { rss: false, sitemap: true, pages: true }
357 + sensors:
358 + - { name: newsroom (us), url: "https://www.jll.com/en-us/newsroom", type: HTML, connector: http, tier: C }
359 + - id: altus-group
360 + name: Altus Group
361 + domain: altusgroup.com
362 + categories: [real-estate]
363 + tier: C
364 + aliases: [altus group, altus]
365 + discover: { rss: false, sitemap: true }
366 + sensors:
367 + - { name: sitemap, url: "https://www.altusgroup.com/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
368 +
369 + # ───────────────────────── Housing & real estate — UK / Europe / Australia ─────────────────────────
370 + - id: rightmove
371 + name: Rightmove
372 + domain: rightmove.co.uk
373 + categories: [real-estate]
374 + tier: B
375 + aliases: [rightmove, rightmove house price index]
376 + products:
377 + - { name: Rightmove House Price Index, type: index }
378 + discover: { rss: true }
379 + sensors:
380 + - { name: news feed, url: "https://www.rightmove.co.uk/news/feed/", type: RSS, connector: rss, tier: B }
381 + - id: nationwide-hpi
382 + name: Nationwide House Price Index
383 + domain: nationwide.co.uk
384 + homepage: https://www.nationwide.co.uk/media/hpi
385 + categories: [real-estate, finance]
386 + tier: B
387 + aliases: [nationwide house price index, nationwide hpi, nationwide building society]
388 + discover: { rss: false, pages: true }
389 + notes: "nationwidehousepriceindex.co.uk redirects to the Onclusive-hosted media centre on nationwide.co.uk; the reports index is server-rendered."
390 + sensors:
391 + - { name: hpi reports, url: "https://www.nationwide.co.uk/media/hpi/reports", type: HTML, connector: http, tier: B }
392 + - id: hm-land-registry
393 + name: HM Land Registry
394 + domain: gov.uk
395 + homepage: https://www.gov.uk/government/organisations/land-registry
396 + categories: [real-estate, government]
397 + tier: B
398 + aliases: [hm land registry, land registry, uk house price index]
399 + products:
400 + - { name: UK House Price Index, type: index, aliases: [uk hpi] }
401 + discover: { rss: false }
402 + sensors:
403 + - { name: publications feed, url: "https://www.gov.uk/government/organisations/land-registry.atom", type: ATOM, connector: rss, tier: B }
404 + - id: rea-group
405 + name: REA Group
406 + domain: rea-group.com
407 + categories: [real-estate, technology]
408 + tier: C
409 + aliases: [rea group, realestate.com.au]
410 + products:
411 + - { name: realestate.com.au, type: service }
412 + discover: { rss: false, sitemap: true, pages: true }
413 + notes: "Corporate WordPress feeds exist but carry no items; the blog archive is server-rendered."
414 + sensors:
415 + - { name: corporate blog, url: "https://www.rea-group.com/about-us/news-and-insights/blog/", type: HTML, connector: http, tier: C }
416 + - { name: realestate.com.au news feed, url: "https://www.realestate.com.au/news/feed/", type: RSS, connector: rss, tier: B }
417 + - id: immobilienscout24
418 + name: ImmoScout24
419 + domain: immobilienscout24.de
420 + categories: [real-estate, technology]
421 + tier: C
422 + aliases: [immoscout24, immobilienscout24, scout24]
423 + discover: { rss: false, sitemap: true }
424 + sensors:
425 + - { name: wissen sitemap, url: "https://www.immobilienscout24.de/wissen/sitemap.xml", type: SITEMAP, connector: sitemap, tier: C, config: { maxUrls: 3000 } }
426 +
427 + # ───────────────────────── Labour & workforce ─────────────────────────
428 + - id: us-dol
429 + name: U.S. Department of Labor
430 + domain: dol.gov
431 + categories: [labour, government]
432 + tier: A
433 + weight: 1.3
434 + aliases: [dol, department of labor, labor department]
435 + discover: { rss: true, sitemap: true }
436 + sensors:
437 + - { name: news releases feed, url: "https://www.dol.gov/rss/releases.xml", type: RSS, connector: rss, tier: A }
438 + - id: eeoc
439 + name: U.S. Equal Employment Opportunity Commission
440 + domain: eeoc.gov
441 + categories: [labour, government, legal]
442 + tier: B
443 + aliases: [eeoc]
444 + discover: { rss: true }
445 + sensors:
446 + - { name: newsroom feed, url: "https://www.eeoc.gov/rss/newsroom", type: RSS, connector: rss, tier: B }
447 + - id: nlrb
448 + name: National Labor Relations Board
449 + domain: nlrb.gov
450 + categories: [labour, government, legal]
451 + tier: B
452 + aliases: [nlrb]
453 + discover: { rss: true }
454 + sensors:
455 + - { name: news feed, url: "https://www.nlrb.gov/rss.xml", type: RSS, connector: rss, tier: B }
456 + - id: esdc
457 + name: Employment and Social Development Canada
458 + domain: canada.ca
459 + homepage: https://www.canada.ca/en/employment-social-development.html
460 + categories: [labour, government]
461 + tier: B
462 + weight: 1.2
463 + aliases: [esdc, edsc, emploi et développement social canada, service canada, labour program]
464 + discover: { rss: false }
465 + sensors:
466 + - { name: news releases feed, url: "https://api.io.canada.ca/io-server/gc/news/en/v2?dept=departmentofemploymentandsocialdevelopment&type=newsreleases&sort=publishedDate&orderBy=desc&pick=50&format=atom", type: ATOM, connector: rss, tier: B }
467 + - id: cnesst
468 + name: Commission des normes, de l'équité, de la santé et de la sécurité du travail
469 + domain: cnesst.gouv.qc.ca
470 + categories: [labour, government]
471 + tier: B
472 + aliases: [cnesst, csst, commission des normes du travail, cnt]
473 + discover: { rss: true, sitemap: true, pages: true }
474 + sensors:
475 + - { name: communiqués, url: "https://www.cnesst.gouv.qc.ca/fr/salle-presse/communiques", type: HTML, connector: http, tier: B }
476 + - id: indeed-hiring-lab
477 + name: Indeed Hiring Lab
478 + domain: hiringlab.org
479 + categories: [labour, research]
480 + tier: B
481 + aliases: [hiring lab, indeed]
482 + discover: { rss: true }
483 + sensors:
484 + - { name: research feed, url: "https://hiringlab.indeed.com/feed/", type: RSS, connector: rss, tier: B }
485 + - id: adp-research
486 + name: ADP Research
487 + domain: adpresearch.com
488 + categories: [labour, research]
489 + tier: B
490 + aliases: [adp research institute, adp national employment report]
491 + products:
492 + - { name: ADP National Employment Report, type: product, aliases: [adp jobs report] }
493 + discover: { rss: true, sitemap: true }
494 + sensors:
495 + - { name: research feed, url: "https://www.adpresearch.com/research/feed.xml", type: RSS, connector: rss, tier: B }
496 + - id: conference-board
497 + name: The Conference Board
498 + domain: conference-board.org
499 + categories: [labour, research, finance]
500 + tier: B
501 + aliases: [conference board, consumer confidence index, leading economic index]
502 + products:
503 + - { name: Consumer Confidence Index, type: index }
504 + - { name: Leading Economic Index, type: index, aliases: [lei] }
505 + discover: { rss: true }
506 + sensors:
507 + - { name: press releases feed, url: "https://www.conference-board.org/rss/rss.cfm?type=press", type: RSS, connector: rss, tier: B }
508 + - id: challenger-gray
509 + name: Challenger, Gray & Christmas
510 + domain: challengergray.com
511 + categories: [labour, research]
512 + tier: B
513 + aliases: [challenger gray, challenger job cuts report]
514 + products:
515 + - { name: Challenger Job Cuts Report, type: product }
516 + discover: { rss: true }
517 + sensors:
518 + - { name: news feed, url: "https://www.challengergray.com/feed/", type: RSS, connector: rss, tier: B }
519 + - id: teamsters
520 + name: International Brotherhood of Teamsters
521 + domain: teamster.org
522 + categories: [labour]
523 + tier: C
524 + aliases: [teamsters, ibt]
525 + discover: { rss: true }
526 + sensors:
527 + - { name: news feed, url: "https://teamster.org/feed/", type: RSS, connector: rss, tier: C }
528 + - id: uaw
529 + name: United Auto Workers
530 + domain: uaw.org
531 + categories: [labour, automotive]
532 + tier: C
533 + aliases: [uaw]
534 + discover: { rss: true }
535 + sensors:
536 + - { name: news feed, url: "https://uaw.org/feed/", type: RSS, connector: rss, tier: C }
537 + - id: cupe
538 + name: Canadian Union of Public Employees
539 + domain: cupe.ca
540 + categories: [labour]
541 + tier: C
542 + aliases: [cupe, scfp]
543 + discover: { rss: true, sitemap: true }
544 + sensors:
545 + - { name: news feed, url: "https://cupe.ca/rss/promoted", type: RSS, connector: rss, tier: C }
546 + - id: unifor
547 + name: Unifor
548 + domain: unifor.org
549 + categories: [labour]
550 + tier: C
551 + aliases: [unifor]
552 + discover: { rss: true }
553 + sensors:
554 + - { name: news feed, url: "https://www.unifor.org/rss.xml", type: RSS, connector: rss, tier: C }
555 + - id: ftq
556 + name: Fédération des travailleurs et travailleuses du Québec
557 + domain: ftq.qc.ca
558 + categories: [labour]
559 + tier: C
560 + aliases: [ftq]
561 + discover: { rss: true }
562 + sensors:
563 + - { name: actualités feed, url: "https://ftq.qc.ca/feed/", type: RSS, connector: rss, tier: C }
564 + - id: csn
565 + name: Confédération des syndicats nationaux
566 + domain: csn.qc.ca
567 + categories: [labour]
568 + tier: C
569 + aliases: [csn]
570 + discover: { rss: true }
571 + sensors:
572 + - { name: actualités feed, url: "https://www.csn.qc.ca/feed/", type: RSS, connector: rss, tier: C }
573 + - id: csq
574 + name: Centrale des syndicats du Québec
575 + domain: lacsq.org
576 + categories: [labour, education]
577 + tier: C
578 + aliases: [csq]
579 + discover: { rss: true }
580 + sensors:
581 + - { name: actualités feed, url: "https://www.lacsq.org/feed/", type: RSS, connector: rss, tier: C }
582 + - id: fiq
583 + name: Fédération interprofessionnelle de la santé du Québec
584 + domain: fiqsante.qc.ca
585 + categories: [labour, health]
586 + tier: C
587 + aliases: [fiq]
588 + discover: { rss: true }
589 + sensors:
590 + - { name: actualités feed, url: "https://www.fiqsante.qc.ca/feed/", type: RSS, connector: rss, tier: C }
591 + - id: clc
592 + name: Canadian Labour Congress
593 + domain: canadianlabour.ca
594 + categories: [labour]
595 + tier: C
596 + aliases: [clc, congrès du travail du canada, ctc]
597 + discover: { rss: true }
598 + sensors:
599 + - { name: news feed, url: "https://canadianlabour.ca/feed/", type: RSS, connector: rss, tier: C }
600 + - id: psac
601 + name: Public Service Alliance of Canada
602 + domain: psacunion.ca
603 + categories: [labour]
604 + tier: C
605 + aliases: [psac, afpc]
606 + discover: { rss: true }
607 + sensors:
608 + - { name: news feed, url: "https://psacunion.ca/rss.xml", type: RSS, connector: rss, tier: C }
609 + - id: wsib
610 + name: Workplace Safety and Insurance Board (Ontario)
611 + domain: wsib.ca
612 + categories: [labour, government]
613 + tier: C
614 + aliases: [wsib]
615 + discover: { rss: true }
616 + sensors:
617 + - { name: news feed, url: "https://www.wsib.ca/en/rss.xml", type: RSS, connector: rss, tier: C }
618 + - id: worksafebc
619 + name: WorkSafeBC
620 + domain: worksafebc.com
621 + categories: [labour, government]
622 + tier: C
623 + aliases: [worksafebc, worksafe bc]
624 + discover: { rss: false, sitemap: true, pages: true }
625 + sensors:
626 + - { name: news & events, url: "https://www.worksafebc.com/en/about-us/news-events", type: HTML, connector: http, tier: C }
627 + - id: lmic
628 + name: Labour Market Information Council
629 + domain: lmic-cimt.ca
630 + categories: [labour, research, statistics]
631 + tier: C
632 + aliases: [lmic, cimt]
633 + discover: { rss: true }
634 + sensors:
635 + - { name: news feed, url: "https://lmic-cimt.ca/feed/", type: RSS, connector: rss, tier: C }
636 +
637 + # ───────────────────────── Open-data portals (catalog APIs, llm: false) ─────────────────────────
638 + - id: canada
639 + extend: true
640 + aliases: [open government canada, open.canada.ca]
641 + categories: [open-data]
642 + sensors:
643 + - { name: open data catalogue (ckan), url: "https://open.canada.ca/data/api/3/action/package_search?sort=metadata_modified+desc&rows=50", type: REST_API, connector: jsonlist, tier: B, config: { itemsPath: result.results, keyField: id, titleField: title, summaryField: notes, dateField: metadata_modified, compareFields: [metadata_modified], maxItems: 50, urlTemplate: "https://open.canada.ca/data/en/dataset/{key}" } }
644 + - id: quebec
645 + extend: true
646 + aliases: [données québec, donneesquebec]
647 + categories: [open-data]
648 + sensors:
649 + - { name: données québec catalogue (ckan), url: "https://www.donneesquebec.ca/recherche/api/3/action/package_search?sort=metadata_modified+desc&rows=50", type: REST_API, connector: jsonlist, tier: B, config: { itemsPath: result.results, keyField: id, titleField: title, summaryField: notes, dateField: metadata_modified, compareFields: [metadata_modified], maxItems: 50, urlTemplate: "https://www.donneesquebec.ca/recherche/dataset/{key}" } }
650 + - id: ontario
651 + extend: true

Diff truncated — file too large.