Cogwork APIs

Free Webpage SEO Analyzer

One URL → on-page SEO signals plus an AI summary and a 0–100 score with concrete fixes. No signup. Built on the ShotKit AI Analyzer API.

Results appear here.

Put page intelligence in your product or agent

On-page SEO extraction + an AI summary & score in one call. Free tier: 50/month — then $5/mo for 1,000, up to 60,000.

POST /analyze { "url": "https://example.com" }
Get an API key →

The ShotKit Webpage Analyzer does one job: it reads a page and tells you how sound it is. In a single request it extracts the on-page SEO signals straight from the live DOM and asks Claude for a plain-language summary plus a 0–100 SEO score with concrete fixes — the kind of audit that normally means wiring an HTML parser and an LLM together yourself.

How it works

Give the analyzer a URL and it renders the page, pulls the SEO signals (title and meta-description length, a single H1, canonical, Open Graph tags, mobile viewport, robots, Schema.org structured-data types, word count, image alt coverage, link counts), and returns them alongside an AI verdict: a summary, the page's likely audience, and a score that blends a deterministic rule check with Claude's read so it's stable run-to-run. It returns JSON only — no image.

Pair it with ShotKit for a screenshot

The analyzer deliberately doesn't return an image — capturing pixels is the ShotKit Screenshot API's job. When you want both the signals and a visual (e.g. an audit report with a thumbnail), call the two endpoints side by side:

const host = "shotkit-website-screenshot.p.rapidapi.com";
const headers = { "X-RapidAPI-Key": KEY, "X-RapidAPI-Host": host };

// 1) the analysis (signals + AI score)
const analysis = await fetch(`https://${host}/analyze`, {
  method: "POST",
  headers: { ...headers, "content-type": "application/json" },
  body: JSON.stringify({ url })
}).then(r => r.json());

// 2) a screenshot for the visual
const shot = await fetch(
  `https://${host}/screenshot?url=${encodeURIComponent(url)}&json=true`,
  { headers }
).then(r => r.json());

// analysis.ai.seo.score  +  shot.url  → your report
Example full-page screenshot from the ShotKit Screenshot API, used alongside the analyzer
Companion visual from the ShotKit /screenshot API — pair it with /analyze for an audit report with a thumbnail.

Use cases

FAQ

What does the SEO score measure?
A deterministic rule score (title/description length, one H1, canonical, Open Graph, mobile viewport, structured data, content depth, image alt coverage) blended 50/50 with Claude's qualitative read, returned as a single 0–100 number plus the individual ruleScore and aiScore.
Does it return a screenshot?
No — it returns JSON signals and the AI verdict only. For an image, call the ShotKit /screenshot endpoint alongside it (see the example above).
Is it free?
Yes — free to try here with no signup. The API has a free tier of 50 analyses/month; paid plans start at $5/mo for 1,000 and scale to 60,000.
Are results cached?
Yes — analyses are cached per URL for 24h, so repeat calls return instantly and don't re-bill the AI step. Pass "refresh": true to force a fresh analysis after you've changed a page.

API reference

Call it through RapidAPI. Base host: shotkit-website-screenshot.p.rapidapi.com (the Analyzer ships on the ShotKit listing). Send your key as X-RapidAPI-Key and the host as X-RapidAPI-Host.

POST/analyze

Render a page, extract on-page SEO signals, and return an AI summary + blended 0–100 score. JSON in, JSON out.

FieldTypeDescription
urlrequiredstringAbsolute http(s) URL to analyze. Internal/private hosts are blocked.
widthoptnumberRender viewport width in px (default 1280, max 2560).
heightoptnumberRender viewport height in px (default 800, max 2560).
hideCookieoptbooleanHide common cookie/consent banners before reading the DOM.
hideoptstringComma-separated CSS selectors to hide before analysis.
delayoptnumberExtra ms to wait after load for late content (0–10000).
refreshoptbooleanBypass the 24h cache and re-analyze now.

Returns { url, page, ai }page holds the raw signals (title, titleLength, description, descriptionLength, canonical, h1, h1Count, h2, ogTitle, ogImage, lang, viewport, robots, structuredData[], imgCount, imgMissingAlt, linkCount, wordCount); ai holds { summary, audience, seo:{ score, ruleScore, aiScore, issues[], suggestions[] } }.

curl -X POST "https://shotkit-website-screenshot.p.rapidapi.com/analyze" \
  -H "content-type: application/json" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: shotkit-website-screenshot.p.rapidapi.com" \
  -d '{"url":"https://example.com"}'