SEO Analyzer avatar

SEO Analyzer

Pricing

from $1.00 / 1,000 analyzed pages

Go to Apify Store
SEO Analyzer

SEO Analyzer

Analyze the on-page SEO of public web pages: title, meta description, headings, canonical, Open Graph tags, word count, and a documented issue list. Plain HTTP fetch, no JavaScript rendering.

Pricing

from $1.00 / 1,000 analyzed pages

Rating

0.0

(0)

Developer

Cesar Santana

Cesar Santana

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

What it does

Analyzes the on-page SEO of public web pages. For each URL it fetches the page with a plain HTTP GET (no JavaScript rendering, no headless browser), parses the HTML, and delivers one record with the title, meta description, canonical link, robots meta, headings, Open Graph tags, language, word count, and a list of detected issues from a documented rule set.

Inputs

FieldTypeRequiredDefaultDescription
urlsarray of stringsyes["https://example.com"]Public page URLs to analyze. Maximum 500 per run.

Outputs

One dataset record per URL. status: "ok" records carry the full analysis; status: "error" records (transport failures: DNS, TCP, TLS, timeout, invalid URL) carry only url, errorMessage, fetchedAt.

FieldTypeDescription
statusstringok (analysis delivered) or error (fetch failed).
urlstringThe requested URL.
finalUrlstringFinal URL after redirects.
statusCodeintegerHTTP status of the final response.
responseTimeMsintegerFetch wall time in milliseconds.
titlestring | null<title> contents.
metaDescriptionstring | nullmeta[name=description].
canonicalstring | nulllink[rel=canonical] href.
robotsMetastring | nullmeta[name=robots].
h1arrayText of every <h1>.
h2CountintegerNumber of <h2> elements.
ogTitle / ogDescription / ogImagestring | nullOpen Graph tags.
langstring | nulllang attribute of <html>.
wordCountintegerVisible body word count (script/style removed).
issuesarrayIssue codes (see rule set below).
errorMessagestring[error] Why the fetch failed.
fetchedAtstringISO 8601 timestamp.

Issue rule set: missing-title, title-too-short (<30 chars), title-too-long (>60 chars), missing-meta-description, missing-h1, multiple-h1, missing-canonical, non-200-status.

Example record:

{
"status": "ok",
"url": "https://example.com",
"finalUrl": "https://example.com/",
"statusCode": 200,
"responseTimeMs": 83,
"title": "Example Domain",
"metaDescription": null,
"canonical": null,
"robotsMeta": null,
"h1": ["Example Domain"],
"h2Count": 0,
"ogTitle": null,
"ogDescription": null,
"ogImage": null,
"lang": null,
"wordCount": 24,
"issues": ["title-too-short", "missing-meta-description", "missing-canonical"],
"fetchedAt": "2026-10-12T08:46:13.717Z"
}

Pricing

Pay-per-event: one result event per analyzed URL — i.e. per record with status: "ok". Records with status: "error" (failed fetches) are delivered free. You are never charged for a URL we could not fetch, and a run that delivers zero analyses fails loudly instead of charging anything.

Final per-result price is set at publish under the Gate 1 rule (>= 3x measured platform cost, <= usage-dominant incumbent's per-item price).

Limits

  • Plain HTTP GET only — no JavaScript rendering, no headless browser. Pages that require JS to render will be analyzed as their raw HTML.
  • Maximum 500 URLs per run; 20s per-request timeout; up to 2 retries with backoff on network errors and HTTP 5xx (4xx is not retried).
  • A persistent 5xx is still an HTTP response: it is delivered as an ok record carrying the non-200-status issue.
  • URLs are fetched sequentially; runtime grows roughly linearly with URL count.
  • If every URL fails to fetch, the run fails with a clear status message.

Changelog

0.0

  • Initial release.

House conventions (not actor.json fields — set on the platform at publish): pay-per-event monetization only; no Standby mode; limited permissions only. Charge via Actor.charge({ eventName }) ONLY after a result is delivered; never charge on failures. Fail loudly (Actor.fail) when zero results are delivered, so broken runs never look successful.