<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Oleksyj Mokrousov</title>
    <description>The latest articles on DEV Community by Oleksyj Mokrousov (@alexperigon).</description>
    <link>https://dev.to/alexperigon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4041800%2F24787fa5-afb1-4649-b76c-7afa15ff43a5.png</url>
      <title>DEV Community: Oleksyj Mokrousov</title>
      <link>https://dev.to/alexperigon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alexperigon"/>
    <language>en</language>
    <item>
      <title>Best News Sources: AI Top Lists vs Perigon's top100 Source Group</title>
      <dc:creator>Oleksyj Mokrousov</dc:creator>
      <pubDate>Tue, 28 Jul 2026 10:07:02 +0000</pubDate>
      <link>https://dev.to/alexperigon/best-news-sources-ai-top-lists-vs-perigons-top100-source-group-1ool</link>
      <guid>https://dev.to/alexperigon/best-news-sources-ai-top-lists-vs-perigons-top100-source-group-1ool</guid>
      <description>&lt;h2&gt;
  
  
  Why “best news sources” lists disagree
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftd49ryunjm8nlu29qg6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftd49ryunjm8nlu29qg6q.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ask three assistants for the &lt;strong&gt;top news sources&lt;/strong&gt; - with domains - and you get three confident shortlists that optimize for different jobs. One model ranks &lt;strong&gt;wire and reputation&lt;/strong&gt; brands.&lt;/p&gt;

&lt;p&gt;Another ranks &lt;strong&gt;monthly traffic&lt;/strong&gt;. A third mixes both and folds in &lt;strong&gt;aggregators&lt;/strong&gt;. That is useful brainstorming. It is a weak foundation for a production &lt;strong&gt;news source allowlist&lt;/strong&gt;, where the publisher set must stay stable across Articles and Stories jobs.&lt;/p&gt;

&lt;p&gt;We compared ChatGPT, Claude, and Gemini top-8 answers, then lined them up against Perigon’s public &lt;strong&gt;top100&lt;/strong&gt; source group (ID &lt;strong&gt;15&lt;/strong&gt;, display name &lt;strong&gt;Most popular&lt;/strong&gt; - about &lt;strong&gt;94&lt;/strong&gt; domains). Across the three AI lists, only &lt;strong&gt;three&lt;/strong&gt; publishers appear on every roster: &lt;strong&gt;BBC&lt;/strong&gt;, &lt;strong&gt;The New York Times&lt;/strong&gt;, and &lt;strong&gt;CNN&lt;/strong&gt;. Everything else is a bias toward wires, portals, or partisan traffic leaders.&lt;/p&gt;

&lt;p&gt;This article covers:&lt;/p&gt;

&lt;p&gt;Why AI-generated &lt;strong&gt;best news sources&lt;/strong&gt; lists disagree&lt;/p&gt;

&lt;p&gt;What top100 covers that short lists drop&lt;/p&gt;

&lt;p&gt;How to monitor general news with that source group&lt;/p&gt;

&lt;p&gt;How to &lt;strong&gt;filter news by source&lt;/strong&gt;, topic, company, and date inside the pack&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try it live:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox?endpoint=sources" rel="noopener noreferrer"&gt;Sources sandbox&lt;/a&gt; · &lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://perigon.io/docs/api/sources" rel="noopener noreferrer"&gt;Sources and source groups&lt;/a&gt; · &lt;strong&gt;Plans:&lt;/strong&gt; &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vertical packs (different SERPs): &lt;a href="https://perigon.io/blog/best-financial-news-sources-top25finance" rel="noopener noreferrer"&gt;top25finance&lt;/a&gt; · &lt;a href="https://perigon.io/blog/healthcare-news-compare-top-trade-publications" rel="noopener noreferrer"&gt;healthcare trade pubs&lt;/a&gt;. This page owns the general &lt;strong&gt;most popular&lt;/strong&gt; pack only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI top-8 news lists are not a production allowlist
&lt;/h2&gt;

&lt;p&gt;The disagreement is not noise - each model answers a different reading of “top”:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt; leans &lt;strong&gt;influence and international desks&lt;/strong&gt;: Reuters, Associated Press, BBC, NYT, Washington Post, WSJ, Bloomberg, CNN. Strong for wires and prestige brands; light on pure traffic portals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude&lt;/strong&gt; leans &lt;strong&gt;Similarweb-style traffic&lt;/strong&gt;: Yahoo (including Japan), BBC, NYT, CNN, Fox News, USA Today, Daily Mail. Strong for visit volume; includes aggregator/portal surfaces that are not traditional newsrooms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini&lt;/strong&gt; mixes both and adds &lt;strong&gt;The Guardian&lt;/strong&gt;, Reuters, Yahoo, and &lt;strong&gt;MSN&lt;/strong&gt; - calling out that portals often rank high because they are homepages, while original reporting still comes from wires and newspapers.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;What AI does&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;What breaks in production&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Returns a neat “top 8”&lt;/td&gt;
&lt;td&gt;Misses local metros, lifestyle desks, and half the opinion spectrum your product may need&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sounds authoritative&lt;/td&gt;
&lt;td&gt;Different model → different publishers → different alert quality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Optimizes for one ranking lens&lt;/td&gt;
&lt;td&gt;Traffic ≠ reputation ≠ “trusted” - and none of those lenses equals a maintained group name&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Treat LLM shortlists as &lt;strong&gt;research signals&lt;/strong&gt;. Do not paste them into source= forever and call the feed done.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fuller picture: top100 (most popular)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Field&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Value&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Name&lt;/td&gt;
&lt;td&gt;top100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Display name&lt;/td&gt;
&lt;td&gt;Most popular&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source group ID&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Size&lt;/td&gt;
&lt;td&gt;~94 domains&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;Top most popular sources globally&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Pass sourceGroup=top100 on Articles (/v1/all), Headlines, or Stories. Inspect members via the Sources API with the same group name - without dumping every domain into this article twice.&lt;/p&gt;

&lt;p&gt;Rather than stopping at eight household names, the group spans the lanes that show up when teams actually ship a &lt;strong&gt;popular news&lt;/strong&gt; feed:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1) Wires and global brands&lt;/strong&gt; - Reuters, AP, BBC, NYT, Washington Post, WSJ, Bloomberg, CNN, and peers the reputation-style lists already name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) High-traffic digital and cable&lt;/strong&gt; - Fox News, USA Today, Daily Mail, HuffPost, NBC, CBS, ABC, and similar mass-reach desks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) U.S. metro and regional papers&lt;/strong&gt; - Los Angeles Times, Boston Globe, Chicago Tribune, Seattle Times, Miami Herald, and other city desks short “global top 8” lists almost never assemble.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4) Business and markets adjacent&lt;/strong&gt; - CNBC, Forbes, Yahoo Finance, Quartz - without requiring the finance-only top25finance pack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5) Opinion and partisan digital&lt;/strong&gt; - outlets across the spectrum (from Breitbart and Daily Wire to Daily Kos and Raw Story) so a “popular” feed is not accidentally center-only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6) Lifestyle and culture&lt;/strong&gt; - People, BuzzFeed, Cosmopolitan, Variety, Vanity Fair - the consumer layer pure politics lists drop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7) International English desks&lt;/strong&gt; - Al Jazeera, South China Morning Post, The Guardian, Telegraph, and others beyond a U.S.-cable shortlist.&lt;/p&gt;

&lt;h3&gt;
  
  
  How the group compares with the AI picks
&lt;/h3&gt;

&lt;p&gt;Almost every domain the three models named is already inside top100. The practical gaps run the other way: short lists never assemble metro papers, lifestyle titles, or the broader opinion set that a “most popular globally” pack includes.&lt;/p&gt;

&lt;p&gt;Honest misses relative to the AI traffic answers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;yahoo.co.jp&lt;/strong&gt; (Claude’s global traffic leader) is not in this snapshot - the pack includes yahoo.com / finance.yahoo.com instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;msn.com&lt;/strong&gt; (Gemini) is not listed as such; the group includes Microsoft’s ms.now surface. If you need a specific portal hostname, add it with source= or a private group.&lt;/p&gt;

&lt;p&gt;That is the point of a curated &lt;strong&gt;sourceGroup&lt;/strong&gt;: one reusable name for the popular-publisher fence, not a chat paste that changes when you switch models.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to monitor news with top100
&lt;/h2&gt;

&lt;p&gt;Scope &lt;strong&gt;popular publishers&lt;/strong&gt; first, then keywords or entities. Without a publisher gate, open-web search for politics, markets, or breaking topics pulls blogs, SEO farms, and press-release mills alongside serious desks. Lock the outer fence with sourceGroup=top100, then narrow.&lt;/p&gt;

&lt;p&gt;Pattern on Articles: pass sourceGroup set to top100, add q for the beat you care about, and poll with from / to or addDateFrom for digests. For a company or person watch inside popular outlets, stack companySymbol / companyId or personWikidataId the same way - the Company and People guides own the full entity cookbook; here the group is the allowlist.&lt;/p&gt;

&lt;p&gt;Use the same sourceGroup on the &lt;strong&gt;Stories API&lt;/strong&gt; when one event reprints across many major outlets - you track the narrative cluster once instead of every mirror URL. For a short briefing of that filtered set, pass results into Search Summarizer. Vertical desks that need trade pubs only should use the industry packs (finance, healthcare, automotive, industrial) rather than stretching top100 into a niche B2B feed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Filter popular news by source, topic, company, and date
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Goal&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Mechanism&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Notes for general feeds&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Popular-publisher allowlist&lt;/td&gt;
&lt;td&gt;sourceGroup=top100&lt;/td&gt;
&lt;td&gt;Most-popular global pack (15)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off domain&lt;/td&gt;
&lt;td&gt;source / excludeSource&lt;/td&gt;
&lt;td&gt;Portals or titles missing from the snapshot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who is mentioned&lt;/td&gt;
&lt;td&gt;companyId / companySymbol / people filters&lt;/td&gt;
&lt;td&gt;Inside the group&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What it is about&lt;/td&gt;
&lt;td&gt;topic, category, taxonomy&lt;/td&gt;
&lt;td&gt;e.g. Politics slice inside top100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When&lt;/td&gt;
&lt;td&gt;from / to / addDateFrom&lt;/td&gt;
&lt;td&gt;Digests and incremental monitors&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Creating private forks of the pack (your own curated list on top of or instead of top100) lives in the Source Groups guide - this page only applies the public name.&lt;/p&gt;

&lt;h2&gt;
  
  
  When an AI list is a brainstorm vs when you need top100
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Situation&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Prefer&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ideation slide (“brands we recognize”)&lt;/td&gt;
&lt;td&gt;AI shortlist - then verify&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production &lt;strong&gt;best news sources&lt;/strong&gt; feeds and alerts&lt;/td&gt;
&lt;td&gt;top100 (15)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Finance-only or healthcare-only desk&lt;/td&gt;
&lt;td&gt;Vertical pack (top25finance, healthcare trade pubs, …)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Must-have portal hostname absent from the ~94&lt;/td&gt;
&lt;td&gt;Private group or source=&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Publisher metadata (geography, paywall, traffic)&lt;/td&gt;
&lt;td&gt;Sources API + group name&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Scale inside the pack (last 30 days)
&lt;/h2&gt;

&lt;p&gt;Live Articles counts for &lt;strong&gt;2026-06-19&lt;/strong&gt; through &lt;strong&gt;2026-07-19&lt;/strong&gt; (pubDate window):&lt;/p&gt;

&lt;p&gt;About &lt;strong&gt;604,000&lt;/strong&gt; articles matched sourceGroup=top100.&lt;/p&gt;

&lt;p&gt;About &lt;strong&gt;28 million&lt;/strong&gt; articles matched an open q=* baseline in the same window - so the popular pack is a small, high-signal slice of total index volume (on the order of &lt;strong&gt;2%&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;About &lt;strong&gt;110,000&lt;/strong&gt; of the top100 hits also carried category &lt;strong&gt;Politics&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;About &lt;strong&gt;38,500&lt;/strong&gt; Stories clusters matched sourceGroup=top100 in the same window - useful when you care about narrative heat, not every URL.&lt;/p&gt;

&lt;p&gt;Round large numResults in product copy; very large baselines can sit near plan or index caps, so prefer the relative comparison (popular pack vs open web) over treating any single integer as exact forever.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;p&gt;AI &lt;strong&gt;best news sources&lt;/strong&gt; top-8 lists disagree because they optimize for reputation, traffic, or a mix - only BBC, NYT, and CNN were unanimous across the three we compared.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;top100&lt;/strong&gt; (15) is the maintained &lt;strong&gt;most popular&lt;/strong&gt; allowlist (~94 domains): wires, national desks, metros, opinion, lifestyle, and international English - not eight chat suggestions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filter news by source&lt;/strong&gt; with sourceGroup=top100, then stack q, entities, category, and dates for desk-specific feeds.&lt;/p&gt;

&lt;p&gt;Use LLM lists to brainstorm; use the curated group for production. For industry-only SERPs, switch to the matching vertical pack instead of overloading top100.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Get started:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox?endpoint=sources" rel="noopener noreferrer"&gt;Sources sandbox&lt;/a&gt; · &lt;a href="https://perigon.io/docs/api/sources" rel="noopener noreferrer"&gt;Sources and source groups&lt;/a&gt; · &lt;a href="https://perigon.io/reference" rel="noopener noreferrer"&gt;API reference&lt;/a&gt; · &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>news</category>
      <category>api</category>
      <category>newsmonitoring</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Left vs Right Political Journalists Compared</title>
      <dc:creator>Oleksyj Mokrousov</dc:creator>
      <pubDate>Tue, 28 Jul 2026 10:05:39 +0000</pubDate>
      <link>https://dev.to/alexperigon/left-vs-right-political-journalists-compared-1867</link>
      <guid>https://dev.to/alexperigon/left-vs-right-political-journalists-compared-1867</guid>
      <description>&lt;h2&gt;
  
  
  Building political media monitoring without ideology fields
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffm07vnl05y4m8crouz54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffm07vnl05y4m8crouz54.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Teams searching for &lt;strong&gt;left vs right political journalists&lt;/strong&gt; usually need a &lt;strong&gt;political monitoring system&lt;/strong&gt;: two reusable byline datasets, transparent rules, and stable IDs they can apply on article search. They do not need an editorial ranking of reporters.&lt;/p&gt;

&lt;p&gt;Perigon does &lt;strong&gt;not&lt;/strong&gt; assign left/right ideology to journalists. There is no journalist-level lean parameter. Any “left vs right” framing in your product comes from &lt;strong&gt;publisher clusters you define&lt;/strong&gt;, then from journalists whose profiles match those publishers. This guide teaches that reproducible methodology - data quality, verification, and &lt;strong&gt;journalist identity resolution&lt;/strong&gt; - so the dataset stays accurate when people change employers.&lt;/p&gt;

&lt;p&gt;Why are keyword searches unreliable for &lt;strong&gt;partisan media reporters&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;How do customer-defined publisher clusters create comparable datasets?&lt;/p&gt;

&lt;p&gt;What is the end-to-end workflow from cluster → resolved IDs → Articles?&lt;/p&gt;

&lt;p&gt;How do you keep datasets trustworthy as affiliations change?&lt;/p&gt;

&lt;p&gt;When should you use Journalists vs Sources vs People?&lt;/p&gt;

&lt;p&gt;The sections below answer each in order. Full Journalists parameter reference lives in the Journalists API guide and the Entities docs linked above; this page owns the monitoring methodology.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox?endpoint=journalists" rel="noopener noreferrer"&gt;Journalists sandbox&lt;/a&gt; · &lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://perigon.io/docs/api/entities" rel="noopener noreferrer"&gt;Entities&lt;/a&gt; · &lt;strong&gt;Pricing:&lt;/strong&gt; &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why keyword ideology search fails
&lt;/h2&gt;

&lt;p&gt;Searching q for “liberal,” “conservative,” “left,” or “right” does not produce a defensible &lt;strong&gt;partisan journalist list&lt;/strong&gt;. Those tokens appear in quotes, horse-race copy, sports “left tackle,” and photo captions. Different people share the same byline string. Keyword hits are not reproducible ideology membership.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Publisher clustering&lt;/strong&gt; outperforms keyword-based ideology search because membership is explicit: you decide which domains belong in Pack A and Pack B, document that choice, and resolve journalists against source (optionally with category=Politics, country=us, or label = Opinion). Two engineers re-running the same pack definitions get the same discovery inputs. That is the foundation of &lt;strong&gt;media lean journalist discovery&lt;/strong&gt; as engineering practice - not as a claim about individuals’ beliefs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Publisher clusters are defined by the customer
&lt;/h2&gt;

&lt;p&gt;In this workflow, “left” and “right” are &lt;strong&gt;labels on your publisher packs&lt;/strong&gt;, not attributes returned by the Journalists API.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Concept&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Owner&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Which domains sit in Pack A / Pack B&lt;/td&gt;
&lt;td&gt;Your product, research, or compliance rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Whether Opinion-heavy sites belong in a pack&lt;/td&gt;
&lt;td&gt;Your product&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Journalist profile fields (title, topSources, id)&lt;/td&gt;
&lt;td&gt;Perigon index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ideology of a person&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Not&lt;/strong&gt; provided by the API&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Different organizations choose different outlet lists for good reasons: brand risk, geographic focus, inclusion of opinion vs newsroom domains, licensed publishers, or internal media-bias taxonomies. Two customers can both build &lt;strong&gt;left vs right journalists&lt;/strong&gt; monitors and disagree on whether a given domain belongs in a pack. That disagreement is expected. Document the pack version (domains + date + rationale) next to any saved ID list so audits can reproduce results.&lt;/p&gt;

&lt;p&gt;Example pack &lt;em&gt;shapes&lt;/em&gt; (illustrative only - replace with your approved domains):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Your label&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Role in the system&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Example domain pattern&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pack R&lt;/td&gt;
&lt;td&gt;Customer-defined “right” publisher set&lt;/td&gt;
&lt;td&gt;Domains your policy treats as that cluster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pack L&lt;/td&gt;
&lt;td&gt;Customer-defined “left” publisher set&lt;/td&gt;
&lt;td&gt;Domains your policy treats as that cluster&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Do not treat any sample domain list in a blog post as Perigon’s official ideology map. The API only answers: which journalists are associated with the publishers you queried.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproducible workflow: cluster → resolve → verify → save → apply
&lt;/h2&gt;

&lt;p&gt;Use the same pipeline for both packs. Keep pack membership metadata on every saved row.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Define publisher clusters&lt;/strong&gt;&lt;br&gt;
Store Pack L and Pack R as versioned domain lists (and optional rules such as “Opinion allowed”).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resolve journalists&lt;/strong&gt;&lt;br&gt;
On /v1/journalists/all, query with source set to the pack’s domains. Narrow with category, country, label, or minMonthlyPosts as your quality bar requires. For known bylines, use name / twitter and then verify.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify before save&lt;/strong&gt;&lt;br&gt;
For each candidate, confirm title and topSources still match the pack you intend. Reject near-matches, empty activity, or profiles whose top publishers fall outside the pack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Save reusable journalist IDs&lt;/strong&gt;&lt;br&gt;
Persist journalistId, pack label, pack version, verification timestamp, and optionally the topSources snapshot you accepted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use journalistId on Articles&lt;/strong&gt;&lt;br&gt;
On /v1/all, pass journalistId (OR) or excludeJournalistId (AND) to build feeds. The ID identifies the byline match - it does &lt;strong&gt;not&lt;/strong&gt; encode ideology. Ideology, if any, remains the pack label you attached in step 4.&lt;/p&gt;

&lt;p&gt;That pipeline is the primary topic of this page: &lt;strong&gt;building publisher-based journalist datasets&lt;/strong&gt; for political media intelligence, while still matching search intent around &lt;strong&gt;left vs right political journalists&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Journalist identity resolution and byline disambiguation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Journalist identity resolution&lt;/strong&gt; means mapping a human byline to a single stable id in the journalist index. Common failure modes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Failure&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Mitigation&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Shared or similar names&lt;/td&gt;
&lt;td&gt;Compare title, Twitter handle, and topSources; do not pick the first row&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Syndication noise&lt;/td&gt;
&lt;td&gt;High post volume across many domains can pull in off-pack publishers - require pack overlap in topSources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Empty or stale profiles&lt;/td&gt;
&lt;td&gt;Prefer profiles with recent updatedAt / non-zero avgMonthlyPosts when activity matters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain filter returns zero&lt;/td&gt;
&lt;td&gt;Some brands publish under alternate hosts; fall back to name resolve, then verify sources&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Byline disambiguation&lt;/strong&gt; is a data-quality gate, not a political judgment. If title and topSources do not support membership in the customer pack, do not save the ID into that pack’s dataset.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data quality: verify title and topSources every time
&lt;/h2&gt;

&lt;p&gt;Before a profile enters production:&lt;/p&gt;

&lt;p&gt;1) Read title - does the role match the desk you monitor (politics, opinion, correspondence), or is it sports/lifestyle collision?&lt;/p&gt;

