Back to Blog
Product Update April 11, 2026 5 min read

Introducing the Content Farm Detector

We built an API to identify AI-generated "content farm" articles. Here's the thinking behind it, how it works, and how to integrate it into your workflow.

Content farms have a specific signature: articles written not for humans, but for search engines. They use generic templates, filler phrases, and surface-level coverage to rank for keywords without providing real value.

We built the Content Farm Detector to identify these articles automatically — via a single REST API call.

What Makes Something a “Content Farm” Article?

Content farm articles share common characteristics:

  1. Template openings — “In today’s fast-paced world…”, “It is important to note that…”, “When it comes to…”
  2. Filler phrases — “cutting-edge solutions”, “leveraging technology”, “maximizing efficiency”
  3. Low information density — Lots of words, not much substance
  4. Surface-level coverage — Never goes deep enough to be useful
  5. Keyword stuffing — The article exists to rank for specific terms

Traditional plagiarism checkers miss these because they’re not copying words — they’re copying patterns.

How the Detector Works

The Content Farm Detector evaluates articles against a defined set of content-farm signals using an AI model. You submit an article by URL or paste the raw text, and the service returns a structured JSON assessment in under 3 seconds.

The analysis checks for:

  • Keyword stuffing — unnatural repetition of target phrases beyond what is editorially justified
  • Thin content — articles below ~400 words with no substantive information
  • Structural uniformity — rigid template patterns (e.g., H2 → 3 sentences → H2 → 3 sentences) with no natural variation
  • Missing original research — no data, quotes, studies, interviews, or firsthand reporting
  • Filler paragraphs — content that restates the introduction without adding new information
  • Generic stock advice — content that could appear verbatim on any low-effort site
  • No author voice — no discernible author perspective, opinion, or expertise signals

Each request returns a structured JSON response with scores, detected signals, SEO manipulation risk, and a clear safe_to_link_to verdict — all from a single POST /api/analyze call.

Quick Start

Send a POST request to the /api/analyze endpoint with either a URL or raw article text:

const RAPIDAPI_KEY = process.env.RAPIDAPI_KEY
const RAPIDAPI_HOST = 'content-farm-detector-api-ai-seo-quality-scorer.p.rapidapi.com'

async function analyzeArticle(articleUrl) {
  const response = await fetch(`https://${RAPIDAPI_HOST}/api/analyze`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-RapidAPI-Key': RAPIDAPI_KEY,
      'X-RapidAPI-Host': RAPIDAPI_HOST,
    },
    body: JSON.stringify({
      url: articleUrl,
      options: {
        check_seo_signals: true,
      },
    }),
  })

  if (!response.ok) {
    const error = await response.json()
    throw new Error(`API error ${response.status}: ${error.message}`)
  }

  return response.json()
}

const result = await analyzeArticle('https://example-blog.com/10-best-seo-tips')

console.log(`Quality Score: ${result.content_quality_score}/100`)
console.log(`AI Probability: ${result.ai_probability}`)
console.log(`Safe to link:   ${result.safe_to_link_to}`)
console.log(`SEO Risk:       ${result.seo_manipulation_risk}`)
console.log(`Signals:        ${result.content_farm_signals.join(', ')}`)
console.log(`Cached:         ${result.cached}`)

You can also submit raw text directly instead of a URL:

const result = await fetch(`https://${RAPIDAPI_HOST}/api/analyze`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-RapidAPI-Key': RAPIDAPI_KEY,
    'X-RapidAPI-Host': RAPIDAPI_HOST,
  },
  body: JSON.stringify({
    text: articleText, // minimum 50 characters
    options: {
      domain: 'example-blog.com',
      check_seo_signals: true,
    },
  }),
}).then((r) => r.json())

The API returns two key scores: content_quality_score (0–100, where higher is better — 80–100 is excellent, 0–39 is content-farm/spam) and ai_probability (0.0–1.0, where higher means more likely AI-generated). The safe_to_link_to boolean combines these with SEO risk analysis into a single actionable verdict: true only when content_quality_score ≥ 50, seo_manipulation_risk is not “high”, and ai_probability ≤ 0.85.

Response Fields

FieldTypeDescription
ai_probabilitynumber | null0.0–1.0 probability the content was AI-generated
content_quality_scorenumber | null0–100 editorial quality score (higher is better)
content_farm_signalsstring[]Detected signals: keyword_stuffing, thin_content, structural_uniformity, no_original_research, and more
seo_manipulation_riskstringOne of: low, medium, high, unknown
original_research_detectedbooleanTrue if the text contains original data, quotes, or firsthand reporting
keyword_density_scorenumber | null0.0–1.0 measure of keyword stuffing intensity
recommendationstring1–3 sentence explanation and recommended action
safe_to_link_tobooleanActionable verdict for automated filtering rules
cachedbooleanTrue if served from the 2-hour KV cache

Use Cases

Link-building teams prospect 200–500 domains per campaign using Ahrefs or Semrush, then spend days manually rejecting content farms. Pipe your export through the API overnight: sites scoring below 40 on content_quality_score are auto-rejected. A 500-domain batch costs under $5 on the PRO plan.

Ad Networks — Gate Publisher Onboarding

Add the API to your publisher onboarding flow. Sample three URLs from each new domain and reject any with an average ai_probability above 0.75 or seo_manipulation_risk of “high”. This cuts MFA (Made-for-Advertising) sites from your inventory at the source.

Content Aggregators — Filter Before Storage

Call the API on every article before storing it in your database. Articles with content_quality_score below 50 or safe_to_link_to set to false are discarded silently. The filter adds 2–3 seconds on a cache miss and under 200ms on a cache hit.

Performance & Caching

Responses for identical inputs are cached for 2 hours in KV storage. This means:

  • Cache miss: ~2,200ms (dominated by AI inference)
  • Cache hit: ~90ms (KV read + JSON parse)
  • Cost: repeated checks on the same URL during a crawl batch are effectively free

At a 35%+ cache hit rate, average response time drops below 1.5 seconds and AI costs decrease proportionally.

Limitations

No detector is perfect. We want to be clear about what this does and doesn’t catch:

  • Catches: Template-based, SEO-focused content at scale; AI-generated articles with robotic structure and no original reporting
  • May miss: Well-researched AI-assisted articles with genuine data and quotes; human-written content that happens to use common phrases

An article written by a human who researched thoroughly but used some common phrases would score differently than an AI-generated article using the same phrases without research backing.

Use this as one signal in your assessment, not a definitive verdict.

The Bigger Picture

Content farms exist because search engines have historically rewarded volume and keywords over quality. As AI makes it easier to generate high-volume, keyword-optimized content, the problem gets worse.

Tools like this one won’t solve the incentive problem. But they can help the humans in the loop — editors, link builders, ad ops engineers — make better decisions about what to read, what to link to, and what to recommend.

We’re not trying to police AI-generated content. We’re trying to help identify content that doesn’t serve human readers, regardless of how it was made.


Try the Content Farm Detector free on RapidAPI — the BASIC plan includes 50 requests per month at no cost. If you find it useful (or not), we’d love to hear your feedback.