{"$schema":"https://schema.org/SoftwareApplication","name":"RulerIQ","alternateName":["ruleriq.com"],"canonicalUrl":"https://ruleriq.com","category":"AI search visibility software (AEO / GEO)","lastVerified":"2026-11-03","tagline":"Measured right, fixed fast.","origin":"Built by Ryan Amarit, a front-end engineer with 8+ years in technical SEO, after SEO and growth teams asked how AI engines describe their brands and what to change.","summary":"Measures how ChatGPT, Perplexity, Gemini and Claude rank and describe a brand, with a margin of error (±), for B2B SaaS teams and SEO agencies (it works for any brand with a website). The free site check (no email), the free full check (any email; 5 questions x 4 engines x 2 runs) and a free own-key tier (1 brand, weekly, last 60 days of history shown) are live. Paid plans are planned and on a waitlist; they run 25 questions x 4 engines x 3 runs (weekly on managed keys, daily on your own keys). Claude and Cursor can use the free Remote MCP endpoint today for the site check and paste-ready fixes (no Score).","liveToday":["Free site check, no email: Site readability 0-100, AI-crawler check, what we found on the site, the 5 questions we would ask, paste-ready fixes (FAQ block, fact table, JSON-LD, llms.txt text). No Score.","Free full check, any email: Score with margin of error, which engines name you per question (5 questions x 4 engines x 2 runs), wrong prices (price only), pages to get onto, paste-ready fixes. Limits: 2 per email and 5 per network per day, cached 7 days; pauses until tomorrow when the daily budget is used.","Remote MCP (free, no plan): site check and paste-ready fixes, no Score. Beta: the full four-engine check with a Score on your own provider keys, no account (3 per IP per day).","HTML report page for a finished check (/api/report/{id})."],"planned":["Weekly check of 25 questions x 4 engines x 3 runs per brand on managed plans (Growth 1 brand, Pro 3 brands, Agency 10 client brands every other week); own-key plans check daily","Week-over-week change with a 'No real change' label, and score history","Competitor cited-pages comparison (Pro)","Wrong-price alerts (Pro)","Delivery by email, Slack and Notion","Search Console cross-check (read-only)","Connect your data: Google Search Console (questions built from your real searches; pages ranking on Google but missing from AI answers; clicks vs. impressions over 16 months)","Google AI Overviews tracked next to the 4 engines and joined to your Search Console queries","Core Web Vitals as site-health context (not part of the Score)","AI referral visits from Google Analytics","Which pages AI crawlers fetch, from your server logs","Exports to CSV and Google Sheets or BigQuery, for Looker Studio","Change over time: week-over-week counts as real only when bigger than the two weeks' combined margin; trend says rising or falling only when the data supports it, otherwise steady","Verified fixes: mark a fix done; later checks confirm it only when the change is bigger than run-to-run noise (for example, named in most runs on 2 checks in a row, or a wrong price gone from every run on 2 checks); otherwise it stays 'improving'","Fix list ranked by consistency: items seen consistently across runs and engines rank above one-off sightings","White-label PDF and share-link client reports, CSV, Looker Studio and API export (Agency, early access)","Own API keys (free tier, then $99/mo Pro and $199/mo Agency; own-key plans check daily, managed weekly or every other week), unlimited seats, switching and proration"],"enginesIncluded":[{"id":"openai","name":"ChatGPT (OpenAI with web search)"},{"id":"perplexity","name":"Perplexity (agent API)"},{"id":"gemini","name":"Google Gemini (with Google Search grounding)"},{"id":"anthropic","name":"Anthropic Claude (with web search)"}],"scoreFormula":{"mentionWeight":0.4,"citationAuthorityWeight":0.3,"factAccuracyWeight":0.2,"agentReadinessWeight":0.1,"confidenceIntervalLevel":0.9,"runsPerPromptPaid":3,"runsPerPromptFreeGrader":2},"pricing":{"currency":"USD","perEngineAddOnFees":0,"unlimitedTeamSeats":true,"tiers":[{"id":"free_grader","status":"live","name":"Free grader","monthlyUsd":0,"brands":1,"promptsPerBrand":5,"engines":4,"runsPerPrompt":2},{"id":"growth_managed","status":"planned (waitlist)","name":"Growth (managed)","monthlyUsd":129,"annualMonthlyUsd":109,"keyMode":"managed","brands":1,"promptsPerBrand":25,"engines":4,"runsPerPrompt":3,"cadence":"weekly"},{"id":"free","status":"live","name":"Free (your own API keys)","monthlyUsd":0,"annualMonthlyUsd":0,"keyMode":"byok","brands":1,"promptsPerBrand":25,"engines":4,"runsPerPrompt":3,"cadence":"weekly","historyRetentionDays":365,"historyVisibleDays":60,"delivery":"none"},{"id":"pro_managed","status":"planned (waitlist)","name":"Pro (managed)","monthlyUsd":229,"annualMonthlyUsd":199,"keyMode":"managed","brands":3,"promptsPerBrand":25,"engines":4,"runsPerPrompt":3,"cadence":"weekly (1 brand) / biweekly (2 brands)"},{"id":"pro_byok","status":"planned (waitlist)","name":"Pro (your own API keys, BYOK)","monthlyUsd":99,"annualMonthlyUsd":84,"keyMode":"byok","brands":3,"promptsPerBrand":25,"engines":4,"runsPerPrompt":3,"cadence":"daily"},{"id":"agency_managed","status":"planned (waitlist)","name":"Agency (managed)","monthlyUsd":449,"annualMonthlyUsd":399,"keyMode":"managed","brands":10,"promptsPerBrand":25,"engines":4,"runsPerPrompt":3,"whiteLabelReports":"planned","cadence":"biweekly"},{"id":"agency_byok","status":"planned (waitlist)","name":"Agency (your own API keys, BYOK)","monthlyUsd":199,"annualMonthlyUsd":169,"keyMode":"byok","brands":10,"promptsPerBrand":25,"engines":4,"runsPerPrompt":3,"whiteLabelReports":"planned","cadence":"daily"}]},"dataHandling":{"readsPublicPagesOnly":true,"collectsCustomersData":false,"stores":"Scan results from public pages, email and domain if submitted, IP addresses for rate limiting, and (when enabled) analytics events. See https://ruleriq.com/privacy","ownApiKeys":"For one-off checks, a key you supply is used for that request only. Beta for own-key plans (the plans themselves are not open yet): keys are stored encrypted, shown only as the last 4 characters, used only to run your checks, and deletable any time; own-key plans need all four engines covered, and if your key fails that engine is marked failed and you are told, never quietly run on our keys.","requiresCmsWriteAccess":false,"requiresCdnProxyInterception":false,"ingestsRawVisitorServerLogs":false,"enginesQueriedViaOfficialCommercialApis":true,"hostingProviders":["Fly.io (hosting)","Fly Postgres (database)"],"subprocessors":["OpenAI","Anthropic","Google","Perplexity","DeepSeek (not used at launch)","Cloudflare Turnstile","Clerk (when enabled)","Resend (when enabled)","PostHog (when enabled)","Nango (when enabled)","Stripe (when enabled)"],"certificationsHeldByRulerIq":[]},"deliverySurfaces":["Remote MCP (https://ruleriq.com/api/mcp) for Claude, Cursor, VS Code, Codex and other MCP clients (available, free: site check and paste-ready fixes, no Score; beta: read tools for your own tracked brands with a personal access key, plus one write tool, mark fix done, for keys created with write access)","Slack weekly digest (planned, paid plans)","Notion / Markdown Weekly Brief (planned, paid plans)","Email report (planned, paid plans)","Google Search Console read-only cross-check (planned, paid plans)","White-label PDF and share-link reports (planned, Agency early access)"],"mcp":{"endpoint":"https://ruleriq.com/api/mcp","transport":"Streamable HTTP (POST JSON-RPC 2.0)","protocolVersion":"2025-11-25","supportedProtocolVersions":["2025-11-25","2025-06-18","2025-03-26","2024-11-05"],"auth":"none for the free tools; the full check (ruleriq_full_check) takes your own provider keys as the request headers X-OpenAI-Key, X-Anthropic-Key, X-Gemini-Key and X-Perplexity-Key (all four, never as arguments, used for that request only, not stored or logged); optional Authorization: Bearer <personal access key> for the tools on your own tracked brands: read tools with any key, plus the write tool ruleriq_mark_fix_done when the key was created with write access (beta, paid plans not open yet)","installDocs":"https://ruleriq.com/docs/mcp","install":{"claude-code":"claude mcp add --transport http ruleriq https://ruleriq.com/api/mcp","codex":"codex mcp add ruleriq --url https://ruleriq.com/api/mcp","claude-desktop":"Customize > Connectors > Add custom connector, paste https://ruleriq.com/api/mcp (not claude_desktop_config.json)","cursor-and-vscode":"Remote server entry with url https://ruleriq.com/api/mcp in .cursor/mcp.json (mcpServers) or .vscode/mcp.json (servers, type http)"},"tools":[{"name":"ruleriq_audit_domain","title":"RulerIQ site check","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"description":"Run RulerIQ's free site check on a domain: Site readability 0–100 (crawler access, text in HTML, structured data, llms.txt, basics), what we found on the site, and paste-ready fixes. It does not query ChatGPT, Perplexity, Gemini or Claude and returns no Score. The full check runs at https://ruleriq.com/grader.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Website to check: a domain or URL, e.g. acme.com or https://acme.com"}},"required":["url"]}},{"name":"ruleriq_gsc_blindspots","title":"RulerIQ Search Console blind spots","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Takes Search Console queries you paste in (query, impressions, clicks, position), turns them into buyer questions and lists the ones where you rank on Google page 1. It makes no network calls and does not query AI engines: AI mention and citation rates are returned as 0, not measured.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Brand domain, e.g. acme.com"},"brandName":{"type":"string","description":"Brand name as customers write it"},"queries":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string","description":"The search query text"},"impressions":{"type":"number"},"clicks":{"type":"number"},"position":{"type":"number","description":"Average Google position"}},"required":["query","impressions","clicks","position"]}}},"required":["domain","brandName","queries"]}},{"name":"ruleriq_generate_fix_kit","title":"RulerIQ fix kit","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"description":"Reads a site's public pages and returns paste-ready fixes: FAQ HTML block, fact comparison table, JSON-LD (SoftwareApplication + FAQPage) and llms.txt text. Nothing is changed on the site, and no Score is returned.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Website to read: a domain or URL, e.g. acme.com or https://acme.com"}},"required":["url"]}}],"ownKeyTools":{"status":"beta, no account: runs the full 4-engine check (5 questions x 4 engines x 2 runs, same as the free grader) on keys sent per request as headers; 3 checks per IP per day; takes 1 to 3 minutes and streams; up to $0.90 per check on your keys; no history, schedule, verified fixes or delivery","headers":["X-OpenAI-Key","X-Anthropic-Key","X-Gemini-Key","X-Perplexity-Key"],"docs":"https://ruleriq.com/docs/mcp","tools":[{"name":"ruleriq_full_check","title":"Full check on your own keys","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"description":"Runs RulerIQ's full check on a domain: 5 buyer questions asked of ChatGPT, Perplexity, Gemini and Claude, 2 runs each plus extra runs where they disagree, and returns the RulerIQ Score with its margin of error, per-engine and per-question results, wrong prices, cited pages and a paste-ready fix kit. It uses YOUR provider keys, sent as the HTTP headers X-OpenAI-Key, X-Anthropic-Key, X-Gemini-Key and X-Perplexity-Key in your MCP client's config (all four are required); they are used for this request only and never stored or logged. Never pass keys as arguments. No RulerIQ account needed. Limit: 3 checks per IP per day. Takes about 1 to 3 minutes and costs up to $0.90 on your keys (the result reports an estimate). Quote the returned sentences as they are.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Website to check: a domain or URL, e.g. acme.com"},"category":{"type":"string","description":"Optional. What the company sells, in plain words (max 80 characters), if the detected category would be wrong, e.g. 'invoicing software for freelancers'."}},"required":["domain"],"additionalProperties":false}}]},"paidTools":{"status":"beta: needs a personal access key created in the app under Settings, Keys and connections; listed by tools/list only when the key is sent. Keys read by default; a key created with write access also lists the write tool below, which marks fixes done or undone on the key owner's own tracked brands.","tools":[{"name":"ruleriq_list_brands","title":"RulerIQ tracked brands","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Lists the brands this account tracks: domain, id, plan, status, last check and next scheduled check. Use it first to get a brand's domain or id.","inputSchema":{"type":"object","properties":{}}},{"name":"ruleriq_get_score","title":"RulerIQ Score","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"The latest RulerIQ Score (0-100) for a tracked brand with its margin of error, the four components (Named, Cited, Facts right, Site readability), the week-over-week verdict and the trend. The sentences returned are computed by RulerIQ: quote them rather than restating changes in your own words, and treat a change as real only when the sentence says so.","inputSchema":{"type":"object","properties":{"brand":{"type":"string","description":"A tracked brand's domain (e.g. acme.com) or id from ruleriq_list_brands. Optional when the account tracks one brand."}}}},{"name":"ruleriq_get_history","title":"RulerIQ score history","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Weekly check history for a tracked brand: the same rows as the History page and its CSV (Score, margin of error, change vs last week, verdict), oldest first, capped at 104 rows. Optional filters: from/to dates, one engine, one question (adds runs naming you and best rank).","inputSchema":{"type":"object","properties":{"brand":{"type":"string","description":"A tracked brand's domain (e.g. acme.com) or id from ruleriq_list_brands. Optional when the account tracks one brand."},"from":{"type":"string","description":"First date to include, YYYY-MM-DD."},"to":{"type":"string","description":"Last date to include, YYYY-MM-DD."},"engine":{"type":"string","enum":["chatgpt","perplexity","gemini","claude"],"description":"Limit to one engine."},"question":{"type":"string","description":"A question id or number from ruleriq_get_answers (e.g. p1 or 1). Question text is not stored yet, so questions are numbered."}}}},{"name":"ruleriq_get_fix_list","title":"RulerIQ fix list","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"The fix list from the latest check, ranked as in the app (wrong facts, then questions where the brand is not named, then pages to get onto). Each item has a status (open, improving, verified, regressed, not_enough_data) and a sentence from RulerIQ's verified-fix check. This tool only reads; mark an item done with ruleriq_mark_fix_done (needs a key with write access).","inputSchema":{"type":"object","properties":{"brand":{"type":"string","description":"A tracked brand's domain (e.g. acme.com) or id from ruleriq_list_brands. Optional when the account tracks one brand."}}}},{"name":"ruleriq_get_answers","title":"RulerIQ engine answers","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Per question and engine in the latest (or a given) check: whether the brand was named, agreement across runs (e.g. 3/5), best rank, plus the pages the engines cited in that check. RulerIQ does not store the engines' answer text. Question wording is returned for checks made since 2026-11-04 (earlier checks are numbered).","inputSchema":{"type":"object","properties":{"brand":{"type":"string","description":"A tracked brand's domain (e.g. acme.com) or id from ruleriq_list_brands. Optional when the account tracks one brand."},"question":{"type":"string","description":"A question id or number from ruleriq_get_answers (e.g. p1 or 1). Question text is not stored yet, so questions are numbered."},"engine":{"type":"string","enum":["chatgpt","perplexity","gemini","claude"],"description":"Limit to one engine."},"date":{"type":"string","description":"A check date, YYYY-MM-DD. Default: the latest check."}}}}],"writeTools":{"status":"listed by tools/list only for keys created with write access; calling without one returns an isError explanation. It writes only the key owner's own fix marks, exactly like the Mark done button in the app.","tools":[{"name":"ruleriq_mark_fix_done","title":"RulerIQ mark fix done","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"description":"Marks one fix-list item done (done=true, the same as the Mark done button in the app) or undone (done=false, back to still missing). Needs a personal access key created with write access; read-only keys cannot call it. The fixId comes from ruleriq_get_fix_list, and only tracked brands owned by the key's account can be written. A fix only counts as verified after at least two later full checks confirm it, so the item keeps showing 'not enough data' until then.","inputSchema":{"type":"object","properties":{"brandId":{"type":"string","description":"The tracked brand's id or domain from ruleriq_list_brands."},"fixId":{"type":"string","description":"The fix item's id from ruleriq_get_fix_list, e.g. price:gemini:$49/mo."},"done":{"type":"boolean","description":"true marks it done (shipped); false undoes that (still missing)."}},"required":["brandId","fixId","done"],"additionalProperties":false}}]}}},"apiEndpoints":[{"method":"POST","path":"/api/grade","auth":"public (Turnstile + rate limit)","description":"Check a domain: site check only, or a full 4-engine check."},{"method":"GET","path":"/api/grade?jobId=","auth":"public","description":"Poll a background scan job."},{"method":"POST","path":"/api/leads","auth":"public (rate-limited)","description":"Capture a lead email + domain."},{"method":"POST","path":"/api/track","auth":"Clerk (sign-in required)","description":"Start weekly tracking for a domain (planned for paid plans)."},{"method":"GET/POST","path":"/api/fix-status","auth":"Clerk","description":"Read/update fix status (shipped / still_missing / in_progress)."},{"method":"GET/POST","path":"/api/domains/verification","auth":"Clerk","description":"Domain ownership: list status for tracked domains, or start verification and get this account's DNS TXT record and homepage meta tag."},{"method":"POST","path":"/api/domains/verification/check","auth":"Clerk","description":"Check for the DNS TXT record or meta tag now (rate limited per account)."},{"method":"POST","path":"/api/gsc","auth":"public","description":"Import a GSC CSV export and convert queries to buyer prompts; with trackedBrandId, saves the rows to that brand (sign-in, owner)."},{"method":"GET","path":"/api/gsc/sites","auth":"Clerk","description":"Search Console properties the caller's own connected Google account can read (connect via POST /api/connections/nango/session with integration \"gsc\")."},{"method":"POST","path":"/api/gsc/fetch","auth":"Clerk","description":"Fetch GSC Search Analytics through the caller's own Google connection (Nango); with trackedBrandId, saves the rows to that brand (owner)."},{"method":"GET","path":"/api/gsc/queries?trackedBrandId=","auth":"Clerk (owner)","description":"Stored Search Console query set for a tracked brand."},{"method":"POST","path":"/api/mcp","auth":"public; optional bearer access key","description":"MCP server (Streamable HTTP): initialize, tools/list, tools/call, ping. A personal access key (Authorization: Bearer) lists the read tools for the owner's tracked brands; a key created with write access also lists ruleriq_mark_fix_done."},{"method":"GET","path":"/api/report/{id}","auth":"public (unguessable id)","description":"HTML report for a completed check, without the RulerIQ footer. HTML only; PDF and share links are planned."},{"method":"GET","path":"/api/export?type=leads|brands","auth":"Clerk or ADMIN_EXPORT_TOKEN","description":"CSV export of leads or tracked brands."},{"method":"GET","path":"/openapi.json","auth":"public","description":"OpenAPI 3.0 spec of the public API."}]}