&lt;p&gt;2) Read topSources - do the leading domains intersect your pack version?&lt;/p&gt;

&lt;p&gt;3) Optionally check topLabels / topTopics as secondary signals, not as ideology classifiers.&lt;/p&gt;

&lt;p&gt;4) Record who verified the row and when.&lt;/p&gt;

&lt;p&gt;Skipping verification is how &lt;strong&gt;partisan media reporters&lt;/strong&gt; datasets silently fill with wrong people. Reproducibility requires the verification step to be part of the written method, not an optional polish.&lt;/p&gt;

&lt;h2&gt;
  
  
  Affiliations change: refresh saved journalist IDs
&lt;/h2&gt;

&lt;p&gt;Journalists change employers, shows, and syndication patterns. A journalistId remains a useful primary key, but pack membership is time-bound:&lt;/p&gt;

&lt;p&gt;Schedule a periodic refresh (for example monthly or each pack-version bump).&lt;/p&gt;

&lt;p&gt;Re-fetch /v1/journalists/{id} or re-run name resolve.&lt;/p&gt;

&lt;p&gt;Re-check title and topSources against the current pack.&lt;/p&gt;

&lt;p&gt;Move IDs between Pack L and Pack R only when your policy says the publisher footprint changed - and log the change.&lt;/p&gt;

&lt;p&gt;Retire IDs that no longer meet the quality bar.&lt;/p&gt;

&lt;p&gt;Evergreen monitors depend on this maintenance loop. Static “lists of left vs right journalists” scraped once will drift.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrate Journalists API results with the Articles API
&lt;/h2&gt;

&lt;p&gt;After IDs are verified and labeled with a pack version:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Articles parameter&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Use in political monitoring&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;journalistId&lt;/td&gt;
&lt;td&gt;Include bylines from one pack (or a union you explicitly label)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;excludeJournalistId&lt;/td&gt;
&lt;td&gt;Drop bylines that flood or fail QA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;author / excludeAuthor&lt;/td&gt;
&lt;td&gt;Name-only fallback when an ID is not yet resolved - weaker than IDs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Combine with your usual article filters (q, dates, category) for event language. Keep pack ideology metadata in &lt;em&gt;your&lt;/em&gt; datastore; do not expect Articles responses to return left/right on the journalist object.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use Journalists vs Sources vs People
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Monitoring question&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;API family&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Which &lt;strong&gt;writers&lt;/strong&gt; match our publisher packs?&lt;/td&gt;
&lt;td&gt;Journalists → save journalistId&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Which &lt;strong&gt;publishers&lt;/strong&gt; define the packs / outlet skew?&lt;/td&gt;
&lt;td&gt;Sources / source groups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Which &lt;strong&gt;people&lt;/strong&gt; are mentioned as subjects (candidates, officials)?&lt;/td&gt;
&lt;td&gt;People (personName, personWikidataId)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mixing these layers is a common design bug: treating a mentioned politician as a byline, or treating a source-group lean pack as a journalist ideology field. Keep writer, publisher, and subject as separate allowlists.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resolve smoke tests (not rankings)
&lt;/h2&gt;

&lt;p&gt;The following IDs are &lt;strong&gt;resolution examples&lt;/strong&gt; from live lookups - used to illustrate verification, not to rank or endorse anyone. Each row is “this profile resolved; confirm topSources against &lt;em&gt;your&lt;/em&gt; pack before production use.” Ideology is only whatever pack label &lt;em&gt;you&lt;/em&gt; attach after verification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After querying a customer Pack R (illustrative domains such as foxnews.com / nationalreview.com / thefederalist.com / washingtonexaminer.com):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Resolved id&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Verification cue&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bret Baier&lt;/td&gt;
&lt;td&gt;377c544662ed4358921cba67a336ef4f&lt;/td&gt;
&lt;td&gt;Title + foxnews.com in topSources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Byron York&lt;/td&gt;
&lt;td&gt;677cd5fe712f44b680f7ec815edbd365&lt;/td&gt;
&lt;td&gt;washingtonexaminer.com in topSources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rich Lowry&lt;/td&gt;
&lt;td&gt;67a37bc03b434bd0a481d52fdda47b56&lt;/td&gt;
&lt;td&gt;nationalreview.com in topSources&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;After querying a customer Pack L (illustrative domains such as nytimes.com / washingtonpost.com / huffpost.com):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Resolved id&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Verification cue&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jamelle Bouie&lt;/td&gt;
&lt;td&gt;891fe2e6b12a4518b61d045f4172fad5&lt;/td&gt;
&lt;td&gt;Columnist title + nytimes.com in topSources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jennifer Rubin&lt;/td&gt;
&lt;td&gt;dff54a11b7954148b08a39e07403b035&lt;/td&gt;
&lt;td&gt;Opinion-writer title; re-check live topSources before save&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rachel Maddow&lt;/td&gt;
&lt;td&gt;e93c35d952cc4dd88d68c38b748f3ca4&lt;/td&gt;
&lt;td&gt;Host title; confirm current topSources (domain filters for some TV brands can return empty - name resolve + verify)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If verification fails, do not keep the ID in that pack’s dataset. Replace with another resolved profile that passes your gates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;p&gt;Search intent for &lt;strong&gt;left vs right political journalists&lt;/strong&gt; is best served by &lt;strong&gt;publisher-cluster datasets&lt;/strong&gt;, not keyword ideology queries.&lt;/p&gt;

&lt;p&gt;Perigon does not label journalists as left or right; pack definitions and ideology labels are yours.&lt;/p&gt;

&lt;p&gt;Workflow: define clusters → resolve → verify title / topSources → save versioned IDs → apply journalistId on Articles.&lt;/p&gt;

&lt;p&gt;Refresh saved IDs as affiliations and topSources change.&lt;/p&gt;

&lt;p&gt;Use Journalists for writers, Sources for publishers, People for mentioned subjects.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Get started:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox?endpoint=journalists" rel="noopener noreferrer"&gt;Journalists sandbox&lt;/a&gt; · &lt;a href="https://perigon.io/docs/api/entities" rel="noopener noreferrer"&gt;Entities&lt;/a&gt; · &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>news</category>
      <category>api</category>
      <category>newsmonitoring</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Perigon SDK Overview: Official Client Libraries for the News API</title>
      <dc:creator>Oleksyj Mokrousov</dc:creator>
      <pubDate>Tue, 28 Jul 2026 10:04:08 +0000</pubDate>
      <link>https://dev.to/alexperigon/perigon-sdk-overview-official-client-libraries-for-the-news-api-1gbo</link>
      <guid>https://dev.to/alexperigon/perigon-sdk-overview-official-client-libraries-for-the-news-api-1gbo</guid>
      <description>&lt;h2&gt;
  
  
  The real question is not “is there an SDK?”
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmpta0cwbrmjzgkbmw6gm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmpta0cwbrmjzgkbmw6gm.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most teams already know Perigon publishes an &lt;strong&gt;official news SDK&lt;/strong&gt;. The harder &lt;strong&gt;API onboarding&lt;/strong&gt; question is whether your product should call the News API through that &lt;strong&gt;software development kit&lt;/strong&gt; or through raw &lt;strong&gt;HTTP&lt;/strong&gt; / REST forever.&lt;/p&gt;

&lt;p&gt;This page is only a &lt;strong&gt;SDK vs HTTP&lt;/strong&gt; / &lt;strong&gt;REST vs SDK&lt;/strong&gt; decision guide. Exact packages, install steps, and typed-client ergonomics live on &lt;a href="https://perigon.io/docs/api/perigon-sdks" rel="noopener noreferrer"&gt;Perigon SDKs&lt;/a&gt; plus the sibling install and typed-client posts. Articles search design stays on the practical news API guide.&lt;/p&gt;

&lt;p&gt;What problem does a &lt;strong&gt;Perigon SDK&lt;/strong&gt; actually solve on the &lt;strong&gt;API integration path&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;When does a &lt;strong&gt;multi-language SDK&lt;/strong&gt; change the build-vs-buy transport decision?&lt;/p&gt;

&lt;p&gt;When should you &lt;strong&gt;choose news SDK&lt;/strong&gt; clients instead of raw REST?&lt;/p&gt;

&lt;p&gt;Which architecture tradeoffs still favor owning HTTP yourself?&lt;/p&gt;

&lt;p&gt;The sections below answer each in order.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the docs:&lt;/strong&gt; &lt;a href="https://perigon.io/docs/api/perigon-sdks" rel="noopener noreferrer"&gt;Perigon SDKs&lt;/a&gt; · &lt;strong&gt;Developer home:&lt;/strong&gt; &lt;a href="https://perigon.io/docs/api/getting-started" rel="noopener noreferrer"&gt;Getting started&lt;/a&gt; · &lt;strong&gt;Compare plans:&lt;/strong&gt; &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the Perigon SDK for, architecturally?
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Perigon SDK&lt;/strong&gt; is Perigon's &lt;strong&gt;official news SDK&lt;/strong&gt;: maintained &lt;strong&gt;news API client libraries&lt;/strong&gt; that sit between your application and the REST News API. From an architecture view, the SDK is a &lt;strong&gt;transport abstraction&lt;/strong&gt; - your code talks to a client object; the client owns serialization, auth attachment, and response decoding.&lt;/p&gt;

&lt;p&gt;That matters for &lt;strong&gt;developer productivity&lt;/strong&gt; and long-term maintenance more than for “having a package.” Without an official client, every service invents its own thin wrapper. Six months later you have three incompatible helpers, none of which track docs changes. With the SDK, onboarding a new engineer means “use the supported client,” not “copy the curl from Slack.”&lt;/p&gt;

&lt;p&gt;The SDK is not a different API and not a substitute for learning which filters to pass. It changes &lt;em&gt;who maintains the HTTP edge&lt;/em&gt; - Perigon’s &lt;strong&gt;official client libraries&lt;/strong&gt; versus your team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-language SDK coverage as a staffing decision
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;multi-language SDK&lt;/strong&gt; is less about collecting languages and more about matching the runtimes you already staff. If your backend is already standardized on a supported stack, picking the &lt;strong&gt;news API SDK&lt;/strong&gt; for that stack is usually the default &lt;strong&gt;API integration path&lt;/strong&gt;. If your edge workers, ETL jobs, and mobile backends each speak a different language - and only one of them has an official client - you need an explicit policy: SDK where supported, thin REST where not, rather than forcing one language’s package into every process.&lt;/p&gt;

&lt;p&gt;Unsupported runtimes are not a failure of the SDK; they are a signal to stay on HTTP (or request another binding via the SDKs docs) instead of pretending a missing client exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  REST vs SDK: decision scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Situation&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Prefer&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Spike in Postman / curl to learn filters&lt;/td&gt;
&lt;td&gt;Raw &lt;strong&gt;HTTP&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Fastest feedback loop; no package lifecycle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production service on a supported runtime&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Perigon SDK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lower maintenance; shared patterns across teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Many services, one platform team&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;SDK&lt;/strong&gt; (&lt;strong&gt;client library vs REST&lt;/strong&gt;)&lt;/td&gt;
&lt;td&gt;One supported onboarding path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exotic runtime or strict “no third-party clients” policy&lt;/td&gt;
&lt;td&gt;HTTP you own&lt;/td&gt;
&lt;td&gt;You accept wrapper maintenance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query design still fluid&lt;/td&gt;
&lt;td&gt;Learn filters first, then lock transport&lt;/td&gt;
&lt;td&gt;Do not block product learning on packaging&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;SDK vs raw REST&lt;/strong&gt; is rarely about feature parity - both hit the same endpoints. The tradeoff is &lt;strong&gt;maintenance&lt;/strong&gt;, &lt;strong&gt;onboarding&lt;/strong&gt;, and &lt;strong&gt;long-term support&lt;/strong&gt;: who upgrades when parameters or models change, and how many home-grown clients you are willing to babysit.&lt;/p&gt;

&lt;p&gt;Prefer the SDK when transport should be boring and identical across services. Prefer HTTP when you need maximum control, minimal dependencies, or a runtime outside the official set.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture tradeoffs that still favor owning HTTP
&lt;/h2&gt;

&lt;p&gt;Some teams should keep raw REST even when an SDK exists:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1) Compliance / supply-chain rules&lt;/strong&gt; that freeze third-party client libraries&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) Ultra-thin edge workers&lt;/strong&gt; where every dependency byte is budgeted&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) Polyglot glue&lt;/strong&gt; that already centralizes HTTP in an internal gateway - the gateway speaks REST; apps never see Perigon directly&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4) Experimental research notebooks&lt;/strong&gt; that change weekly and should not pin SDK majors&lt;/p&gt;

&lt;p&gt;Those are conscious &lt;strong&gt;HTTP client vs SDK&lt;/strong&gt; choices. If none of them apply, choosing the &lt;strong&gt;official client libraries&lt;/strong&gt; is usually the lower-risk default.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to sequence the decision (without installing anything here)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Decision&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Where to go next&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SDK vs HTTP for this service&lt;/td&gt;
&lt;td&gt;This overview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How to install and authenticate safely&lt;/td&gt;
&lt;td&gt;SDK install best-practices guide&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Why typed clients help large codebases&lt;/td&gt;
&lt;td&gt;Typed SDK clients / DX guide&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Which filters and feeds to build&lt;/td&gt;
&lt;td&gt;&lt;a href="https://perigon.io/blog/google-has-no-news-api-perigon-does-search-articles-apply-filters-and-build-feeds" rel="noopener noreferrer"&gt;Practical news API guide&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;p&gt;Treat the &lt;strong&gt;Perigon SDK&lt;/strong&gt; as transport ownership and &lt;strong&gt;developer productivity&lt;/strong&gt;, not as a second News API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-language SDK&lt;/strong&gt; coverage answers “can my staffed runtime use an official client?” - not “which command do I run?”&lt;/p&gt;

&lt;p&gt;Prefer the SDK for production on supported stacks; prefer raw REST for spikes, exotic runtimes, or deliberate HTTP ownership.&lt;/p&gt;

&lt;p&gt;This page only answers &lt;strong&gt;when to use SDK&lt;/strong&gt; vs HTTP; packages, keys, and typed DX live elsewhere.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Get started:&lt;/strong&gt; &lt;a href="https://perigon.io/docs/api/perigon-sdks" rel="noopener noreferrer"&gt;Perigon SDKs&lt;/a&gt; · &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>news</category>
      <category>api</category>
      <category>newsmonitoring</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Monitor Middle East Conflict News</title>
      <dc:creator>Oleksyj Mokrousov</dc:creator>
      <pubDate>Tue, 28 Jul 2026 10:02:34 +0000</pubDate>
      <link>https://dev.to/alexperigon/monitor-middle-east-conflict-news-4698</link>
      <guid>https://dev.to/alexperigon/monitor-middle-east-conflict-news-4698</guid>
      <description>&lt;h2&gt;
  
  
  Why teams monitor Middle East conflict news
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9avcxswv46qeczn69uqt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9avcxswv46qeczn69uqt.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Middle East is rarely a single story. On any given week, coverage spans &lt;strong&gt;Israel-Gaza&lt;/strong&gt;, &lt;strong&gt;Iran&lt;/strong&gt; and its nuclear file, &lt;strong&gt;Lebanon and Hezbollah&lt;/strong&gt;, &lt;strong&gt;Red Sea shipping&lt;/strong&gt; attacks, and the diplomacy around all of them - each moving at a different speed. Analysts, risk teams, and newsrooms that watch the region need to catch escalations early without drowning in duplicate wire copy, and they need to tell a genuine turning point apart from routine daily volume.&lt;/p&gt;

