AEO / GEO Readiness Auditor avatar

AEO / GEO Readiness Auditor

Pricing

Pay per usage

Go to Apify Store
AEO / GEO Readiness Auditor

AEO / GEO Readiness Auditor

Audits public web pages for AI answer-engine (AEO/GEO) + SEO citation-readiness — structured data, answer-up-front, freshness, E-E-A-T, meta — with a 0-100 score and concrete fixes.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Tommy G

Tommy G

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

AEO / GEO Readiness Auditor (Apify Actor)

Audit any public web page for how ready it is to be cited by AI answer engines (ChatGPT, Google AI Overviews, Perplexity) and by classic search — then get a 0–100 score, a letter grade, and concrete fixes. HTML-only (no headless browser), so it is fast and cheap to run.

What it checks (page-type-aware)

Structured-data presence and quality for the page type · question-shaped headings · concise answer-up-front block · semantic HTML · entity/sameAs signals · title · meta description (incl. og:description fallback) · canonical · Open Graph · Twitter card · H1 · heading structure · substantive content (CJK-aware word count) · freshness · author/E-E-A-T · language · image-alt coverage. Detects page type (article / qa / product / listing / homepage / other) and scores only the checks that apply to that type. noindex pages are capped to 0 / F and flagged citable: false. Likely client-rendered (SPA) pages are flagged confidence: low rather than silently failed.

Input

{
"startUrls": [{ "url": "https://example.com/blog/post" }],
"maxConcurrency": 5,
"maxPages": 100
}

maxPages is capped at 200 and maxConcurrency at 20 per run (cost guard).

Output — one STABLE record per URL (ok and error rows share this shape)

{
"status": "ok",
"requested_url": "https://example.com/blog/post",
"final_url": "https://example.com/blog/post",
"http_status": 200,
"redirected": false,
"page_type": "article",
"citable": true,
"readiness_score": 86,
"grade": "A",
"confidence": "high",
"render_warning": null,
"truncated": false,
"blocked_from_indexing": false,
"schema_types": ["Article"],
"word_count": 612,
"title": "...",
"meta_description": "...",
"checks": { "schemaQuality": { "pass": true, "applicable": true, "weight": 10, "detail": "..." }, "...": {} },
"strengths": ["schemaQuality", "title", "..."],
"recommendations": ["Add the citation-relevant schema type ...", "..."],
"summary": "Strong article (86/A) — citation-ready; 2 minor opportunities remain.",
"audited_at": "2026-05-29T..."
}

Failed fetches return the same keys with status: "error", an error message, and null scores — so the dataset exports to a clean table. Filter status == "ok" before averaging.

Why it's useful (and money-first)

Every site owner in 2026 wants to know "will AI tools cite my page?" — there is no clean, cheap answer for that. This gives a per-page score + a fix list. It is also dual-use: the system runs it on its own (and clients') sites for the GEO/AEO citation service.

Run locally / test (no Apify account needed)

npm install
npm test # unit tests on the pure audit logic (node:test)

Publish to Apify (the account-holder's step)

The free Apify account covers building + publishing free actors (no KYC, no payment). Monetization (pay-per-result pricing + payout) requires the adult account-holder's KYC and is a later step.

npm install -g apify-cli
apify login # in the free Apify account
apify push # from this directory — uploads + builds the actor

Then, in the Apify Console: set the actor to Public, write the store listing (use this README), and keep it free initially to learn the discovery algorithm and earn reviews. Only enable pricing later, via the adult account-holder, once the actor shows real repeat organic usage and clears a margin gate (profit = 0.8·revenue − compute).

Notes / safety

  • SSRF-guarded: rejects non-http(s) schemes and private/loopback/link-local/metadata hosts (e.g. 169.254.169.254, localhost, 10.x), and re-checks every redirect hop.
  • Respects robots.txt and rate-limits (maxRequestsPerMinute), per-host politeness.
  • Cost-guarded: maxPages ceiling 200, maxConcurrency ceiling 20, 1 retry, 30 s/req.
  • Stores derived signals only — no raw page bodies or personal data in the dataset.
  • HTML-only (no JS execution): genuinely client-rendered pages are flagged confidence: low with a render_warning, not silently failed. Audit only URLs you have the right to audit.
  • Core logic is in src/audit.js (pure, 14 unit tests + regression cases); src/main.js is the Apify wrapper; shared core in src/lib/ (jsonld, normalize, ssrf).
  • Known residual: hostname/IP-literal SSRF guard does not resolve DNS (DNS-rebinding mitigated by platform egress controls); HTML-only rendering; heuristic page-type detection.