SPB Git forge

spb/websensor

Public
33commits 1branches 0releases
3.4 MBsize
maindefault branch
10 days agolast push
TypeScript 55.4% Python 43.2% SQL 1.2%
34.8 KB · 771 lines yaml
Raw Blame History
1# config/sources.d/21-consumer-safety-food-agri.yaml — recall & safety APIs, consumer-protection and competition2# 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 and6# ERS/NASS newsroom pages are used instead), ECHA (403 for non-browser clients), EU Safety Gate/RAPEX and RASFF7# (Angular shells, POST-only APIs), Cargill and Metro AG (Akamai 403), Deere newsroom (403), George Weston8# (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 / ISO12# sugar (no feed), CDC food-safety feed (no clean media id in the tools.cdc.gov API), MAPAQ (no ministry-level13# feed — the Québec fil de presse is attached to the existing `quebec` source instead).14sources:15  # ───────────────────────── recall & product-safety APIs ─────────────────────────16  - id: fda17    extend: true18    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: cpsc24    name: U.S. Consumer Product Safety Commission25    domain: cpsc.gov26    homepage: https://www.cpsc.gov27    categories: [consumer-safety, government]28    tier: A29    weight: 1.330    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-canada37    extend: true38    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: cfia45    name: Canadian Food Inspection Agency46    domain: inspection.canada.ca47    categories: [food, consumer-safety, government]48    tier: A49    weight: 1.250    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-uk56    name: Food Standards Agency (UK)57    domain: food.gov.uk58    homepage: https://www.food.gov.uk59    categories: [food, consumer-safety, government]60    tier: A61    weight: 1.162    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-scotland68    name: Food Standards Scotland69    domain: foodstandards.gov.scot70    categories: [food, consumer-safety, government]71    tier: B72    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: dgccrf77    name: DGCCRF / RappelConso78    domain: economie.gouv.fr79    homepage: https://www.economie.gouv.fr/dgccrf80    categories: [consumer-safety, food, government]81    tier: A82    weight: 1.183    aliases: [dgccrf, rappelconso, rappel conso, répression des fraudes]84    discover: { rss: false }85    llm: false86    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-opss90    name: Office for Product Safety and Standards (UK)91    domain: gov.uk92    homepage: https://www.gov.uk/government/organisations/office-for-product-safety-and-standards93    categories: [consumer-safety, government]94    tier: A95    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: accc101    name: ACCC102    domain: accc.gov.au103    homepage: https://www.accc.gov.au104    categories: [consumer-safety, government]105    tier: A106    weight: 1.1107    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: epa114    name: U.S. Environmental Protection Agency115    domain: epa.gov116    homepage: https://www.epa.gov117    categories: [government, climate, consumer-safety]118    tier: B119    weight: 1.2120    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: carb126    name: California Air Resources Board127    domain: ww2.arb.ca.gov128    homepage: https://ww2.arb.ca.gov129    categories: [government, climate, automotive]130    tier: B131    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-uk136    name: Environment Agency (UK)137    domain: gov.uk138    homepage: https://www.gov.uk/government/organisations/environment-agency139    categories: [government, climate]140    tier: B141    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: bape146    name: BAPE147    domain: bape.gouv.qc.ca148    homepage: https://www.bape.gouv.qc.ca149    categories: [government, climate]150    tier: C151    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-canada157    name: Competition Bureau Canada158    domain: competition-bureau.canada.ca159    categories: [government, consumer-safety, commerce]160    tier: B161    weight: 1.1162    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-quebec168    name: Office de la protection du consommateur169    domain: opc.gouv.qc.ca170    homepage: https://www.opc.gouv.qc.ca171    categories: [consumer-safety, government]172    tier: B173    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-cma179    name: Competition and Markets Authority (UK)180    domain: gov.uk181    homepage: https://www.gov.uk/government/organisations/competition-and-markets-authority182    categories: [government, commerce, legal]183    tier: B184    weight: 1.1185    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-commission190    extend: true191    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-concurrence195    name: Autorité de la concurrence196    domain: autoritedelaconcurrence.fr197    homepage: https://www.autoritedelaconcurrence.fr198    categories: [government, commerce, legal]199    tier: B200    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: bundeskartellamt205    name: Bundeskartellamt206    domain: bundeskartellamt.de207    homepage: https://www.bundeskartellamt.de208    categories: [government, commerce, legal]209    tier: B210    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: jftc215    name: Japan Fair Trade Commission216    domain: jftc.go.jp217    homepage: https://www.jftc.go.jp/en/218    categories: [government, commerce, legal]219    tier: B220    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-india225    name: Competition Commission of India226    domain: cci.gov.in227    homepage: https://www.cci.gov.in228    categories: [government, commerce, legal]229    tier: B230    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-netherlands234    name: Autoriteit Consument & Markt235    domain: acm.nl236    homepage: https://www.acm.nl/en237    categories: [government, commerce, consumer-safety]238    tier: B239    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-bc244    name: Consumer Protection BC245    domain: consumerprotectionbc.ca246    homepage: https://www.consumerprotectionbc.ca247    categories: [consumer-safety, government]248    tier: C249    discover: { rss: false }250    sensors:251      - { name: news feed, url: "https://www.consumerprotectionbc.ca/feed/", type: RSS, connector: rss, tier: C }252  - id: which253    name: Which?254    domain: which.co.uk255    homepage: https://www.which.co.uk256    categories: [consumer-safety, ngo]257    tier: B258    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: beuc263    name: BEUC — The European Consumer Organisation264    domain: beuc.eu265    homepage: https://www.beuc.eu266    categories: [consumer-safety, ngo]267    tier: B268    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: ewg273    name: Environmental Working Group274    domain: ewg.org275    homepage: https://www.ewg.org276    categories: [consumer-safety, ngo, food]277    tier: B278    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: usda284    name: USDA285    domain: usda.gov286    homepage: https://www.usda.gov287    categories: [agriculture, food, government]288    tier: A289    weight: 1.3290    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: aafc298    name: Agriculture and Agri-Food Canada299    domain: agriculture.canada.ca300    categories: [agriculture, food, government]301    tier: B302    weight: 1.1303    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: quebec308    extend: true309    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: efsa313    name: European Food Safety Authority314    domain: efsa.europa.eu315    homepage: https://www.efsa.europa.eu316    categories: [food, health, government]317    tier: A318    weight: 1.2319    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: defra324    name: Department for Environment, Food & Rural Affairs (UK)325    domain: gov.uk326    homepage: https://www.gov.uk/government/organisations/department-for-environment-food-rural-affairs327    categories: [agriculture, food, government]328    tier: B329    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: fsanz334    name: Food Standards Australia New Zealand335    domain: foodstandards.gov.au336    homepage: https://www.foodstandards.gov.au337    categories: [food, consumer-safety, government]338    tier: B339    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: anses344    name: ANSES345    domain: anses.fr346    homepage: https://www.anses.fr347    categories: [food, health, government]348    tier: B349    weight: 1.1350    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: woah355    name: World Organisation for Animal Health356    domain: woah.org357    homepage: https://www.woah.org358    categories: [agriculture, health, international]359    tier: B360    weight: 1.1361    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-alimentarius366    name: Codex Alimentarius Commission367    domain: fao.org368    homepage: https://www.fao.org/fao-who-codexalimentarius/en/369    categories: [food, standards, international]370    tier: C371    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: ippc376    name: International Plant Protection Convention377    domain: ippc.int378    homepage: https://www.ippc.int379    categories: [agriculture, international, standards]380    tier: C381    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: icco386    name: International Cocoa Organization387    domain: icco.org388    homepage: https://www.icco.org389    categories: [agriculture, international, commerce]390    tier: C391    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: ico395    name: International Coffee Organization396    domain: ico.org397    homepage: https://www.ico.org398    categories: [agriculture, international, commerce]399    tier: C400    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-canada406    name: Farm Credit Canada407    domain: fcc-fac.ca408    homepage: https://www.fcc-fac.ca409    categories: [agriculture, finance]410    tier: C411    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: upa415    name: Union des producteurs agricoles416    domain: upa.qc.ca417    homepage: https://www.upa.qc.ca418    categories: [agriculture, ngo]419    tier: C420    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-fca425    name: Canadian Federation of Agriculture426    domain: cfa-fca.ca427    homepage: https://cfa-fca.ca428    categories: [agriculture, ngo]429    tier: C430    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: afbf435    name: American Farm Bureau Federation436    domain: fb.org437    homepage: https://www.fb.org438    categories: [agriculture, ngo]439    tier: C440    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: gfo445    name: Grain Farmers of Ontario446    domain: gfo.ca447    homepage: https://gfo.ca448    categories: [agriculture, ngo]449    tier: C450    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: plq455    name: Les Producteurs de lait du Québec456    domain: lait.org457    homepage: https://lait.org458    categories: [agriculture, food, ngo]459    tier: C460    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-canada465    name: Dairy Farmers of Canada466    domain: dairyfarmersofcanada.ca467    homepage: https://dairyfarmersofcanada.ca468    categories: [agriculture, food, ngo]469    tier: C470    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-ca475    name: Canadian Cattle Association476    domain: cattle.ca477    homepage: https://www.cattle.ca478    categories: [agriculture, ngo]479    tier: C480    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-canada485    name: Cereals Canada486    domain: cerealscanada.ca487    homepage: https://cerealscanada.ca488    categories: [agriculture, ngo]489    tier: C490    discover: { rss: false }491    sensors:492      - { name: news feed, url: "https://cerealscanada.ca/feed/", type: RSS, connector: rss, tier: C }493  - id: pulse-canada494    name: Pulse Canada495    domain: pulsecanada.com496    homepage: https://pulsecanada.com497    categories: [agriculture, ngo]498    tier: C499    discover: { rss: true }500    sensors:501      - { name: news, url: "https://pulsecanada.com/news", type: HTML, connector: http, tier: C }502  - id: canola-council503    name: Canola Council of Canada504    domain: canolacouncil.org505    homepage: https://www.canolacouncil.org506    categories: [agriculture, ngo]507    tier: C508    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: adm514    name: ADM515    domain: adm.com516    homepage: https://www.adm.com517    categories: [agriculture, food, commerce]518    tier: B519    weight: 1.2520    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: bunge526    name: Bunge527    domain: bunge.com528    homepage: https://bunge.com529    categories: [agriculture, food, commerce]530    tier: B531    weight: 1.1532    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: nutrien536    name: Nutrien537    domain: nutrien.com538    homepage: https://www.nutrien.com539    categories: [agriculture, commerce]540    tier: B541    weight: 1.1542    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: mosaic548    name: The Mosaic Company549    domain: mosaicco.com550    homepage: https://mosaicco.com551    categories: [agriculture, commerce]552    tier: B553    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-industries558    name: CF Industries559    domain: cfindustries.com560    homepage: https://www.cfindustries.com561    categories: [agriculture, energy, commerce]562    tier: B563    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: corteva568    name: Corteva Agriscience569    domain: corteva.com570    homepage: https://www.corteva.com571    categories: [agriculture, science, commerce]572    tier: B573    weight: 1.1574    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: syngenta580    name: Syngenta581    domain: syngenta.com582    homepage: https://www.syngenta.com583    categories: [agriculture, science, commerce]584    tier: B585    weight: 1.1586    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-corp592    name: AGCO Corporation593    domain: agcocorp.com594    homepage: https://www.agcocorp.com595    categories: [agriculture, technology, commerce]596    tier: B597    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: kubota602    name: Kubota603    domain: kubota.com604    homepage: https://www.kubota.com605    categories: [agriculture, technology, commerce]606    tier: B607    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-tech612    name: Premier Tech613    domain: premiertech.com614    homepage: https://www.premiertech.com615    categories: [agriculture, technology, commerce]616    tier: C617    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-foods622    name: Tyson Foods623    domain: tysonfoods.com624    homepage: https://www.tysonfoods.com625    categories: [food, commerce]626    tier: B627    weight: 1.1628    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: jbs633    name: JBS634    domain: jbsfoodsgroup.com635    homepage: https://jbsfoodsgroup.com636    categories: [food, commerce]637    tier: B638    weight: 1.1639    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-foods644    name: Maple Leaf Foods645    domain: mapleleaffoods.com646    homepage: https://www.mapleleaffoods.com647    categories: [food, commerce]648    tier: B649    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: olymel654    name: Olymel655    domain: olymel.com656    homepage: https://www.olymel.com657    categories: [food, commerce]658    tier: C659    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-foods663    name: Hormel Foods664    domain: hormelfoods.com665    homepage: https://www.hormelfoods.com666    categories: [food, commerce]667    tier: B668    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-brands673    name: Conagra Brands674    domain: conagrabrands.com675    homepage: https://www.conagrabrands.com676    categories: [food, commerce]677    tier: B678    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: campbells683    name: The Campbell's Company684    domain: thecampbellscompany.com685    homepage: https://www.thecampbellscompany.com686    categories: [food, commerce]687    tier: B688    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: mccain693    name: McCain Foods694    domain: mccain.com695    homepage: https://www.mccain.com696    categories: [food, commerce]697    tier: B698    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: lactalis703    name: Lactalis704    domain: lactalis.com705    homepage: https://www.lactalis.com706    categories: [food, commerce]707    tier: B708    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: fonterra713    name: Fonterra714    domain: fonterra.com715    homepage: https://www.fonterra.com716    categories: [food, agriculture, commerce]717    tier: B718    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: arla722    name: Arla Foods723    domain: arla.com724    homepage: https://www.arla.com725    categories: [food, agriculture, commerce]726    tier: B727    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: frieslandcampina732    name: FrieslandCampina733    domain: frieslandcampina.com734    homepage: https://www.frieslandcampina.com735    categories: [food, agriculture, commerce]736    tier: B737    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: sysco742    name: Sysco743    domain: sysco.com744    homepage: https://www.sysco.com745    categories: [food, logistics, commerce]746    tier: B747    weight: 1.1748    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: gfs752    name: Gordon Food Service753    domain: gfs.com754    homepage: https://gfs.com755    categories: [food, logistics, commerce]756    tier: C757    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: colabor762    name: Colabor763    domain: colabor.com764    homepage: https://colabor.com765    categories: [food, logistics, commerce]766    tier: C767    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 }771