&lt;p&gt;Keyword alerts alone break down here. A single broad term returns hundreds of thousands of articles a month, most of them reprints of the same handful of developments. The job is to watch &lt;strong&gt;several theaters in parallel&lt;/strong&gt;, get told when something changes, and keep a running narrative for each front.&lt;/p&gt;

&lt;p&gt;What makes &lt;strong&gt;Middle East conflict news&lt;/strong&gt; hard to monitor?&lt;/p&gt;

&lt;p&gt;How do you set up a Signal to watch the region on perigon.io/home?&lt;/p&gt;

&lt;p&gt;Which Articles and Stories filters scope a multi-theater beat?&lt;/p&gt;

&lt;p&gt;When should you rely on Signals vs Articles vs Stories?&lt;/p&gt;

&lt;p&gt;The sections below answer each in order.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Set up a Signal:&lt;/strong&gt; &lt;a href="https://perigon.io/home" rel="noopener noreferrer"&gt;perigon.io/home&lt;/a&gt; · &lt;strong&gt;Try the API:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox?endpoint=articles" rel="noopener noreferrer"&gt;Articles sandbox&lt;/a&gt; · &lt;strong&gt;Compare plans:&lt;/strong&gt; &lt;a href="https://perigon.io/products/pricing/signals" rel="noopener noreferrer"&gt;Signals pricing&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What monitoring the region means in practice
&lt;/h2&gt;

&lt;p&gt;There are two distinct jobs, and they map to two different tools.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Signal&lt;/strong&gt; is a continuous watch. You describe the region and the kinds of developments you care about in plain English, and it keeps working in the background - delivering &lt;strong&gt;Middle East war alerts&lt;/strong&gt; in real time or as a scheduled briefing. That is the difference from a one-off search: you set intent once, and coverage comes to you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stories&lt;/strong&gt; are the momentum layer. Perigon clusters related articles into a single evolving narrative, so an escalation that generates thousands of articles shows up as one trackable cluster you can follow over time. That is what makes &lt;strong&gt;regional conflict monitoring&lt;/strong&gt; manageable across five theaters at once.&lt;/p&gt;

&lt;p&gt;Use Signals for the live watch, Articles for precise historical queries, and Stories to see which fronts are actually accelerating.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set up a Signal
&lt;/h2&gt;

&lt;p&gt;Go to perigon.io/home and describe the beat in plain language - the assistant helps you refine scope, conditions, and how results are delivered (email, webhook, or a connector such as Slack). For a multi-theater region, name the fronts explicitly so nothing is dropped.&lt;/p&gt;

&lt;p&gt;Copy-paste starting points:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-time escalation alert&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Alert me to major escalations in the Middle East - airstrikes, ceasefire announcements, and cross-border attacks involving Israel, Gaza, Lebanon, Iran, or Red Sea shipping. Send each as it happens to my Slack channel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Morning regional briefing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every morning, summarize overnight developments across Israel-Gaza, Iran, Lebanon and Hezbollah, and Red Sea shipping. Group the summary by theater and include source links.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diplomacy and de-escalation watch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Track statements, resolutions, and inspections from the UN Security Council and the IAEA related to the Middle East, and flag any ceasefire talks or nuclear-inspection developments.&lt;/p&gt;

&lt;p&gt;Because escalations are event-like, Perigon delivers them in real time; a "summarize every morning" prompt is treated as a scheduled digest instead. You can run more than one Signal - a fast alert plus a calmer daily briefing is a common pairing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Theaters and institutions to scope
&lt;/h2&gt;

&lt;p&gt;A durable regional watch is organized by &lt;strong&gt;theater&lt;/strong&gt; and by the &lt;strong&gt;institutions&lt;/strong&gt; that shape de-escalation, not by whichever name is in today's headline. Evergreen fronts worth naming in a Signal or query:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Israel-Gaza&lt;/strong&gt; - the highest-volume front, covering military operations, humanitarian access, and ceasefire cycles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Iran&lt;/strong&gt; - the nuclear file, proxy networks, and sanctions-linked tensions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lebanon and Hezbollah&lt;/strong&gt; - cross-border exchanges and their spillover risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Red Sea shipping&lt;/strong&gt; - attacks on vessels near one of the world's busiest maritime corridors (a security and freight-disruption angle - for crude-price and energy-market coverage, use a dedicated oil/energy watch instead).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diplomacy&lt;/strong&gt; - the &lt;strong&gt;UN Security Council&lt;/strong&gt; and &lt;strong&gt;IAEA&lt;/strong&gt; as standing institutions whose statements and resolutions often mark turning points.&lt;/p&gt;

&lt;p&gt;Keeping these as roles and geographies - rather than one-off personalities - is what makes the Signal and the queries below reusable month after month.&lt;/p&gt;

&lt;h2&gt;
  
  
  Articles API recipes for the region
&lt;/h2&gt;

&lt;p&gt;On the Articles API (/v1/all), build one query per theater and keep them narrow with Boolean q. Pair Israel, Gaza, or Hamas with escalation terms like strike, ceasefire, or offensive; pair Iran with nuclear, sanctions, or proxy; pair Red Sea or Houthi with vessel, shipping, or attack. Add category set to Politics to bias toward hard-news coverage, and sortBy set to date for the newest first.&lt;/p&gt;

&lt;p&gt;To weight regional reporting, use sourceCountry for publisher geography or country for the story's associated country, and reach for language when you need Arabic-language or English-only slices. Stack from and to for a fixed window, or sortBy set to date with a rolling window for a live feed. Keep each theater as its own query so a spike in one front does not bury the others.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stories API recipes for tracking momentum
&lt;/h2&gt;

&lt;p&gt;The Stories API (/v1/stories/all) is where a multi-theater beat becomes readable. The same theater q you used on Articles returns &lt;strong&gt;clusters&lt;/strong&gt; instead of individual articles, so you follow a development as one narrative rather than re-reading a hundred reprints. Sort by article count or recency to surface the fastest-moving fronts, and use an updatedFrom window to see which clusters are still active rather than cooling off.&lt;/p&gt;

&lt;p&gt;The payoff is scale compression: broad theater keywords that return six-figure article counts collapse into a few hundred Stories clusters (see the numbers below). For how clustering groups related coverage into trackable narratives, see the &lt;a href="https://perigon.io/blog/news-stories-api-how-news-clustering-groups-related-articles-into-trackable-narratives" rel="noopener noreferrer"&gt;news clustering guide&lt;/a&gt;; this page keeps the focus on applying it to the region.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use Signals vs Articles vs Stories
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Goal&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Use&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Be told the moment a front escalates&lt;/td&gt;
&lt;td&gt;Signal (real-time)&lt;/td&gt;
&lt;td&gt;Continuous watch, delivered to inbox, Slack, or webhook&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A grouped daily read across theaters&lt;/td&gt;
&lt;td&gt;Signal (scheduled)&lt;/td&gt;
&lt;td&gt;One briefing, organized by front&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Precise historical or filtered query&lt;/td&gt;
&lt;td&gt;Articles API&lt;/td&gt;
&lt;td&gt;Full Boolean, category, geography, and date control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Follow one development over time&lt;/td&gt;
&lt;td&gt;Stories API&lt;/td&gt;
&lt;td&gt;Clustered narrative and momentum, not raw article volume&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;See which theater is accelerating&lt;/td&gt;
&lt;td&gt;Stories API&lt;/td&gt;
&lt;td&gt;Compare cluster counts and recency across fronts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Beat scale at a glance
&lt;/h2&gt;

&lt;p&gt;A few evergreen facts anchor why this beat needs structure: the region runs &lt;strong&gt;multiple simultaneous theaters&lt;/strong&gt;, the &lt;strong&gt;UN Security Council&lt;/strong&gt; carries standing authority over conflict resolution, the &lt;strong&gt;IAEA&lt;/strong&gt; monitors nuclear activity, and the &lt;strong&gt;Red Sea&lt;/strong&gt; remains one of the world's busiest shipping corridors - so a single week routinely produces parallel, fast-moving stories.&lt;/p&gt;

&lt;p&gt;The live index shows the volume problem directly. Over the 30 days ending July 17, 2026, broad theater keywords returned very large article counts - roughly &lt;strong&gt;345,000&lt;/strong&gt; for Iran-tensions terms, about &lt;strong&gt;222,000&lt;/strong&gt; for broad Middle East conflict terms, and around &lt;strong&gt;215,000&lt;/strong&gt; for Israel-Gaza terms - with Lebanon and Hezbollah near &lt;strong&gt;88,000&lt;/strong&gt;, Middle East coverage inside the Politics category about &lt;strong&gt;77,000&lt;/strong&gt;, regional institutions near &lt;strong&gt;59,000&lt;/strong&gt;, and Red Sea shipping around &lt;strong&gt;13,000&lt;/strong&gt;. (These are wide keyword slices, so treat them as relative signal, not precise tallies.)&lt;/p&gt;

&lt;p&gt;The Stories layer is what makes that tractable. Across the same window, those slices collapsed into a few hundred narrative clusters each - on the order of &lt;strong&gt;800&lt;/strong&gt; for Iran, &lt;strong&gt;600&lt;/strong&gt; for Israel-Gaza, &lt;strong&gt;570&lt;/strong&gt; for broad Middle East conflict, &lt;strong&gt;250&lt;/strong&gt; for Middle East politics, &lt;strong&gt;230&lt;/strong&gt; for Lebanon, &lt;strong&gt;140&lt;/strong&gt; for regional institutions, and about &lt;strong&gt;65&lt;/strong&gt; for Red Sea shipping. In other words, hundreds of thousands of articles became a few hundred stories to actually read.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Middle East conflict news&lt;/strong&gt; is a multi-theater beat - scope Israel-Gaza, Iran, Lebanon, and Red Sea shipping as separate fronts, not one keyword.&lt;/p&gt;

&lt;p&gt;Set an AI Signal on perigon.io/home for real-time &lt;strong&gt;Middle East war alerts&lt;/strong&gt; or a theater-grouped morning briefing.&lt;/p&gt;

&lt;p&gt;Use the Articles API for precise Boolean, category, geography, and date queries per front.&lt;/p&gt;

&lt;p&gt;Use the Stories API to turn six-figure article volume into a few hundred trackable clusters and see which theater is accelerating.&lt;/p&gt;

&lt;p&gt;Organize the watch around evergreen theaters and institutions (UN, IAEA) so your Signals and queries stay reusable.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Get started:&lt;/strong&gt; &lt;a href="https://perigon.io/home" rel="noopener noreferrer"&gt;perigon.io/home&lt;/a&gt; · &lt;a href="https://perigon.io/products/pricing/signals" rel="noopener noreferrer"&gt;Signals pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>news</category>
      <category>api</category>
      <category>newsmonitoring</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Request News Api to index Publisher</title>
      <dc:creator>Oleksyj Mokrousov</dc:creator>
      <pubDate>Mon, 27 Jul 2026 14:08:29 +0000</pubDate>
      <link>https://dev.to/alexperigon/request-news-api-to-index-publisher-1ihk</link>
      <guid>https://dev.to/alexperigon/request-news-api-to-index-publisher-1ihk</guid>
      <description>&lt;h2&gt;
  
  
  What to do when a publisher is missing from the news API
&lt;/h2&gt;

&lt;p&gt;Perigon indexes hundreds of thousands of publishers, but sometimes the one outlet your product depends on - a niche trade site, a regional paper, or your own brand site - is not in the results yet. The fastest fix is usually to ask Perigon to add it, then confirm whether that is a support request or a plan upgrade.&lt;/p&gt;

&lt;p&gt;This is a support and licensing guide, not an endpoint tutorial. It answers four questions:&lt;/p&gt;

&lt;p&gt;Why is the publisher I need missing from the news API?&lt;/p&gt;

&lt;p&gt;How do I ask Perigon to cover it - or add my own site?&lt;/p&gt;

&lt;p&gt;How do live chat and email support work?&lt;/p&gt;

&lt;p&gt;Which plans unlock request to index sources, an SLA, and a shared Slack channel?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check what's indexed:&lt;/strong&gt; &lt;a href="https://perigon.io/tools/source-explorer" rel="noopener noreferrer"&gt;Source Explorer&lt;/a&gt; · &lt;strong&gt;Ask for coverage or a demo:&lt;/strong&gt; &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt; · &lt;strong&gt;Source docs:&lt;/strong&gt; &lt;a href="https://perigon.io/docs/api/sources" rel="noopener noreferrer"&gt;Sources and source groups&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a publisher may be missing from the news API
&lt;/h2&gt;

&lt;p&gt;Before you file a request, confirm the outlet is genuinely absent rather than filtered out. A source can be:&lt;/p&gt;

&lt;p&gt;1) Indexed under a different domain or subdomain than the one you searched.&lt;/p&gt;

&lt;p&gt;2) Excluded by your current query filters.&lt;/p&gt;

&lt;p&gt;3) Present but low-volume, so it rarely surfaces.&lt;/p&gt;

&lt;p&gt;Search the domain in Source Explorer or the Sources API first. If it truly is not there, you are looking at one of two different needs - and they route differently.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;You want&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;This is&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;How to get it&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bundle domains that already exist into a reusable, named filter&lt;/td&gt;
&lt;td&gt;Custom Source Groups (self-serve)&lt;/td&gt;
&lt;td&gt;Source Groups API guide&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Perigon to ingest a publisher that is not in the index yet&lt;/td&gt;
&lt;td&gt;Request index for Sources (Commercial)&lt;/td&gt;
&lt;td&gt;Request via support or sales&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Put simply: Custom Source Groups organize sources Perigon already has, while Index request ask Perigon to add one it does not. This guide covers the second path. If the outlet is already indexed, skip the request and group it yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to request a publisher or add your own site
&lt;/h2&gt;

&lt;p&gt;Adding a publisher is a human review step, not a self-serve API call, so the request goes through Perigon's support channels. Contact support, describe the outlet, and explain why your feed needs it. Perigon then evaluates the source for ingestion. First-party requests - adding your own news site or brand blog - follow the same process as third-party outlets.&lt;/p&gt;

&lt;p&gt;Perigon can consider a range of publisher types, including:&lt;/p&gt;

&lt;p&gt;1) Mainstream and wire outlets&lt;/p&gt;

&lt;p&gt;2) Regional and local newspapers&lt;/p&gt;

&lt;p&gt;3) Niche and trade publications&lt;/p&gt;

&lt;p&gt;4) First-party sites you own and publish&lt;/p&gt;

&lt;p&gt;Eligibility for new sources depends on your plan (see below). If you are on a lower tier and need custom ingestion, the request naturally becomes a sales conversation about moving to Commercial.&lt;/p&gt;

&lt;h3&gt;
  
  
  What to include in your request
&lt;/h3&gt;

&lt;p&gt;A complete request is triaged faster. Include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Domain&lt;/strong&gt; - the exact publisher domain (for example example-tradedesk.com), plus any subdomains that carry articles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Publication name&lt;/strong&gt; - the readable outlet name so it can be matched or created.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reason&lt;/strong&gt; - the beat or use case, which helps prioritize the source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sample article URLs&lt;/strong&gt; - two or three live links that show the crawl target and article structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ownership&lt;/strong&gt; - for your own site, confirm you own the domain and can grant publishing access.&lt;/p&gt;

&lt;h2&gt;
  
  
  How live chat and email support work
&lt;/h2&gt;

&lt;p&gt;Perigon offers two ways to reach a human, and both work for a coverage request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live chat&lt;/strong&gt; opens from the contact widget on every page and routes by intent:&lt;/p&gt;

&lt;p&gt;Coverage requests - a missing publisher - go to support, where sources are evaluated.&lt;/p&gt;

&lt;p&gt;Plan-upgrade questions, such as unlocking New Sources on Commercial, go to sales.&lt;/p&gt;

&lt;p&gt;You can contact sales:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fperigon.io%2F_next%2Fimage%3Furl%3D%252Fapi%252Fmedia%252Ffile%252Fcontact%252Bform.jpg%26w%3D1200%26q%3D100" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fperigon.io%2F_next%2Fimage%3Furl%3D%252Fapi%252Fmedia%252Ffile%252Fcontact%252Bform.jpg%26w%3D1200%26q%3D100" alt="contact+form.jpg" width="1200" height="1388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or book a demo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fperigon.io%2F_next%2Fimage%3Furl%3D%252Fapi%252Fmedia%252Ffile%252Fbook_a_demo.jpg%26w%3D1200%26q%3D100" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fperigon.io%2F_next%2Fimage%3Furl%3D%252Fapi%252Fmedia%252Ffile%252Fbook_a_demo.jpg%26w%3D1200%26q%3D100" alt="book_a_demo.jpg" width="1200" height="1424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Email support&lt;/strong&gt; is available on every plan for account and product questions, including coverage requests you would rather send as a written thread with your domain list attached.&lt;/p&gt;

&lt;p&gt;Use live chat for quick questions ("Can you cover this outlet?", "Which plan do I need?") and email when you want a documented request. Either way, state clearly that you are asking to add a source so it is triaged correctly. Contact and demo booking also live on the pricing page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which plans unlock indexing of new sources that api do not have, SLA, and shared Slack
&lt;/h2&gt;

&lt;p&gt;Email support is included on every plan, so account and product questions are never gated behind an upgrade. The heavier enterprise support and data features are Commercial-only:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New Sources&lt;/strong&gt; &lt;strong&gt;indexing&lt;/strong&gt; - Perigon adding publishers you request, including first-party sites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upgraded Support&lt;/strong&gt; - a higher support tier beyond standard email.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SLA&lt;/strong&gt; - a formal service-level agreement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shared Slack Channel&lt;/strong&gt; - a direct support line between your team and Perigon.&lt;/p&gt;

