# Deprecated: schedule lives on the project (410 Gone)
Source: https://docs.openlens.com/api-reference/account/deprecated:-schedule-lives-on-the-project-410-gone
/api-reference/openapi.json get /settings/schedule
Use `/projects/{id}/schedule` instead.
# List the caller's allowed platforms (read-only entitlement)
Source: https://docs.openlens.com/api-reference/account/list-the-callers-allowed-platforms-read-only-entitlement
/api-reference/openapi.json get /settings/platforms
# Return the caller's effective rate limits and quotas
Source: https://docs.openlens.com/api-reference/account/return-the-callers-effective-rate-limits-and-quotas
/api-reference/openapi.json get /me/limits
# Token usage and scraper spend, aggregated by model and call type
Source: https://docs.openlens.com/api-reference/account/token-usage-and-scraper-spend-aggregated-by-model-and-call-type
/api-reference/openapi.json get /usage
# Top cited domains for the latest or selected run
Source: https://docs.openlens.com/api-reference/citations/top-cited-domains-for-the-latest-or-selected-run
/api-reference/openapi.json get /sources
# Top topics where your own brand was mentioned, with the URLs cited
Source: https://docs.openlens.com/api-reference/citations/top-topics-where-your-own-brand-was-mentioned-with-the-urls-cited
/api-reference/openapi.json get /brand-mentions-summary
# Download a client-ready PDF visibility report
Source: https://docs.openlens.com/api-reference/deliverables/download-a-client-ready-pdf-visibility-report
/api-reference/openapi.json get /reports/visibility
Renders a multi-page PDF for the chosen run. `runId` is required — the caller picks the run from `/reports/runs`. Optionally include the full per-prompt detail via `includePrompts=1`.
# Recent run history for the report picker
Source: https://docs.openlens.com/api-reference/deliverables/recent-run-history-for-the-report-picker
/api-reference/openapi.json get /reports/runs
# AI-generated insight paragraph for one topic and run
Source: https://docs.openlens.com/api-reference/metrics/ai-generated-insight-paragraph-for-one-topic-and-run
/api-reference/openapi.json get /insights/topic
Synthesises visibility, attribute, and citation data for the topic into a 2–3 sentence actionable insight. Pass runId to read a specific completed run. Returns 404 when the project has no usable run or the topic is unknown.
# Per-platform source behavior patterns for the latest or selected run
Source: https://docs.openlens.com/api-reference/metrics/per-platform-source-behavior-patterns-for-the-latest-or-selected-run
/api-reference/openapi.json get /insights/engines
# Time-series visibility for a brand or all competitors
Source: https://docs.openlens.com/api-reference/metrics/time-series-visibility-for-a-brand-or-all-competitors
/api-reference/openapi.json get /visibility/trends
# Visibility scores for the latest usable or selected run
Source: https://docs.openlens.com/api-reference/metrics/visibility-scores-for-the-latest-usable-or-selected-run
/api-reference/openapi.json get /visibility
Default returns an array of `VisibilityScore` (one per brand). Pass runId to read a specific completed run. Use `type=topics` for a per-topic summary, `type=attributes&topicId=…` for a per-attribute breakdown, or `topicId=…` alone for a single topic's scores.
# Analyze a brand or confirm a new project
Source: https://docs.openlens.com/api-reference/onboarding/analyze-a-brand-or-confirm-a-new-project
/api-reference/openapi.json post /onboard
Two-step onboarding over Server-Sent Events. `action: analyze` researches a URL and proposes competitors and topics. `action: confirm` creates the project and generates prompts.
The response stream emits `data:` lines with progress events followed by a final event with `status: "complete"` and the payload.
# Add a brand (competitor or own)
Source: https://docs.openlens.com/api-reference/resources/add-a-brand-competitor-or-own
/api-reference/openapi.json post /brands
# Add a custom prompt-attribute value
Source: https://docs.openlens.com/api-reference/resources/add-a-custom-prompt-attribute-value
/api-reference/openapi.json post /projects/{id}/prompt-attributes
# Archive a custom prompt-attribute by value
Source: https://docs.openlens.com/api-reference/resources/archive-a-custom-prompt-attribute-by-value
/api-reference/openapi.json delete /projects/{id}/prompt-attributes
# Archive a project (soft delete)
Source: https://docs.openlens.com/api-reference/resources/archive-a-project-soft-delete
/api-reference/openapi.json delete /projects/{id}
# Create a new project
Source: https://docs.openlens.com/api-reference/resources/create-a-new-project
/api-reference/openapi.json post /projects
# Create a prompt under a topic
Source: https://docs.openlens.com/api-reference/resources/create-a-prompt-under-a-topic
/api-reference/openapi.json post /prompts
# Create a topic; prompts are generated in the background
Source: https://docs.openlens.com/api-reference/resources/create-a-topic;-prompts-are-generated-in-the-background
/api-reference/openapi.json post /topics
# Delete a brand
Source: https://docs.openlens.com/api-reference/resources/delete-a-brand
/api-reference/openapi.json delete /brands
# Delete a topic and its prompts
Source: https://docs.openlens.com/api-reference/resources/delete-a-topic-and-its-prompts
/api-reference/openapi.json delete /topics
# Get the project's active platforms and the caller's entitlement
Source: https://docs.openlens.com/api-reference/resources/get-the-projects-active-platforms-and-the-callers-entitlement
/api-reference/openapi.json get /projects/{id}/platforms
# Get the project's scan schedule
Source: https://docs.openlens.com/api-reference/resources/get-the-projects-scan-schedule
/api-reference/openapi.json get /projects/{id}/schedule
# List allowed prompt-attribute values for the project
Source: https://docs.openlens.com/api-reference/resources/list-allowed-prompt-attribute-values-for-the-project
/api-reference/openapi.json get /projects/{id}/prompt-attributes
# List brands in a project (your own + competitors)
Source: https://docs.openlens.com/api-reference/resources/list-brands-in-a-project-your-own-+-competitors
/api-reference/openapi.json get /brands
# List prompts, optionally filtered by topic or fetched by id
Source: https://docs.openlens.com/api-reference/resources/list-prompts-optionally-filtered-by-topic-or-fetched-by-id
/api-reference/openapi.json get /prompts
# List topics in a project
Source: https://docs.openlens.com/api-reference/resources/list-topics-in-a-project
/api-reference/openapi.json get /topics
# List your projects
Source: https://docs.openlens.com/api-reference/resources/list-your-projects
/api-reference/openapi.json get /projects
# Rename or archive an existing custom prompt-attribute
Source: https://docs.openlens.com/api-reference/resources/rename-or-archive-an-existing-custom-prompt-attribute
/api-reference/openapi.json patch /projects/{id}/prompt-attributes
# Set the project's active platforms
Source: https://docs.openlens.com/api-reference/resources/set-the-projects-active-platforms
/api-reference/openapi.json put /projects/{id}/platforms
# Soft-delete a prompt
Source: https://docs.openlens.com/api-reference/resources/soft-delete-a-prompt
/api-reference/openapi.json delete /prompts
# Update a brand's aliases
Source: https://docs.openlens.com/api-reference/resources/update-a-brands-aliases
/api-reference/openapi.json patch /brands
# Update a project
Source: https://docs.openlens.com/api-reference/resources/update-a-project
/api-reference/openapi.json put /projects/{id}
# Update prompt text, attributes, or active flag
Source: https://docs.openlens.com/api-reference/resources/update-prompt-text-attributes-or-active-flag
/api-reference/openapi.json put /prompts
Editing prompt text after results exist requires an explicit choice. The first call returns 409 with `requiresConfirmation: true` (plus `tracked` and `inFlightRun` hints); resend with `confirmClone: true` to clone-and-supersede (the original is deactivated with its history intact — recommended for tracked prompts) or `confirmOverwrite: true` to edit in place (unavailable while a run is in flight).
# Update the project's scan schedule
Source: https://docs.openlens.com/api-reference/resources/update-the-projects-scan-schedule
/api-reference/openapi.json patch /projects/{id}/schedule
# Cancel the running run for a project
Source: https://docs.openlens.com/api-reference/runs/cancel-the-running-run-for-a-project
/api-reference/openapi.json delete /prompts/run
# List a project's prompt run history
Source: https://docs.openlens.com/api-reference/runs/list-a-projects-prompt-run-history
/api-reference/openapi.json get /prompts/runs
Returns paginated prompt runs with status, timestamps, platforms, and task totals. Use a completed run's id as runId on historical analytics reads.
# Poll the status of a run
Source: https://docs.openlens.com/api-reference/runs/poll-the-status-of-a-run
/api-reference/openapi.json get /prompts/status
Pass `runId` for a specific run, or only `projectId` to fetch the project's most recent run. Live count fields distinguish retrieved provider outputs from evidence-ready analyzed outputs. Returns `status: "none"` when no run exists yet.
# Raw platform responses from the latest usable or selected run
Source: https://docs.openlens.com/api-reference/runs/raw-platform-responses-from-the-latest-usable-or-selected-run
/api-reference/openapi.json get /prompts/results
Returns enriched platform responses (one per prompt × platform) with parse state plus trusted brand mentions, citations, and attributes. Pass runId to read a specific completed run, or pair it with allowIncompleteRun=1 for live partial results. Empty array when no usable run exists.
# Start (or resume) a prompt run
Source: https://docs.openlens.com/api-reference/runs/start-or-resume-a-prompt-run
/api-reference/openapi.json post /prompts/run
Kicks off a fresh scan across the project's active platforms. Returns immediately with a `runId`. If a previous run was interrupted, this resumes it instead of starting a new one. Concurrent runs against the same project return 409.
# Changelog
Source: https://docs.openlens.com/changelog/overview
What's new in OpenLens.
## Site Readiness, rebuilt around the pages and fixes that matter
This release turns Site Readiness into a technical SEO workspace for understanding how search systems discover, access, render, and index your site. It also adds geographic AI visibility, live prompt-run results, per-run scope, and bulk prompt imports.
### New
**A new Site Readiness Mission Control.** New Site Readiness runs replace the single overall score with a clearer view of your site's actual condition: which pages are search-ready, at risk, blocked, or not yet checked; which important pages need attention; how much of the site was measured; and what changed since the previous compatible run.
The search-system view follows the journey a page takes through **Discover, Fetch, Render, Index, Experience, and Appear**. Missing evidence stays visibly unknown instead of being counted as a pass.
**A prioritized technical SEO worklist.** Repeated page-level problems are grouped into root causes, so a template problem affecting 200 pages appears as one piece of work instead of 200 disconnected warnings. Each item explains what OpenLens observed, why it matters, which pages are affected, and what to do next.
**Evidence-backed fix packages.** For supported issues, OpenLens can produce a copy-ready fix or a bounded engineering brief for the exact page, group of pages, template, or site file you select. Every package includes the proposed change, expected result, verification steps, rollback guidance, and the evidence used to create it.
OpenLens does not silently edit your site or claim that copying a fix solved the problem. After you make the change, run a targeted recheck to see whether the original condition is fixed or still detected.
**A visual map of your site.** The new Site Graph shows the internal links OpenLens actually observed. Explore how pages connect, find isolated or weakly linked areas, filter by page condition, and move from a page directly into its findings and fixes. A searchable page inventory provides the same evidence without requiring the visual graph.
**Per-run scope.** Choose the exact prompts and available platforms for an individual manual run without changing the project's saved configuration. The temporary selection applies only to that run, while project defaults and scheduled runs remain unchanged. This makes it easy to run focused investigations or compare different configurations back to back without repeatedly editing project settings.
**Geographic AI visibility.** Agency teams can run prompts across multiple selected countries and compare visibility, sentiment, brand performance, and competitor performance by market. Each run preserves its exact geographic scope, and reports include the country breakdown alongside a compact world map.
**Bulk prompt imports.** Add up to 50 prompts at a time from pasted content or uploaded CSV, JSON, JSONL, Markdown, and text files. Review and edit the extracted prompts, assign their topics, and resolve duplicates before anything is saved.
### Improved
**Site Readiness runs are durable and resumable.** Large scans now save their progress page by page. If a run is interrupted, OpenLens can continue the same run from its last completed checkpoint instead of repeating finished work or losing the evidence already collected.
Active scans show their current stage, elapsed progress, page coverage, and partial results as they arrive. You can cancel a run without discarding completed evidence, and unused reserved page allowance is returned automatically.
**Google performance evidence now lives with Site Readiness.** Connect Search Console and GA4 to prioritize technical findings using search exposure and AI-referral activity. Each run keeps its own aggregate snapshot, so reopening an older run shows the evidence available at that time rather than replacing it with today's data.
Traffic data is used for prioritization, not as proof that a technical issue caused a ranking or traffic change.
**Visibility results appear while a run is still active.** Open an exact prompt run and watch its dashboard fill in as platform responses arrive. The page stays clearly marked as running, never mixes in results from a previous run, and transitions in place when the run finishes.
**Larger multi-market runs use your available credits.** We removed the old 750-execution limit. A run that fits within your organization's available monthly credits is no longer blocked by an additional arbitrary per-run ceiling.
**Clearer handling of historical Site Readiness reports.** Existing score-based reports remain available as Legacy reports. New runs use the evidence-based Mission Control model, so historical results stay readable without being presented as directly comparable to the new assessment.
**Better detection of background problems.** OpenLens now records structured operational signals when onboarding jobs, Site Readiness, Content Audit, billing, authentication, caching, or model fallbacks degrade behind the scenes. This gives the team a faster path from a partial or unexpected result to its underlying cause.
### Fixed
**Duplicate topic names fail gracefully.** Adding an existing topic, or receiving the same topic twice in one request, no longer produces a generic server failure. OpenLens distinguishes newly created topics from duplicates and only generates prompts for topics that were actually added.
### For API and MCP users
**Country context is preserved throughout prompt runs.** Country-aware runs retain the requested and effective market context with their response evidence, allowing integrations to distinguish results from different markets without mixing run scope.
**Safer topic creation.** Topic creation through REST and MCP now deduplicates repeated names and handles concurrent attempts without surfacing a user-facing database error.
### Questions?
If a Site Readiness result looks wrong, a market is unavailable for a platform, or an import does not parse as expected, email [contact@aibread.com](mailto:contact@aibread.com) and we'll sort it out.
## Connected community access, historical run data, and smoother workflows
This release makes community connection available from the app, improves several core workflows, and gives API and MCP users better access to historical run data.
### New
**Connect Discord from your account settings.** Teams can now link a Discord account from OpenLens, join the community flow, and keep their connection visible from the Connections page. The connection can also be removed from the same settings area.
**Historical run access for API and MCP users.** API and MCP workflows can now request supported historical run data by run ID, instead of only reading the latest run. This makes it easier to build repeatable reports, revisit prior analyses, and compare results over time.
### Improved
**Content Audit active runs are lighter.** Active Content Audit pages now poll with smaller payloads, so long-running audits stay responsive while they update.
**Search & Traffic setup points to the right place.** Setup actions now take you directly to the Google integrations area, with clearer focus on the connection step.
**Invitation and role management is clearer.** Invitation flows now explain when you are signed in with the wrong account, and organization owner-role changes are guarded so admins cannot accidentally grant owner access where an existing owner is required.
**Privacy policy data protection details.** The privacy policy now includes a clearer data protection section for connected account review and verification flows.
### For API and MCP users
**Run-specific reads.** Supported REST and MCP run reads now accept a run identifier so agents and integrations can request a specific historical run. Missing or invalid run identifiers return safe errors instead of falling back to ambiguous data.
### Questions?
Something not working the way you expect? Email [contact@aibread.com](mailto:contact@aibread.com).
## A cleaner OpenLens workspace, richer run history, and new ways to earn credits
This release refreshes the OpenLens app shell so navigation, settings, project context, and audit workflows feel more consistent across the product. It also makes past work easier to revisit: prompt runs, Site Readiness, AI Indexing, and Content Audit now share clearer history views with names, statuses, filters, and direct report actions where available.
### New
**A refreshed OpenLens workspace.** The dashboard, sidebar, settings, account menu, and project navigation have been redesigned around a more consistent app structure. It is easier to move between organization settings, project settings, audit tools, and run history without losing context.
**Run history across the product.** Prompt Runs, Site Readiness, AI Indexing, and Content Audit now use richer history tables with clearer names, statuses, timestamps, sorting, filtering, and pagination. Open a past run to review its results, copy its ID, rename it for your team, or download a report when your plan includes that export.
**Earn Free Credits.** Eligible teams can now earn extra OpenLens credits from inside the app by joining the OpenLens community, following launch channels, and inviting teammates. Progress is tracked in the app so you can see what is complete and what remains.
**Join the OpenLens community on Discord.** The app now links to the current [OpenLens Discord community](https://discord.gg/3gTCaJjURu) from the Free Credits experience, giving teams a direct place to follow updates and get help.
### Improved
**Cleaner settings and billing language.** Plan, billing, usage, and pricing copy now consistently uses credits terminology, so app limits, plan pages, docs, and MCP-facing messages all describe the same unit.
**More predictable project context.** Site Readiness, AI Indexing, and Content Audit now follow the project in the URL more consistently. Refreshing, sharing, or switching between audit pages is less likely to restore stale project context.
**Better Site Readiness and AI Indexing controls.** Run controls, page selectors, cooldown messages, loading states, and disabled states are clearer and more consistent. Site Readiness and AI Indexing now keep separate cooldowns, so starting one does not unnecessarily block the other.
**Smoother organization and invite flows.** Organization creation, switching, invite acceptance, and post-auth routing have been tightened so users land in the right place more reliably after sign-up, organization selection, or invitation acceptance.
**More resilient run and report behavior.** Cancelled prompt runs now stay marked as cancelled, report download actions show steadier feedback, and run rows are less likely to surprise you with stale or ambiguous status.
### For API and MCP users
**Credit-limit language is clearer.** MCP-facing limit and usage messages now use the same credits terminology as the app and docs, making allowance and run-cost messages easier to understand.
### Questions?
Something not working the way you expect? Email [contact@aibread.com](mailto:contact@aibread.com).
## An AI agent inside OpenLens, plus your Google data alongside AI visibility
The headline this release is a built-in AI agent that works inside your project. It also brings Google Search Console and Analytics data next to your AI visibility, and makes onboarding and the dashboard smoother.
### New
**An AI agent inside OpenLens.** Open the agent from any project and ask about your AI visibility in plain language. It can look across your prompts, brands, and runs, pull together an answer, and build finished documents for you as PDF, Word, or PowerPoint. When a request is ambiguous it asks a quick clarifying question instead of guessing, you can redirect it while it works, and it checks in before making changes to your project. Anything it produces is yours to download.
**Connect Google Search Console and Google Analytics.** Link your Google accounts to see classic-search clicks, impressions, and average position next to your AI visibility, plus how much traffic AI assistants are sending your way. You connect once for your organization, and each project picks which properties to use. This context sits alongside AI visibility; it doesn't change how visibility is scored.
### Improved
**Onboarding remembers where you left off.** Starting your first analysis now saves as it runs, so a refresh or a closed tab picks up your results instead of dropping you back at an empty form.
**A faster dashboard.** Pages after sign-in load and switch more quickly and smoothly, especially when moving between projects.
### For API and MCP users
**Search the docs from your tools.** New MCP tools let an assistant search the OpenLens documentation and pull the recommended steps for common tasks, so it can answer setup questions without leaving your workflow.
### Questions?
Something not working the way you expect? Email [contact@aibread.com](mailto:contact@aibread.com).
## Sturdier runs and honest refunds
No big new surface this time. v1.4.0 is a consolidation release: fixes and improvements that make runs finish reliably and keep billing honest.
### Fixed
**Stalled scheduled runs recover on their own.** A scheduled visibility run that got stuck used to sit "running" forever and quietly block new runs for that project. Stuck runs are now detected and restarted automatically.
**Scheduled runs are never blocked by manual-run limits.** Guards built to stop rapid manual clicking no longer apply to your schedule, so two projects due in the same window both run.
**Canceling an AI Indexing run refunds what it should.** Cancel before pages start checking and the full reservation comes back. Cancel mid-run and the dialog shows exactly how many pages are billable and how many return to your allowance. Canceling twice can no longer refund twice.
**One run of a kind at a time.** Starting the same check twice on one project now brings the second attempt to the already-active run instead of creating a duplicate. This is enforced at the database level, so it holds even under simultaneous clicks.
**Readiness keeps your www pages on apex domains.** If your site redirects example.com to [www.example.com](http://www.example.com), page discovery now keeps all your sitemap URLs instead of dropping them.
**Failed AI Indexing pages show as failed.** Individual page failures can no longer stall a run or hide in the report.
**The billing page no longer flickers on first load.** A mismatch between the server-drawn and browser-drawn page forced a visible re-render for some users. Both now draw the same page.
### Improved
**AI Indexing reports are shareable links.** Every run has a stable URL you can reload, bookmark, or paste to a teammate. Reports stay sign-in protected: someone else's run link shows "not available," never your data.
**Delete topics and brands without losing history.** Deleting now hides the item from management and future runs while keeping every past report intact, and you can re-add the same name later.
**A clearer plan comparison.** The pricing and billing pages share one rebuilt plan table that reads correctly in both light and dark mode.
**Visibility report PDFs show progress.** A generating state replaces the silent wait.
### For API and MCP users
**Batch writes.** The MCP write tools now accept batches, so an agent can set up prompts, topics, and competitors in a few calls instead of dozens.
**Breaking MCP tool renames.** Batch-capable write tools were renamed to plural forms and now take arrays: `add_competitor` → `add_competitors`, `delete_topic` → `delete_topics`, and so on. If you call these tools directly, update your integration before your next run. The [MCP tools reference](/mcp/tools) lists the current names.
**A video walkthrough of the MCP server.** The MCP docs page now embeds a short Loom showing setup end to end.
### Questions?
If a refund looks wrong or a run misbehaves, email [contact@aibread.com](mailto:contact@aibread.com) and we'll sort it out.
## AI Index Coverage, Content Audit, and a cleaner MCP surface
Two new tools answer the questions agencies keep asking: which of my pages do AI platforms actually know about, and what should I fix first to get cited. The MCP server also gets a safety and naming cleanup.
### New
**AI Index Coverage.** Point a run at your site and see, page by page, whether ChatGPT, Claude, and Gemini have your content indexed. Every page gets a clear verdict: indexed, not indexed, or unknown. It lives on its own page in the dashboard, next to Site Readiness. We validated the checks against a hand-labeled dataset, so verdicts are measured, not guessed. When we mark a page indexed on ChatGPT or Claude, we only count pages the assistant actually cited or returned, so those verdicts are highly accurate. Gemini is a lower-confidence signal, since it can occasionally surface a URL it reconstructed rather than one it retrieved, and we are actively tightening it. A run also harvests the citations it already collected and uses them to confirm pages other checks missed, which recovers real coverage at no extra cost. Free includes a monthly page allowance so you can try it on a real site; paid plans raise the cap and unlock full per-page detail.
**Content Audit.** Audit your whole site for how well each page can be cited by AI, then work a prioritized list instead of a wall of data. Each page gets a citation-potential score. You get an ordered worklist of what to fix first, an impact-versus-effort view, and a side-by-side of the current text against a stronger version you can copy. A cross-reference helper points you at a page you already wrote that does the weak part well, so you can mirror it. Free orgs see every page's score and the worklist; full fix detail, rewrites, and PDF export are on Starter and Agency. Monthly page allowances are 30 on Free, 1,000 per paid seat on Starter, and 10,000 per paid seat on Agency.
### Improved
**Larger page allowances on multi-seat plans.** AI Indexing and Readiness page allowances now scale with the number of paid seats in your organization, so larger teams get proportionally more room without changing plans.
**More accurate AI Indexing on Free.** The citation cross-check that upgrades a "not indexed" page to "indexed" now runs for everyone, including Free, so free runs report the same corrected coverage paid runs do.
### For API and MCP users
**Breaking MCP tool renames.** If you call these tools directly, update your integration before your next run.
* `manage_schedule` is replaced by `get_schedule` (read) and `update_schedules` (write).
**Read and write are now separate, and every tool says which it is.** No tool both reads and writes anymore, and each one carries a hint marking it read-only or as making changes. Compatible MCP clients can run reads without a per-call confirmation and prompt before anything that modifies or deletes. Tools that consume your plan's allowance now say so in their description.
**New MCP tools.** Agents can drive the two new features end to end:
* `run_ai_index_coverage`, `get_ai_index_coverage_run`, `list_ai_index_coverage_runs`
* `run_content_audit`, `get_content_audit_status`, `get_content_audit_results`, `list_content_audits`
* Site Readiness is now MCP-callable too: `run_readiness_check`, `get_readiness_run`, `list_readiness_runs`.
### Questions?
If a verdict looks wrong, a limit doesn't fit how you work, or a renamed tool is blocking you, email [contact@aibread.com](mailto:contact@aibread.com) and we'll sort it out.
## Site & Agent Readiness
Readiness is a new product surface that audits your own site instead of measuring what AI platforms say about you. It crawls a project's site, scores how discoverable and retrievable it is to AI agents and crawlers, and tells you exactly what to fix. It lives at **Readiness** in the dashboard, alongside your visibility view.
### New
**Readiness runs and a score out of 100.** Point a run at your site and get an overall readiness score with a verdict, broken down across six categories: Discoverability, Content Accessibility, Bot Access Control, Protocol Discovery, Agentic Commerce, and Agentic Browsing. Every check is marked pass, warn, or fail, and carries the issuing authority and maturity behind the standard it tests (Sitemaps.org, IETF, Cloudflare, Google, Schema.org, and more). Results stream in live as the run crawls, check by check.
**Run history.** Every run is saved per project. Reopen any prior run in full detail to see how the site has changed.
**Tiered scope and a monthly page allowance.** Two levers control how much a run crawls: a per-run page cap and a calendar-month pooled page allowance. A run that exceeds your balance is clamped to what's left, not blocked. Lighthouse sampling stays small and flat, so larger crawls never slow runs down. See [limits and allowances](/pricing/limits) for the per-plan numbers.
**A real taste on Free.** Free orgs run a full scan, see the overall score and every check's status, and get full detail on the first two flagged checks. Upgrade for full detail on every check.
**Scheduled runs.** Starter schedules weekly or monthly; Agency adds daily. A schedule fires automatically so your score keeps tracking your site.
**PDF export, branding, and share links.** Download any run as a PDF, plain or branded with your logo and brand color, with standards-credibility marks. Agency plans can publish a public, revocable share link to a run.
**Agent Journey waitlist.** Join the waitlist for Agent Journey from the Readiness surface.
### Questions?
If something looks wrong or a limit doesn't fit how you work, email [contact@aibread.com](mailto:contact@aibread.com) and we'll sort it out.
## A small signup addition, and reliability work behind the scenes
Most of this release was internal plumbing to make the product more reliable. One change is visible when you sign up.
### New
**"Where did you find us?" on sign-up.** New accounts can tell us how they found OpenLens. It's optional and takes one click. It helps us learn which channels bring in the people who get the most out of the product.
### Improved
**Steadier behind the scenes.** We tightened how account and subscription changes flow through our systems and moved tracing onto a faster pipeline, so fewer things slip through the cracks. Nothing in your dashboard changes.
### Questions?
Email [contact@aibread.com](mailto:contact@aibread.com) any time.
## Teams, plans, and your full platform coverage
This release turns OpenLens into a multi-seat product. You can now bring your whole team and your clients into one workspace, pick a plan that fits how you work, and track every major AI platform, including Grok, which is back. Existing accounts keep their current limits as a permanent floor, so nothing you rely on today gets smaller.
### New
**Organizations, seats, and client logins.** Your workspace is now an organization you can invite people into.
* **Roles that match how agencies work.** Owners and admins manage the account; members do the work; clients get a read-only login to see only their own projects.
* **Seats only count editors.** Viewers and client logins are free and unlimited. You pay for the people who actually run and edit work, not for everyone you want to show a dashboard to.
* **Invite teammates and clients** from your organization settings, and move a teammate's project access around without removing and re-adding them.
**Starter and Agency plans.** Two paid plans, each with a 7-day free trial and a 15% discount if you pay annually. See [plans and pricing](/pricing) for what each tier includes.
* **Starter** is for a single brand or a small team: up to 5 projects, with weekly tracking across the core platforms.
* **Agency** is for running many clients: unlimited projects and seats, daily tracking, and Claude and Grok included.
* Every plan includes the REST API, the MCP server, prompt attributes, full docs, and a public status page.
* Read the full announcement in [Introducing Starter and Agency](/blog/introducing-starter-and-agency).
**A Usage page.** A single place to see your plan, your seats, and how much of your monthly output allowance you've used, so there are no surprises.
**Grok is back, and Claude is included on Agency.** We restored Grok coverage through a direct API integration, with citations, and Agency plans now include both Claude and Grok alongside ChatGPT, Perplexity, Google AI Overview, Gemini, and DeepSeek.
### Improved
**Existing accounts are protected.** Every account that existed before this launch keeps its current limits as a floor, permanently. The new plan limits never claw back what you already had. If you were tracking more than the new defaults allow, you keep what you were using.
**A more reliable sign-in.** We fixed several sign-in and sign-up issues, including a hang on the sign-up button in some browsers, accounts with two-factor authentication, and Google sign-up not always carrying you through to the app.
**A refreshed dashboard.** The interface got a research-grade visual refresh, a new logo, and a faster, denser dashboard.
**A public status page.** Check live platform health any time at [openlens.com/status](https://openlens.com/status).
### For API and MCP users
No breaking changes. No endpoints or MCP tools were renamed or removed, and existing API keys keep working. Two things are new:
* **Organization-scoped API keys and MCP.** You can now issue keys at the organization level, and MCP sessions see the projects in your active organization. Your existing personal keys continue to work unchanged.
* **Per-plan usage on API and MCP.** API and MCP calls are now metered against your plan. Each plan includes a monthly allowance; once you pass it, calls return a clear message with an upgrade prompt instead of failing silently.
### Questions?
If a limit doesn't fit how you work, or something looks wrong, email [contact@aibread.com](mailto:contact@aibread.com) and we'll sort it out.
## Durable prompt runs and sharper brand detection
This release rebuilds the engine behind prompt runs so they survive restarts and deploys without dropping or duplicating prompts, sharpens how we detect your brand and competitors, and adds alias management to project settings.
### New
**Durable, crash-safe prompt runs.** We rebuilt how a prompt run executes. Each run is now tracked task-by-task in the database rather than only in memory, so a run keeps a complete, accurate record of which prompts and platforms it covers even if the server restarts mid-run (which happens routinely on every deploy).
* **No more dropped or duplicated prompts.** If a run is interrupted, it resumes from exactly where it left off instead of re-running work it already finished or silently skipping work it hadn't reached.
* **Self-recovering runs.** A run that gets stranded by a server restart is now detected and driven to completion on its own, instead of blocking that project's future scheduled runs until someone notices. Scheduled reports are far less likely to show a gap.
**Brand alias management.** You can now edit the list of aliases for each brand directly from project settings. Trade names, initialisms, short forms. OpenLens uses that list when deciding whether a mention in an AI answer is really your brand (or a competitor), so keeping it accurate directly improves your numbers.
### Improved
**More accurate brand detection.** Brand matching now records which alias triggered each mention, so a mention is tied to the exact name it matched on. That makes detection easier to audit and tightens the line between a real mention and a coincidental substring.
Historical reports are not auto-corrected. They reflect the detection logic that was live when the run happened. Run a fresh scan if you want a project re-scored against the latest logic.
**More complete answer coverage.**
* **Google AI Overview retries.** When a search doesn't surface an AI Overview on the first try, OpenLens now retries before recording it as absent, so transient misses don't understate your visibility.
* **Consistent outcome recording.** Answers from every platform now consistently record whether they returned content, so success and no-content cases are reported accurately across all platforms.
### For API and MCP users
No breaking changes for API or MCP integrations in this release. No endpoints or MCP tools were renamed or removed, and no request or response shapes changed in a way that requires you to update an existing integration.
### Known issues
**Grok coverage is temporarily unavailable.** Grok has moved its responses behind a paywall, which has taken our Grok scraper offline. Until we restore it, prompt runs with Grok enabled will complete every other platform normally but will not return Grok results. We're actively working on a fix.
If Grok is a critical platform for your reporting, reach out and we'll let you know as soon as coverage is back.
### Questions?
If something broke, looks wrong, or you want a project re-scored against the latest brand-detection logic, email [contact@aibread.com](mailto:contact@aibread.com).
## Prompt attributes and clearer naming
The last two releases (May 8 and May 16) shipped a new way to slice your data, more AI platforms behind the scenes, and a cleaner vocabulary throughout the product.
### New
**Prompt attributes.** Tag every prompt with one or more attributes. Branded vs non-branded, language, or any custom label you define per project (intent, funnel stage, persona, region). Every dashboard, metric, and report can now be filtered by those tags, so you can answer questions like "how do we rank on non-branded prompts in Spanish?" in one click.
* **Manage attributes** from the new *Prompt Attributes* section under project settings. Create, rename, and archive option lists per project.
* **Edit attributes in place** on any prompt. Analytics recompute against the live label set, so re-tagging is instant.
* **Auto-tagging on new prompts.** When OpenLens generates prompts during onboarding, it now also assigns attributes automatically using Claude Sonnet 4.6.
* **Live filter preview.** The attribute filter shows which prompts will be included while you build the filter, before you apply it.
**Grok and Gemini coverage.** OpenLens now scans Grok and Gemini alongside ChatGPT, Perplexity, Google AI Overview, Claude, and DeepSeek. New projects can enable either one from the platform picker; existing projects can turn them on from project settings.
**Public docs.** We launched public documentation, including the [MCP server setup guide](/mcp/overview) and the [REST API reference](/api-reference/introduction). The original URL `openlens.com/docs` 301-redirects here.
### Improved
**Clearer terminology.** We renamed two long-standing concepts so the product matches how agencies actually talk about the work:
* **Keywords** are now **topics**. A topic is the underlying buyer-intent theme; the prompts under it are the actual questions sent to AI platforms.
* **Queries** are now **prompts**, and a query run is now a **prompt run**.
All dashboards, settings, navigation, and exports use the new names. Old URLs continue to redirect.
**More accurate brand detection.** We rewrote the brand-matching logic to cut both false positives (mentions of unrelated brands that happened to share a substring) and missed short forms (initialisms and trade names). Brands now carry an explicit alias list you can edit from project settings.
Historical reports are not auto-corrected. They reflect the detection logic that was live when the run happened. If you want a project re-scored against the new logic, run a fresh scan or contact us.
### For API and MCP users
**Breaking changes.** The terminology rename and the new attributes system change a handful of endpoints and MCP tools. If you build on the API or have an agent connected via MCP, please update before your next scheduled run.
**REST API renames.**
* `/api/queries/run`, `/api/queries/status`, and `/api/queries/results` are replaced by `/api/prompts/run`, `/api/prompts/status`, and `/api/prompts/results`.
* The onboarding confirm payload accepts `topicList` in place of `keywordList`. The legacy field is still accepted during the transition.
**MCP tool renames.**
* `run_queries` becomes `run_prompts`
* `get_query_results` becomes `get_prompt_results`
* `add_keyword` becomes `add_topics`, and the rest of the `query_*` and `keyword_*` tool surface follows the same rename.
* `add_prompt` now requires a non-empty `attributes` array. The simplest valid value is `["branded"]` or `["non-branded"]`. You can also pass any custom attribute already defined on the project.
**New MCP tools.** Agents can now manage prompt attributes end-to-end:
* `list_prompt_attributes`, `add_prompt_attributes`, `archive_prompt_attributes`, `unarchive_prompt_attributes`
**PostHog event renames.** If you mirror OpenLens analytics into your own warehouse: event names `query_run_*` are now `prompt_run_*`, and `keyword_*` events are now `topic_*`. Every event also stamps a `form_factor` property (`web`, `api`, `mcp`, or `cron`) so you can split usage by surface.
### Questions?
If something broke, looks wrong, or you want a project re-scored against the new brand-detection logic, email [contact@aibread.com](mailto:contact@aibread.com).
# How OpenLens sources data
Source: https://docs.openlens.com/data-sources
Two channels, one schedule. What we measure and how.
OpenLens reads how AI models actually answer real questions about your brand. To do that we send queries through two channels, and which one we use depends on the model.
## The two channels
For ChatGPT, Perplexity, Google AI, and Gemini, we send queries through the same chat interfaces consumers use. We work with partner infrastructure providers to send those queries, on a schedule. The responses come back the way a consumer would see them, including citations and the actual UI structure.
For Grok, Claude, and DeepSeek the same approach is not viable at this time, so we use their public APIs. That means we get the same model and the same answers a developer would see, plus search context where the API exposes it. No web UI in the loop.
Mechanically the two channels differ. The scoring downstream treats them the same.
## Google Search and traffic context
OpenLens can also connect to Google Search Console and Google Analytics (GA4). These integrations do not power AI visibility scoring. They add run-pinned project evidence in [Site Readiness Performance](/manual/readiness#performance): classic-search clicks, impressions, CTR, average position, and AI-referrer sessions from GA4.
Google connections are organization-level OAuth connections. Each project selects the specific Search Console and GA4 properties it should use in Settings.
## Chat UI vs API
The chat UIs and the APIs are sometimes different products. Citations, formatting, and live search behavior can differ between what a model returns through its API and what the same model returns inside its consumer-facing chat app. When we can use the chat surface we do. That keeps the measurement honest with what your prospects actually see.
## Your own Google data
The channels above are OpenLens measuring the platforms. There is a third source, and you own it: connect Google Search Console and GA4 and OpenLens reads your search performance and AI-referred traffic straight from Google's APIs. Read-only aggregate evidence is pinned to each Site Readiness run; no user-level events or journeys are stored. Setup and MCP details are in [Site Readiness Performance](/manual/readiness#performance).
## FAQ
### What is the difference between web access and API?
When you log on to chatgpt.com you're using OpenAI's consumer product, which wraps the model in a UI with live search, citations, ad rules, and other features that aren't always in the API. The API gives you the raw model. For most of our supported platforms we measure the consumer surface, because that's where users actually meet your brand.
### Why can't you use the chat UI for Grok, Claude, and DeepSeek?
Different vendors expose their products differently. For Grok and Claude we use their public API plus live web search. DeepSeek's API has no web search, so its answers come from the model alone, and they are representative of what the model says about you.
### How often do you run queries?
On a schedule, at a cadence that depends on your plan: weekly or monthly on Free and Starter, plus daily on Agency. You pick the cadence and the time of day (UTC) per project in Settings. You can also kick off an on-demand run anytime: the **Run Now** button at the top of the dashboard, `POST /api/prompts/run` via the REST API, or the `run_prompts` tool via MCP. On-demand runs work independently of the schedule.
### Do you stress the platforms?
No. Queries are spread across the network and rate-limited, well below normal consumer use.
## Agent measurement (beta)
The two channels above measure what AI models say about you in their chat surfaces. We also have early support for measuring what AI **agents** do at your actual site. These channels are in beta. Contact us if you want access.
### Agent traffic (passive)
With CDN-level access to your site, OpenLens identifies agent traffic as it arrives. You see which agents are hitting your site, what they're doing, and where they bounce off. We don't change what your site serves. We record what hits.
### Agent visibility (active)
We send live agents at your site and record how they interact. Claude Code, Manus, ChatGPT Agent, and others as they appear. The recording captures where they get stuck, what they extract, what they decide to do, and what they think while they browse.
The chat-surface channels measure model answers. The agent channels measure agent behaviour on your actual site. See your brand the way the AI sees it.
Both channels are early. Reach out if you want to be on the alpha.
# Glossary
Source: https://docs.openlens.com/glossary
One canonical definition for every OpenLens term, so the same word means the same thing on every page.
The terms below have one authoritative meaning across the product, the docs, the REST API, and the MCP tools. Where two words are easy to confuse, both are defined together.
## Core entities
**Project.** The unit of tracking: one brand and its competitors, topics, prompts, platforms, and schedule — the thing you set up and measure. Everything else in OpenLens hangs off a project.
**Organization.** The owner of your projects, data, users, seats, and billing. You get your own when you sign up, and can invite people in or join someone else's. Every request is scoped to an organization.
**Brand and competitor.** A **brand** is a company tracked in a project. The project's own company is the **own brand**; every other tracked company is a **competitor**. Both are stored the same way and scored the same way.
**Topic.** A theme that groups prompts, e.g. "project management software." A project has many topics; each topic holds several prompts.
**Prompt.** A single question sent to the AI platforms, e.g. "What is the best project management tool for startups?" Prompts belong to a topic.
**Prompt run.** One execution of a project's active prompts across its active platforms, triggered manually ("Run Now") or on a schedule. A run fans out into many platform responses.
**Run status.** Where a prompt run stands. **Running** while it is still gathering answers; **Completed** when every platform finished; **Failed** if it could not finish; **Interrupted** if a restart stranded it mid-run (these recover on their own); **Cancelled** if you stopped it before it finished. The Recent prompt runs list shows each run's status.
**Platform response.** One platform's answer to one prompt within a run. This is the atomic result OpenLens parses for mentions, citations, and response attributes. In pricing this same unit is called an **output** — "one answer from one AI platform for one prompt." (See [Plans](/pricing/plans) for how outputs draw from your credit pool.)
## Metrics
**Visibility.** The share of platform responses that mention your brand. The headline number: how often models bring you up at all.
**Share of voice.** Your brand's share of the total brand discussion, measured across you and your competitors. Where visibility asks "do they mention you," share of voice asks "when brands come up, how much of the conversation is yours." Visibility and share of voice are different metrics and can move independently.
**Average position.** The order your brand tends to appear in a response, where 1 is first-mentioned and most prominent.
**Mention (brand mention).** A single instance of a brand named in a platform response. Mentions feed visibility and average position.
**Citation and source.** A **citation** is a specific URL a response cited. A **source** is the domain that citation belongs to. The dashboard's "AI Sources" view aggregates citations by source domain.
**Sentiment.** Whether a response attribute is discussed positively, neutrally, or negatively about a brand.
## Attributes and labels
**Prompt attribute.** A label you assign to a prompt to slice your data — e.g. `pricing`, `enterprise-readiness`, or the built-in `branded`. Prompt attributes are set at prompt-generation time and never derived from a response. See [Prompt attributes](/manual/prompt-attributes).
**Response attribute.** A quality discussed about a brand in a platform response, each with a sentiment — e.g. "noise cancellation," "pricing," "customer support." Response attributes are extracted from the response text by the parser; they are brand-scoped, but the quality itself is often category- or product-level, not an intrinsic brand trait. **Prompt attributes and response attributes are distinct:** one is a label you assign, the other is a quality the model brought up.
**Branded and unbranded.** A **branded** prompt names a brand ("Is Acme's pricing competitive?"); an **unbranded** prompt does not ("What is the best CRM?"). `branded` is a built-in prompt attribute, auto-assigned to prompts that name a brand, and is a common dashboard filter.
## Platforms
**Platform.** One of the seven AI systems OpenLens measures. Each platform is reached through one **channel**: the consumer chat surface ("Web") or the vendor's public API ("API"). See [How OpenLens sources data](/data-sources).
| Platform | Channel | Plans |
| ---------- | ------- | ------------------ |
| ChatGPT | Web | All plans |
| Perplexity | Web | All plans |
| Google AI | Web | All plans |
| Gemini | Web | Agency |
| Grok | API | Agency |
| Claude | API | Agency |
| DeepSeek | API | Starter and Agency |
Google AI measures Google's AI Overviews.
## Google integrations
**GSC property.** The unit Search Console tracks: either a domain property (`sc-domain:example.com`, covering every subdomain and protocol) or a URL-prefix property (one exact prefix). Each project points at one. See [Site Readiness Performance](/manual/readiness#performance).
**Key events.** GA4's current name for conversions. Same concept, renamed by Google in 2024. OpenLens reports them exactly as your GA4 property defines them.
**AI referral traffic.** Sessions arriving at your site with an AI platform as the referrer (chatgpt.com, perplexity.ai, gemini.google.com, and the rest). A lower bound by construction: native apps and pasted links send no referrer, so the true number is higher.
## Access and tenancy
**Roles.** A user's permission level within an organization: **owner** and **admin** manage everything; **member** works assigned projects; **client** is read-only on assigned projects.
**Credit pool.** The monthly allowance of credits an organization can spend on tracking, pooled across all its projects. Outputs (platform responses) draw from the pool at platform-specific weights: most platforms draw 1 credit per output; Claude draws 100 and Grok draws 50. See [Limits](/pricing/limits).
# Dashboard deep-dive
Source: https://docs.openlens.com/how-tos/dashboard-deep-dive
What the dashboard numbers actually mean and what to do about a bad result.
Reading the dashboard well takes a few mental models. This page explains what the numbers actually mean, what can move them without anything real changing, and what to do about a bad result.
Every dashboard is scoped to a single [prompt run](/manual/dashboard): you land on the run list and open a run to see it. The numbers mean the same thing on every run, so everything below applies whichever run you're viewing.
## The four metrics
The dashboard shows four numbers. Get the definitions right and the dashboard reads itself.
**Visibility** is the percentage of platform responses where your brand was mentioned at all. If 100 prompts ran across 7 platforms (700 responses) and your brand appeared in 280 of them, visibility is 40%. This is the mention rate.
**Mentions** is the raw count behind visibility. 280 in the example above. Same data, different presentation.
**Share of voice** is your mentions as a fraction of all brand mentions (you plus every competitor you're tracking) for the same set of prompts. If you got 280 and your three competitors got 420 between them, your SOV is 40%. Visibility tells you how often you appear. Share of voice tells you how often you appear compared to who else is in the conversation.
**Average position** is your rank in the answer when the AI lists multiple brands, averaged across every response that mentions you. Lower is better. 1.0 means you're first every time. 1.4 means first most of the time and second the rest. Position answers 'when the model mentions us, how prominently?'. Visibility answers 'how often does it mention us at all?'.
Visibility and position can disagree. You can be mentioned less often than a competitor but ranked higher when you are mentioned. The two numbers tell different things.
## Per-platform visibility
Same visibility number, broken out by AI platform. For each platform you also see your gap to the top competitor on that platform and a status indicator.
Read it like a scorecard. ChatGPT can love you while Perplexity ignores you. The status indicator gives you a one-glance summary per platform, so you can spot the disagreements worth acting on.
## Visibility trendline
Time series of your visibility number over a date range. Appears once you have at least two completed runs. Set up recurring runs in Settings (weekly or daily) and the line populates automatically. On-demand runs add a point every time you trigger one.
Use this to spot real movement vs single-run noise. One run flipped against you isn't a trend. Wait for three in a row before you act on it.
## Competitor snapshot
The headline view of how you stack against the brands you're tracking. Three numbers per brand: visibility %, share of voice, and average position. Sorted by share of voice.
Position and share of voice can diverge. A competitor can win on share of voice (mentioned more often than you) while you win on position (ranked higher when you are mentioned). Both numbers are real. They answer different questions: who shows up most, and who looks best when they do. A brand sitting at position 1.4 means models name it first most of the time even when other brands are in the same answer.
## Topic performance
Visibility broken out by topic. Click into any topic for the per-prompt breakdown underneath.
Use this view to find the topics where competitors dominate. Those are the gaps.
## AI sources
The list of cited domains models referenced when answering your prompts. The closest thing to a backlink graph for AI search.
Each row is one cited domain, with:
* **Count**: how many times the domain was cited across the run.
* **Platforms**: which AI platforms cited it.
* **URLs**: the specific pages the models pointed at, with title and per-URL count.
Filter by topic, platform, or prompt attribute. Default view is the top 20 cited domains, up to 10 URLs each.
Read this view to figure out where the models are pulling their answers from in your space. If review sites dominate citations for unbranded prompts in your category, that's where you need to show up. The competitor blogs you keep seeing in answers about your problem space are content gaps you can close one by one.
*Roadmap: domain categorization (own brand, competitor, news, UGC, review site, third party) and category-based filtering. Not in the UI yet.*
## Slice by attribute
Every interesting dashboard cut is just an attribute filter. The most prominent example is branded vs unbranded prompts (prompts that name a brand vs prompts that describe a need without one). Filter the dashboard by attribute to see each slice in isolation.
For the full mechanics, see [Prompt attributes](/manual/prompt-attributes).
## What moves the visibility score (for real reasons)
* Your brand is being mentioned in more responses than before.
* Competitor mentions dropped.
* A specific topic moved up or down because models are surfacing different sources for it.
## What moves the visibility score (for non-reasons)
* You edited prompts mid-run. Different questions get different answers.
* The active platform mix changed.
* Run-to-run variance. AI responses are stochastic. The system is stable in aggregate but any single prompt's answer can flip.
Knowing which is which is the difference between acting on signal and acting on noise.
## Why platforms disagree
ChatGPT, Perplexity, Gemini, and the others don't return the same answer for the same prompt. They're trained differently. They search differently. Some lean heavily on cited sources, some lean on training data. Disagreement is the baseline.
## Honest about noise
Run-to-run variance for any single prompt can be substantial. The system is stable in aggregate over a project's full set of prompts. Don't read a single prompt's flip from one run to the next as a real change. Look at the trend over several runs before deciding something has actually moved.
# How-tos
Source: https://docs.openlens.com/how-tos/overview
Task-oriented guides for the most common OpenLens workflows.
Task-oriented guides. The [Web UI manual](/manual/overview), [MCP server](/mcp/overview), and [REST API](/api-reference/introduction) pages describe each surface in reference form. How-tos walk through a specific task end-to-end.
What the four dashboard metrics mean, what moves them for real and for non-reasons, what to do about a bad result.
## See also
* **First-time use** is covered in the [Web UI manual Onboarding section](/manual/overview).
* **Connecting MCP clients** lives in [MCP server](/mcp/overview).
* **REST API walkthrough** lives in [API reference](/api-reference/introduction).
# Introduction
Source: https://docs.openlens.com/introduction
Track brand visibility across the AI platforms customers actually use.
OpenLens measures what AI systems say about your brand. We cover seven of them: ChatGPT, Perplexity, Google AI, Gemini, Grok, Claude, and DeepSeek. Run prompts across all of them, see who gets mentioned, where the answer is sourced from, and how the picture shifts over time.
OpenLens comes in four tiers: Free, Starter, Agency, and Enterprise. [Plans and pricing](/pricing/plans) covers what each one includes. For enterprise needs, email [contact@aibread.com](mailto:contact@aibread.com).
## What you'll find here
Sign-up to first result in about 15 minutes.
Walk through projects, topics, prompts, runs, and analytics.
Drive OpenLens from Claude Desktop, opencode, or any MCP client.
REST endpoints for programmatic access.
# AI Indexing
Source: https://docs.openlens.com/manual/ai-indexing
Check whether AI platform retrieval surfaces can verify a client's exact pages.
AI Indexing checks whether AI platform retrieval and search surfaces can verify exact pages from a client project. It answers a narrower question than the main dashboard: when OpenLens asks a platform to look for this page, does the platform return or cite the same canonical page URL?
Use it when you want to audit whether important pages are available to the retrieval layers behind AI answers, not whether the brand is visible in normal buyer prompts.
## How it differs from Site Readiness
Site Readiness checks whether a website is technically accessible and understandable to agents and crawlers. It looks at things like robots rules, structured data, page discoverability, snippet controls, accessibility, and agent-facing content quality.
AI Indexing runs separately because it is heavier. It sends page-level probes to external AI or search surfaces and waits for platform responses. A Site Readiness run can complete quickly from crawl and page analysis; an AI Indexing run may take longer because each platform has its own retrieval behavior, rate limits, and response time.
## How we measure this
AI Indexing currently checks:
| Platform | How it is measured |
| -------- | ----------------------------------------------------------------------------------------------- |
| ChatGPT | Title/domain-scoped web-search probe that checks whether ChatGPT cites the same canonical page. |
| Claude | Brave Search proxy for Claude's web retrieval surface, using host-scoped slug queries. |
| Gemini | Grounded Gemini search probe that reads the result URLs from Gemini's search response. |
OpenLens compares returned URLs by canonical page identity, not by literal string equality. Scheme, `www.` or mobile subdomain variants, query strings, fragments, trailing slashes, and percent encoding should not turn the same page into a false miss.
## Why Claude uses Brave Search
Anthropic does not expose a first-party per-page Claude index API. For Claude, OpenLens uses Brave Search as a retrieval proxy because Claude's web search behavior has strong public evidence pointing to Brave, and because OpenLens performed independent empirical validation comparing Claude web-search results with Brave Search results across sampled exact-page probes. That validation found the similarity strong enough to use Brave as the closest practical public proxy for Claude retrieval coverage.
Anthropic's [web search tool docs](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-search-tool) describe Claude web search as a server-side tool that runs searches and returns cited sources. TechCrunch reported that Anthropic added Brave Search to its subprocessor list, that Simon Willison observed matching Claude and Brave citations for the same query, and that Claude's internal web search schema exposed a `BraveSearchParams` name. See [TechCrunch's report](https://techcrunch.com/2025/03/21/anthropic-appears-to-be-using-brave-to-power-web-searches-for-its-claude-chatbot/) and [Brave's Search API page](https://brave.com/search/api/).
This is still a proxy. A pass means the exact page is available through Brave Search for the query OpenLens ran. That is the closest practical public signal for Claude retrieval coverage, not a guarantee that every Claude answer will cite the page.
## Scores and statuses
Each platform-page probe resolves to one of three product-facing outcomes.
* **Indexed** means the platform returned or cited the exact normalized page URL.
* **Not indexed** means the platform completed a grounded probe but did not return or cite that exact canonical page.
* **Unknown** means OpenLens could not get enough grounded provider evidence to decide. It is not the same thing as not indexed.
* **Score** is the percent of completed checks that passed, weighted through the same readiness scoring system used elsewhere in OpenLens.
The score is useful for comparing runs over time. The individual page rows are more useful for seeing where to investigate first.
## How accurate are these verdicts
Our verdicts are highly accurate, and we measured how accurate against a labelled dataset.
To check whether an assistant can find your page, we built our own prompts about that page that reliably get the assistant to show it when the page is indexed. We then tested those prompts against a labelled dataset of both popular and un-indexed pages to see how well they work.
* When we mark a page **Indexed** on ChatGPT or Claude, we are right about 100% of the time. For ChatGPT we only count pages the assistant actually cited, and for Claude we can search its Brave index directly.
* Gemini is the exception. Gemini does not reliably tell us which URLs it retrieved, so we read them from its response, and it can sometimes give a page URL it reconstructed from the site address rather than one it actually found. Treat a Gemini **Indexed** as slightly lower confidence. We are actively improving this.
* When we mark a page **Not indexed**, we are right more than 99% of the time based on our labelled dataset. That figure comes from the dataset, so per-site results can vary.
If you find a page where our verdict looks wrong, email [contact@aibread.com](mailto:contact@aibread.com) and we will look into it.
## Page scope
Use **Pages to check** to choose how many discovered pages the run should inspect. Use **Path prefix** to restrict the run to one part of a site, such as `/blog` or `/docs`.
The run uses the discovered page list for the project and applies the selected scope before sending platform probes. Scanned pages count toward AI Indexing usage limits even when page details are hidden by plan gating.
Monthly AI Indexing page allowances are separate from Site Readiness: Free includes 150 pages a month, Starter includes 1,000 pages per seat each month, and Agency includes 10,000 pages per seat each month. The allowance resets on the 1st of each month, UTC.
## Free and paid views
Free users can see URLs and verdicts for every page in the included 50-page run size. Paid plans unlock larger runs so you can check more pages at once.
The summary still counts every scanned page. If a run says 50 pages were checked, all 50 rows are included in the score and platform totals.
## Scheduling
Scheduled AI Indexing checks re-run on the configured cadence for the selected project URL. They use the current URL and schedule settings from the AI Indexing page.
Scheduling is separate from Site Readiness scheduling. You can run Site Readiness and AI Indexing independently, and one does not block the other.
## Cancellation
Cancel stops an in-flight AI Indexing run from continuing to process additional work and marks the run cancelled.
Use cancellation when a run is taking too long, when the wrong project or scope was selected, or when you want to preserve usage for a narrower follow-up run.
## How to use it
* Start with the default page count to verify the flow for a project.
* Use a path prefix when you care about one content section, such as blog posts or documentation.
* Compare platform totals first, then expand individual platform rows to inspect the pages that need attention.
* Treat a single not-indexed result as a signal to investigate, not proof that the platform can never retrieve the page.
* Treat unknown results as provider or runtime uncertainty. Re-run before making content changes based on them.
* Re-run after publishing content, changing crawl directives, or improving page metadata.
## Caveats
AI platform retrieval is not perfectly stable. Results can vary by provider, timing, query interpretation, and upstream search behavior. Some checks use platform proxies because providers do not expose a first-party per-page index API.
AI Indexing should be read as an operational visibility audit: it shows which checked pages each platform returned for this run, so you can find coverage gaps and track whether changes improve coverage over time.
# AI Content Optimization
Source: https://docs.openlens.com/manual/content-audit
Score how citable your content is for AI answers, and get a ranked worklist of fixes.
AI Content Optimization (the "content audit") scans your site and scores how likely each page is to be quoted when an AI platform synthesizes an answer. It then ranks the fixes that would lift your citation potential the most. It is the content-side companion to [Readiness](/manual/readiness): Readiness checks whether your site is machine-reachable; Content Optimization checks whether your content is worth citing. It lives at `/dashboard/content-audit`.
## What you see
* An overall **citation-potential score** out of 100 for every audited page.
* Each page scored across **six dimensions** (four computed, two judged by AI).
* A **worklist of fixes** — the cross-page problems ranked by impact, with an estimated score lift and an effort tag.
* **Cross-page recommendations** — places where a strong page can donate copy to a weak one.
* Per-page **AI rewrite drafts** you can copy, and a **PDF export** of the whole report.
## Running an audit
Start a run from the Content Optimization surface. Pick a scope:
* **Whole site** — discovers pages from your sitemap plus a crawl, up to your per-run cap.
* **Single page** — scores just one URL you paste in. A single-page run is fast and uses one page from your allowance.
Results stream in as the run executes. The dashboard polls live progress so you see scored vs. planned pages while it runs. Each run is saved to run history when it finishes, and any prior run reopens in full detail.
Under the hood, each page is scraped with Firecrawl. Every page is scored on the four computed dimensions instantly and at zero cost; the two AI-judged dimensions and the per-page problem breakdown run on top.
## The six dimensions
Each dimension is scored 0–100. The overall score is a weighted blend that favors the dimensions that matter most for getting cited.
1. **Headline answer** (AI-judged) — does the page open with one bold sentence that directly answers a commercial query, before any preamble?
2. **Voice** (AI-judged) — confident on world claims (opinionated, attributed data) and hedged on self (no overclaiming)?
3. **Quotable claim density** (computed) — specific numbers, named entities, concrete prices per section. Walls of reasoning score low.
4. **Extraction shape** (computed) — tables, named tiers, FAQ, bolded factor lists, bullets — the machine-extractable structure.
5. **Recency signals** (computed) — a current year in the title or first paragraph, and a prominent "Last Updated" date.
6. **Substance / thinness** (computed) — enough length and substance for multiple quotable claims. Thin pages score low.
## The worklist
The worklist rolls up per-page scores into a cross-page, impact-ranked list of fixes. A dimension becomes a fix when its score is below **70**. Each fix shows the affected pages, a severity, an estimated score lift, and an effort tag (`low`, `med`, `high`) so you can pick the cheap wins first. The headline number is the **projected overall lift** — how many overall-score points you could recover across the site.
## Plans and allowances
Two enforcement levers, both tiered. Numbers below are the source of truth from the plan config.
| | Free | Starter | Agency |
| ------------------------------------------------------------- | ------ | ------- | ------- |
| **Pages per run** | 10 | 50 | 500 |
| **Pages per month** | 30 | 1,000 | 10,000 |
| **AI rewrite drafts per month** | 0 | 50 | 100 |
| **Per-page detail (problems, insights, dimension breakdown)** | Locked | Full | Full |
| **Cross-page recommendations** | Locked | Full | Full |
| **AI rewrite drafts** | Locked | Enabled | Enabled |
| **PDF export** | Locked | Enabled | Enabled |
The first lever is **pages per run** — how many pages a single run may score. The second is a calendar-month pooled **page allowance**. AI calls themselves are not capped — a page is one batched AI call, so the page allowance already bounds your usage.
### The page allowance
Each run uses pages from your monthly allowance. A run scores up to **your per-run cap** or **your remaining monthly pages**, whichever is smaller — so a run near the end of the month may score fewer pages than your cap. A run that would use more than you have left is clamped to what's left, not blocked. The allowance resets on the calendar month. Paid plan allowances scale with the number of paid editor seats in the org for that billing period.
### Free-tier detail
A Free org can run an audit and see every page's score plus the prioritized worklist — the scope of the problem is visible. The actionable detail is locked: the impact × effort matrix and cross-page recommendations show as a blurred upgrade preview, and the per-page problem breakdown, AI rewrite drafts, and PDF export require a Starter plan or above. Locked detail is stripped server-side before it reaches your browser; it is never just hidden.
## API
These routes back the Content Optimization surface. They are not part of the [REST API reference](/api-reference/introduction).
* `POST /api/content-audit/run` — start an audit (whole-site or single-page).
* `GET /api/content-audit/run` — poll one audit's full result.
* `GET /api/content-audit/runs` — list run history for a project.
* `POST /api/content-audit/rewrite` — generate a per-page AI rewrite draft.
* `GET /api/content-audit/report/[auditId]/pdf` — download a run's PDF.
## How to use it
* Read the overall score and the projected lift first, then drill into the top-ranked fixes.
* Use a single-page run to check one page fast without spending your whole allowance.
* On Free, the worklist is a real taste of the problems; upgrade for the matrix, cross-page recommendations, per-page detail, rewrite drafts, and PDF.
* Re-run after making changes — unchanged pages are cached, so a re-audit only re-scores what actually changed.
# Country configuration
Source: https://docs.openlens.com/manual/country-configuration
Choose project defaults and understand how each AI platform applies country scope.
Country configuration controls where OpenLens measures your brand's visibility. Saved countries become the project defaults for future manual and scheduled runs.
## Saved countries and one-time overrides
* Change the saved country list in project Settings to update future runs and schedules.
* Use **Set run scope** before a manual run to choose a temporary country list. This does not change the project defaults or its schedule.
* Adding countries repeats the selected prompts across the selected platforms, so the run uses more credits. The run-scope panel shows the maximum credit reservation before you start.
Multiple-country configuration and geographic comparison are available to Agency organizations.
## Country availability
The country picker uses one shared catalog for all AI platforms. Each country identifies the platforms that can target it and any platform that must use its own default location.
Claude and DeepSeek do not currently support configurable country targeting and will use their default location.
When several platforms are selected, a country must be available to every platform that performs country targeting. A provider-default platform does not make the selected country a verified execution location.
## How platforms use the selected country
| Platform | Location behavior |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ChatGPT, Perplexity, Google AI, Gemini | OpenLens requests the selected country through the consumer-surface routing provider. |
| Grok | OpenLens passes the country to xAI's web-search tool as `user_location`. xAI describes this as biasing search results toward that location. It is not an in-country proxy and does not verify that Grok executed from the selected country. |
| Claude, DeepSeek | These platforms do not currently support configurable country targeting in OpenLens, so they use their default locations. |
Grok location hints remain unverified because its API does not return evidence establishing an effective execution country. Claude and DeepSeek also remain unverified because they use their default locations. OpenLens records the requested country for run comparison without presenting it as verified geography.
See [xAI's location parameter documentation](https://docs.x.ai/developers/model-capabilities/audio/voice-agent) and [How OpenLens sources data](/data-sources) for more about API and consumer-surface measurements.
# Dashboard
Source: https://docs.openlens.com/manual/dashboard
The home view of a project: browse prompt runs, then open one for its visibility score and everything that explains it.
The home view of a project, in the sidebar as **Prompt Tracking**. It opens on the list of every prompt run for the project. Pick a run to open its dashboard — the headline visibility number plus everything that explains it.
## Recent prompt runs
The landing view is a table of every prompt run for the project, newest first. One row per run, with:
* **ID** — the run's short id, with a copy button for the full id.
* **Prompt Run** — a sequential label ("Prompt Run 12") counting from the project's first run.
* **Status** — Running, Completed, Failed, Interrupted, or Cancelled.
* **Trigger** — Manual (you clicked Run Now) or Scheduled (a cadence fired it).
* **Started** and **Ended** — timestamps, with a relative time on hover.
* **Duration** — how long the run took.
* **Platforms** — the AI platforms the run covered, shown as logos.
* **Report** — a per-row PDF download, available once the run has completed.
Sort by Prompt Run, Status, Started, Ended, or Duration. Status, Trigger, Started, Ended, and Platforms each have a filter in their column header. The list paginates, and refreshes live while a run is in progress.
## Opening a run
Click a run to open it.
* A **completed** run opens its **dashboard** — the full visibility view, scoped to that one run.
* A run that **failed** or was **cancelled** has no visibility numbers, so it opens on a per-run **detail** page instead: a per-platform breakdown of what succeeded, what failed, and why.
## A run's dashboard
Every run's dashboard reads the same regardless of the run's age. A small run-info header sits under the project title with the run's id (and a copy button), its "Prompt Run" label, status, and date — plus an **All runs** link back to the list.
A single run's dashboard is read-only. You run and schedule from the run list, not from inside a specific run.
What it shows:
* Headline visibility score for your brand and each competitor.
* Per-topic and per-platform breakdowns.
* Trend lines on every score above. The trend spans the project's full run history, not just the run you're viewing.
* Click-through from any score into the prompts and citations behind it.
## Filters
Within a run's dashboard, filter by topic, platform, prompt attribute, date range, branded vs unbranded. Filter state lives in the URL, so a filtered view is shareable by link.
## Running prompts
Click **Run Now** at the top of the run list to kick off a run on demand. The button sends every active prompt to every active platform. The new run appears in the list immediately; open it and the numbers update **live** as platform responses come back, so the headline visibility, [share of voice](/glossary), and per-platform numbers shift while the run is in flight. Final numbers settle when the run completes.
Scheduled cadence (daily, weekly, or monthly) is set in Settings. On-demand runs are independent of the schedule and can also be triggered via the REST API or MCP.
## Where the data comes from
See [How OpenLens sources data](/data-sources).
## How outputs are produced
* Each run sends every active prompt to every active platform.
* Responses are parsed by Claude Haiku for brand mentions, citations, and response attributes (qualities discussed about a brand, each with a sentiment).
* Visibility scores are computed live from the parsed events. No pre-aggregated snapshot.
## How to use it
* Pick a run from the list, then read the headline. Drill into per-platform to spot platforms that don't know you.
* Trace a citation to see where models pull answers from for your space.
* For the interpretation layer (what each metric actually means, what to do about a result), see the [Dashboard deep-dive](/how-tos/dashboard-deep-dive).
# Import prompts
Source: https://docs.openlens.com/manual/import-prompts
Add prompts in bulk from a file or pasted text, then review them before saving.
Import up to 50 prompts at once from **Manage Prompts**. Paste content into the import box, drag a file onto it, or choose a file from your computer. OpenLens structures the input and shows an editable review before anything is saved.
## Import prompts
1. Open a project and go to **Prompts**.
2. Open **Manage Prompts**.
3. Click **Import Prompts**.
4. Paste prompts into the import box, drop a file onto it, or click **Choose file**.
5. Click **Review prompts**.
6. Check the wording, then choose the topic that should receive all imported prompts.
7. Click **Import prompts**.
JSON, JSONL, and CSV that match the formats below are parsed directly. Markdown, TXT, and other pasted content are structured before the review step. Prompt wording remains editable in the review.
An import includes the first 50 prompts in source order. If the source contains more, OpenLens shows a notice and leaves the remaining prompts out of that import.
## JSON
Use an object with a `prompts` array. Each array item must contain `prompt`. The other fields are optional.
```json theme={null}
{
"prompts": [
{
"prompt": "What is the best project management software for a startup?",
"topic": "Project management software",
"language": "english",
"attributes": []
},
{
"prompt": "How does Acme compare with other project management tools?",
"topic": "Project management software",
"language": "english",
"attributes": ["comparison", "branded"]
}
]
}
```
## JSONL
Use one JSON object per line. Do not wrap the objects in an array and do not add commas between lines.
```jsonl theme={null}
{"prompt":"What is the best project management software for a startup?","topic":"Project management software","language":"english","attributes":[]}
{"prompt":"How does Acme compare with other project management tools?","topic":"Project management software","language":"english","attributes":["comparison","branded"]}
```
## CSV
Use `prompt` as the required column. `topic`, `language`, and `attributes` are optional. Separate multiple attributes with semicolons inside the attributes cell.
```csv theme={null}
prompt,topic,language,attributes
"What is the best project management software for a startup?","Project management software","english",""
"How does Acme compare with other project management tools?","Project management software","english","comparison;branded"
```
Quote a CSV cell when it contains a comma, line break, or quotation mark. Represent a quotation mark inside a quoted cell with two quotation marks.
## Field reference
| Field | Required | Expected value |
| ------------ | -------- | ------------------------------------------------------------------------------------------------- |
| `prompt` | Yes | The complete prompt wording. Maximum 4,000 characters. |
| `topic` | No | The name of an existing topic in the project. Unmatched names must be mapped during review. |
| `language` | No | A language configured for the project, such as `english`. |
| `attributes` | No | Existing project attributes. Use a JSON array in JSON/JSONL or semicolon-separated values in CSV. |
Topic matching ignores capitalization and surrounding spaces. OpenLens does not create new topics during import. An import targets one topic: when you start from a selected topic, OpenLens applies it automatically; otherwise, choose one topic above the preview to apply it to every imported prompt. If a file contains multiple topic names, the topic selected in the preview takes precedence.
Only attributes already available in the project are kept. You can manage the available values before importing from **Manage attributes**. See [Prompt attributes](/manual/prompt-attributes).
## Other content
You can also paste unstructured content or upload `.txt` and `.md` files. OpenLens identifies the prompt records, separates them from surrounding presentation or metadata, and presents the result for review.
Always check the preview before importing. Rows that already exist under the same topic are marked **Already exists** and left unselected.
# Agent
Source: https://docs.openlens.com/manual/in-app-agent
A project-scoped assistant that analyzes your data, runs OpenLens tasks, and builds charts, tables, and documents in your workspace.
An assistant inside the OpenLens dashboard, scoped to you and the project you have open. It reads your visibility data, runs the full OpenLens workflow on your behalf — including prompt generation and kicking off runs — and builds charts, tables, and documents you can keep in that project's workspace.
Open the agent from the dashboard while a project is selected. Conversation, uploads, and artifacts stay with that project.
## New chat
The first screen is a new chat personalized to you and the active project. Suggested prompts match that project's data — competitors, topics, and scores — so you can start a real workflow in one click.
## What it knows about you
The agent is personalized to the signed-in user and the active project. It works from that project's brands, competitors, topics, prompts, runs, and analytics — not a generic blank chat. When Google Search Console and GA4 are connected for the project, it can analyze that data too: search queries, landing pages, traffic, and how those signals line up with AI visibility.
Ask it about your visibility, gaps vs a competitor, topic movers, citation patterns, what a recent run changed, or how organic search and site traffic relate to the AI picture. Answers come from the same OpenLens data the dashboard shows, plus GSC and GA4 when linked.
## Workspace and artifacts
Each project has its own agent workspace. Files the agent creates — reports, presentations, rewritten pages, triage docs — land there as artifacts you can reopen, download, or reuse in later turns.
Artifacts belong to the project, not to a one-off chat. Come back later and the workspace is still there.
## File upload and document generation
Upload files into the conversation when you want the agent to work from your material (briefs, drafts, exports) alongside OpenLens data.
Ask it to generate documents and presentations from your visibility results — client-ready writeups, gap reports, page rewrites, triage notes — and save them as downloadable artifacts in the project workspace.
## Runs, prompts, and the full workflow
The agent can drive the same loop you run from the UI:
* **Generate and edit prompts** for the project's topics (and attributes), so the prompt set matches the questions you care about.
* **Kick off runs** against your active platforms when you want fresh measurements.
* **Analyze the results** — visibility, share of voice, citations, platform gaps — and turn that into charts, tables, or documents.
You can stay in the agent for the full path: set up prompts → run → read the gaps → ship an artifact. You do not have to bounce between surfaces for each step.
## What it can do in OpenLens
Beyond runs and prompts, the agent has the same product surface you use in the UI: dig into topics and citations, cross-check AI Indexing with Content Audit or Site Readiness, analyze connected GSC and GA4 data, manage workstreams, and other project tasks it can perform on your behalf.
It does the work in the chat so you don't have to click through every surface yourself. Destructive or high-impact writes still go through the same project permissions you already have.
## Charts, tables, and specialized tools
Beyond the shared OpenLens capabilities, the agent has its own tools for artifact creation and data visualization. It can render charts, graphs, and tables in the conversation so you can see trends and brand metrics without leaving the thread — visibility over time, competitor share, platform gaps, prompt movers, and similar views.
Use that when you want a quick visual read; use document generation when you need something portable for a client or teammate.
### Example: prompt-gap table
Ask for a gap report against a competitor and the agent can build a structured table: which prompts you lose on, where each brand shows up across platforms, the size of the gap, and what it would take to flip the result.
## How to use it
* Open a project, open the agent, ask a concrete question ("Where do we lose to \[competitor] on branded prompts?").
* Or click a suggested prompt on the new-chat screen to start a full workflow.
* Ask it to generate prompts and kick off a run when the set is ready.
* Upload a brief when you want the answer shaped for a specific audience.
* Ask for a chart or table when you're exploring; ask for an artifact when you're shipping.
* Keep one thread per initiative if you want the workspace to stay focused.
## Related
* [Dashboard](/manual/dashboard) — the numbers the agent reads.
* [Site Readiness Performance](/manual/readiness#performance) — connect GSC and GA4 for the agent to analyze.
* [Onboarding](/manual/onboarding) — first-time prompt generation and Review & Run outside the agent.
* [Reports](/manual/reports) — on-demand PDF snapshots (separate from agent-generated artifacts).
* [MCP server](/mcp/overview) — drive OpenLens from an external agent instead of the in-app one.
# Onboarding
Source: https://docs.openlens.com/manual/onboarding
Sign up, point at a website, run your first measurement.
The first thing you see after signing up. In OpenLens a **client** is one company associated with one website. One client, one website. That's the model.
You sign up, enter the client's website URL, and OpenLens pulls data from the site to suggest what to track: likely competitors, a starting set of topics, and the prompts those topics turn into. You confirm or edit the suggestions, then click **Review & Run Prompts** to kick off the first measurement.
**Everything onboarding generates is editable.** Treat the first run as a starting point. We try our best to generate example data that gives you a good taste of what OpenLens looks like for your brand. Every competitor, every topic, every prompt, every attribute can be edited from the dashboard at any time. You can also drive these edits from Claude or any MCP-capable client through the OpenLens MCP server. See [Configure the OpenLens MCP server](/mcp/overview).
## Topics, prompts, and prompt attributes
Topics are containers for prompts. Each topic gets a set of prompts (the actual questions OpenLens runs on every supported AI platform), and each prompt can have prompt attributes, which are labels that flow through the dashboard and can be used as filters.
## Competitors
OpenLens proposes competitors from the website analysis. You can add, remove, or rename any of them. If a competitor has a common name and we might pick the wrong company, paste their URL in so we lock onto the right one.
## Prompt attributes (optional)
If you set prompt attributes during onboarding, OpenLens auto-generates prompts that try to fit the attributes you list. You can edit prompts and attributes after onboarding too. See [Prompt attributes](/manual/prompt-attributes) for the full mechanics.
## Suggested topics
OpenLens suggests topics based on the website analysis. Add or remove any that don't make sense or that you'd like to customize.
## Confirm and run
After confirming the suggested topics, you land on the Prompts tab with the prompts OpenLens auto-generated. Customize them now or later. Click **Review & Run Prompts** to send them to the live AI platforms immediately.
## Where the data comes from
The client's website at sign-up: we pull data from the site to propose competitors and topics. Claude then expands the confirmed topics into the actual prompts we'll run on every supported AI platform.
## How outputs are produced
1. You enter the client's website URL.
2. OpenLens pulls data from the site and proposes competitors and topics.
3. You confirm or edit them, and optionally pre-set prompt attributes.
4. For each topic, Claude generates a set of prompts (and tries to fit the prompt attributes you set).
5. You click **Review & Run Prompts** to start the first measurement.
## How to use it
**Editing auto-generated prompts before the first run.** After project setup, OpenLens opens the Prompts tab with the generated prompts grouped by topic. Read through them. They should sound like questions a real user would type into ChatGPT or Perplexity. Edit anything that doesn't, delete prompts that miss the mark, and add custom prompts via the **+ Add prompt** button on any topic. Attach prompt attributes if you want filters later (see [Prompt attributes](/manual/prompt-attributes)). When the prompt list looks like the questions your client's prospects actually ask, hit **Review & Run Prompts**.
**When to add a competitor URL.** OpenLens proposes competitors from the website analysis. By default each is matched by name. Name matching works when the competitor's name is distinctive ('Roost', 'Rain Design'). It fails when the name is common or shared with other companies ('Acme', 'Atlas'). Paste the competitor's homepage URL alongside the name in those cases. The URL locks the match to that specific company so we don't pick up the wrong brand on later runs. If you're not sure whether the name is distinctive enough, paste the URL anyway. It costs nothing.
# Web UI manual
Source: https://docs.openlens.com/manual/overview
What each surface of the OpenLens dashboard does and how to read it.
The source of truth for what each part of the OpenLens dashboard does, where the data comes from, and how to read the outputs.
Sign up, point at a website, get suggested competitors and topics, run your first measurement.
The home view of a project. Browse every prompt run, then open one for its headline visibility and everything that explains it.
Project-scoped assistant for analysis, runs, prompts, charts, documents, and GSC/GA4.
Check whether AI platform retrieval surfaces can find and cite a client's pages.
Technical SEO mission control with page evidence, site graph, fixes, and run-pinned GSC/GA4 context.
Score how citable each page is for AI answers, and get a ranked worklist of fixes. The content-side companion to Readiness.
Per-topic deep-dive with the AI recommendation, trend, platform breakdown, citations, and raw responses.
Labels on prompts that flow through the dashboard as filters. The core mechanism for slicing data.
Paste prompts or add a CSV, JSON, JSONL, TXT, or Markdown file, then review the first 50 before saving.
Client-ready PDF reports with executive summary, platform comparison, citations, AI recommendations, and an optional per-prompt appendix.
Per-client brand, competitors, platforms, schedule, and account-wide API keys.
How OpenLens measures: chat-UI channel, API channel, and the agent channels in beta.
## Coming soon
* **Prompts and topics.** Editing prompts, clone-on-change, attribute assignment, deactivation vs deletion. Most of the mechanics are covered in [Onboarding](/manual/onboarding), [Prompt attributes](/manual/prompt-attributes), [Import prompts](/manual/import-prompts), and [MCP tools](/mcp/tools).
* **Citations as a standalone surface.** Likely doesn't need one. The data lives on the [Dashboard](/manual/dashboard) as AI Sources and on [Topic performance](/manual/topic-performance) as Sources Cited.
# Prompt attributes
Source: https://docs.openlens.com/manual/prompt-attributes
Labels on prompts that flow through the dashboard as filters.
Labels you attach to prompts. Once attached, they flow through the entire dashboard as filters, so you can slice visibility, citations, and reports by any dimension that matters to your business.
Think of them as the seasoning that turns one big visibility number into a useful set of smaller ones.
## Walkthrough
## Examples
Attributes are whatever you want them to be. Some common shapes:
* **Stage of buyer journey**: awareness, consideration, decision.
* **Audience type**: SMB, mid-market, enterprise.
* **Use case**: ergonomics, productivity, aesthetics.
* **Geography or market** when one project covers multiple regions.
* **Anything specific to your client's business** that you want to be able to slice on.
If you have a dimension you'd report on in a slide deck, it should probably be an attribute.
## Built-in vs custom
OpenLens ships a small set of built-in attributes that get assigned automatically. Everything else you define yourself.
* **Built-in**:
* **Branded**: assigned to prompts that name a brand (your own or a competitor) in the question itself. See the worked example below.
* **Language**: one tag per language present in your project (English, Italian, Spanish, etc.), assigned by the language the prompt is written in.
* **Custom**: anything you add at the project level. Platform, audience, journey stage, geography, whatever you want. No real limit on count.
Built-in attributes cannot be archived. Custom ones can.
## How attributes get assigned
Four paths a prompt can pick up attributes:
* **During onboarding.** You list the attributes you care about up front. OpenLens auto-generates prompts that try to fit them, and labels each generated prompt with the attributes it fits best.
* **Inline when editing a prompt.** Open any prompt in the Prompts tab, type a new attribute in the attribute field, click the plus (creates the project-level attribute if it doesn't exist), then Save. Useful when you discover a useful slice mid-flight.
* **In Settings.** Project-level attribute management for bulk add, edit, and archive.
* **Via the MCP server or REST API.** Same actions exposed programmatically. See the [MCP server](/mcp/overview) and [REST API](/api-reference/introduction).
The dashboard assigns attributes one prompt at a time — there's no multi-select to tag a group in a single action. To label many prompts at once, use the MCP server (or REST API): drive it from Claude (or your favorite agent) once and you're done.
## How attributes flow through OpenLens
Once a prompt has an attribute, that attribute is available as a filter everywhere downstream:
* **Dashboard**: filter the visibility score by attribute. Compare your awareness-stage SOV against your decision-stage SOV.
* **Citations**: see which sources get cited for which slice of your prompt library.
* **Reports**: include per-attribute breakdowns in PDF exports.
* **MCP and REST API**: every read endpoint that returns scores or mentions accepts an attribute filter parameter.
Every attribute you add is one more axis to explain a result to a client.
## Filter modes
The dashboard's attribute filter has three modes you can mix:
* **All of**: a prompt has to have every selected attribute to pass. Use this to narrow down to an intersection (branded AND Italian).
* **Any of**: a prompt only needs one of the selected attributes. Use this to union (Italian OR English).
* **Hide**: exclude every prompt with the selected attribute. Use this for negation (hide branded to see only unbranded).
Mix the three to land on the exact slice. A filter preview shows the prompt count under your current selection before you commit, so you can sanity-check the math.
**Worked example.** Overall visibility on a sample project was 68.1%. Filter to branded-only (prompts that name the brand) and visibility bumped to 72.3%. Italian-only was higher still. Italian AND English gave zero prompts because no prompt is in both languages. Italian OR English gave the sum. Hide-branded dropped visibility to 60%. Same dataset, four different views, all real.
## Example: branded vs unbranded
The clearest example of why attributes matter. A prompt can name a brand in the question itself or not. OpenLens ships this as an attribute on every prompt.
* **Branded prompts** name your brand or a competitor in the question. Example: 'Is Acme better than Roost for desk setups?'
* **Unbranded prompts** describe a need without naming any brand. Example: 'Best laptop stand for a standing desk.'
Visibility on branded prompts will always run higher than on unbranded ones. You're asking the model about yourself, so it answers about you. That's the question being measured. Higher numbers there mean exactly what they say.
* Branded SOV answers: when someone asks about us by name, what does the model say?
* Unbranded SOV answers: when someone asks for the category we live in, do we even come up?
Both matter. They answer different questions about the same brand. Branded is the floor: if it flatlines to zero, models don't know your brand by name. Unbranded is harder to move and more directly tied to whether anyone discovers you in the first place. Filter the dashboard by the branded/unbranded attribute to see each in isolation.
## Lifecycle
* **Add an attribute** in project settings, or directly when editing a prompt.
* **Edit an attribute's value on a prompt** by opening the prompt and changing the attribute.
* **Archive a custom attribute**. Marks it inactive for new prompts. Existing prompts keep the historical label so reports stay readable.
* **Unarchive**. Same place, reverses the archive.
Built-in attributes (language) cannot be archived.
## How to use it
* Pick two or three attributes that match the way you talk about your client's market. Add them up front.
* Audit your prompts after the first run. Anything mis-labeled? Fix it.
* Apply attribute filters on the dashboard to validate that your slices look like the business.
* When a client asks 'how are we doing for \[audience X]?,' filter by that attribute and have the answer in one click.
* If the manual tagging is taking too long, drive it from Claude via MCP. The MCP tools cover add, remove, archive on attributes and edit on individual prompts.
# Site Readiness
Source: https://docs.openlens.com/manual/readiness
Technical SEO mission control for search discovery, crawlability, rendering, indexability, experience, and appearance.
Site Readiness tests whether a search crawler can discover, fetch, render, index, and present a project's pages. Agent Readiness remains available in its own tab for emerging agent protocols and machine-facing capabilities.
## Mission Control
New Site Readiness runs do not use an overall score. They report five operational metrics:
* **Search eligibility** — eligible, at-risk, blocked, and unknown pages.
* **Important pages at risk** — confirmed and inferred priority pages.
* **Search exposure affected** — pinned GSC clicks and impressions for the exact affected cohort.
* **Measurement coverage** — explicit denominators for each evidence source.
* **Change since prior** — introduced, resolved, regressed, persistent, and incomparable findings.
The search-system rail separates **Discover**, **Fetch**, **Render**, **Index**, **Experience**, and **Appear**. Unknown evidence stays Unknown; it is never counted as passing.
## Issues, pages, and graph
**Issues** groups durable root findings and keeps the observation, interpretation, proposed action, verification method, source, freshness, coverage, confidence, and applicability together.
### Fix packages
Each supported finding resolves to **Generate now**, **Clarify first**, or **Guided engineering**. OpenLens asks at most two scoped questions, then produces a validated package with a target, copyable change, expected result, verification, rollback, and evidence provenance.
Deterministic builders handle bounded directives and configuration. Metadata and JSON-LD synthesis uses a fixed model and structured output only when the confirmed evidence is sufficient. Stale evidence invalidates the package.
The only execution action is **Copy fix package**. OpenLens does not write to the site, mark a copied fix as applied, or claim indexing, ranking, or traffic gains. A later Site Readiness run determines whether the finding resolved.
**Pages** is the normalized page inventory. It includes discovery source, response and canonical state, crawl depth, internal links, intent, importance, eligibility, Google evidence, and open findings.
**Site Graph** visualizes observed internal links. Sitemap membership is a declaration, not hierarchy. Search covers the full inventory even when the rendered graph is bounded. Maximize, zoom, pan, filters, node detail, and the accessible page table share one selection state.
## Performance
Performance contains the Google evidence that previously lived under Search & Traffic.
### Connect Google
Open **Settings → Platforms → Google integrations**. Search Console and GA4 use separate, read-only organization connections. Assign the appropriate GSC and GA4 property to each project, then run Site Readiness again.
### Run-pinned evidence
Each run stores a privacy-safe aggregate snapshot for its 28-day evidence window:
* GSC property totals and page rows joined to normalized readiness URLs.
* GA4 AI-referral sessions, key events, revenue when present, and aggregate landing-page rows.
* Collection time, reporting window, source delay, matched and unmatched coverage, and row-limit state.
Reopening an old run shows its original snapshot, not today's live Google data. GSC usually lags two to three days. GA4 AI-referral attribution is a lower bound because native apps and copied links often omit referrers.
OpenLens stores no user-level GA events, identities, or raw journeys in readiness evidence. OAuth tokens remain encrypted in the existing Google connection store.
Observed traffic helps prioritize technical work. It does not prove that a technical finding caused traffic movement.
## Running a scan
Choose a project, page scope, and optional path prefix. Results stream while OpenLens discovers pages and runs the technical checks. Every run records its assessment version, evidence sources, coverage, partial failures, and terminal state.
Historical mixed runs remain readable as **Legacy** reports with their historical score. New Site Readiness runs are scoreless.
## Scope and allowances
| | Free | Starter | Agency |
| -------------------------- | ----- | ------------------- | ---------------------- |
| **Monthly page allowance** | 150 | 5,000 per paid seat | 200,000 per paid seat |
| **Lighthouse sample** | 1 | 10 | 50 |
| **Per-page detail** | Taste | Full | Full |
| **Scheduled cadence** | None | Weekly, monthly | Daily, weekly, monthly |
Effective scope is the smallest of requested pages, the tier's run cap, and remaining monthly allowance. OpenLens reserves the requested allowance at start and refunds unused pages after completion.
## Through MCP
* `run_readiness_check` starts a readiness run.
* `get_readiness_run` reads status, metrics, and evidence subject to plan gating.
* `list_readiness_runs` lists project history.
* `get_gsc_search_analytics` and `get_ga4_ai_traffic` expose the connected Google sources to the private agent surface.
The client role cannot start or view readiness runs.
# Reports
Source: https://docs.openlens.com/manual/reports
Client-ready PDF reports generated from a selected completed run.
A PDF snapshot of your project's visibility, suitable for sharing with clients. Generated on-demand from a completed run you choose.
## How to generate
Open a project and find the run you want in the **Recent prompt runs** list on the dashboard. Every completed run has a download button on its row. Click it to generate the PDF for that run. OpenLens returns it as `application/pdf` — the same data the dashboard shows for that run, in a portable format.
The row button offers the **prompt-wise metrics** toggle described below before generating.
## The toggle: prompt-wise metrics
When you download a report — from a run's row in the **Recent prompt runs** list — there's a toggle for **prompt-wise metrics**. Off by default. On adds an Appendix to the PDF with every prompt in your prompt set grouped by topic, with per-prompt visibility %, average position, citation %, sentiment, and platforms count (how many of your project's tracked AI platforms produced a measurable response, e.g. X of up to 7).
Turn it on when you're auditing the prompt set with the client, when you want them to see which specific prompts drove a topic-level move, or when you're doing a quarterly deep review. Leave it off for monthly check-ins. With around 100 prompts and 5 metrics each, the Appendix is most of the PDF.
## What the report contains
### 1. Cover page
Title, tracked URL, generated date, platforms covered, prompt set used. Also the exact UTC capture time of the underlying run, so anyone reading later knows the snapshot.
### 2. Executive summary
Four KPI tiles: **visibility**, **share of voice**, **average position**, **mentions** (count out of total responses). Each tile shows your number plus a comparison line against the top competitor (e.g., "vs Profound: 10.0%", "#4 of 4 brands", "vs Profound: #2.5").
Below the tiles, a one-sentence **trend** callout: "Visibility has decreased by 13% since the previous measurement (1.5% → 1.3%)."
### 3. Platform comparison
Table with one row per active AI platform. Columns: your score, top competitor + their score, gap in points, status chip (Behind, Close, Even, Ahead). Tells the reader which platforms know you and which don't.
### 4. Competitive landscape
Table of every tracked brand ranked by AI visibility. Columns: rank, brand, visibility, share of voice, average position, sentiment. Your row is highlighted.
### 5. Topic performance
One row per topic. Columns: your score, the top competitor on that topic, their score, status (Gap, Close, etc.). Where the gaps are.
### 6. Citation & source analysis
Total citations across the run, total unique domains, and a category-level breakdown (Third Party / UGC / Competitor with %). Then the top 5 most-cited domains with citation count, category, and which platforms cited them.
The dashboard has the full breakdown. In the report we cap it at the top 5 to keep the page readable.
### 7. Brand mentions
Topics where your brand was mentioned, with the source URLs cited alongside those mentions. Each row: topic, mention count, best position, sentiment, platforms. Then an indented list of the specific URLs cited for that topic.
### 8. Engine patterns
One block per AI platform. Each block shows: average citations per response, average brand mentions per response, top sources for that platform, and a one-line summary of source-mix behaviour (e.g., "Heavily favors Third Party sources (91%)"). Reads like a scorecard for how each platform behaves on your topic set.
### 9. AI recommendations
Actionable insights generated per topic. Free-form paragraphs that read like a senior consultant's take: what's working, what's missing, what to do next, with specific platforms, competitor names, and citation sources called out.
**Where they come from.** For each topic, OpenLens assembles a structured snapshot: your visibility and average position, per-platform breakdown vs the best competitor on each platform, every competitor's scores, the top 5 cited domains for that topic, and the top 5 sentiment-analysis themes (extracted from the raw responses, with your sentiment per theme vs the best competitor's). That snapshot goes to Claude Haiku 4.5 with a single instruction: write a 2 to 3 sentence actionable insight naming specific platforms and sources, direct, no hedging. The model returns one paragraph per topic.
The same generator backs the `/api/insights/topic` endpoint. What you see in the report and what you fetch programmatically are the same paragraph.
### 10. Appendix: prompts by topic (toggle-gated)
Every prompt in your prompt set, grouped by topic. Columns: visibility %, avg position, citation %, sentiment, platforms (X of your project's tracked AI platforms, up to 7). Same metrics as the Prompts tab in the dashboard.
This section only appears when the prompt-wise metrics toggle is on.
## Where the data comes from
Computed from the same data as the dashboard for the selected run. The report locks in that run's snapshot. Re-generating with a different run produces a different report.
## How to use it
* Leave the toggle off for monthly check-ins. Turn it on when you're doing a quarterly audit or want clients to see which prompts drove a topic-level move.
* Send the PDF as-is to clients. The cover page has everything they need to know about scope and timing.
* The AI Recommendations section is the part clients actually read first. Make sure the prompts driving them are tight before you ship.
## API
`GET /api/reports/visibility?projectId=...&runId=...` returns `application/pdf`. Add `includePrompts=1` or `includePrompts=true` to include the prompt-wise appendix. See [REST API](/api-reference/introduction) for the worked example.
# Settings
Source: https://docs.openlens.com/manual/settings
Per-client and account configuration.
Almost everything on the Settings page is **per-client** (per project). Brand profile, location, languages, prompt attributes, competitors, AI platforms, scheduled runs, even Delete client. All scoped to the client you have open. Two exceptions live at the organization level: **API keys**, which authenticate against every project your key's scope can reach, and the **Google connection** behind [Site Readiness Performance](/manual/readiness#performance).
## Your brand
The client's brand profile.
* **Name.** How your brand should be detected in AI responses.
* **Website URL.** Locks the brand to a specific domain.
* **Aliases.** Multi-tag input. Add any names the AI might use that aren't the main brand name. Nicknames, sub-brands, common misspellings. The matcher checks aliases too when scoring brand mentions.
## Location and languages
Used to generate location-aware prompts in the right language(s).
* **Location.** Free text like 'Pittsburgh, PA'. Affects prompt generation when the topic is regional.
* **Languages.** Multi-tag input. Each language present here gets prompts generated in it during onboarding and any time you regenerate.
## Prompt attributes
The labels you can assign to prompts for this client.
* **Reserved attributes.** Built-in, can't be archived. `branded` is auto-assigned to prompts that name a brand. Your project's configured **languages** are also reserved: each prompt is auto-tagged with the language it's written in, and a custom attribute can't reuse a project language.
* **Custom attributes.** Whatever you want, scoped to this client. Type the name, click Add. Examples: `pricing`, `enterprise-readiness`, `awareness-stage`.
For the full mechanics of how attributes flow through the dashboard, see [Prompt attributes](/manual/prompt-attributes).
## Competitors
The brands you want to track alongside yours.
* Each competitor has a **name** and an **optional website URL**.
* Each competitor has its own **aliases**, same as your own brand.
* Use the URL when the competitor's name is common enough that the matcher might pick up the wrong company.
## AI platforms
The platforms this project queries on each run. Each row shows the data channel for that platform.
| Platform | Channel |
| ---------- | ------- |
| ChatGPT | Web |
| Perplexity | Web |
| Google AI | Web |
| Gemini | Web |
| Grok | API |
| Claude | API |
| DeepSeek | API |
Toggle individual platforms on or off. Web platforms use the consumer chat surface. API platforms use the public API. See [How OpenLens sources data](/data-sources) for the mechanics.
## Countries
Saved countries define the regional scope for future runs and schedules. You can temporarily override them from **Set run scope** without changing the saved project configuration.
Country targeting differs by platform, and the picker reflects the platforms currently selected. See [Country configuration](/manual/country-configuration) for availability, credit usage, and platform-specific location behavior.
## Scheduled runs
Auto-run on a schedule so your visibility data stays current without you clicking Run.
* **Enable toggle.** Off means no auto-runs. You can still trigger runs on-demand anytime.
* **Frequency.** Weekly or monthly on Free and Starter; daily is available on Agency. (Daily draws roughly 7× the credits of weekly.)
* **Time.** A time of day in UTC.
* **Next run preview.** Shows the next scheduled run in your local timezone so you know exactly when it'll fire.
On-demand runs are independent of the schedule. Three paths to trigger one:
* The **Run Now** button at the top of the dashboard.
* `POST /api/prompts/run` via the REST API.
* The `run_prompts` tool via MCP.
Run on-demand before a client call without disturbing the recurring cadence.
## Google integrations
Connect Google Search Console and GA4, then pick this project's GSC property and GA4 property. The connection is organization-wide and made once by an owner or admin. The property assignments are per-project, right here. Full detail, including run-pinned evidence and MCP access, is in [Site Readiness Performance](/manual/readiness#performance).
## API keys
The one section that isn't scoped to the client you have open. Keys come in two scopes: **personal** (acts as you; handy for testing) and **organization** (a service account for the organization, owner/admin only, and the intended way to work with your projects programmatically). See [API keys and MCP](/organizations/api-keys-and-mcp) for what each is for.
* Each key has a **name** for your own bookkeeping, plus **created** and **last used** dates.
* Send every API request with the key in the Authorization header:
```http theme={null}
Authorization: Bearer
```
* Create as many keys as you need. Revoke any key from the Actions column.
* See [API keys and MCP](/organizations/api-keys-and-mcp) for the scope model and [REST API](/api-reference/introduction) for the worked walkthrough.
## Delete client
Removes the project from your dashboard. The underlying data isn't dropped. Reach out to support if you ever need it restored.
# Topic performance
Source: https://docs.openlens.com/manual/topic-performance
Per-topic deep-dive: AI recommendation, trend, platform breakdown, engine behavior, citations.
The detail view for a single topic in your project. You land here from any topic row on the dashboard. The dashboard shows the topic at a glance. This page shows what's actually driving it.
## What you see
The header shows the topic name and your visibility on it (e.g., "3.3% visibility across 150 responses").
A prompt-set filter sits above the content, same shape as the one on the main dashboard.
## AI recommendation
Right under the header. A short paragraph of plain prose: what's working on this topic, what isn't, what to do next, with specific platforms and source domains named.
### Where the recommendation comes from
For the topic in view, OpenLens assembles a structured snapshot:
* Your brand's visibility and average position on the topic.
* Per-platform breakdown: your score vs the best competitor on each active AI platform.
* Every tracked competitor's overall score on the topic.
* The top 5 most-cited domains for this topic across all prompts.
* The top 5 sentiment-analysis themes for this topic (your average sentiment on each theme vs the best competitor's). These are the themes from the [Sentiment Analysis](#sentiment-analysis) matrix below, not from the prompt-attribute filter.
That snapshot goes to **Claude Haiku 4.5** with one instruction: write a 2 to 3 sentence actionable insight for a marketing executive, lead with the most important finding, name specific platforms and sources, direct, no hedging, no bullet points. Max 512 output tokens.
The model returns one paragraph. That's what shows at the top of the page.
The same generator backs the `/api/insights/topic` endpoint. What you see on this page and what you fetch via API are the same paragraph for the same run.
The recommendation regenerates on every visit against the latest usable run. If the run hasn't completed or there's no data yet, the recommendation block is empty.
## Visibility trend
Line chart of your visibility on this topic over time. One marker per completed run. Use it to spot real movement vs single-run noise.
## Position by Platform
A brand-by-platform matrix. Rows are tracked brands (you + competitors), columns are the active AI platforms, cells show per-platform visibility % on this topic. The Overall column on the right aggregates across platforms.
Read your row to spot platforms where you're invisible. The columns answer the inverse question: which brand owns each platform on this topic.
## Engine insights
One block per active AI platform. Each shows the platform's average citations per response on this topic plus a one-line summary of source-mix behaviour ("Heavily favors Third Party sources (88.4%)"). Same shape as the Engine Patterns section in the [report](/manual/reports), scoped to this single topic.
## Sentiment Analysis
A matrix of themes Claude extracted from the raw responses on this topic, with the sentiment each brand attracted on each theme (positive, negative, neutral). The themes are pulled out of the response text itself — features, capabilities, complaints, anything the model talked about — not the prompt-attribute filter from [Prompt attributes](/manual/prompt-attributes). Different concept, despite the similar word.
The presentation is dense and most users skim it. This view is on the roadmap for an overhaul.
## Sources cited by AI
Top cited domains for the prompts in this topic. Domain, citation count, and which platforms cited it. Same data as the dashboard's AI Sources tab, filtered to this single topic.
## Raw AI responses
Expandable list of every individual platform response for the prompts in this topic. Click into a response to see the full text the model returned and the citations attached.
This is the ground truth. Every metric on the page rolls up from these responses.
# MCP server
Source: https://docs.openlens.com/mcp/overview
Connect OpenLens to your AI agent. One OAuth sign-in, no API keys to copy.
OpenLens exposes a remote MCP server so agents can onboard clients, run visibility scans, read every metric the dashboard shows, and manage projects on your behalf. One OAuth sign-in, no API keys to copy.
## Quick reference
| | |
| ------------------ | -------------------------------------------- |
| **Server URL** | `https://openlens.com/mcp` |
| **Transport** | Streamable HTTP |
| **Auth** | OAuth 2.1 (browser flow) |
| **stdio fallback** | `npx -y mcp-remote https://openlens.com/mcp` |
## Video walkthrough
Watch the full setup end to end. This walkthrough covers **Claude** (Claude.ai, Claude Desktop, and Claude Code) — for other clients, follow the matching tab below.
## Install in your client
Open [claude.ai/customize/connectors](https://claude.ai/customize/connectors), click **Add custom connector**, and enter `https://openlens.com/mcp`. The connector then shows up in Claude.ai web, Claude Desktop, and Claude Code automatically.
In Claude, open **Settings → Connectors → Add custom connector**, enter `https://openlens.com/mcp`, and connect.
In your terminal, run:
```bash theme={null}
claude mcp add openlens --transport http https://openlens.com/mcp
```
Open Claude Code, run `/mcp`, pick `openlens`, and finish the browser sign-in.
Turn on **Settings → Connectors → Advanced → Developer Mode**, then **Add custom connector** with URL `https://openlens.com/mcp` and Auth set to OAuth.
[One-click install](cursor://anysphere.cursor-deeplink/mcp/install?name=OpenLens\&config=eyJ1cmwiOiJodHRwczovL29wZW5sZW5zLmNvbS9tY3AifQ==). Or add manually to `~/.cursor/mcp.json`:
```json theme={null}
{
"mcpServers": {
"openlens": { "url": "https://openlens.com/mcp" }
}
}
```
Add to `.vscode/mcp.json`:
```json theme={null}
{
"servers": {
"openlens": { "type": "http", "url": "https://openlens.com/mcp" }
}
}
```
In your terminal, run:
```bash theme={null}
codex mcp add openlens --url https://openlens.com/mcp
```
Add to `~/.codeium/windsurf/mcp_config.json`:
```json theme={null}
{
"mcpServers": {
"openlens": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://openlens.com/mcp"]
}
}
}
```
Add to `~/.config/zed/settings.json`:
```json theme={null}
{
"context_servers": {
"openlens": {
"source": "custom",
"command": "npx",
"args": ["-y", "mcp-remote", "https://openlens.com/mcp"]
}
}
}
```
Point it at `https://openlens.com/mcp` if it supports streamable HTTP. Otherwise wrap it with the stdio shim:
```bash theme={null}
npx -y mcp-remote https://openlens.com/mcp
```
## Verify it works
From any client, ask the agent:
"List my OpenLens projects."
The agent should call `list_projects` and return at least one row.
## Troubleshooting
* **Auth error or "needs client registration":** sign out of your client and reconnect. The OAuth handshake has to complete on first install. If reconnecting still fails, email support with the client name and error; this can also mean the OAuth provider is not advertising dynamic client registration.
* **Stale token:** clear the mcp-remote cache with `rm -rf ~/.mcp-auth/` and retry.
* **VS Code: "server failed to start":** Node 18+ has to be on PATH so the editor can spawn `npx`.
* **Anything else:** email [contact@aibread.com](mailto:contact@aibread.com) with the client, version, and the exact error.
## Available tools
The server exposes 46 tools across project setup, brands, platforms, topics, prompts, prompt attributes, runs, Site / Agent Readiness, AI Index Coverage, content audit, visibility analytics, and scheduling. Each is annotated read-only or write so MCP clients can auto-permission reads and confirm writes. See the [tools reference](/mcp/tools) for the full list grouped by surface.
# MCP tools reference
Source: https://docs.openlens.com/mcp/tools
Every public OAuth tool the OpenLens MCP server exposes, grouped by surface.
Every tool is scoped to the authenticated user's projects. All require a valid OAuth session and operate with the same permissions as the web UI. Each tool is annotated read-only or write: read-only tools run without a per-call confirmation; tools that modify or delete data prompt before running.
The in-app Agent uses a private MCP surface at `/api/agent/mcp` and adds agent-only tools such as `create_document`. Those private tools are not available through the public OAuth `/mcp` server.
## Async status
Async run and audit tools return one lifecycle `status` on the existing payload object. The agent-facing status values are `queued`, `running`, `completed`, `failed`, `canceling`, `canceled`, `stale`, `unknown`, and `none` for empty prompt-run responses.
MCP does not expose `partial` as a status; incomplete output remains visible through existing fields such as platform response counts, content-audit progress, `results_truncated`, and page/result counts. `stale` is derived at read/list time from running or interrupted records and feature-specific stale thresholds; it is not a stored database status.
## Connection
| Tool | Description |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `whoami` | Report the connected user and organization (workspace) this MCP connection is bound to: org name, org id, plan tier, and your role. Call it first, before any tool that creates, updates, or deletes data, to confirm you are operating in the intended workspace. A binding of `personal_workspace_fallback` means the OAuth token carried no organization claim, so you are in a personal workspace; reconnect and select the org if that was not intended. |
## Project & client setup
| Tool | Description |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `setup_client` | Create a new OpenLens project with own brand, competitors, topics, custom prompt attributes, and generated prompts. |
| `list_projects` | List the user's OpenLens projects. |
| `update_project_settings` | Update name, URL, location, languages, active platforms, or generated prompts. `refresh_prompts` tops-up or recreates prompts. |
| `delete_project` | Archive one project. History is preserved. |
## Brands
| Tool | Description |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `list_brands` | List the own brand and competitors tracked for a project. |
| `add_competitors` | Add one or more competitor brands in one batch. Names matching an existing or the own brand are skipped. |
| `delete_competitors` | Soft-delete one or more competitor brands by ID in one batch. Past mentions are preserved; the own brand cannot be deleted this way. |
## Platforms
| Tool | Description |
| ---------------- | ---------------------------------------------- |
| `list_platforms` | List the AI platforms the user is entitled to. |
## Topics
| Tool | Description |
| --------------- | --------------------------------------------------------------------------------------------------- |
| `list_topics` | List tracked topics for a project. |
| `add_topics` | Add one or more topics in one batch, each starting background prompt generation. |
| `delete_topics` | Soft-delete one or more topics by ID in one batch. They stop running; past responses are preserved. |
## Prompts
| Tool | Description |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `list_prompts` | List active and inactive prompts, optionally scoped to one topic. |
| `add_prompts` | Add one or more manual prompts to existing topics in one batch. Attributes are required and must come from `list_prompt_attributes`. |
| `set_prompts_active` | Activate or deactivate one or more prompts by ID in one batch, all the same direction. Historical results are kept. |
| `update_prompt_templates` | Edit one or more prompts' text and/or attributes by ID in one batch. Editing a prompt with run history clones it and returns `requires_confirmation`. |
| `delete_prompts` | Soft-delete one or more prompts by ID in one batch. Historical responses are retained; use `set_prompts_active` for reversible deactivation. |
## Prompt attributes
| Tool | Description |
| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `list_prompt_attributes` | Built-in + custom attributes for a project. |
| `add_prompt_attributes` | Add one or more custom attributes in one batch. Existing, archived, or reserved values are skipped. |
| `archive_prompt_attributes` | Archive one or more custom attributes in one batch. Historical labels are preserved; built-in and language attributes cannot be archived. |
| `unarchive_prompt_attributes` | Restore one or more archived custom attributes in one batch. |
## Prompt runs
| Tool | Description |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_prompts` | Start a run. Returns immediately with `status`. Poll `get_run_status` every \~30s while status is `queued`, `running`, or `canceling`. |
| `cancel_run` | Cancel a running prompt run. Safe for already-terminal runs. |
| `get_run_status` | Get status. Pass `run_id` for a specific run; omit it for the latest run. Unknown explicit run IDs return `RUN_NOT_FOUND`; projects with no runs return `status: none`. |
| `list_runs` | List recent runs with their IDs and canonical lifecycle `status`. |
To read historical analytics, call `list_runs` first and pass a completed run's `run_id` to `get_visibility`, `get_topic_visibility`, `get_attribute_breakdown`, `get_engine_patterns`, `get_prompt_performance`, `get_citations`, or `get_mentions`. Omit `run_id` to use the latest usable run. Those tools reject runs from another project and runs that have not completed. `get_prompt_results` also accepts `run_id` and can expose an in-progress run's partial output.
Comparing citations and visibility across runs can show correlation, but it does not prove that a source caused a visibility change.
## Site / Agent Readiness
| Tool | Description |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_readiness_check` | Start a Site / Agent Readiness crawl for a project. Returns the new run's id, status, and effective scope configuration. Consumes monthly page allowance. |
| `get_readiness_run` | Get status, score, summary, grouped check counts, and per-check detail for a readiness run (detail may be redacted on the free tier). |
| `list_readiness_runs` | List recent Site / Agent Readiness runs for a project, newest first (latest 50). |
## AI Index Coverage
| Tool | Description |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_ai_index_coverage` | Start an AI Index Coverage run for a project URL. Returns the run id, status, effective scope, allowance summary, and polling metadata. |
| `get_ai_index_coverage_run` | Get one AI Index Coverage run's status, score, per-platform coverage summary (`indexed`, `not_indexed`, `unknown`), gated classified page-level gaps, and polling metadata. |
| `list_ai_index_coverage_runs` | List recent AI Index Coverage runs for one project, including ids, status, scores, page counts, timestamps, and error summaries. |
## Visibility & analytics
| Tool | Description |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `get_visibility` | Brand visibility for the latest usable run or a specific completed run. Supports `overview`, `by_topic`, `by_platform`. |
| `get_topic_visibility` | Detailed visibility for one topic in the latest usable run or a specific completed run. |
| `get_trends` | Multi-brand visibility trends over the last N days. |
| `get_prompt_results` | Raw AI response text for the latest usable run or a specific run, with optional filters. |
| `get_prompt_performance` | Rank prompts by appearance, coverage, position, citations, and sentiment in the latest usable run or a specific completed run. |
| `get_attribute_breakdown` | Per-attribute brand sentiment and evidence for one topic in the latest usable run or a specific completed run. These are response attributes (what AI says about each brand), distinct from prompt-tag attributes. |
| `get_engine_patterns` | Compare how each platform sources and structures answers in the latest usable run or a specific completed run. |
| `get_citations` | Top cited domains for the latest usable run or a specific completed run, with optional filters. |
| `get_mentions` | Own-brand mention summaries grouped by topic for the latest usable run or a specific completed run. |
## Google integrations
Both tools read through the organization's Google connection and the project's assigned property, set up in the web UI ([Site Readiness Performance](/manual/readiness#performance)). When setup is incomplete they return `NOT_CONNECTED` or `NOT_CONFIGURED` with the exact next step instead of failing. Read-only, both of them.
| Tool | Description |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `get_gsc_search_analytics` | Google Search Console search analytics for a project: clicks, impressions, CTR, position, plus top rows by `query` or `page` over 7, 28, or 90 days. Live from Google, cached about an hour. Headline totals use by-property aggregation and match the GSC UI. GSC reporting lags 2 to 3 days behind real time. |
| `get_ga4_ai_traffic` | GA4 sessions and key events from AI referrers (ChatGPT, Perplexity, Gemini, Claude, Copilot, Grok, DeepSeek) against site totals, over 7, 28, or 90 days. Referrer-based, so it is a lower bound. Native apps and pasted links send no referrer. |
## Scheduling
| Tool | Description |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| `get_schedule` | Inspect the scheduled prompt-run settings for one project. |
| `update_schedules` | Update scheduled-run settings for one or more projects in one batch, each taking at least one of `enabled`, `frequency`, or `hour_utc`. |
## Content audit
| Tool | Description |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `run_content_audit` | Start a content audit for a project (whole site or single page). Returns immediately — poll `get_content_audit_status`. Consumes monthly page allowance (same as the web app). |
| `get_content_audit_status` | Poll audit status and progress (scored vs planned pages) without full scores or fix detail. |
| `get_content_audit_results` | Fetch plan-gated audit results: scores, dimension summaries, and prioritized fixes when entitled. |
| `list_content_audits` | List recent content audits for a project (id, target, status, score, page count, started time). |
## Documentation
These search the OpenLens documentation itself, so an agent can answer product questions and recommend next steps without guessing. Both are read-only and return ranked doc sections, each with a deep-link URL and a snippet.
| Tool | Description |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `docs_search` | Search the full documentation (definitions, pricing, web UI manual, MCP/API reference) with BM25 ranking. Returns the most relevant sections for a query. |
| `happy_paths` | Search only the "how you're meant to use OpenLens" docs (onboarding, quickstart, recommended workflows). Best for open-ended "what should I do now?" guidance rather than syntax or reference lookups. |
# API keys and MCP
Source: https://docs.openlens.com/organizations/api-keys-and-mcp
How personal and organization API keys differ, which organization's projects each reaches, and how MCP binds to your organization.
Programmatic access uses an API key, created from **API Keys** in the sidebar. There are two kinds: **organization** keys, which you'll normally use, and **personal** keys, for quick testing.
## Organizations
Everything in OpenLens belongs to an **organization** — it owns your projects, data, seats, and billing. When you sign up you get your own. You can invite people into it — teammates to work alongside you, clients to view their own dashboards — or join someone else's if they invite you. Access to a project is always granted within its organization.
## Organization keys
An organization key is the standard way to work with an organization's projects programmatically. It belongs to the organization itself — a service account, not tied to any person, so it keeps working as people join or leave.
Use one for scripts, agents, reporting pipelines, a Slack bot, or a warehouse sync — anything that reads or writes your projects.
Only **owners** and **admins** can create or see organization keys. Because the key can read and write every project in the organization, it's limited to the roles that already have full-organization access — **members** and **clients** are scoped to just their assigned projects, so an org-wide key would over-grant them. See [roles and access](/organizations/overview) for the full breakdown.
An organization key can't govern the organization (no inviting members, changing roles, billing, or minting other keys), and it never holds a seat.
**Minting keys for others.** Give each integration or teammate its own named key (for example `CI` or `Sarah's reporting script`) instead of sharing one. Every key has a last-used time and can be revoked on its own, so you can see which key is active and cut off a single source without disturbing the rest. Actions are attributed to the **key**, not to a person — a key shared between people can't be traced back to an individual.
## Personal keys
A personal key acts as you and is meant for quick testing of the API from your own account. For real work with an organization's projects, use an organization key. Any signed-in user can create one.
## Creating a key
1. Open **API Keys** in the sidebar.
2. Name the key (e.g. "CI integration", "Slack bot") and pick the scope. Anyone can create a **personal** key; only owners and admins can choose **organization** scope. A member or client who needs an organization key should ask an owner or admin.
3. Pick an expiry. Never, 30, 90, or 180 days.
4. Copy the secret immediately. It's shown exactly once. Lose it and you revoke and re-create.
Then send it on every request:
```http theme={null}
Authorization: Bearer
```
The full walkthrough, from key to first visibility score, is in the [API reference](/api-reference/introduction).
## MCP and your organization
The [MCP server](/mcp/overview) uses OAuth, so there's no key to copy. When your agent connects, the session binds to your active organization, and the agent can do whatever your role allows: an owner's agent manages everything, a member's agent works its assigned projects, a client's agent reads its one dashboard.
API and MCP calls are metered per org per month, with allowances that scale by plan. The **Usage** page shows where you stand, and `GET /api/me/limits` returns the same numbers programmatically.
# Client logins
Source: https://docs.openlens.com/organizations/client-access
Give every client a live dashboard instead of a monthly PDF. Free and unlimited.
The standard agency deliverable is a monthly report. A client login is better: your client signs into OpenLens and watches their own visibility move, on the dashboard you built for them, any day they want. You still control exactly what they see.
Client logins are free and unlimited on every plan. They never count against your seats.
## How to set one up
1. Open **Team** in the sidebar.
2. Enter your client's email and pick the **Client** role.
3. Add the one project they should see (you can add more than one if the engagement covers multiple brands).
4. Send the invite. On their first sign-in they land in your org with access to exactly that project.
## What a client sees
Everything read-only on their assigned projects: the dashboard, topic performance, citations, and reports, including the PDF download. The numbers they see are the same numbers you see.
What they don't get:
* **No edits, anywhere.** They can't run prompts, change brands or topics, touch the schedule, or alter settings. Read-only is enforced on the server for every write, on every project, even if you accidentally assign them as manager.
* **No other projects.** A client assigned to Acme has no way to know Beta exists.
* **No org internals.** No Team page, no Usage page, no billing, no org API keys.
## API and MCP for clients
A client login can connect over [MCP](/mcp/overview) like any other user. The OAuth session binds to your org, so their access stays read-only and scoped to their assigned projects, and their calls draw from your org's monthly API and MCP allowances. Useful when a technical client wants to pull their own numbers into a spreadsheet or ask an agent about their visibility.
An API key isn't the way to do this: only owners and admins can create the organization key that reaches your projects, and a personal key acts on the client's own account, not your organization. MCP is how a client gets programmatic access to their dashboard.
# Organizations
Source: https://docs.openlens.com/organizations/overview
Your agency's workspace: one org, all your clients, four roles.
An organization is your agency's workspace. Every client you track lives inside it as a project, and everything attached to that project (brands, topics, prompts, runs, reports) belongs to the org. Your teammates join the org once and get access to the projects you choose. Your clients can get read-only logins to just their own dashboard.
When you sign up, OpenLens sets up your organization automatically. You can invite teammates and clients into it, or join another organization if someone invites you.
## The four roles
| Role | What it can do | Costs a seat? |
| ---------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
| **Owner** | Everything. Manages members, billing, API keys, can delete the org. | Yes |
| **Admin** | Manages members, projects, and org API keys. Everything except deleting the org. | Yes |
| **Member** | Works on the projects you assign. Manager access on a project means edit, viewer means read-only. | Only with manager access on at least one project |
| **Client** | Read-only login for your client. Scoped to the projects you pick, usually one. | Never. Free and unlimited |
Seats are explained honestly in [Teams and seats](/organizations/teams-and-seats): you pay for people who can edit, and nobody else.
## Per-project access
Owners and admins see every project in the org. Members start with zero. Each project assignment grants exactly one project at one of two levels:
* **Manager**: full edit. Run prompts, edit brands and topics, change settings.
* **Viewer**: read-only. Dashboards, topic performance, reports. No edits.
The same member can be manager on one project and viewer on another. The roles compose per project, so staffing maps directly onto your account assignments.
An agency owner has three clients (Acme, Beta, Gamma) and one staffer, Sarah:
1. Owner invites Sarah as a member, assigned to Acme as manager and Beta as viewer.
2. Sarah signs in and sees exactly two projects.
3. On Acme she runs prompts, edits competitors, changes the schedule. On Beta she can look but never touch.
4. Gamma never appears in her sidebar. She has no way to know it exists.
## Where you manage all this
* **Team** (in the sidebar, owners and admins only): invite teammates and clients, manage roles, see the full roster.
* **Access** (per project, owners and admins only): add or remove members on the project you have open, flip manager vs viewer.
* **Usage** (owners, admins, and members): the org's credit pool, per-project and per-member usage, and the named seat list.
Inviting teammates, what costs a seat, and what happens at the cap.
Give every client a live dashboard instead of a monthly PDF.
Org-scoped service keys that survive employee turnover.
# Teams and seats
Source: https://docs.openlens.com/organizations/teams-and-seats
Inviting teammates, what costs a seat, and what happens at the cap.
## Inviting teammates
Owners and admins invite from the **Team** page in the sidebar. Enter an email, pick a role, and for members and clients pick the projects they should see. The invite email goes out immediately, and the project assignments fire automatically on their first sign-in. Nothing to configure after they accept.
For owner and admin invites there's no project picker. Those roles see every project in the org by definition.
## What costs a seat
You pay for people who can edit. That's the whole rule.
* **Owners and admins** always hold a seat.
* **Members** hold a seat only if they have manager access on at least one project. A member who is viewer everywhere is free.
* **Clients** never hold a seat. Free and unlimited, always.
* **Pending invites** to a billable role hold a seat while they're pending, so invites can't stack past your cap.
The count is live. Demote an editor to viewer, remove them, or revoke a pending invite and the seat frees immediately. There's no waiting until the next billing cycle and no calling support. Agency staffing changes weekly, and the seat count follows it in real time.
Seat caps by plan: Free includes 2 editor seats, Starter up to 5, Agency as many as you purchase. You buy and remove seats in the billing portal, and the change syncs to your org in seconds.
## At the cap
Inviting one more editor than you've paid for blocks the invite with an exact message: how many seats you're using, and a button to add one. Adding a seat in the Stripe portal takes about ten seconds to sync. Then the same invite goes through.
Client and viewer invites are never blocked. The cap only ever applies to editors.
## Funded seats: nobody gets kicked
Sometimes an org ends up with more editors than purchased seats. Maybe someone was added through a side door, maybe a seat was removed in the portal while editors were active. When that happens, nobody is removed and nobody loses their data.
Instead, the newest editors become read-only until the org is back under its cap. They can still browse every dashboard they could before. Any edit they attempt returns a clear message: the org is using N of M paid seats, ask an owner to add one.
The order is deterministic and visible. Owners are funded first, then editors by seniority, so "why them and not me" always has an answer. The Team and Usage pages badge exactly who is funded and who isn't, and the affected person sees a banner on their own dashboard before they ever hit a blocked click.
Two ways out, both instant:
1. An owner adds a seat in the billing portal. The unfunded editor is back to editing on their next click.
2. An owner frees a seat by demoting another editor to viewer or removing them.
## The Usage page
**Usage** in the sidebar is the org-level answer to "where do my credits go and who's using my seats." Owners and admins see the credit pool, per-project and per-member usage, the named seat list in funding order, and the add-seats action. Members see the same numbers without the actions. Clients don't see the page at all.
# Limits and allowances
Source: https://docs.openlens.com/pricing/limits
Every plan number in one table. Seats, clients, the credit pool, platforms, MCP and API calls.
One page, every number. This is the reference for what each OpenLens plan includes. For your org's live numbers, open **Usage** in the dashboard.
## The numbers
| | Free | Starter | Agency |
| ---------------------------------- | ------------------------------ | ---------------------------------------- | -------------------------------------------------------------- |
| **Seats** | 2 included | Up to 5 | Unlimited, billed per seat |
| **Free viewers and client logins** | Unlimited | Unlimited | Unlimited |
| **Clients** | 3 | 5 | Unlimited, 100 per paid seat soft ceiling |
| **Monthly credit pool** | 1,000 + 75 per client | 8,000 per seat + 200 per client | 50,000 per seat + 500 per client |
| **Credit weight per output** | 1 | 1 | 1 (Claude 100, Grok 50) |
| **Tracking cadence** | Weekly, monthly | Weekly, monthly | Daily, weekly, monthly |
| **Platforms** | ChatGPT, Perplexity, Google AI | ChatGPT, Perplexity, Google AI, DeepSeek | ChatGPT, Perplexity, Google AI, Gemini, DeepSeek, Claude, Grok |
| **MCP calls included per month** | 50 | 500 | 2,000 |
| **API calls included per month** | 100 | 500 | 2,500 |
| **Manual runs per day** | 10 per user | 10 per project | 10 per project |
## How the credit pool works
Every plan includes a monthly pool of credits, pooled across your whole org and never caged per client. One output is one answer from one AI platform for one prompt, and on most platforms one output draws 1 credit. Claude draws 100 and Grok draws 50. We reach those two through direct official APIs, and an answer there is significantly more expensive for us than one from the consumer surfaces.
Scheduled tracking reserves credits up front. Each scheduled project commits prompts × cadence × platform weights per month, so a weekly prompt on one standard platform draws about 4.33 credits a month and a daily one draws 30. Whatever your schedules don't reserve stays as slack for manual runs. The whole pool resets on the 1st of each month, UTC.
## What counts as a seat
You only pay for teammates who can edit. A seat is a write-capable member: an owner, an admin, or a member with manager access to at least one project. Read-only members and client logins are free and unlimited on every plan. A member who holds write access at any point in a billing period counts as a seat for that period. Seats bill when you add them, prorate up mid-cycle, and true down at renewal. The credit pool trues down the same way, at renewal and never mid-cycle.
## MCP and API calls
Every plan includes a monthly band of MCP calls and API calls, even Free. The bands reset on the calendar month, and they only ever move up. Calls are role-blind: a viewer's MCP call or a client's API call draws from the same org bands as an admin's.
## Manual runs
On Free, manual runs meter per user: each user gets 10 a day. On paid plans they meter per project: 10 per project per day, and they don't pool across projects. Manual and API-triggered runs both count against the daily number. Scheduled runs bypass it entirely. And re-running the same project has a 5 minute cooldown, on every plan.
## Readiness
Site / Agent Readiness has its own limits, separate from the credit pool. See [Readiness](/manual/readiness) for what the product does.
| | Free | Starter | Agency |
| ------------------------------------ | -------------------------------- | --------------------- | ---------------------- |
| **Pages per run** | 50 | Unlimited (full site) | Unlimited (full site) |
| **Monthly page allowance** | 150 | 5,000 per seat | 200,000 per seat |
| **Lighthouse pages sampled per run** | 1 | 10 | 50 |
| **Per-page detail** | Taste (first 2 fail/warn checks) | Full | Full |
| **Scheduled cadence** | None | Weekly, monthly | Daily, weekly, monthly |
Two levers gate a run. The first is per-run crawl scope: the pages a single run may crawl. The second is a calendar-month page allowance, pooled across your whole org. Effective scope is `min(requested, tier per-run cap, remaining allowance)`. A run that exceeds your remaining balance is clamped to what's left, not blocked. The allowance reserves pages on start and refunds the unused portion on finish, then resets on the 1st of each month, UTC. Free includes a flat 150 pages a month. Starter and Agency allowances scale with the number of paid seats in the org for that billing period.
Lighthouse is decoupled from crawl size: a flat sample of 1, 10, or 50 pages per run, so a larger crawl never multiplies the slow Lighthouse calls.
## AI Indexing
AI Indexing has its own monthly page allowance, separate from Site / Agent Readiness and separate from the credit pool. See [AI Indexing](/manual/ai-indexing) for what the product does.
| | Free | Starter | Agency |
| -------------------------- | ------------------- | -------------------------- | ---------------------- |
| **Pages per run** | 50 | Unlimited (full site) | Unlimited (full site) |
| **Monthly page allowance** | 150 | 1,000 per seat | 10,000 per seat |
| **Visible page rows** | 50 URL/verdict rows | Up to 500 URL/verdict rows | Full |
| **Scheduled cadence** | None | Weekly, monthly | Daily, weekly, monthly |
AI Indexing page allowance resets on the 1st of each month, UTC. Starter and Agency allowances scale with the number of paid seats in the org for that billing period.
## Grandfathering
Accounts created before the new plans launched keep their prior allowances as a floor, permanently. If your Free account had 5 clients before the change, you keep 5.
# Plans and pricing
Source: https://docs.openlens.com/pricing/plans
What each tier includes, how the monthly credit pool works, and which plan fits your team.
OpenLens pricing has two parts. A per-seat base price, and a pooled monthly allowance of credits that your whole account draws from. That's the entire model. There is no per-client fee, so adding a client never moves the bill on its own. And read-only viewers and client logins are free and unlimited on every tier, including Free.
## Seats and credits
A seat is a teammate who can edit. Viewers and client logins don't count as seats. Invite as many as you want.
An output is one answer from one AI platform for one prompt. On most platforms one output draws 1 credit; Claude draws 100 and Grok 50 (see below). Track a prompt weekly on 3 standard platforms and it uses about 13 credits a month. The cadence sets the draw:
| Tracking cadence | Credits per month, per prompt, per standard platform |
| ---------------- | ---------------------------------------------------- |
| Daily | \~30 |
| Weekly | \~4.33 |
| Monthly | 1 |
So daily tracking uses roughly 7x the credits of weekly. Your allowance is pooled at the account level. A quiet client and a heavy client share the same pool, and you decide where the depth goes.
## Claude and Grok
Claude and Grok cost more to run. We query them directly through their official APIs, which costs us significantly more per answer than the other platforms. So they draw from the same pool as everything else, just at a higher rate. Each Claude output draws 100 credits from your monthly pool. Each Grok output draws 50. Both come with the Agency plan, and there's no separate quota to manage and no cadence restriction. Claude tracking and Grok tracking run on whatever cadence you choose.
## Free, \$0
For trying OpenLens on your first brands. No credit card.
* 2 seats and 3 projects
* 1,000 pooled credits a month, plus 75 per project
* Weekly and monthly tracking
* 3 AI platforms: ChatGPT, Perplexity, Google AI
* 50 MCP calls and 100 API calls included each month
* 10 manual runs a day per user
* 150 AI Indexing pages a month
## Starter, \$39.99/mo
For small teams tracking a handful of client projects. \$39.99 a month for the first seat, \$31.99 for each seat after that, up to 5.
Everything in Free, plus:
* 5 seats and 5 projects
* 8,000 credits per seat, plus 200 per project, each month
* DeepSeek joins the platform list
* 500 MCP calls and 500 API calls included each month
* Manual runs move to 10 a day per project
* 1,000 AI Indexing pages per seat each month
## Agency, \$299.99/mo
For agencies running AI visibility at scale. \$299.99 a month for the first seat, \$239.99 for each seat after that.
Everything in Starter, plus:
* Unlimited seats and unlimited projects¹
* 50,000 credits per seat, plus 500 per project, each month
* Daily tracking
* Gemini joins the platform list
* Claude tracking and Grok tracking, direct API, on any cadence. Each Claude output draws 100 credits from your pool, each Grok output 50.
* 2,000 MCP calls and 2,500 API calls included each month
* 10,000 AI Indexing pages per seat each month
¹ 100 projects per seat.
## Enterprise, custom
For large agencies and brands that have outgrown the standard tiers. Everything in Agency, plus custom seats, projects, and credit allowances, custom MCP and API volumes, dedicated support and onboarding, and flexible billing and invoicing. Email [contact@aibread.com](mailto:contact@aibread.com).
## Side by side
| | Free | Starter | Agency | Enterprise |
| ------------------------------ | ------------------------------ | ------------------------------------ | -------------------------------------------- | ---------------------- |
| Base price | \$0 | \$39.99/mo | \$299.99/mo | Custom |
| Additional seats | n/a | \$31.99/mo each | \$239.99/mo each | Custom |
| Seats | 2 | Up to 5 | Unlimited | Custom |
| Free viewers and client logins | Unlimited | Unlimited | Unlimited | Unlimited |
| Projects | 3 | 5 | Unlimited¹ | Custom |
| Monthly credits | 1,000, plus 75 per project | 8,000 per seat, plus 200 per project | 50,000 per seat, plus 500 per project | Custom |
| Tracking cadence | Weekly, monthly | Weekly, monthly | Daily, weekly, monthly | Daily, weekly, monthly |
| AI platforms | ChatGPT, Perplexity, Google AI | Free platforms, plus DeepSeek | Starter platforms, plus Gemini, Claude, Grok | All platforms |
| Claude credit cost | n/a | n/a | 100 credits per output | 100 credits per output |
| Grok credit cost | n/a | n/a | 50 credits per output | 50 credits per output |
| MCP calls included | 50/mo | 500/mo | 2,000/mo | Custom |
| API calls included | 100/mo | 500/mo | 2,500/mo | Custom |
| AI Indexing pages | 150/mo | 1,000/seat/mo | 10,000/seat/mo | Custom |
| Manual runs | 10/day per user | 10/day per project | 10/day per project | Custom |
¹ 100 projects per seat.
## Which tier is right for you
Start on Free if you're still proving that AI visibility matters for a brand. 1,000 pooled credits covers a brand or two on weekly tracking, and you get a taste of MCP and API access too.
Starter fits a small team with a handful of clients. 8,000 credits per seat is the difference between sampling a platform and actually tracking it, and DeepSeek joins the lineup.
Agency is for a roster. Daily tracking, unlimited projects, and all 7 platforms including Claude and Grok. If you're reporting AI visibility to clients every week, this is the tier built for it.
And if the standard numbers don't fit your roster, that's Enterprise. Email us and we'll work out the shape.
## Trials, upgrades, and usage
Every paid tier starts with a 7-day free trial. Annual billing saves 15%.
Upgrades happen in the product. When you hit a ceiling, the 3rd seat on Free or the 6th project on Starter, the upgrade prompt appears right where you hit it. You can also go straight to Billing in the dashboard. And the Usage tab shows where your pool stands at any moment, so the month never surprises you.
The full per-tier reference table lives at [Limits and allowances](/pricing/limits).
# Quickstart
Source: https://docs.openlens.com/quickstart
Sign-up to first useful result in about 15 minutes.
From sign-up to a real measurement of how AI platforms talk about your brand. About 15 minutes end-to-end: a few minutes of setup, then 5 to 15 while the platforms answer.
Create an account at [openlens.com/sign-up](https://openlens.com/sign-up). Free, Starter, and Agency plans are available — see [Plans](/pricing/plans). For enterprise needs, email [contact@aibread.com](mailto:contact@aibread.com).
Enter the client's website URL. OpenLens reads the page and proposes:
* A starting set of **competitors**. Add, remove, or paste a URL to disambiguate a common name.
* A starting set of **topics**. Containers for the prompts that follow.
* A set of **prompts** generated for each topic.
Confirm or edit. See [Onboarding](/manual/onboarding) for the full mechanics.
You land on the Prompts tab with the auto-generated prompts grouped by topic. Read a few. They should sound like questions a real user would type into ChatGPT or Perplexity. Edit anything that doesn't fit. Skip if the auto-generation already looks right.
The button at the top of the dashboard kicks off the first measurement. A typical first project (around 30 prompts across 3 platforms) takes 5 to 15 minutes. You can leave the page. The dashboard updates live as platform responses come back, so visibility, [share of voice](/glossary), and the other numbers will shift while the run is in flight. Final numbers settle when the run completes.
When the run completes, the Dashboard fills in:
* **Visibility**: percentage of platform responses that mentioned your brand. The headline number.
* **Per-platform breakdown**: which AI platforms know you and which don't.
* **Per-topic performance**: where you win, where competitors win.
* **AI sources**: the cited domains models pulled from.
Click into any topic for the per-topic deep-dive with the AI-generated recommendation paragraph.
## What you have at this point
A measurement of how every supported AI platform answers questions in your client's space, who they mention, who they cite, and where you sit relative to competitors right now. Everything else in OpenLens is a way to slice, schedule, or share this data.
## Where to go next
* [Dashboard](/manual/dashboard) for the home view reference.
* [Topic performance](/manual/topic-performance) for the per-topic deep-dive with the AI recommendation.
* [Prompt attributes](/manual/prompt-attributes) for slicing your data along the dimensions that matter to your business.
* [MCP server](/mcp/overview) to drive everything from Claude or another LLM client.
* [Reports](/manual/reports) when you're ready to ship a PDF to a client.
* [Glossary](/glossary) for what each OpenLens term means.