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>
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.