&lt;p&gt;Do not assume these ship on Free, Basic, or Plus. If your build needs custom ingestion, a guaranteed SLA, or a shared Slack line, that is the signal to talk to sales.&lt;/p&gt;

&lt;h3&gt;
  
  
  Plan and license matrix
&lt;/h3&gt;

&lt;p&gt;This table is scoped to the support and licensing question this article answers, not the full usage matrix. Limits and pricing change, so treat the pricing page as the source of truth.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Feature&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Free&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Basic&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Plus&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Commercial&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Data License / Who Qualifies&lt;/td&gt;
&lt;td&gt;Anyone&lt;/td&gt;
&lt;td&gt;Eligible Startups&lt;/td&gt;
&lt;td&gt;Eligible Startups&lt;/td&gt;
&lt;td&gt;All Businesses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;Personal&lt;/td&gt;
&lt;td&gt;Limited (Startup)&lt;/td&gt;
&lt;td&gt;Limited (Startup)&lt;/td&gt;
&lt;td&gt;Full Commercial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email Support&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New Sources Indexing&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upgraded Support&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SLA&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shared Slack Channel&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Commercial pricing is custom; contact sales rather than expecting a fixed number on the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How long does it take to add a publisher?&lt;/strong&gt; Perigon reviews each source case by case. In general it takes few days - from 12h to 48h.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I request a mainstream or niche trade outlet?&lt;/strong&gt; Yes, both. The format is the same: domain and sample URLs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I add my own news site or brand blog?&lt;/strong&gt; Yes. First-party domains are handled like any other request - just confirm you own the site and can grant publishing access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should I contact support or sales?&lt;/strong&gt; Start with support for the coverage question. If unlocking custom sources means upgrading, live chat routes the upgrade to sales, or you can start from the contact options on the pricing page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;p&gt;Confirm the outlet is truly missing, not just filtered out, before you file a request.&lt;/p&gt;

&lt;p&gt;Custom Source Groups organize existing sources; New Index for Sources ask Perigon to add new ones.&lt;/p&gt;

&lt;p&gt;Request coverage through live chat or email support - email is available on every plan.&lt;/p&gt;

&lt;p&gt;New Custom Sources, Upgraded Support, an SLA, and a Shared Slack Channel are Commercial-only.&lt;/p&gt;

&lt;p&gt;Include the domain, publication name, reason, and sample URLs, and check the pricing page for current plans.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Get started:&lt;/strong&gt; &lt;a href="https://perigon.io/tools/source-explorer" rel="noopener noreferrer"&gt;Source Explorer&lt;/a&gt; · &lt;a href="https://perigon.io/docs/api/sources" rel="noopener noreferrer"&gt;Sources and source groups&lt;/a&gt; · &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>news</category>
      <category>api</category>
      <category>python</category>
    </item>
    <item>
      <title>Top Election Journalists: Who Covers Campaigns and Ballots (and How to Find Them)</title>
      <dc:creator>Oleksyj Mokrousov</dc:creator>
      <pubDate>Mon, 27 Jul 2026 14:06:16 +0000</pubDate>
      <link>https://dev.to/alexperigon/top-election-journalists-who-covers-campaigns-and-ballots-and-how-to-find-them-13ej</link>
      <guid>https://dev.to/alexperigon/top-election-journalists-who-covers-campaigns-and-ballots-and-how-to-find-them-13ej</guid>
      <description>&lt;h2&gt;
  
  
  Why teams need an election journalist list
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Election journalists&lt;/strong&gt; sit at the center of campaign coverage, ballot fights, polling explainers, and voting-rights reporting. Keyword alerts for “election” or a last name pull sports “races,” foreign contests, and every photo-caption byline collision - while the &lt;strong&gt;political reporters&lt;/strong&gt; who actually own campaigns, polls, or election administration stay hard to inventory.&lt;/p&gt;

&lt;p&gt;Teams building outreach lists, citation trackers, or campaign-news products usually ask:&lt;/p&gt;

&lt;p&gt;What does “top election journalists” mean when you build the list from an API?&lt;/p&gt;

&lt;p&gt;How do you discover election and campaign reporters in the Journalists API?&lt;/p&gt;

&lt;p&gt;Which example &lt;strong&gt;election journalists&lt;/strong&gt; resolve cleanly for a shortlist?&lt;/p&gt;

&lt;p&gt;When should you use Journalists vs People vs Sources for election coverage?&lt;/p&gt;

&lt;p&gt;The sections below answer each in order. Full journalist-parameter depth belongs with the Journalists API guide when it ships; this page owns &lt;strong&gt;election-desk discovery&lt;/strong&gt; - not a Signals monitor playbook and not a left/right ideology roster.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox?endpoint=journalists" rel="noopener noreferrer"&gt;Journalists sandbox&lt;/a&gt; · &lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://perigon.io/docs/api/entities" rel="noopener noreferrer"&gt;Entities&lt;/a&gt; · &lt;strong&gt;Pricing:&lt;/strong&gt; &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What “top journalists for elections” means here
&lt;/h2&gt;

&lt;p&gt;This is a &lt;strong&gt;methodology-backed discovery list&lt;/strong&gt;, not a permanent ranking or endorsement.&lt;/p&gt;

&lt;p&gt;For the election beat we:&lt;/p&gt;

&lt;p&gt;Search journalists with q values such as election or campaign, scoped with category=Politics (and often country=us).&lt;/p&gt;

&lt;p&gt;Prefer profiles whose titles or top topics point at campaigns, polls, voting, Congress, or US politics - and whose topSources match national or election desks.&lt;/p&gt;

&lt;p&gt;Resolve ambiguous names carefully: many common bylines return near-matches; keep the row whose title, Twitter handle, and sources fit the election desk you mean.&lt;/p&gt;

&lt;p&gt;Apply resolved journalistId values on Articles when you need sample bylines or a lasting campaign feed.&lt;/p&gt;

&lt;p&gt;Exact topic=Elections or topic=Campaigns filters can return empty sets depending on how journalist topTopics are populated. In practice, &lt;strong&gt;q + category&lt;/strong&gt; is the reliable discovery path for this beat; treat topic filters as optional polish after you confirm live hits in the sandbox.&lt;/p&gt;

&lt;p&gt;US elections recur on a fixed calendar (federal contests every two years, plus continuous primary, ballot, and voting-rules coverage). That scale is why a reusable reporter shortlist beats rebuilding name search every cycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to discover election journalists in the Journalists API
&lt;/h2&gt;

&lt;p&gt;On the Journalists API (/v1/journalists/all), start with a discovery query, then tighten.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Goal&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Filters to try&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Broad election desk&lt;/td&gt;
&lt;td&gt;q=election, category=Politics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US-focused + active posters&lt;/td&gt;
&lt;td&gt;Add country=us, minMonthlyPosts (e.g. 5)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Campaign trail language&lt;/td&gt;
&lt;td&gt;q=campaign, category=Politics, country=us&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Polling / analytics desks&lt;/td&gt;
&lt;td&gt;q with polling language, category=Politics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Known byline&lt;/td&gt;
&lt;td&gt;name (exact-ish resolve), then confirm title and topSources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stable product filter&lt;/td&gt;
&lt;td&gt;Copy id into Articles as journalistId&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Useful result fields for shortlists: id, name, title, topSources, topTopics, topCategories, avgMonthlyPosts, and Twitter handle when present.&lt;/p&gt;

&lt;p&gt;On Articles (/v1/all), pass one or more journalistId values to pull that byline’s coverage. Add q=election (or campaign / ballot language) when you want election-framed hits only.&lt;/p&gt;

&lt;p&gt;Use excludeJournalistId when a syndication-heavy byline floods the feed. Parameter reference: &lt;a href="https://perigon.io/docs/api/entities" rel="noopener noreferrer"&gt;Entities&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example election journalist shortlist
&lt;/h2&gt;

&lt;p&gt;Resolved from live Journalists lookups. Prefer the &lt;strong&gt;id&lt;/strong&gt; column in products; re-resolve when titles or desks change.&lt;/p&gt;

&lt;h3&gt;
  
  
  National campaign and politics desks
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Desk cue (from profile)&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Primary outlets (topSources)&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;journalistId&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Maggie Haberman&lt;/td&gt;
&lt;td&gt;Senior Political Correspondent&lt;/td&gt;
&lt;td&gt;nytimes.com&lt;/td&gt;
&lt;td&gt;b7cc246d2e7a470a90b81f3d4ccad2ca&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jonathan Swan&lt;/td&gt;
&lt;td&gt;Politics reporter&lt;/td&gt;
&lt;td&gt;nytimes.com&lt;/td&gt;
&lt;td&gt;97ce96fa1e36456c8a5c88c02900224c&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Katie Glueck&lt;/td&gt;
&lt;td&gt;National political reporter&lt;/td&gt;
&lt;td&gt;nytimes.com&lt;/td&gt;
&lt;td&gt;fe243583d666442fb4ccd85e5aed6b06&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reid Epstein&lt;/td&gt;
&lt;td&gt;Politics Reporter&lt;/td&gt;
&lt;td&gt;nytimes.com&lt;/td&gt;
&lt;td&gt;25cb2840e4174b4a9c5bb2b72c424cf8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Annie Karni&lt;/td&gt;
&lt;td&gt;Congressional Correspondent&lt;/td&gt;
&lt;td&gt;nytimes.com&lt;/td&gt;
&lt;td&gt;713c41110d664d02b02f9468eaa165b7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nick Corasaniti&lt;/td&gt;
&lt;td&gt;Domestic politics / voting&lt;/td&gt;
&lt;td&gt;nytimes.com&lt;/td&gt;
&lt;td&gt;4e7f0207d5664ee184f0a9b516d61836&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nate Cohn&lt;/td&gt;
&lt;td&gt;Polls / US politics analytics&lt;/td&gt;
&lt;td&gt;nytimes.com&lt;/td&gt;
&lt;td&gt;fd2f250b31414dd8bf7ecd64bd3c880c&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Robert Costa&lt;/td&gt;
&lt;td&gt;Chief Election and Campaign Correspondent&lt;/td&gt;
&lt;td&gt;cbsnews.com&lt;/td&gt;
&lt;td&gt;a1ed83f0e9024614af5a8ac75606e8f5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kate Sullivan&lt;/td&gt;
&lt;td&gt;Campaign Embed&lt;/td&gt;
&lt;td&gt;bloomberg.com&lt;/td&gt;
&lt;td&gt;2d98292d26314fd1bcbd0cb6b86aba76&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Election-title and polling discovery hits
&lt;/h3&gt;

&lt;p&gt;These appeared when searching journalists with q=election and category=Politics - strong title signals for an election roster:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Desk cue (from profile)&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Primary outlets (topSources)&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;journalistId&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Helen Coster&lt;/td&gt;
&lt;td&gt;U.S. Presidential Election Correspondent&lt;/td&gt;
&lt;td&gt;reuters.com&lt;/td&gt;
&lt;td&gt;0f31d31dfd66430195eb005f7c04ee7c&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stephanie Kelly&lt;/td&gt;
&lt;td&gt;U.S. Presidential Election Correspondent&lt;/td&gt;
&lt;td&gt;regional / wire syndication&lt;/td&gt;
&lt;td&gt;14f953f977bb42f5bb83d78cd39aa3e7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ariel Edwards-Levy&lt;/td&gt;
&lt;td&gt;Editor, Polling and Election Analytics&lt;/td&gt;
&lt;td&gt;cnn.com&lt;/td&gt;
&lt;td&gt;cce8e73d74ca4d8faf7d795439f39961&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stephen Ohlemacher&lt;/td&gt;
&lt;td&gt;Election Decision Editor&lt;/td&gt;
&lt;td&gt;regional TV news sites&lt;/td&gt;
&lt;td&gt;38b074d3c62f463ab7401131425fee4c&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Katie Bernard&lt;/td&gt;
&lt;td&gt;Election administration / suburban politics&lt;/td&gt;
&lt;td&gt;inquirer.com&lt;/td&gt;
&lt;td&gt;18c20d8ddfce494d9f07731449d67dae&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Name search is noisy: common names return managers, local TV hosts, or near-spellings. Keep rows where &lt;strong&gt;title + topSources + Twitter&lt;/strong&gt; agree with the election desk you intend - drop zero-activity or off-beat collisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample coverage by these bylines
&lt;/h2&gt;

&lt;p&gt;After you resolve IDs, Articles filtered with journalistId plus q=election show how that byline’s election-framed copy looks in the index - useful as a pattern check, not as lasting newsjack content. Refresh samples when you ship the product; volumes and syndication domains change.&lt;/p&gt;

&lt;p&gt;Continuous Signals watches for Capitol Hill and leadership entities are a different job from a journalist roster - keep this page on byline discovery.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use Journalists vs People vs Sources
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Need&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Use&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Who &lt;strong&gt;wrote&lt;/strong&gt; the story&lt;/td&gt;
&lt;td&gt;Journalists API + Articles journalistId / author&lt;/td&gt;
&lt;td&gt;Bylines and reporter profiles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who the story is &lt;strong&gt;about&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;People filters (personName, personWikidataId)&lt;/td&gt;
&lt;td&gt;Candidates, officials, surrogates as entities&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Which &lt;strong&gt;outlets&lt;/strong&gt; to allow&lt;/td&gt;
&lt;td&gt;Sources / source groups&lt;/td&gt;
&lt;td&gt;Publisher inventory, not individual reporters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Campaign narrative momentum&lt;/td&gt;
&lt;td&gt;Stories (optional)&lt;/td&gt;
&lt;td&gt;Clusters across many bylines - link Stories guides, do not re-teach here&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Journalists answer “whose byline”; People answer “who was mentioned”; Sources answer “which publisher.” Election products often need all three - but this page starts with the reporter list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Election coverage scale at a glance
&lt;/h2&gt;

&lt;p&gt;A few facts that explain why a reusable &lt;strong&gt;election journalist&lt;/strong&gt; shortlist beats keyword-only alerts:&lt;/p&gt;

&lt;p&gt;US federal elections land &lt;strong&gt;every two years&lt;/strong&gt;, with primaries, ballot measures, and voting-rules fights filling the gaps - the campaign desk never fully goes quiet.&lt;/p&gt;

&lt;p&gt;Polling, election administration, and national politics each produce different bylines; one q=election alert mixes them without telling you &lt;strong&gt;who wrote&lt;/strong&gt; the piece.&lt;/p&gt;

&lt;p&gt;In the Articles index for pubDate &lt;strong&gt;2026-06-16&lt;/strong&gt; through &lt;strong&gt;2026-07-16&lt;/strong&gt; (US sources): about &lt;strong&gt;820,000&lt;/strong&gt; Politics-category articles, and about &lt;strong&gt;134,000&lt;/strong&gt; Politics hits that also match election - enough volume that byline allowlists matter for outreach, citation, and product feeds.&lt;/p&gt;

&lt;p&gt;In the same window, “White House” and Congress keyword lanes sit around &lt;strong&gt;150,000&lt;/strong&gt; and &lt;strong&gt;170,000&lt;/strong&gt; articles respectively - adjacent politics firehoses that election desks still collide with unless you filter on reporters, people, or sources.&lt;/p&gt;

&lt;p&gt;Round large counts in product copy; re-run stats when you ship so the window stays current.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;p&gt;Build &lt;strong&gt;election journalist&lt;/strong&gt; lists with Journalists discovery (q + category=Politics), not keyword article search alone.&lt;/p&gt;

&lt;p&gt;Resolve names carefully; store journalistId for stable Articles filters.&lt;/p&gt;

&lt;p&gt;Mix national campaign desks with explicit election-title and polling profiles so the shortlist is not one outlet only.&lt;/p&gt;

&lt;p&gt;Use People for candidates and officials; use Sources when the unit of filtering is the publisher.&lt;/p&gt;

&lt;p&gt;Re-run discovery when desks change - titles and topSources drift between cycles.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Get started:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox?endpoint=journalists" rel="noopener noreferrer"&gt;Journalists sandbox&lt;/a&gt; · &lt;a href="https://perigon.io/docs/api/entities" rel="noopener noreferrer"&gt;Entities&lt;/a&gt; · &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>news</category>
      <category>api</category>
      <category>python</category>
    </item>
    <item>
      <title>How Monitor US Politics News</title>
      <dc:creator>Oleksyj Mokrousov</dc:creator>
      <pubDate>Mon, 27 Jul 2026 14:02:59 +0000</pubDate>
      <link>https://dev.to/alexperigon/how-monitor-us-politics-news-6n1</link>
      <guid>https://dev.to/alexperigon/how-monitor-us-politics-news-6n1</guid>
      <description>&lt;h2&gt;
  
  
  Why teams monitor US politics news
&lt;/h2&gt;

&lt;p&gt;Monitoring US politics news isn't difficult because there are too many articles - it's difficult because keywords fail. Search for "Congress" and you'll get foreign legislatures, sports teams, opinion columns, and photo captions. Meanwhile, the leadership announcements, committee votes, and White House decisions that actually matter disappear into the noise.&lt;/p&gt;

&lt;p&gt;Teams building a durable &lt;strong&gt;washington politics news&lt;/strong&gt; or &lt;strong&gt;capitol hill news&lt;/strong&gt; watch usually ask:&lt;/p&gt;

&lt;p&gt;How do you monitor US politics news?&lt;/p&gt;

&lt;p&gt;How do you resolve White House and Congress leadership before filtering articles?&lt;/p&gt;

&lt;p&gt;How do Articles API and Stories API recipes keep &lt;strong&gt;us government news&lt;/strong&gt; and election coverage precise?&lt;/p&gt;

&lt;p&gt;When should you use Signals vs Articles vs Stories for US politics?&lt;/p&gt;

&lt;p&gt;The sections below answer each in order. Entity parameter depth lives in &lt;a href="https://perigon.io/docs/api/entities" rel="noopener noreferrer"&gt;Entities&lt;/a&gt;; this page owns the &lt;strong&gt;US politics Signals + institution&lt;/strong&gt; playbook.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://perigon.io/home" rel="noopener noreferrer"&gt;perigon.io/home&lt;/a&gt; · &lt;strong&gt;Articles sandbox:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox?endpoint=articles" rel="noopener noreferrer"&gt;sandbox&lt;/a&gt; · &lt;strong&gt;Entities docs:&lt;/strong&gt; &lt;a href="https://perigon.io/docs/api/entities" rel="noopener noreferrer"&gt;Entities&lt;/a&gt; · &lt;strong&gt;Pricing:&lt;/strong&gt; &lt;a href="https://perigon.io/products/pricing/signals" rel="noopener noreferrer"&gt;Signals pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What “monitor US politics” means in practice
&lt;/h2&gt;

