Bulk website tech, SEO & AI-readiness audit (Apify, paid)
web_batch_auditBulk audit up to thousands of websites in one call: collect technologies, SEO issues, security headers, AI crawler rules, sitemaps, and readiness scores for lead or portfolio scans.
Instructions
Bulk audit up to thousands of websites in one call via the Fairquery Apify Actor fairquery/website-tech-seo-ai-readiness: technologies, on-page SEO, security headers, robots.txt AI-bot rules, XML sitemap, llms.txt, seo_score and ai_readiness_score per site. WHEN TO USE: lists of 20+ sites (lead enrichment, portfolio/market scans) where you want server-side parallelism and a dataset. For one or a few sites prefer the free tools: web_quick_check, web_seo_audit, web_ai_crawler_access, web_tech_stack, web_sitemap_info, web_security_headers. Rows can be stored and later diffed with web_compare_snapshots. BEHAVIOR: read-only; runs the Actor via the Apify API (run-sync), a few polite GET requests per site, respects robots.txt by default, no JS rendering. Requires APIFY_TOKEN (never logged). Typical 2-10 s per site, parallel. COST: paid (billed to your Apify account, pay-per-event): $0.00005 per run + $0.002 per site row; error rows are free. 50 sites ~ $0.10. RETURNS: {count, items}. site rows: domain, status_code, https, response_ms, title, meta_description, canonical, lang, h1[], word_count, open_graph, json_ld_types, technologies[{name, category, evidence}], security_headers, robots_txt_found, ai_bots{bot: allowed|partial|blocked}, sitemap_found, sitemap_url_count, llms_txt_found, llms_txt_title, seo_score, seo_issues[{code, severity, message}], ai_readiness_score, source_url, checked_at. error rows: code (INPUT_EMPTY, INVALID_URL, MAX_SITES_EXCEEDED, ROBOTS_DISALLOWED, FETCH_FAILED, HTTP_ERROR, BLOCKED_OR_RATE_LIMITED), message, retryable, input. Tool-level errors: APIFY_TOKEN_MISSING, APIFY_ACTOR_RUN_FAILED. WHEN NOT TO USE: for 1-20 sites or interactive questions use the free tools above (same checks, no cost). EXAMPLE: {"urls":["vercel.com","netlify.com"],"checkLlmsTxt":false} -> {count:2, items:[{type:"site", domain:"vercel.com", seo_score:..., ...}, ...]}
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Domains or URLs, e.g. ["vercel.com","https://www.python.org/about/"]. Bare domains use https. One row per unique URL. | |
| maxSites | No | Safety cap on unique URLs per run (default 500); extras produce a MAX_SITES_EXCEEDED error row | |
| checkRobots | No | Fetch robots.txt and report allow/partial/blocked per AI bot (default true) | |
| checkLlmsTxt | No | Check /llms.txt and /llms-full.txt (default true) | |
| checkSitemap | No | Find the XML sitemap and count URLs (default true) | |
| respectRobotsTxt | No | Skip pages robots.txt disallows for generic crawlers, emitting ROBOTS_DISALLOWED (default true, recommended) |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| count | Yes | Number of rows returned | |
| items | Yes | Result rows; each has a "type" field (data rows or machine-readable "error" rows) |