An aggregation pipeline lives or dies on three decisions per article: which feed it belongs in, whether the source is a real publisher or a content farm, and how high it deserves to rank. One classification layer answers all three — real-time IAB categorization for topic routing, MFA and quality scoring for source hygiene, and sentiment for tonality tagging.
News apps, RSS platforms and media-monitoring services ingest tens of thousands of items an hour from sources they mostly did not choose. Publisher-supplied metadata is inconsistent when it exists at all, and generative AI has collapsed the cost of standing up a plausible-looking "news" site — so the firehose now carries an increasing share of machine-written filler engineered to be aggregated, monetized and syndicated.
RSS categories are freeform, self-declared and gamed. Routing on them yields crypto spam in the finance feed and press releases in world news.
A 200-article "local news" site now costs a weekend of LLM generation. Volume and plausible-looking text are no longer evidence of an editorial operation.
Without a credibility signal, an aggregated rewrite outranks the original reporting it copied — punishing exactly the publishers your product depends on.
Editors can police a hundred sources, not fifty thousand. Every onboarding queue backed by humans alone becomes the bottleneck — or the hole in the fence.
Three decisions, three machine signals — each available per URL in real time and per domain in batch.
Real-time categorization classifies each incoming article URL into the IAB taxonomy with confidence scores and detected language — a standard, advertiser-compatible topic label your feeds, push-notification rules and personalization models can all share.
MFA detection scores a source 0–100 for made-for-advertising behavior — ad-stack forensics, DOM structure, LLM content-authenticity judgment and public MFA research. Gate source onboarding on it, and the AI farm never enters the index.
Quality scores grade clickbait, trustworthiness and originality per page. Feed them into ranking so original reporting beats the rewrite, and tag tonality with the sentiment analyzer for monitoring dashboards.
The news & media slice of the 102M-domain database gives you the publisher population pre-classified — expand coverage from a curated list instead of waiting for junk to arrive, with the offline database handling zero-latency domain lookups in the hot path.
Classify the article, gate new sources on MFA score, route to the feed. Both endpoints sit behind the same key; docs at /api.php.
import requests
API = "https://www.websitecategorizationapi.com"
def ingest(article_url):
r = requests.post(f"{API}/api/iab/iab_web_content_filtering.php",
data={"query": article_url, "api_key": KEY,
"data_type": "url"}, timeout=30).json()
top = r["classification"][0]
if top["confidence"] < 0.6:
return review_queue.put(article_url)
feeds.route(
url=article_url,
topic=top["category"], # "News > Business News"
language=r["language"], # "en"
)
{
"classification": [
{"category": "News > Business News", "confidence": 0.93},
{"category": "Business > Finance", "confidence": 0.77}
],
"language": "en",
"status": 200
}
def onboard_source(domain):
r = requests.post(f"{API}/api/mfa/score.php",
data={"query": f"https://{domain}",
"api_key": KEY}, timeout=180).json()
if r["mfa_score"] >= 66: # HIGH / VERY HIGH
return sources.reject(domain, r["signals"])
if r["mfa_score"] >= 46: # MODERATE
return editors.review(domain, r["signals"])
sources.accept(domain, tier=r["mfa_risk"])
The score decomposes into named signals —
content_originality, ad_to_content_ratio,
publicly_flagged_mfa — so a rejected publisher gets an evidence trail, not a
verdict. Rejections become defensible, and appeals become two-minute reviews.
How the signals combine in practice (thresholds are yours to tune).
| Stage | Signal | Rule of thumb | Action |
|---|---|---|---|
| Source onboarding | MFA score | 66+ reject, 46–65 review | Keep farms out of the index |
| Article ingestion | IAB category + confidence | Route at ≥ 0.6, else review | Feed assignment, notification rules |
| Ranking | Quality scores | Weight originality and trust | Original reporting ranks first |
| Display | Sentiment | Tag positive / neutral / negative | Tonality filters, monitoring alerts |
| Periodic hygiene | Re-scored source list | Re-check MODERATE monthly | Catch sources that turn |
Consistent topic feeds across thousands of sources and languages, with farm content filtered before it can dilute engagement metrics.
Auto-categorize user-added feeds on subscription — classification replaces the taxonomy users were never going to maintain by hand.
Category, sentiment and source-quality tags per mention, so a client alert distinguishes a national daily from a syndication farm echoing it.
Clean topic labels and quality features for training data — and a farm filter that keeps synthetic text from poisoning the corpus.
Use both shapes: the real-time endpoint for the per-article hot path, and the offline database for domain-level lookups at memory speed. Most pipelines resolve the source domain locally and only call the API for article-level classification.
The 0–100 score has five tiers, and everything MODERATE routes to human review with the full signal breakdown attached. Legitimate ad-heavy publishers are protected by long-form dampening and editorial profiling — see MFA detection for the benchmark details.
Yes — classification is multilingual and every response includes the detected language, which many teams use as a routing dimension in itself. The news & media database slice spans international publishers, so coverage expansion is not English-first by accident.
Send us a day's worth of article URLs and source domains; we return them classified, MFA-scored and quality-graded — so you can measure routing accuracy and farm catch-rate before integrating.
Try the MFA Demo Request a Sample Read the API Docs