&lt;p&gt;A continuous watch for &lt;strong&gt;us policy news&lt;/strong&gt; is not the same as one search on election night. Signals keeps a briefing lane running while leadership, bills, and campaigns evolve. Articles pins specific people, topics, and US source/geography filters for product feeds. Stories groups reprints when a floor fight, White House announcement, or campaign spike floods outlets at once - use velocity when you care that a narrative is accelerating, not only that one URL appeared.&lt;/p&gt;

&lt;p&gt;Trade policy, sanctions, and agency enforcement each deserve their own Monitor draft when that desk is the product; keep this page on federal politics institutions and leadership.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to monitor US politics news with Signals with perigon.io
&lt;/h2&gt;

&lt;p&gt;Open &lt;a href="https://perigon.io/home" rel="noopener noreferrer"&gt;perigon.io/home&lt;/a&gt; and describe the watch in plain language. Signals turns that ask into a continuous briefing so you are not rebuilding the same &lt;strong&gt;political news monitoring&lt;/strong&gt; query every morning.&lt;/p&gt;

&lt;p&gt;Name the institutions (White House, House, Senate), the people who define the beat for your desk, and the output shape (bullets, risks first, nonpartisan summary). Refine after the first run: tighten to legislation vs campaign rhetoric, or to leadership-only mentions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Copy-paste Signal prompts
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;White House and executive agenda&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Monitor US White House and executive-branch coverage affecting domestic policy and Congress relations. Prefer major national publishers. Summarize in short bullets for a policy reader; flag contested claims and distinguish official statements from opinion columns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Capitol Hill / Congress watch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Track US House and Senate news: floor votes, leadership statements, committee markups, and Speaker or Majority Leader mentions. Focus on legislation and procedural fights. Exclude sports “House” and foreign parliament noise unless clearly about the US Congress.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Leadership and campaign spillover&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Watch news that meaningfully mentions US political leadership (President, Vice President, Speaker of the House). Ignore photo-caption name-checks and unrelated people with the same surname. Note interviews, conference cancellations, and intra-party schedule fights that change Capitol Hill narrative.&lt;/p&gt;

&lt;p&gt;These prompts are evergreen: they describe ongoing beats, not a single week’s headlines. Swap or add leaders when your desk’s org chart changes - keep Signal wording on roles plus confirmed people IDs from the table below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resolve White House and Congress leadership before you filter
&lt;/h2&gt;

&lt;p&gt;US politics monitoring works best when people are resolved first. Name search alone surfaces athletes, musicians, and family members with the same string.&lt;/p&gt;

&lt;h3&gt;
  
  
  Canonical people (from People lookup)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Role (evergreen)&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Use in filters&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Resolved value&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;President of the United States&lt;/td&gt;
&lt;td&gt;Donald Trump&lt;/td&gt;
&lt;td&gt;personWikidataId&lt;/td&gt;
&lt;td&gt;Q22686&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vice President of the United States&lt;/td&gt;
&lt;td&gt;JD Vance&lt;/td&gt;
&lt;td&gt;personWikidataId&lt;/td&gt;
&lt;td&gt;Q28935729&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speaker of the House&lt;/td&gt;
&lt;td&gt;Mike Johnson&lt;/td&gt;
&lt;td&gt;personWikidataId&lt;/td&gt;
&lt;td&gt;Q19880665&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When you re-run People search for “Donald Trump,” keep &lt;strong&gt;Q22686&lt;/strong&gt; - not Donald Trump Jr. (Q3713655) or family matches. For “JD Vance,” keep &lt;strong&gt;Q28935729&lt;/strong&gt; (Vice President) - not unrelated JD / Vance hits. For “Mike Johnson,” keep &lt;strong&gt;Q19880665&lt;/strong&gt; (Speaker) - not hockey, music, or football collisions.&lt;/p&gt;

&lt;p&gt;On the People API (/v1/people/all), refresh lookups when leadership changes; keep Signal prompts and article filters on these Wikidata IDs. Param reference: &lt;a href="https://perigon.io/docs/api/entities" rel="noopener noreferrer"&gt;Entities&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example coverage snapshot
&lt;/h2&gt;

&lt;p&gt;Coverage pinned to these entities often looks like leadership schedule fights or Congress reacting to a White House policy frame - for example:&lt;/p&gt;

&lt;p&gt;Article-style hits on Speaker-linked &lt;strong&gt;House&lt;/strong&gt; lanes (e.g. House leaders backing a White House framework) from national or regional DC-facing publishers such as insidenova.com.&lt;/p&gt;

&lt;p&gt;Story-style clusters where VP and House GOP calendars collide (e.g. a canceled House Republican Conference appearance tied to conference and election-integrity fights) with several outlets reprinting the same narrative.&lt;/p&gt;

&lt;p&gt;Use overviews like those as pattern checks only - refresh samples when you build the product; do not treat one week’s cluster as lasting newsjack content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Articles API recipes for White House, Congress, and elections
&lt;/h2&gt;

&lt;p&gt;On the Articles API (/v1/all), pin people with personWikidataId rather than bare last-name q when you need &lt;strong&gt;white house news&lt;/strong&gt;, &lt;strong&gt;congress news&lt;/strong&gt;, or &lt;strong&gt;senate news&lt;/strong&gt; without surname collisions.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Goal&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Start with&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Optional add-ons&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Core &lt;strong&gt;us politics news&lt;/strong&gt; / &lt;strong&gt;dc politics news&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;category or topic Politics; sourceCountry us when you want US publishers&lt;/td&gt;
&lt;td&gt;excludeLabel for Opinion when you want harder news&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;White house news&lt;/strong&gt; / president lane&lt;/td&gt;
&lt;td&gt;personWikidataId Q22686&lt;/td&gt;
&lt;td&gt;Short q for bill, veto, executive order when event type matters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VP / administration spillover&lt;/td&gt;
&lt;td&gt;personWikidataId Q28935729&lt;/td&gt;
&lt;td&gt;Combine with Politics category&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;House of representatives news&lt;/strong&gt; / Speaker lane&lt;/td&gt;
&lt;td&gt;personWikidataId Q19880665&lt;/td&gt;
&lt;td&gt;q for House, Speaker, or conference when narrowing floor fights&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Us election news&lt;/strong&gt; / &lt;strong&gt;us campaign news&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Politics topic + election / primary / ballot q&lt;/td&gt;
&lt;td&gt;People pins for candidates your desk tracks; Stories when reprints explode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fresh poll&lt;/td&gt;
&lt;td&gt;addDateFrom from last checkpoint&lt;/td&gt;
&lt;td&gt;sortBy on add date for ingest-style feeds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Prose example: pass personWikidataId set to Q22686 for the presidential lane, or Q19880665 when the Speaker defines the House story, add Politics category or topic, and poll with addDateFrom so each run only returns what is new since the last check. For &lt;strong&gt;partisan news filter&lt;/strong&gt; workflows, prefer entity pins plus label excludes over hoping a keyword encodes “left” or “right.”&lt;/p&gt;

&lt;p&gt;Public US left / right / center &lt;strong&gt;source groups&lt;/strong&gt; can narrow publisher skew when your product needs a media-balance slice - discover and apply groups via Sources docs; do not rebuild group CRUD here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stories API recipes for politics story tracking
&lt;/h2&gt;

&lt;p&gt;When floor fights, White House announcements, or campaign spikes reprint across dozens of outlets, Stories (/v1/stories/all) keeps &lt;strong&gt;politics story tracking&lt;/strong&gt; on narratives instead of every mirror URL.&lt;/p&gt;

&lt;p&gt;Pass the same personWikidataId values (for example Q28935729 for VP-centered clusters). Sort or filter by recent updates when you care that a Capitol Hill storyline is still moving. Full clustering and velocity theory lives in the &lt;a href="https://perigon.io/blog/news-stories-api-how-news-clustering-groups-related-articles-into-trackable-narratives" rel="noopener noreferrer"&gt;Stories clustering guide&lt;/a&gt; - keep this page on US politics filters, not a second Stories textbook.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use Signals vs Articles vs Stories for US politics
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Need&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Prefer&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Daily &lt;strong&gt;us politics news&lt;/strong&gt; briefing without writing queries&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Signals&lt;/strong&gt; on &lt;a href="https://perigon.io/home" rel="noopener noreferrer"&gt;perigon.io/home&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embed Capitol Hill feeds in a product&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Articles API&lt;/strong&gt; with personWikidataId + Politics filters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leadership-sensitive policy or IR lanes&lt;/td&gt;
&lt;td&gt;Confirmed Wikidata IDs above; optional Signal for narrative&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Is this Washington story accelerating?”&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Stories&lt;/strong&gt; with the same people / Politics scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;General entity param reference&lt;/td&gt;
&lt;td&gt;&lt;a href="https://perigon.io/docs/api/entities" rel="noopener noreferrer"&gt;Entities docs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  US politics at a glance: why the beat stays noisy
&lt;/h2&gt;

&lt;p&gt;A few scale facts that keep &lt;strong&gt;political news monitoring&lt;/strong&gt; from sounding like a blank keyword alert:&lt;/p&gt;

&lt;p&gt;A single Congress typically sees &lt;strong&gt;thousands of bills introduced&lt;/strong&gt;; only a small fraction become law - the news firehose is the debate, not the final statutes.&lt;/p&gt;

&lt;p&gt;Capitol Hill runs through &lt;strong&gt;hundreds of committees and subcommittees&lt;/strong&gt;, each with its own markup, hearing, and leak cycle.&lt;/p&gt;

&lt;p&gt;The executive branch issues &lt;strong&gt;dozens of directives and executive actions&lt;/strong&gt; in busy stretches - White House messaging then collides with House and Senate reaction within hours.&lt;/p&gt;

&lt;p&gt;Federal elections hit &lt;strong&gt;every two years&lt;/strong&gt; (House all seats; Senate in classes), so &lt;strong&gt;us campaign news&lt;/strong&gt; never fully leaves the wire even in “off” years.&lt;/p&gt;

&lt;p&gt;The White House maintains a near-daily press briefing cadence - which is why &lt;strong&gt;white house news&lt;/strong&gt; and &lt;strong&gt;capitol hill news&lt;/strong&gt; need separate lanes in Signals and in API filters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What that looks like in the index (30 days, pubDate 2026-06-15–2026-07-15, US sources):&lt;/strong&gt; about &lt;strong&gt;820,000&lt;/strong&gt; Politics-category articles; roughly &lt;strong&gt;150,000&lt;/strong&gt; with “White House” in the query and &lt;strong&gt;170,000&lt;/strong&gt; matching Congress; about &lt;strong&gt;130,000&lt;/strong&gt; Politics hits that also mention elections. Leadership lanes show why person filters matter: on the order of &lt;strong&gt;370,000&lt;/strong&gt; articles linked to the President (Q22686), about &lt;strong&gt;42,000&lt;/strong&gt; for the Vice President (Q28935729), and about &lt;strong&gt;11,000&lt;/strong&gt; for the House Speaker (Q19880665) in the same window - same beat, very different volumes, which is why Signals and API watches should separate White House, Congress, and leadership pins instead of one catch-all keyword.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Monitor US politics news&lt;/strong&gt; with Signals prompts on /home for continuous briefings, then mirror the beat in Articles and Stories.&lt;/p&gt;

&lt;p&gt;Resolve leadership with Wikidata IDs: President Q22686, VP Q28935729, Speaker Q19880665 - skip surname collisions.&lt;/p&gt;

&lt;p&gt;Combine people pins with Politics topic/category, US source scope, and addDateFrom for product feeds.&lt;/p&gt;

&lt;p&gt;Use Stories for &lt;strong&gt;politics story tracking&lt;/strong&gt; when reprints explode; keep velocity theory in the Stories guide.&lt;/p&gt;

&lt;p&gt;Keep SEC, trade/tariffs, and single-company watches in their own Monitor drafts.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Get started:&lt;/strong&gt; &lt;a href="https://perigon.io/home" rel="noopener noreferrer"&gt;perigon.io/home&lt;/a&gt; · &lt;a href="https://perigon.io/docs/api/entities" rel="noopener noreferrer"&gt;Entities docs&lt;/a&gt; · &lt;a href="https://perigon.io/blog/news-stories-api-how-news-clustering-groups-related-articles-into-trackable-narratives" rel="noopener noreferrer"&gt;Stories clustering guide&lt;/a&gt; · &lt;a href="https://perigon.io/products/pricing/signals" rel="noopener noreferrer"&gt;Signals pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>news</category>
      <category>api</category>
      <category>python</category>
    </item>
    <item>
      <title>Build Custom News API Publisher Lists and Source Collections</title>
      <dc:creator>Oleksyj Mokrousov</dc:creator>
      <pubDate>Mon, 27 Jul 2026 13:57:15 +0000</pubDate>
      <link>https://dev.to/alexperigon/build-custom-news-api-publisher-lists-and-source-collections-h6c</link>
      <guid>https://dev.to/alexperigon/build-custom-news-api-publisher-lists-and-source-collections-h6c</guid>
      <description>&lt;h2&gt;
  
  
  Custom publisher lists break when they live in every query
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foq4y9vekcvuxbjqkyulg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foq4y9vekcvuxbjqkyulg.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hard-coding twenty domains into sources param works once. It fails when an analyst swaps a publisher, a competitor desk adds three trade outlets, or two products disagree on which regional papers belong in the allowlist. Teams then paste different domain strings into Articles, Headlines, Stories, and cron jobs - and alert quality drifts because the filter is no longer one object.&lt;/p&gt;

&lt;p&gt;That is the job of a &lt;strong&gt;source groups API&lt;/strong&gt;: turn a chosen &lt;strong&gt;publisher collection&lt;/strong&gt; into a named, reusable filter. Perigon already ships public bundles (for example top100, top25finance, top50tech). This guide covers the &lt;strong&gt;source group CRUD&lt;/strong&gt; surface for your own &lt;strong&gt;custom source lists&lt;/strong&gt;, how &lt;strong&gt;private source groups&lt;/strong&gt; and &lt;strong&gt;public source groups&lt;/strong&gt; resolve, and how to apply them for cleaner monitoring.&lt;/p&gt;

&lt;p&gt;What is a source groups API?&lt;/p&gt;

&lt;p&gt;How do source groups improve repeatable filtering versus pasting sources param every time?&lt;/p&gt;

&lt;p&gt;How do private and public source groups work for publisher collections?&lt;/p&gt;

&lt;p&gt;How do custom publisher collections improve monitoring and alert quality?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try it live:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox?endpoint=sources" rel="noopener noreferrer"&gt;Sources sandbox&lt;/a&gt; · &lt;strong&gt;Read the docs:&lt;/strong&gt; &lt;a href="https://perigon.io/docs/api/sources" rel="noopener noreferrer"&gt;Sources and source groups&lt;/a&gt; · &lt;strong&gt;Compare plans:&lt;/strong&gt; &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is a source groups API?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;source groups API&lt;/strong&gt; manages named collections of publisher domains. Each group has a stable name (what you pass as sourceGroup on search), optional displayName and description, and a domains list. Once the group exists, article and story searches reference the &lt;strong&gt;name&lt;/strong&gt;, not the raw domain string.&lt;/p&gt;

&lt;p&gt;Perigon exposes this under /v1/api/sourceGroups:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Operation&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Endpoint&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Job&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Create&lt;/td&gt;
&lt;td&gt;POST /v1/api/sourceGroups&lt;/td&gt;
&lt;td&gt;New org-owned group with name + domains (required); optional displayName, description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;List&lt;/td&gt;
&lt;td&gt;GET /v1/api/sourceGroups&lt;/td&gt;
&lt;td&gt;Org-owned groups plus publicly visible bundles; filter by name or domain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Get&lt;/td&gt;
&lt;td&gt;GET /v1/api/sourceGroups/{id}&lt;/td&gt;
&lt;td&gt;One org-owned group by integer id&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resolve&lt;/td&gt;
&lt;td&gt;GET /v1/api/sourceGroups/resolve&lt;/td&gt;
&lt;td&gt;Map names → group records (private preferred)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update&lt;/td&gt;
&lt;td&gt;PATCH /v1/api/sourceGroups/{id}&lt;/td&gt;
&lt;td&gt;Partial update of owned groups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delete&lt;/td&gt;
&lt;td&gt;DELETE /v1/api/sourceGroups/{id}&lt;/td&gt;
&lt;td&gt;Remove an owned group&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This page owns that lifecycle. Publisher &lt;strong&gt;discovery&lt;/strong&gt; (find a domain, visits, paywall, geo) lives on the Sources API (/v1/sources/all) - see the News Source API post for the directory cookbook, and &lt;a href="https://perigon.io/docs/api/sources" rel="noopener noreferrer"&gt;Sources docs&lt;/a&gt;. Vertical inventories like healthcare trade pubs or top25finance live in those compare posts, not here.&lt;/p&gt;

&lt;h2&gt;
  
  
  How source groups improve news filtering
&lt;/h2&gt;

&lt;p&gt;Without groups, every feed embeds a domain allowlist. With groups, search params stay short and &lt;strong&gt;reusable publisher filters&lt;/strong&gt; stay in one place.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Approach&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;What you maintain&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Drift risk&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Repeated source=a.com,b.com,...&lt;/td&gt;
&lt;td&gt;Domain string in every client&lt;/td&gt;
&lt;td&gt;High - each caller copies a slightly different list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Named sourceGroup=my-desk&lt;/td&gt;
&lt;td&gt;One group record + search param&lt;/td&gt;
&lt;td&gt;Low - patch the group; queries keep the same name&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Typical flow:&lt;/p&gt;

&lt;p&gt;1) Discover candidate domains with the Sources API (or Source Explorer) when you need metadata.&lt;/p&gt;

&lt;p&gt;2) Create a &lt;strong&gt;custom source list&lt;/strong&gt; with POST /v1/api/sourceGroups and your domains array (1–5000 domains).&lt;/p&gt;

&lt;p&gt;3) Resolve or list by name when another service only has the label.&lt;/p&gt;

&lt;p&gt;4) Apply sourceGroup on Articles (/v1/all), Headlines, Stories, or Sources to scope results to that collection.&lt;/p&gt;

&lt;p&gt;5) On Articles, use excludeSourceGroup when you want everything &lt;em&gt;except&lt;/em&gt; a noisy bundle.&lt;/p&gt;

&lt;p&gt;You can still use bare source / excludeSource for one-off domain tweaks. Groups are for collections you will reuse.&lt;/p&gt;

&lt;p&gt;Pass excludeSourceGroup when you need a &lt;strong&gt;publisher denylist&lt;/strong&gt; bundle on Articles only. Stories and Sources accept sourceGroup for include-side scoping; Stories do not support group excludes the same way Articles do. For industry packs already published as public names, start there and customize privately - see the &lt;a href="https://perigon.io/blog/healthcare-news-compare-top-trade-publications" rel="noopener noreferrer"&gt;healthcare trade publications&lt;/a&gt; and &lt;a href="https://perigon.io/blog/best-financial-news-sources-top25finance" rel="noopener noreferrer"&gt;top25finance&lt;/a&gt; posts for those inventories.&lt;/p&gt;

&lt;h2&gt;
  
  
  Private and public source groups for publisher collections
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Public source groups&lt;/strong&gt; are Perigon-maintained &lt;strong&gt;curated source bundles&lt;/strong&gt; (for example top10, top100, top500English, top25crypto, top25finance, top50tech, top100sports, and US left / right / center packs). Anyone with API access can pass those names as sourceGroup. List can return publicly visible groups alongside your own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Private source groups&lt;/strong&gt; are created under the organization tied to your API key. Create, get-by-id, patch, and delete only apply to groups your org owns. That is where &lt;strong&gt;analyst approved sources&lt;/strong&gt;, &lt;strong&gt;competitor publisher list&lt;/strong&gt; subsets, and &lt;strong&gt;regional source collection&lt;/strong&gt; forks belong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resolve&lt;/strong&gt; is the important rule: GET /v1/api/sourceGroups/resolve with one or more name values returns, for each name, your organization's private group if one exists; otherwise the matching public group. That lets a product use a shared public label like top50tech until you create a private group with the same name - after which resolve (and your mental model for that workspace) prefers the private definition. Keep private names intentional so you do not shadow a public bundle by accident.&lt;/p&gt;

&lt;p&gt;Workspace UI under Settings → Source Groups can create the same objects for teams that prefer a console; the API is the programmable path for CI and multi-product orgs. Long lists you cannot maintain yourself can also be requested from Perigon support - the same collection model applies.&lt;/p&gt;

&lt;h2&gt;
  
  
  How custom publisher collections improve monitoring and alert quality
&lt;/h2&gt;

&lt;p&gt;Alerts and monitors fail noisily when the publisher set wanders. A stable group name is a contract between the research desk and the pipeline.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Pattern&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Collection idea&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Search habit&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Analyst approved&lt;/td&gt;
&lt;td&gt;Domains the desk signed off on&lt;/td&gt;
&lt;td&gt;sourceGroup = private name on every poll&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Competitor desk&lt;/td&gt;
&lt;td&gt;Tier-1 + relevant trade outlets only&lt;/td&gt;
&lt;td&gt;sourceGroup include, or Articles excludeSourceGroup for spam packs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regional fork&lt;/td&gt;
&lt;td&gt;Public national pack minus irrelevant wires&lt;/td&gt;
&lt;td&gt;Private group copied from a public starting set, then patched&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product vs research&lt;/td&gt;
&lt;td&gt;Two private names, same topic keywords&lt;/td&gt;
&lt;td&gt;Same q / company filters; different sourceGroup&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Updating domains is a PATCH on the group id, not a redeploy of every query string. List with domain when you need to find which &lt;strong&gt;workspace source groups&lt;/strong&gt; already contain a publisher. Delete when a product is retired so resolve does not keep pointing at stale private names.&lt;/p&gt;

&lt;p&gt;Inspection tip: to see membership of a named bundle without re-teaching Sources here, call Sources with sourceGroup set to that name - that is directory view of members. Lifecycle changes still go through /v1/api/sourceGroups.&lt;/p&gt;

&lt;h2&gt;
  
  
  Source group CRUD fields and list filters
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Create body&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Field&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Required&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;name&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Stable slug used as sourceGroup on search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;domains&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Array of publisher domains&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;displayName&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Human label in UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;description&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Desk notes / ownership&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;List query&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Param&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Role&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;name&lt;/td&gt;
&lt;td&gt;Filter groups by name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;domain&lt;/td&gt;
&lt;td&gt;Find groups that include a domain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sortBy / sortOrder&lt;/td&gt;
&lt;td&gt;Required sort controls on list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;page / size&lt;/td&gt;
&lt;td&gt;Pagination&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Resolve query:&lt;/strong&gt; name (up to 100 names) → private-first records.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Analyst-approved allowlist
&lt;/h3&gt;

&lt;p&gt;Create a private group with the domains research marked as trustworthy for a product. Poll Articles with that sourceGroup plus your topic or company filters. When analysts add a site, patch domains - alert jobs keep the same group name.&lt;/p&gt;

&lt;h3&gt;
  
  
  Competitor publisher list
&lt;/h3&gt;

&lt;p&gt;Build a tight &lt;strong&gt;publisher allowlist&lt;/strong&gt; for competitor coverage, or keep a wide search and attach excludeSourceGroup on Articles for bundles you never want in the feed. Persist the exclude name the same way you persist the include name.&lt;/p&gt;

&lt;h3&gt;
  
  
  Regional source collection
&lt;/h3&gt;

&lt;p&gt;Start from a public national or language pack name for smoke tests, then create a private regional collection with only the markets you serve. Resolve tells services which definition wins for a given name in your org.&lt;/p&gt;

&lt;h3&gt;
  
  
  Industry packs
&lt;/h3&gt;

&lt;p&gt;Pass public names such as top25finance or healthcareTradePublications when the maintained pack is enough. Domain-by-domain justification belongs in the vertical posts; this API topic stops at “create or resolve the collection, then apply the name.”&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use groups vs Sources vs bare source
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Need&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Use&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Find or rank publishers by visits, geo, paywall&lt;/td&gt;
&lt;td&gt;Sources API (/v1/sources/all)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reuse a domain set across products and jobs&lt;/td&gt;
&lt;td&gt;Source Groups API + sourceGroup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off include or exclude of a few domains&lt;/td&gt;
&lt;td&gt;source / excludeSource&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Industry SERP + curated inventory write-up&lt;/td&gt;
&lt;td&gt;Vertical trade-pub / finance posts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Narrative / velocity monitoring&lt;/td&gt;
&lt;td&gt;Stories (and Breaking) guides - same sourceGroup name if helpful&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Compose with other filters
&lt;/h2&gt;

&lt;p&gt;sourceGroup is a publisher gate, not a topic engine. Stack it with q, company or people filters, dates (from / to / addDateFrom), taxonomy, category, and topic the same way you would with source. Keep this article’s examples group-centric; parameter cookbooks for entities and taxonomy stay in those pillar posts.&lt;/p&gt;

&lt;h2&gt;
  
  
  API plans
&lt;/h2&gt;

&lt;p&gt;Source filtering and curated public groups are available across API plans; private group capacity and volume limits follow your tier. Confirm current limits on &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;source groups API&lt;/strong&gt; (/v1/api/sourceGroups) owns create, list, get, resolve, patch, and delete for &lt;strong&gt;custom source lists&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resolve&lt;/strong&gt; prefers your org’s &lt;strong&gt;private source group&lt;/strong&gt; over a matching &lt;strong&gt;public source group&lt;/strong&gt; for the same name.&lt;/p&gt;

&lt;p&gt;Apply collections with sourceGroup (and Articles excludeSourceGroup) - do not paste long domain strings into every client.&lt;/p&gt;

&lt;p&gt;Use Sources for publisher metadata; use vertical posts for industry domain inventories; use this page for &lt;strong&gt;source group CRUD&lt;/strong&gt; and resolution rules.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Get started:&lt;/strong&gt; &lt;a href="https://perigon.io/docs/api/sources" rel="noopener noreferrer"&gt;Sources and source groups&lt;/a&gt; · &lt;a href="https://perigon.io/reference" rel="noopener noreferrer"&gt;API reference&lt;/a&gt; · &lt;a href="https://perigon.io/sandbox?endpoint=sources" rel="noopener noreferrer"&gt;Sources sandbox&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>news</category>
      <category>api</category>
    </item>
    <item>
      <title>Keyword vs Google Taxonomy: Fix Noisy Vertical News Alerts</title>
      <dc:creator>Oleksyj Mokrousov</dc:creator>
      <pubDate>Sat, 25 Jul 2026 10:23:06 +0000</pubDate>
      <link>https://dev.to/alexperigon/keyword-vs-google-taxonomy-fix-noisy-vertical-news-alerts-41f0</link>
      <guid>https://dev.to/alexperigon/keyword-vs-google-taxonomy-fix-noisy-vertical-news-alerts-41f0</guid>
      <description>&lt;h2&gt;
  
  
  Your industry alert is still a string match
&lt;/h2&gt;

&lt;p&gt;A “banking desk” built on &lt;strong&gt;q&lt;/strong&gt; = bank will happily ingest river banks, blood banks, data banks, and robbery blotter. A “rock feed” on &lt;strong&gt;q&lt;/strong&gt; = rock will mix geology, wrestling, and cocktail recipes with actual Rock Music coverage. The channel looks productive; the product is not on-vertical.&lt;/p&gt;

&lt;p&gt;This page is a &lt;strong&gt;bakeoff diagnostic&lt;/strong&gt; for noisy keyword desks. It is not the full Google taxonomy filter cookbook (exact path vs prefixTaxonomy, Stories, classify). That lives on Perigon’s &lt;a href="https://perigon.io/blog/news-api-filter-by-google-taxonomy" rel="noopener noreferrer"&gt;News API filter by Google taxonomy&lt;/a&gt; guide - link out when you are ready to wire the params.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Why do vertical keywords inflate alerts?&lt;/li&gt;
&lt;li&gt;How large are the gaps for bank, fund, and rock?&lt;/li&gt;
&lt;li&gt;When should you use taxonomy vs Perigon category vs topic?&lt;/li&gt;
&lt;li&gt;What bakeoff should you run before shipping a desk?&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why vertical keywords inflate alerts
&lt;/h2&gt;

&lt;p&gt;Keywords match tokens. Vertical desks need &lt;strong&gt;aboutness&lt;/strong&gt;. Google Content Category paths (V2) on Perigon articles describe industry and content family - Banking under Finance, Rock Music under Arts &amp;amp; Entertainment - so a filter can mean “this kind of story,” not “this substring appeared.”&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Habit&lt;/th&gt;
&lt;th&gt;What you get&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;q&lt;/strong&gt; = bank / banking&lt;/td&gt;
&lt;td&gt;Central banks, rivers, features named “bank,” crime, metaphors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;q&lt;/strong&gt; = fund&lt;/td&gt;
&lt;td&gt;Mutual funds plus “fund a project,” fundraisers, verb uses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;q&lt;/strong&gt; = rock&lt;/td&gt;
&lt;td&gt;Music plus geology, sports nicknames, food, idioms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Taxonomy path for the vertical&lt;/td&gt;
&lt;td&gt;Articles classified into that Google hierarchy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You still stack dates, sources, and companies. The fix is choosing the right &lt;em&gt;aboutness&lt;/em&gt; filter first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Live bakeoff: bank, fund, rock (30 days)
&lt;/h2&gt;

&lt;p&gt;Articles counts for pubDate &lt;strong&gt;2026-06-25&lt;/strong&gt; through &lt;strong&gt;2026-07-25&lt;/strong&gt; (round in product copy; huge open queries are order-of-magnitude):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Desk intent&lt;/th&gt;
&lt;th&gt;Keyword filter&lt;/th&gt;
&lt;th&gt;About how many&lt;/th&gt;
&lt;th&gt;Taxonomy / structured filter&lt;/th&gt;
&lt;th&gt;About how many&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Banking vertical&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;q&lt;/strong&gt; = bank&lt;/td&gt;
&lt;td&gt;~988,000&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;taxonomy&lt;/strong&gt; = /Finance/Banking/Other&lt;/td&gt;
&lt;td&gt;~363,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Banking (wordier keyword)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;q&lt;/strong&gt; = banking&lt;/td&gt;
&lt;td&gt;~259,000&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;prefixTaxonomy&lt;/strong&gt; = /Finance/Banking&lt;/td&gt;
&lt;td&gt;~363,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Funds vertical&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;q&lt;/strong&gt; = fund&lt;/td&gt;
&lt;td&gt;~695,000&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;taxonomy&lt;/strong&gt; = /Finance/Investing/Funds&lt;/td&gt;
&lt;td&gt;~398,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rock music vertical&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;q&lt;/strong&gt; = rock&lt;/td&gt;
&lt;td&gt;~341,000&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;taxonomy&lt;/strong&gt; = /Arts &amp;amp; Entertainment/Music &amp;amp; Audio/Rock Music&lt;/td&gt;
&lt;td&gt;~210,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Read the table carefully.&lt;/strong&gt; Taxonomy is not always the smallest number - &lt;strong&gt;q&lt;/strong&gt; = banking (~259k) is below Banking taxonomy (~363k) because many banking stories never use the token “banking.” The failure mode is different: keywords &lt;strong&gt;miss&lt;/strong&gt; on-vertical pieces &lt;em&gt;and&lt;/em&gt; &lt;strong&gt;include&lt;/strong&gt; off-vertical tokens. Taxonomy stays on the Google Banking branch either way.&lt;/p&gt;

&lt;p&gt;Keyword &lt;strong&gt;bank&lt;/strong&gt; (~988k) is still ~2.7× the Banking taxonomy slice - that gap is mostly noise and adjacent senses. Keyword &lt;strong&gt;fund&lt;/strong&gt; (~695k) vs Funds path (~398k) shows the same pattern. Keyword &lt;strong&gt;rock&lt;/strong&gt; (~341k) vs Rock Music (~210k) cuts a large geology/idiom/sports tail while keeping tour and album coverage the music desk wants.&lt;/p&gt;

&lt;p&gt;For a wider finance firehose, &lt;strong&gt;prefixTaxonomy&lt;/strong&gt; = /Finance was about &lt;strong&gt;3.4M&lt;/strong&gt; in the same window - useful as a branch monitor, not a tight desk. Pair a narrower leaf path when alerts must stay readable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Taxonomy vs category vs topic (pick one job)
&lt;/h2&gt;

&lt;p&gt;Perigon exposes three related dimensions. Mixing them up recreates keyword chaos with nicer names.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Filter&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Use when&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;taxonomy&lt;/strong&gt; / &lt;strong&gt;prefixTaxonomy&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Google Content Category paths&lt;/td&gt;
&lt;td&gt;Industry / content-family desks (Banking, Rock Music, Health Conditions)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;category&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Perigon broad themes (Finance, Tech, Health, …)&lt;/td&gt;
&lt;td&gt;Fast dashboard buckets; e.g. &lt;strong&gt;category&lt;/strong&gt; = Finance was ~3.5M in this window&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;topic&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Granular Perigon topics&lt;/td&gt;
&lt;td&gt;Storyline types - e.g. &lt;strong&gt;topic&lt;/strong&gt; = Cryptocurrency ~187k vs &lt;strong&gt;q&lt;/strong&gt; = cryptocurrency ~89k (topic can out-recall a thin keyword)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Rule of thumb:&lt;/strong&gt; Google path when the desk is an industry tree; Perigon &lt;strong&gt;category&lt;/strong&gt; for coarse theme chrome; &lt;strong&gt;topic&lt;/strong&gt; when you need a named storyline slice. Stack carefully - do not OR three overlapping definitions of “finance” and call it precision. Deep param behavior stays on the taxonomy filter guide linked above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bakeoff checklist before you ship a vertical alert
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Write the desk intent in one sentence (“Rock Music coverage,” not “anything with rock”).&lt;/li&gt;
&lt;li&gt;Run &lt;strong&gt;q&lt;/strong&gt; = token and the matching Google &lt;strong&gt;taxonomy&lt;/strong&gt; (or &lt;strong&gt;prefixTaxonomy&lt;/strong&gt;) for the same from/to window.&lt;/li&gt;
&lt;li&gt;Spot-check twenty titles from each list - count off-vertical hits and obvious misses.&lt;/li&gt;
&lt;li&gt;If the keyword is quieter but incomplete (like &lt;strong&gt;q&lt;/strong&gt; = banking vs Banking path), prefer taxonomy and accept the larger on-vertical set.&lt;/li&gt;
&lt;li&gt;Only then add source packs, companies, or labels - aboutness first, polish second.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Vertical &lt;strong&gt;q&lt;/strong&gt; filters are string matches; &lt;strong&gt;taxonomy&lt;/strong&gt; paths are aboutness filters for industry desks.&lt;/li&gt;
&lt;li&gt;Live gaps matter: &lt;strong&gt;bank&lt;/strong&gt; ~988k vs Banking taxonomy ~363k; &lt;strong&gt;rock&lt;/strong&gt; ~341k vs Rock Music ~210k (30 days ending &lt;strong&gt;2026-07-25&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;Quieter keywords are not always better - &lt;strong&gt;banking&lt;/strong&gt; can under-recall vs the Banking path.&lt;/li&gt;
&lt;li&gt;Use taxonomy for industry trees, &lt;strong&gt;category&lt;/strong&gt; for broad themes, &lt;strong&gt;topic&lt;/strong&gt; for granular storylines.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>news</category>
      <category>api</category>
      <category>python</category>
    </item>
    <item>
      <title>Place-Name Keywords vs Geo Filters for Local News</title>
      <dc:creator>Oleksyj Mokrousov</dc:creator>
      <pubDate>Sat, 25 Jul 2026 10:12:39 +0000</pubDate>
      <link>https://dev.to/alexperigon/place-name-keywords-vs-geo-filters-for-local-news-4912</link>
      <guid>https://dev.to/alexperigon/place-name-keywords-vs-geo-filters-for-local-news-4912</guid>
      <description>&lt;h2&gt;
  
  
  Your “local” alert is probably a keyword in disguise
&lt;/h2&gt;

&lt;p&gt;Many desks build “Chicago news” or “Portland coverage” by stuffing the city into a keyword field. That habit creates false confidence: the feed looks busy, the Slack channel never sleeps, and half the hits are the wrong market, a person named Austin, or a national wire that mentioned the city once.&lt;/p&gt;

&lt;p&gt;This page is a &lt;strong&gt;diagnostic&lt;/strong&gt;, not a full geography-param cookbook. It shows five failure modes with live volume gaps, then points you to structured filters. For the complete local news API surface (county, radius, Stories, Sources), use Perigon’s &lt;a href="https://perigon.io/blog/local-news-api-search-guide" rel="noopener noreferrer"&gt;Local news API search guide&lt;/a&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What goes wrong when the city is only a keyword?&lt;/li&gt;
&lt;li&gt;How big is the gap for ambiguous markets (Portland, Austin, Springfield)?&lt;/li&gt;
&lt;li&gt;How do event-city and newsroom-city filters differ (Chicago)?&lt;/li&gt;
&lt;li&gt;What should you change in the alert job tomorrow?&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox?endpoint=articles" rel="noopener noreferrer"&gt;Articles sandbox&lt;/a&gt; · &lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://perigon.io/docs/api/local-news" rel="noopener noreferrer"&gt;Local news&lt;/a&gt; · &lt;strong&gt;Plans:&lt;/strong&gt; &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Failure mode 1: Ambiguous city names (the Portland problem)
&lt;/h2&gt;

&lt;p&gt;Portland is not one market. A keyword match cannot tell Oregon from Maine - or from cement, travel, and sports noise that shares the string.&lt;/p&gt;

&lt;p&gt;Live Articles counts for pubDate &lt;strong&gt;2026-06-25&lt;/strong&gt; through &lt;strong&gt;2026-07-25&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Filter&lt;/th&gt;
&lt;th&gt;About how many articles&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;q&lt;/strong&gt; = Portland&lt;/td&gt;
&lt;td&gt;~67,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;city&lt;/strong&gt; = Portland + &lt;strong&gt;state&lt;/strong&gt; = OR&lt;/td&gt;
&lt;td&gt;~6,200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;city&lt;/strong&gt; = Portland + &lt;strong&gt;state&lt;/strong&gt; = ME&lt;/td&gt;
&lt;td&gt;~1,300&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Keyword Portland is roughly &lt;strong&gt;10×&lt;/strong&gt; Oregon event-scoped volume and &lt;strong&gt;50×&lt;/strong&gt; Maine. If your “Portland desk” used &lt;strong&gt;q&lt;/strong&gt;, most of the firehose was not your DMA.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure mode 2: Person and brand collisions (Austin)
&lt;/h2&gt;

&lt;p&gt;Austin is a capital city and a common given name. Keyword search pulls both.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Filter&lt;/th&gt;
&lt;th&gt;About how many articles&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;q&lt;/strong&gt; = Austin&lt;/td&gt;
&lt;td&gt;~143,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;city&lt;/strong&gt; = Austin + &lt;strong&gt;state&lt;/strong&gt; = TX&lt;/td&gt;
&lt;td&gt;~11,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Texas event geography is about &lt;strong&gt;13×&lt;/strong&gt; quieter than the keyword - still busy, but no longer every headline that mentions someone named Austin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure mode 3: Many towns, one string (Springfield)
&lt;/h2&gt;

&lt;p&gt;Springfield is a classic trap: Illinois capital, plus cities in other states, plus fiction and sports nicknames.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Filter&lt;/th&gt;
&lt;th&gt;About how many articles&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;q&lt;/strong&gt; = Springfield&lt;/td&gt;
&lt;td&gt;~24,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;city&lt;/strong&gt; = Springfield + &lt;strong&gt;state&lt;/strong&gt; = IL&lt;/td&gt;
&lt;td&gt;~2,200&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If the job is Springfield, Illinois government or plant news, the keyword feed is mostly other Springfields and incidental mentions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure mode 4: Event city vs newsroom city (Chicago)
&lt;/h2&gt;

&lt;p&gt;Even when the place string is unique enough, &lt;strong&gt;where the story happened&lt;/strong&gt; and &lt;strong&gt;where the publisher sits&lt;/strong&gt; are different questions. Keyword Chicago mixes both - and everything else.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Filter&lt;/th&gt;
&lt;th&gt;About how many articles&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;q&lt;/strong&gt; = Chicago&lt;/td&gt;
&lt;td&gt;~321,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;city&lt;/strong&gt; = Chicago + &lt;strong&gt;state&lt;/strong&gt; = IL (event / story place)&lt;/td&gt;
&lt;td&gt;~60,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;sourceCity&lt;/strong&gt; = Chicago + &lt;strong&gt;sourceState&lt;/strong&gt; = IL (publisher based there)&lt;/td&gt;
&lt;td&gt;~144,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Event-scoped Chicago is far below the keyword firehose. Newsroom-scoped Chicago is larger than event-scoped - national and metro outlets headquartered in Chicago cover many non-Chicago events. Pick the axis on purpose: city council and weather emergencies → event &lt;strong&gt;city&lt;/strong&gt; / &lt;strong&gt;state&lt;/strong&gt;; hyperlocal reader apps and DMA ad products → &lt;strong&gt;sourceCity&lt;/strong&gt; / &lt;strong&gt;sourceState&lt;/strong&gt;. Combining both is a third product (events in a county from in-state publishers) - details in the local news guide linked above and &lt;a href="https://perigon.io/docs/api/location-geo" rel="noopener noreferrer"&gt;location &amp;amp; geo docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure mode 5: Treating volume as quality
&lt;/h2&gt;

&lt;p&gt;A keyword city alert “working” usually means it is loud. Use a one-week bakeoff before you ship:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;strong&gt;q&lt;/strong&gt; = CityName and &lt;strong&gt;city&lt;/strong&gt; + &lt;strong&gt;state&lt;/strong&gt; side by side for the same from/to window.&lt;/li&gt;
&lt;li&gt;Spot-check twenty titles from each - count wrong-market and name-collision hits.&lt;/li&gt;
&lt;li&gt;If you need outlets in the market rather than events there, swap in &lt;strong&gt;sourceCity&lt;/strong&gt; / &lt;strong&gt;sourceState&lt;/strong&gt; (or discover publishers on the Sources API first).&lt;/li&gt;
&lt;li&gt;Only then add topic, company, or radius - geography first, keywords second.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Radius feeds (&lt;strong&gt;lat&lt;/strong&gt; / &lt;strong&gt;lon&lt;/strong&gt; / &lt;strong&gt;maxDistance&lt;/strong&gt;) belong when the user or plant is a point on a map, not a city string - again owned by the full local guide, not this diagnostic.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to change in the alert job tomorrow
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If your job looks like…&lt;/th&gt;
&lt;th&gt;Stop doing&lt;/th&gt;
&lt;th&gt;Start doing&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;“Portland OR desk” via &lt;strong&gt;q&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Keyword Portland&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;city&lt;/strong&gt; + &lt;strong&gt;state&lt;/strong&gt; = OR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Austin CI” via &lt;strong&gt;q&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Keyword Austin&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;city&lt;/strong&gt; + &lt;strong&gt;state&lt;/strong&gt; = TX (+ company filters)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Springfield IL plant”&lt;/td&gt;
&lt;td&gt;Keyword Springfield&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;city&lt;/strong&gt; + &lt;strong&gt;state&lt;/strong&gt; = IL (or county)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Chicago hyperlocal app”&lt;/td&gt;
&lt;td&gt;Keyword Chicago&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;sourceCity&lt;/strong&gt; / &lt;strong&gt;sourceState&lt;/strong&gt;, or Sources then allowlist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Stories in the metro”&lt;/td&gt;
&lt;td&gt;Article keyword flood&lt;/td&gt;
&lt;td&gt;Stories with &lt;strong&gt;city&lt;/strong&gt; / &lt;strong&gt;state&lt;/strong&gt; (see local guide)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Place-name keywords are not &lt;strong&gt;local news monitoring&lt;/strong&gt; - they are string matches with market collisions.&lt;/li&gt;
&lt;li&gt;Live gaps are large (e.g. Portland &lt;strong&gt;q&lt;/strong&gt; ~67k vs OR ~6.2k vs ME ~1.3k; Austin &lt;strong&gt;q&lt;/strong&gt; ~143k vs TX ~11k in 30 days ending &lt;strong&gt;2026-07-25&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;Chicago shows event &lt;strong&gt;city&lt;/strong&gt; (~60k) and &lt;strong&gt;sourceCity&lt;/strong&gt; (~144k) answer different product questions - neither equals keyword Chicago (~321k).&lt;/li&gt;
&lt;li&gt;Fix the geography axis first; leave the full param and radius cookbook to Perigon’s Local news API search guide.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Get started:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox?endpoint=articles" rel="noopener noreferrer"&gt;Articles sandbox&lt;/a&gt; · &lt;a href="https://perigon.io/docs/api/local-news" rel="noopener noreferrer"&gt;Local news docs&lt;/a&gt; · &lt;a href="https://perigon.io/blog/local-news-api-search-guide" rel="noopener noreferrer"&gt;Local news API search guide&lt;/a&gt; · &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;

</description>
      <category>news</category>
      <category>api</category>
      <category>python</category>
    </item>
    <item>
      <title>News Integration: RSS Polling vs Structured Feeds</title>
      <dc:creator>Oleksyj Mokrousov</dc:creator>
      <pubDate>Sat, 25 Jul 2026 09:46:35 +0000</pubDate>
      <link>https://dev.to/alexperigon/news-integration-rss-polling-vs-structured-feeds-3a00</link>
      <guid>https://dev.to/alexperigon/news-integration-rss-polling-vs-structured-feeds-3a00</guid>
      <description>&lt;h2&gt;
  
  
  Product news features hit a wall that feed readers never see
&lt;/h2&gt;

&lt;p&gt;Shipping a &lt;strong&gt;news integration&lt;/strong&gt; - a Slack alert bot, a customer dashboard tile, an AI agent that cites today’s coverage - feels easy if you start with &lt;strong&gt;RSS polling&lt;/strong&gt;. Grab a few XML feed URLs, cron every 15 minutes, parse title/link/date, done. That pattern works for humans in a feed reader. It falls apart the moment the same stream has to power a product: dedupe across outlets, filter by company or person, push events into your system, or keep latency predictable under load.&lt;/p&gt;

&lt;p&gt;This piece is for builders. If you only need a personal reader decision (when Google News / publisher RSS is enough vs curated trackers), start with Perigon’s &lt;a href="https://perigon.io/blog/google-rss-vs-perigon-data-feeds" rel="noopener noreferrer"&gt;Google RSS vs data feeds guide&lt;/a&gt; instead - that page owns the human-monitor angle. Here the job is different: &lt;strong&gt;news API for products&lt;/strong&gt;, &lt;strong&gt;production news pipelines&lt;/strong&gt;, and why &lt;strong&gt;XML news feeds&lt;/strong&gt; stop being an architecture.&lt;/p&gt;

&lt;p&gt;The sections below answer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What does RSS polling look like inside an app stack?&lt;/li&gt;
&lt;li&gt;Where do XML news feeds break product pipelines?&lt;/li&gt;
&lt;li&gt;What does a structured news integration look like instead?&lt;/li&gt;
&lt;li&gt;When should you keep RSS vs move to feeds, Signals, or the API?&lt;/li&gt;
&lt;li&gt;How do live coverage volumes change the design?&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try queries:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox?endpoint=articles" rel="noopener noreferrer"&gt;Articles sandbox&lt;/a&gt; · &lt;strong&gt;Push events:&lt;/strong&gt; &lt;a href="https://perigon.io/connectors/webhooks" rel="noopener noreferrer"&gt;Signals webhooks&lt;/a&gt; · &lt;strong&gt;Plans:&lt;/strong&gt; &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What RSS polling looks like in an app stack
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;RSS polling&lt;/strong&gt; is a client-side loop: store feed URLs, HTTP GET on a schedule, parse channel items, upsert by link or GUID, notify users. Many teams also scrape Google News–style query feeds the same way. The contract is thin - usually title, link, summary, published date - and each URL is its own silo.&lt;/p&gt;

&lt;p&gt;In a product that means:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Typical RSS approach&lt;/th&gt;
&lt;th&gt;Product friction&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ingest&lt;/td&gt;
&lt;td&gt;Cron + XML parse&lt;/td&gt;
&lt;td&gt;Poll windows miss bursts; every publisher is a custom URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identity&lt;/td&gt;
&lt;td&gt;Link / GUID&lt;/td&gt;
&lt;td&gt;Same story across 20 outlets → 20 rows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filter&lt;/td&gt;
&lt;td&gt;Keyword rules in your code&lt;/td&gt;
&lt;td&gt;No stable company or person IDs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delivery&lt;/td&gt;
&lt;td&gt;Your own queue after poll&lt;/td&gt;
&lt;td&gt;You own retries, backlog, and quiet hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scale&lt;/td&gt;
&lt;td&gt;Add more feed URLs&lt;/td&gt;
&lt;td&gt;Coverage sprawl without shared schema&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;None of that is wrong for a hobby bot. It is a weak foundation for a &lt;strong&gt;structured news feed&lt;/strong&gt; your customers rely on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where XML news feeds break product pipelines
&lt;/h2&gt;

&lt;p&gt;Four failure modes show up once the feature leaves a side project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Volume without structure.&lt;/strong&gt; In the Perigon index for pubDate &lt;strong&gt;2026-06-25&lt;/strong&gt; through &lt;strong&gt;2026-07-25&lt;/strong&gt;, a plain &lt;strong&gt;q&lt;/strong&gt; of cybersecurity matched about &lt;strong&gt;138,000&lt;/strong&gt; articles. OpenAI as a keyword hit about &lt;strong&gt;167,000&lt;/strong&gt;; resolving the same company via &lt;strong&gt;companyId&lt;/strong&gt; still returned about &lt;strong&gt;128,000&lt;/strong&gt; articles but only about &lt;strong&gt;402&lt;/strong&gt; Stories clusters. An RSS inbox treats every reprint as a new item. A product that alerts on “OpenAI news” without clustering or entity filters drowns users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keyword ≠ entity.&lt;/strong&gt; The same 30-day window: &lt;strong&gt;ChatGPT&lt;/strong&gt; as keyword ~&lt;strong&gt;80,000&lt;/strong&gt; articles; ChatGPT plus the OpenAI &lt;strong&gt;companyId&lt;/strong&gt; ~&lt;strong&gt;33,000&lt;/strong&gt;. &lt;strong&gt;Sam Altman&lt;/strong&gt; via person Wikidata &lt;strong&gt;Q7407093&lt;/strong&gt; ~&lt;strong&gt;17,500&lt;/strong&gt; articles / &lt;strong&gt;61&lt;/strong&gt; Stories. RSS has no first-class companyId or personWikidataId - you reinvent that with brittle string rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ticker and brand noise.&lt;/strong&gt; &lt;strong&gt;companySymbol&lt;/strong&gt; NVDA alone was about &lt;strong&gt;178,000&lt;/strong&gt; articles in that window; keyword NVIDIA about &lt;strong&gt;163,000&lt;/strong&gt;. High-volume names need allowlists, labels, and source packs - not another XML URL in the poller.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Push vs pull.&lt;/strong&gt; Products want &lt;strong&gt;webhook news alerts&lt;/strong&gt; into Slack, a CRM, or an internal bus. RSS is pull-only. You own the scheduler and the lag. Structured monitors that emit JSON events fit product SLAs better than “we polled 40 feeds at :00 and :15.”&lt;/p&gt;

&lt;h2&gt;
  
  
  What a structured news integration looks like
&lt;/h2&gt;

&lt;p&gt;A production &lt;strong&gt;news integration&lt;/strong&gt; usually separates three jobs RSS tries to do alone:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Retrieve&lt;/strong&gt; - queryable articles and stories with filters (company, person, source group, dates), not only subscribed XML URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor&lt;/strong&gt; - a durable watch (Signal / curated feed) for the beat your product cares about.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deliver&lt;/strong&gt; - email, connectors, or &lt;strong&gt;webhooks&lt;/strong&gt; into your systems when something matches.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On Perigon that maps to the Articles / Stories APIs for retrieval, Signals and &lt;a href="https://perigon.io/discover/feeds" rel="noopener noreferrer"&gt;Discover feeds&lt;/a&gt; for ongoing trackers, and &lt;a href="https://perigon.io/connectors/webhooks" rel="noopener noreferrer"&gt;Signals webhooks&lt;/a&gt; for push into your stack. The human-facing “is RSS enough?” decision stays on the RSS vs data feeds guide linked above; this page assumes you already know you are building software.&lt;/p&gt;

&lt;p&gt;Capability sketch for builders:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need in the product&lt;/th&gt;
&lt;th&gt;RSS polling&lt;/th&gt;
&lt;th&gt;Structured feed / API path&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stable company or person filter&lt;/td&gt;
&lt;td&gt;DIY keywords&lt;/td&gt;
&lt;td&gt;Entity IDs on search and monitors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One narrative, many reprints&lt;/td&gt;
&lt;td&gt;Manual dedupe&lt;/td&gt;
&lt;td&gt;Stories / clusters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real-time push to your app&lt;/td&gt;
&lt;td&gt;Build it&lt;/td&gt;
&lt;td&gt;Webhooks and connectors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shared schema for UI and agents&lt;/td&gt;
&lt;td&gt;Title + link&lt;/td&gt;
&lt;td&gt;Structured article fields&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Desk theme without URL sprawl&lt;/td&gt;
&lt;td&gt;Folder of feeds&lt;/td&gt;
&lt;td&gt;Curated / Signal-backed feeds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For ad-hoc query design (Boolean &lt;strong&gt;q&lt;/strong&gt;, sources, pagination), use the &lt;a href="https://perigon.io/blog/google-has-no-news-api-perigon-does-search-articles-apply-filters-and-build-feeds" rel="noopener noreferrer"&gt;practical news API guide&lt;/a&gt; - this post does not re-teach those params.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to keep RSS vs when to move
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Keep RSS polling&lt;/strong&gt; when the feature is a personal or internal reader, the outlet list is short and stable, and nobody outside that reader needs a shared schema or push SLA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Move to structured feeds / Signals&lt;/strong&gt; when the same beat must power a customer-facing surface, a team channel, or an automation - and you need multi-source coverage without babysitting feed URLs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Move to the News API&lt;/strong&gt; when the product needs programmable search, custom filters, historical windows, or agent tooling on top of the index - not only a prebuilt tracker.&lt;/p&gt;

&lt;p&gt;A practical migration for an app team:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inventory which RSS URLs actually drive product behavior; drop vanity polls.&lt;/li&gt;
&lt;li&gt;Map each job: awareness UI vs alert vs AI grounding.&lt;/li&gt;
&lt;li&gt;Parallel-run: keep the poller for a sprint while a Signal-backed feed or API query covers the same beat; compare misses, duplicates, and latency.&lt;/li&gt;
&lt;li&gt;Graduate push paths to webhooks; keep RSS only where a human still wants a classic reader.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;RSS polling&lt;/strong&gt; is a fine reader pattern and a fragile &lt;strong&gt;news integration&lt;/strong&gt; for products.&lt;/li&gt;
&lt;li&gt;Live volumes (e.g. ~128k OpenAI-company articles vs ~402 Stories in 30 days ending &lt;strong&gt;2026-07-25&lt;/strong&gt;) show why apps need entities and clusters, not more XML URLs.&lt;/li&gt;
&lt;li&gt;Split retrieve / monitor / deliver: API + Signals/feeds + webhooks beat a single cron parser.&lt;/li&gt;
&lt;li&gt;For “is RSS enough for a human desk?” use the Perigon RSS vs data feeds guide; for shipping product pipelines, design for structured feeds and push delivery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Get started:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox?endpoint=articles" rel="noopener noreferrer"&gt;Articles sandbox&lt;/a&gt; · &lt;a href="https://perigon.io/discover/feeds" rel="noopener noreferrer"&gt;Discover feeds&lt;/a&gt; · &lt;a href="https://perigon.io/blog/google-rss-vs-perigon-data-feeds" rel="noopener noreferrer"&gt;Google RSS vs Perigon data feeds&lt;/a&gt; · &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;

</description>
      <category>news</category>
      <category>api</category>
      <category>python</category>
    </item>
    <item>
      <title>44 Best Manufacturing News Sources in 2026</title>
      <dc:creator>Oleksyj Mokrousov</dc:creator>
      <pubDate>Sat, 25 Jul 2026 09:37:15 +0000</pubDate>
      <link>https://dev.to/alexperigon/44-best-manufacturing-news-sources-in-2026-12cl</link>
      <guid>https://dev.to/alexperigon/44-best-manufacturing-news-sources-in-2026-12cl</guid>
      <description>&lt;h2&gt;
  
  
  AI top-8 industrial source lists miss most of the beat
&lt;/h2&gt;

&lt;p&gt;Teams buying &lt;strong&gt;manufacturing news&lt;/strong&gt;, &lt;strong&gt;factory automation news&lt;/strong&gt;, and &lt;strong&gt;industrial automation news&lt;/strong&gt; feeds often start by asking an LLM for the “best” &lt;strong&gt;industrial trade publications&lt;/strong&gt;. That is a weak foundation for production monitoring. GPT, Claude, and Gemini each invent a short &lt;strong&gt;industry news sources&lt;/strong&gt; roster - they disagree on most names, skip whole lanes (supply chain trade desks, UK construction press, additive manufacturing, pumps and reliability), and still feel complete because eight domains fit in a chat reply.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do not trust that allowlist.&lt;/strong&gt; A brainstorm is not a curated &lt;strong&gt;B2B manufacturing media&lt;/strong&gt; pack. Perigon’s &lt;strong&gt;industrialTradePublications&lt;/strong&gt; source group (ID &lt;strong&gt;725&lt;/strong&gt;, 44 domains) is built for the full industrial picture: manufacturing leadership, plant engineering, controls, machinery, robotics, process ops, and adjacent &lt;strong&gt;supply chain trade news&lt;/strong&gt; - then applied as one reusable sourceGroup on search.&lt;/p&gt;

&lt;p&gt;Rather than maintaining dozens of publisher filters yourself, Perigon groups related publications into reusable source groups. Instead of listing every manufacturing publication in each API request, you can reference a maintained group that evolves over time.&lt;/p&gt;

&lt;p&gt;What fuller &lt;strong&gt;vertical manufacturing news&lt;/strong&gt; coverage looks like in industrialTradePublications source group?&lt;/p&gt;

&lt;p&gt;How to monitor &lt;strong&gt;machinery news&lt;/strong&gt;, plant ops, and automation with that source group&lt;/p&gt;

&lt;p&gt;How to &lt;strong&gt;filter manufacturing news by source&lt;/strong&gt;, company, topic, category, location, and date&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try it live:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox" rel="noopener noreferrer"&gt;Sandbox&lt;/a&gt; · &lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://perigon.io/docs/api/sources" rel="noopener noreferrer"&gt;Sources and source groups&lt;/a&gt; · &lt;strong&gt;Plans:&lt;/strong&gt; &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Other vertical packs (different SERPs): &lt;a href="https://perigon.io/blog/healthcare-news-compare-top-trade-publications" rel="noopener noreferrer"&gt;healthcare trade pubs&lt;/a&gt; · &lt;a href="https://perigon.io/blog/best-financial-news-sources-top25finance" rel="noopener noreferrer"&gt;top25finance&lt;/a&gt;. Creating private forks: &lt;a href="https://perigon.io/docs/api/sources" rel="noopener noreferrer"&gt;Sources and source groups&lt;/a&gt; - this page applies the public industrial pack only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why you should not trust AI for industrial trade publication allowlists
&lt;/h2&gt;

&lt;p&gt;Prompt three models for top &lt;strong&gt;industrial trade publications&lt;/strong&gt; with domains. Across ChatGPT, Claude, and Gemini:&lt;/p&gt;

&lt;p&gt;Only &lt;strong&gt;two&lt;/strong&gt; outlets appear on all three lists: IndustryWeek (industryweek.com) and Automation World (automationworld.com).&lt;/p&gt;

&lt;p&gt;Everything else is a bias: Claude skews assembly / ENR construction / American Machinist; Gemini pulls Manufacturing Dive, power, chemicals, and packaging titles; GPT favors machine-shop and UK engineering picks.&lt;/p&gt;

&lt;p&gt;Overlap is thin. Two-model agreement reaches a few more (manufacturing.net, plantengineering.com, controleng.com) - still nothing like a full &lt;strong&gt;niche industrial sources&lt;/strong&gt; set.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;What AI does&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;What breaks in production&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Returns a neat “top 8”&lt;/td&gt;
&lt;td&gt;Misses 30+ &lt;strong&gt;trade publication news&lt;/strong&gt; domains you may already need&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sounds authoritative&lt;/td&gt;
&lt;td&gt;Different models → different desks → different alert quality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mixes brainstorm + “also include” extras&lt;/td&gt;
&lt;td&gt;No stable name your Articles / Stories jobs can keep forever&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Claude even warns that “industrial” shifts by sub-sector (aerospace, materials handling, oil and gas). That is the point: an LLM answer is a &lt;strong&gt;partial&lt;/strong&gt; map. For &lt;strong&gt;plant engineering news&lt;/strong&gt;, &lt;strong&gt;factory automation news&lt;/strong&gt;, and &lt;strong&gt;industryweek&lt;/strong&gt;-class leadership coverage plus the rest of the floor, you need a maintained &lt;strong&gt;sourceGroup&lt;/strong&gt; - not a chat paste.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick split (domains once):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude-only top-8 → assemblymag.com, machinedesign.com, ien.com, enr.com, americanmachinist.com.&lt;/p&gt;

&lt;p&gt;Gemini → manufacturingdive.com, packworld.com, powermag.com, chemengonline.com.&lt;/p&gt;

&lt;p&gt;GPT-only → mmsonline.com, processingmagazine.com, theengineer.co.uk.&lt;/p&gt;

&lt;p&gt;Treat those as research signals that AI is incomplete - not as three competing truths.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fuller picture: industrialTradePublications group with 44 domains
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Field&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Value&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Name&lt;/td&gt;
&lt;td&gt;industrialTradePublications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Display name&lt;/td&gt;
&lt;td&gt;Industrial Trade Publications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source group ID&lt;/td&gt;
&lt;td&gt;725&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Size&lt;/td&gt;
&lt;td&gt;44 domains&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;Trade sources covering manufacturing, automation, machinery, and industrial operations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Pass sourceGroup=industrialTradePublications on Articles (/v1/all), Headlines, or Stories. Inspect members via Sources with the same group name - without dumping every domain into this article twice.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Perigon keeps that AI top-8 lists drop
&lt;/h3&gt;

&lt;p&gt;Durable AI shorts that do belong in a serious pack are already here (IndustryWeek, Automation World, Manufacturing.net, Plant Engineering, Control Engineering, plus many Claude/Gemini/GPT singles). The &lt;strong&gt;fuller picture&lt;/strong&gt; is the lanes chat lists routinely skip:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Daily manufacturing + supply chain trade news&lt;/strong&gt; - e.g. Manufacturing Dive and supply-chain trade desks (manufacturingdive.com, supplychaindive.com, supplychaindigital.com, …) beyond any GPT top 8.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Construction / owners / UK build press&lt;/strong&gt; - more than a single ENR mention (constructionowners.com, constructionnews.co.uk, theconstructionindex.co.uk, …).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Robotics, AMR, digital and additive manufacturing&lt;/strong&gt; roboticsandautomationnews.com, advancedmanufacturing.org, manufacturingdigital.com, metal-am.com, and peers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Process, food engineering, pumps, reliability, controls&lt;/strong&gt; - plant-floor and CPI-adjacent titles (food engineering, pumps and systems, reliable plant, Control Global, chemical engineering) so &lt;strong&gt;process manufacturing news&lt;/strong&gt; is not one magazine guess.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Associations and branded manufacturing media&lt;/strong&gt; - SME and manufacturing-today / tomorrow style &lt;strong&gt;industry news sources&lt;/strong&gt; models bury under “optional.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honest gaps:&lt;/strong&gt; GPT’s processingmagazine.com and Gemini’s packworld.com are not in this group snapshot. Add them with a private group or source= if mandatory - the public pack is the industrial default, not every URL on the internet.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;vertical manufacturing news&lt;/strong&gt;, not healthcare or finance packs (healthcareTradePublications, top25finance).&lt;/p&gt;

&lt;h2&gt;
  
  
  How to monitor manufacturing and industrial automation news
&lt;/h2&gt;

&lt;p&gt;Scope &lt;strong&gt;manufacturing trade publications&lt;/strong&gt; first, then keywords or companies. Without a publisher gate, live manufacturing OR automation search can surface azonano.com explainers or jobs.magna.com recruiting pages - real pages elsewhere, not &lt;strong&gt;industrial trade publications&lt;/strong&gt; desks. Lock the beat with sourceGroup=industrialTradePublications, then narrow with q (CNC, tariffs, recalls) or entities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stack industrial OEMs and automation vendors (resolved IDs)
&lt;/h3&gt;

&lt;p&gt;Combine companyId or companySymbol with the group for OEM / vendor desks:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Company&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Prefer&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;perigon companyId&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Symbols to prefer&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rockwell Automation, Inc.&lt;/td&gt;
&lt;td&gt;Controls / factory software OEM&lt;/td&gt;
&lt;td&gt;0e4fcdf843bf44c69653340aff7729ee&lt;/td&gt;
&lt;td&gt;ROK (NYSE)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Caterpillar Inc.&lt;/td&gt;
&lt;td&gt;Heavy equipment / plant ops&lt;/td&gt;
&lt;td&gt;a6aa46b5af9a45d590694b65741328fc&lt;/td&gt;
&lt;td&gt;CAT (NYSE)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Siemens Aktiengesellschaft&lt;/td&gt;
&lt;td&gt;Industrial / automation conglomerate&lt;/td&gt;
&lt;td&gt;a4aa185497164ee4a72ad9bb8ae2ffe2&lt;/td&gt;
&lt;td&gt;SIE.DE (XETRA) or SIEGY (OTC)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Name collisions to skip:&lt;/strong&gt; Haas / Inductive / Tungsten “Automation” rows; Siemens Energy, Mobility, Healthineers (Healthineers is med-tech, not this pack); credit-union hits under “Caterpillar.” Prefer the parent industrial firm + symbol above.&lt;/p&gt;

&lt;p&gt;Pattern: Articles with sourceGroup=industrialTradePublications and companySymbol=ROK (or Rockwell’s companyId) - trade allowlist + vendor, not open web. Company News pillar owns the full entity cookbook.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example coverage snapshot (minimal, in-group)
&lt;/h3&gt;

&lt;p&gt;Live pull: sourceGroup=industrialTradePublications + companySymbol=ROK - short overviews only (domain + summary; no article URLs):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;manufacturing.net&lt;/strong&gt; - Rockwell threat-detection managed services for industrial customers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;automationworld.com&lt;/strong&gt; - Rockwell Connected Enterprise / shop-floor connectivity themes.&lt;/p&gt;

&lt;p&gt;That is the shape of &lt;strong&gt;filter manufacturing news by source&lt;/strong&gt; after you stop trusting an AI top list.&lt;/p&gt;

&lt;p&gt;Use the same sourceGroup on the &lt;strong&gt;Stories API&lt;/strong&gt; when one plant closure, strike, or automation rollout is reprinted across many trade pubs - you track the narrative cluster once instead of every wire copy (see the &lt;a href="https://perigon.io/blog/news-stories-api-how-news-clustering-groups-related-articles-into-trackable-narratives" rel="noopener noreferrer"&gt;Stories clustering guide&lt;/a&gt; and &lt;a href="https://perigon.io/docs/api/stories" rel="noopener noreferrer"&gt;Stories docs&lt;/a&gt;). For a short briefing of that filtered set, pass results into &lt;a href="https://perigon.io/blog/ai-news-summaries-api-turn-news-search-results-into-executive-briefings" rel="noopener noreferrer"&gt;Search Summarizer&lt;/a&gt;. Add &lt;a href="https://perigon.io/blog/local-news-api-search-guide" rel="noopener noreferrer"&gt;local / geography filters&lt;/a&gt; when the desk cares about a plant city or region, and &lt;a href="https://perigon.io/blog/historical-news-api-search-long-range-news-archives-and-coverage-since-2016" rel="noopener noreferrer"&gt;historical date windows&lt;/a&gt; when you need archive depth - keep those recipes in their own guides rather than repeating them here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Filter manufacturing news by source, company, topic, category, location, and date
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Goal&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Mechanism&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Notes for industrial desks&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Publisher allowlist&lt;/td&gt;
&lt;td&gt;sourceGroup=industrialTradePublications&lt;/td&gt;
&lt;td&gt;Full picture for this vertical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-off domain&lt;/td&gt;
&lt;td&gt;source / excludeSource&lt;/td&gt;
&lt;td&gt;Titles AI named that are missing from the pack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who is mentioned&lt;/td&gt;
&lt;td&gt;companyId / companySymbol (ROK, CAT, Siemens AG)&lt;/td&gt;
&lt;td&gt;Inside the group&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What it is about&lt;/td&gt;
&lt;td&gt;topic, category, taxonomy&lt;/td&gt;
&lt;td&gt;Taxonomy pillar owns Google paths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Where the outlet sits&lt;/td&gt;
&lt;td&gt;Local / source-location&lt;/td&gt;
&lt;td&gt;Plant towns, regional construction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When&lt;/td&gt;
&lt;td&gt;from / to / addDateFrom&lt;/td&gt;
&lt;td&gt;Digests and incremental monitors&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When an AI list is a brainstorm vs when you need Perigon’s pack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Situation&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Prefer&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ideation slide (“names we recognize”)&lt;/td&gt;
&lt;td&gt;AI shortlist - then verify&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production &lt;strong&gt;manufacturing news&lt;/strong&gt; feeds and alerts&lt;/td&gt;
&lt;td&gt;industrialTradePublications (725)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Must-have domain absent from the 44&lt;/td&gt;
&lt;td&gt;Private group or source=&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Publisher metadata&lt;/td&gt;
&lt;td&gt;Sources API + group name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Another industry SERP&lt;/td&gt;
&lt;td&gt;Healthcare or finance vertical posts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Do not trust AI top-8 lists&lt;/strong&gt; for &lt;strong&gt;industrial trade publications&lt;/strong&gt; - models agree on little and miss most of the floor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;industrialTradePublications&lt;/strong&gt; (725) is the fuller &lt;strong&gt;manufacturing trade publications&lt;/strong&gt; picture: 44 domains across automation, plant engineering, machinery, supply chain, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filter manufacturing news by source&lt;/strong&gt; with that sourceGroup; stack OEMs (ROK, CAT, Siemens AG) so job boards and random web hits stay out.&lt;/p&gt;

&lt;p&gt;Use LLM lists as research only; use Perigon’s group as the operational allowlist. Keep third-party copy as short overviews - not republished articles.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Get started:&lt;/strong&gt; &lt;a href="https://perigon.io/sandbox" rel="noopener noreferrer"&gt;Sandbox&lt;/a&gt; · &lt;a href="https://perigon.io/docs/api/sources" rel="noopener noreferrer"&gt;Sources and source groups&lt;/a&gt; · &lt;a href="https://perigon.io/reference" rel="noopener noreferrer"&gt;API reference&lt;/a&gt; · &lt;a href="https://perigon.io/products/pricing/apis" rel="noopener noreferrer"&gt;API pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>news</category>
      <category>api</category>
      <category>python</category>
    </item>
  </channel>
</rss>
