Before you go · Free tool

Does ChatGPT mention your brand?

One real, search-grounded ChatGPT query — the kind your buyers ask every day. See whether you’re in the answer, who is instead, and which sources it cites.

  • Free — no signup to run it
  • A live API run, not a database lookup
  • Verdict, competitors and cited sources in about a minute

Changelog

What shipped, dated.

Every user-facing change to OptimizeCamp, newest first, in plain language. An entry lands here in the same release as the feature it describes.

Twenty-four fixes from a front-to-back audit

We ran the whole codebase through a front-to-back audit — every module, with an adversarial review pass on every finding — and then fixed everything it surfaced. Twenty-four fixes landed — twenty-three in the product, one hardening our own test setup. The ones you might actually notice: annual subscribers were granted their first month of credits and then nothing for the remaining eleven — credits now refresh every month of an annual term. The citations screen was showing more history than your plan’s window promises; it now honors the window, so its numbers may shrink slightly but they finally match what the rest of the app reports. The competitors screen could fail outright for projects with a long tracking history — that ceiling is gone. Clicking Generate or Run audit twice in quick succession could charge you twice for one piece of work; both are now guarded at the database itself, so the second click is told the work is already running instead of being billed. Publishing to WordPress from two open tabs could create two drafts on your site; the publish lock now lives where both tabs can see it. A deleted or refunded license kept its access until someone noticed by hand; the events that carry those changes are handled now, so access ends when the license does. One was a security fix worth stating plainly: a purchase made under another customer’s email address can no longer affect that customer’s workspace. And the free checker’s daily caps could be slipped past by sending requests in parallel — they hold under load now. The rest of the two dozen are the kind you only notice by their absence: screens that would have started failing as your history grew, alerts and digests that would have quietly stopped at scale, and a handful of costs we were paying twice for no reason.

The app got faster — and it stops getting slower the more you use it

The two screens you spend the most time in, the dashboard you land on and the content editor, were doing far more work per visit than they needed to. The worst of it was backwards in a way worth admitting plainly: every page you had published and were still waiting on results for added three more database lookups to your dashboard, every time you opened it. So the customers who used the product hardest — publishing regularly, waiting on verification — paid the most for it, while a brand new project paid almost nothing. Your dashboard now does a fixed amount of work regardless of how much history sits behind it. On a test project with forty pages awaiting measurement it went from 128 database queries to 8, and it stays at 8 whether that number is two or two hundred. There is now a test that fails the build if that ever creeps back. The content editor was sending your entire document across the network four times on every open — the page read it, then read it again, and both audit lookups carried another full copy each. It reads it once now, which you will notice most on long imported WordPress posts, and it opens in three trips to the database instead of seven. The Optimize queue had the same problem in a different shape: to draw a list of titles and scores, it was sending the entire text of all fifty pages on screen. A single prompt’s detail page was loading every answer and every citation in the whole project in order to show you one prompt’s. Both now ask only for what they draw. One of these was worse than slow, and is worth saying plainly: the query behind page priority grew with the number of prompts you track, times platforms, times days of history — and past a certain size it would have crossed a hard limit in Postgres and simply failed, rather than slowed. Nobody has hit it, and it would have reached our longest-standing customers first. It is rewritten so that it cannot. Several lookups that run on every single visit — the open issues on your pages, your wins feed, the check for an audit that stalled — had no index behind them at all, which meant they got slower as the system as a whole grew rather than as your own work grew; they are indexed now. And the database itself was going to sleep after five minutes of quiet, so the first visit after any gap paid to wake it up and then paid again while it got back up to speed. It stays awake.

Your dashboard has a shape now, and the chart stopped flattening real drops

The screen you land on every session was nine stacked cards of identical weight, so after the score the eye had nowhere to go — “Value delivered” carried the same visual authority as the trend line. The score and its chart now sit at the top with no card frame at all, full width and with room to breathe; the detail behind them — per-platform, share of voice, and the four rates — is one panel with hairline dividers instead of six separate boxes competing with the headline. The chart itself was a letterbox barely taller than the text beside it, with gridlines only at 0, 50 and 100, which is why a twenty-six point collapse could render as a gentle slope. It’s twice as tall now, with lines at 25 and 75 to measure against, and a soft band marking the range your own data actually occupies — so a real move is obvious without us rescaling the axis under you. We deliberately did not fit the axis to the data: it carries six switchable metrics and your competitors’ lines, and an axis that silently rescales between one month’s client report and the next is the oldest chart trick there is. On a phone the chart now draws itself at a size meant for a phone, instead of shrinking 9px labels to about four. Share-of-voice bars are drawn against 100% rather than against whoever is winning — a market where the leader holds 9% no longer looks identical to one where they hold 90%, including in the PDF you send a client. The Prompts screen, whose whole job is “which do I fix first”, finally answers it: search, pagination, and sorting by need — weakest first, or what’s falling — instead of alphabetically through up to 300 rows. Your plan’s prompt count stays honest while you filter; it counts every prompt, not the ones on screen. And when AI names you for the first time on a question you were absent from, that no longer arrives as a feed row indistinguishable from the sixty-fifth warning of the week: it’s a real card with the question quoted large, the platform, the run-by-run before and after, and a line you can copy straight into Slack.

Visibility dashboard docs

If you publish somewhere we can’t see, tell us — and the loop closes anyway

Our whole pitch is find what’s missing, fix it, prove it worked. That last part quietly didn’t work for you unless your site ran on WordPress. Everywhere else — Webflow, Ghost, Shopify, headless, a site you edit by hand — publishing here saved a snapshot, and because a snapshot isn’t proof that anything changed on your actual page, every Impact Card that followed said “No impact claim.” That reads like a finding about your data. It was a statement about our blindness, and nothing on screen said so. Now it does, and it offers the way out: on any page you published yourself, mark it live with its address and the date it went up, and we measure from that date. Runs in between measured the old page, so they count toward neither side of the comparison — you don’t get a result faster by attesting, you get a real one. Everything built on it is labelled Attested, because the date came from you rather than from a change we made; it never looks like something we measured ourselves. We do try to confirm it: we take a distinctive phrase from the fixes you accepted and look for it on the address you gave, and if it’s there the claim is upgraded to Verified. If the page is unreachable, sitting behind a security check, or the phrase isn’t there, your word stands exactly as it was and you can re-check any time. A page we can’t read is not a page that failed — we’ve been burned by that before, and we won’t turn a missing claim into a wrong one. The trend chart also marks the day the page went live now, not the day you saved the snapshot.

Impact Cards docsPublishing docs

See exactly what changes on your live page before you publish it

Publishing to WordPress used to be a browser pop-up that said “this updates the live post” and nothing else — over a document you might have changed in twenty places across two sessions, some of those changes written by the audit rather than by you. On a client’s site that is a lot to ask on trust. Publish now opens a review step: what changed, block by block, against the version we last know matched that page — the import if you haven’t published since, the last publish if you have. Edited paragraphs show the actual words that changed inside them, added and removed blocks are labelled as such, and anything an accepted AI fix wrote is marked as its work, not yours. You can revert any single block from inside the review without losing your other edits, and nothing reaches WordPress until you press publish. There’s a one-line summary at the top — “3 blocks edited, 1 added — 2 from accepted AI fixes” — for when you already know what you did and just want to ship. If nothing has changed since the last publish, it says that too, rather than letting you rewrite the post with the same content and wonder why. The competitor-overlap warning moved in here as well: it used to turn the publish button into “Publish to WordPress anyway,” which read like the normal path with a rude caption. It’s now a plain warning inside the review, said once. Saving a local snapshot and pushing a new WordPress draft get proper confirmations too, both of which now state plainly that your live site doesn’t change.

Publishing docs

Archiving a prompt, a page or a gap is no longer permanent

Several of the fastest actions in this app used to be the only ones you couldn’t take back. Archiving a tracked prompt was a single unconfirmed click on a small icon at the end of a row, and there was no way back — worse, if you tried the obvious recovery and simply re-added the prompt, we told you “You’re already tracking that prompt,” which wasn’t true and pointed you away from the one thing that would have fixed it. Archiving a page and dismissing a content gap were the same one-way doors. None of that was a limitation of the data: we have always kept everything an undo needs — when it was archived, who did it, and for gaps, the reason you dismissed it. We just never rendered the way back. Now the Archived tab on Prompts has Restore on every row, and re-adding an archived prompt says it’s archived and takes you straight there. Pages have an Archived view with the same Restore, and archiving one now tells you where it went instead of silently reloading. Dismissed gaps get a Dismissed tab with Reopen, and a reopened gap genuinely reopens — it won’t quietly re-suppress itself the next time we look for gaps. In the content editor, accepted fixes can be reverted one at a time from the Accepted tab: it puts the original sentence back. If you’ve since rewritten that paragraph yourself, it refuses instead of overwriting you, and hands you the original text to place where you want it — an undo that destroys a later edit isn’t an undo. Revoking an API key now asks first, and tells you when that key was last used, because that’s the one fact that says whether anything still depends on it; revoking genuinely can’t be undone, since the secret was only ever shown once. One honest note on restores: they count against your plan’s limits again, the same as adding new. If you’re at your prompt or page cap, restore says so rather than letting you slip over it.

Tracked prompts docsContent gaps docs

Every colour on screen now means one thing

Orange used to mean competitor, falling, empty, upsell and warning at the same time, and our blue meant brand, link, button and “this number went up” at once — so a good result was typographically identical to a link, and no colour on screen was a claim you could learn. Rises are now green and falls red, everywhere they appear: deltas, sparklines, biggest movers. Blue is the brand and the things you can click, nothing else. Amber is back to meaning a warning and only a warning. On the trend chart, competitors had a real bug hiding as a style problem: there were only three colours, so on Pro your fourth competitor was drawn in the same colour as your first, and on Agency so were your seventh and tenth — including in the PDF you send a client. There are now four colours and, past that, dashed lines, so ten competitors are ten distinguishable lines and the difference survives colourblindness. A competitor also keeps its colour from week to week now; it used to shift when the leaderboard reshuffled. Your prompts are no longer printed in a code typeface: buyer questions like “Is Acme good for small teams?” read as sentences instead of log output, on every screen and in the client report. And the smallest text in the app — chips, labels, table meta — now grows with the rest of the interface when you scale it up, which it never did before.

Visibility dashboard docs

The report you hand a client is now worth handing over

If you exported a client report as a PDF, every chart in it was blank. The share-of-voice and per-platform bars are drawn as coloured fills, browsers drop background colours when printing to save ink, and there was nothing telling them not to — so the data simply vanished on its way to the page. It prints now, on Letter with proper margins, and the definitions behind each metric print with it instead of hiding inside tooltips a sheet of paper can't open. The report also tells you what it is: it has real headings, it names the period it covers rather than only the day it was made, your accent colour is on your own button instead of ours, and if you haven't uploaded a logo it shows a proper mark rather than an empty square. There's a new note field too — a paragraph at the top, in your words, saying what the numbers mean this month. And two things it used to get wrong about honesty: a platform we never measured in the period now says exactly that, instead of drawing a bar at zero, and the word "simulated" no longer appears over real measurements when a provider key happens to be down. On the emails: a drop and a rise used to be printed in the same colour, so a bad month and a good one looked identical at a glance — they now differ in colour and carry ▲ or ▼. They stack properly on a phone, and Apple Mail no longer inverts them into something we never designed. You can also see all of this before it sends: Settings → Notifications previews the real emails and will send you a test. CSV exports carry their date range in the filename, open in Excel without mangling accented competitor names, and include a column naming which platforms were actually measured each day.

Reports & sharing docs

The app tells you what it just did

Until now, doing something here was quiet in a way that made you doubt it worked. Confirmations lived in the address bar, so they never went away on their own — reload a page a day later and it still congratulated you on the three prompts you added yesterday. Some actions said nothing at all: dismissing a source bounced you back to the same screen with no explanation of why nothing happened. Now every completed action says so once, in one place, and clears itself. “Run tracking now” dims while it starts, so the second impatient click can’t start a run that then complains a run is already going. “Recompute gaps” — which quietly thinks for up to a minute — says it’s working instead of sitting there looking untouched. Alert and email toggles hold the position you just put them in rather than flicking back until the save lands, and if a save genuinely fails you’re told, next to the control, instead of it silently reverting. Ticking off a playbook step is instant now, not a full page reload. Switching projects shows that it heard you. And if you drive this app by keyboard, every focused control now has the same clear outline, everywhere.

Docs

Your first week shows what AI actually said, not an empty trend

On day one a project has been measured once — but the dashboard was still drawing a trend line through a single point, four flat sparklines, deltas against nothing, and a “biggest movers” list of prompts that had never moved. The Competitors page was worse: it printed 0 for you and every rival, above a grid where every cell read “not measured”. None of that was measured; it was just the shape of a mature dashboard drawn over a project that didn’t have the data yet. Now the parts that describe change stay hidden until there are at least two tracked days, and in their place you get the thing that was there all along: the real answers from your first run — how many were analysed and on which platforms, which brands got named instead of you, which domains got cited, and which of your prompts you’re missing from. Rates with nothing behind them read “—”, never 0, because a brand nobody has been asked about has no share of voice — not 0% of it. And where the chart used to promise “the trend line appears with tomorrow’s run”, it now names the real date your plan’s schedule will next run, which on a weekly plan was never tomorrow.

Visibility dashboard docs

See your renewal date, get your invoices, and cancel without emailing us

Settings → Billing now shows the subscription itself: whether it’s active, the period you’re in, what you’ll next be charged and when. “Manage billing & invoices” opens your customer portal at Freemius, who process our payments — that’s where receipts, payment methods and cancellation live, and there’s now a direct button to it instead of a support email. If you’ve already cancelled, the page says the date your access runs to and offers to resume. Changing plan now tells you what a downgrade costs you before you buy it — which caps shrink, what you’re already over, and which features switch off — and there’s a real four-plan comparison table on the page the “Compare plans” links have always pointed at. Every “you’ve hit your limit” message across the app now links to the page that fixes it, and says when your credits reset. Audit credits are shown where you spend them, in Optimize and in the editor, instead of only in Settings.

PricingRefund policy

Clearer terms before you pay, and a checkout page you can leave

The pricing page buttons now name the plan and the price you’d actually be charged for the cycle you’ve selected, and the terms sit right under each one: no trial, pay up front, 14-day money back on your first charge, cancel anytime. The checkout page used to be a dead end with a single purchase button — no way to read the refund terms first, reach support, or get back out. It now carries links to refunds, terms, privacy, support and the main site, plus sign-out. And if your payment goes through but activation takes a moment, you’ll see how long it’s been rather than a page silently reloading forever — with a real “here’s what to do” panel, and a clear note not to buy twice. Signing up now asks you to accept the Terms and Privacy Policy explicitly.

The app is usable without a mouse, and dates read in your timezone

A batch of things that were quietly wrong. You can now edit any paragraph in the content editor from the keyboard — the edit control only ever appeared on mouse hover, so anyone working without a mouse simply couldn’t reach it. Every screen now starts with a “Skip to main content” link, so you no longer tab through the whole sidebar to reach the page you just opened. Submitting a form no longer throws you back to the top of the page while it saves. Sign-in and password-reset errors are now read aloud by screen readers instead of appearing silently. Dates on Plays, Alerts and the Action Center were being written in the server’s timezone — they now read in yours. Archiving a tracked prompt has moved out of the row’s icon cluster into a “…” menu, so it’s no longer one stray click away from a pause, and the sidebar remembers whether you collapsed it. Text on blue buttons and on the red alert badge is darker-backed now so it meets contrast standards.

A page that fails no longer takes the whole workspace with it

If a single view hit an unexpected error — a slow read, a hiccup talking to the database — the error replaced everything: the sidebar, your project switcher, your account menu. The only way out of one broken page was the browser back button. Now the failure stays in the page area, the navigation keeps working, and you can retry or just click somewhere else. Shared client reports got the same treatment, and a more appropriate one: if a report link hits an error, whoever you sent it to now sees a plain “try again, or ask for a fresh link” — not an invitation to sign in to an account they don’t have.

The free checker writes a question a real buyer would ask

Enter your website on the homepage and the AI Visibility Checker now reads it and fills itself in — your brand name, the category a customer would put you in, and who you serve. The one “what do you sell?” box is now a short category field plus optional place and audience, and the question is composed from them: “What are the best Italian restaurants in New York City?” rather than your whole description pasted into a sentence. The question is yours to edit before it runs — reword it however your buyers actually ask, as long as it still asks about your category. Long pastes are no longer cut off mid-word, which used to turn a description into a question that stopped mid-sentence.

AI Visibility Checker

Filter Sources by whether you’re on the page

The You column heading is now a filter. Pick Absent to see only the cited pages where your brand isn’t named — the clearest openings, and the same set the “You’re absent from” tile counts. Present, Unverified (a page that blocked our last check, so its absence may be stale) and Not checked are there too, and while a filter is on the heading says so, so a narrowed table never reads as the whole list. It combines with the playbook chips above the table, making “suggested playbooks where I’m absent” a single view, and every option carries the count you’ll get before you pick it.

Sources docs

Archive or delete a project

Settings → General now has a danger zone. Archiving a project stops its scheduled tracking, takes it out of your project list and plan limit, and keeps every run, citation and article. An archived project is never lost: it moves to an Archived section at the bottom of the project switcher, one click from the Settings page that restores it (restoring re-checks your plan's project limit). Deleting is permanent: type the project's domain to confirm, and the project and everything it tracked are removed. Archived projects stay readable, but anything that would start work — manual runs, imports, article generation, WordPress sync, prompt changes — is off until you restore.

Hardening the edges of measurement

A set of guards for rare-but-real failure shapes. Citation ownership is re-derived when alerts read it, so fixing a project domain can’t manufacture “no longer cited” streaks from old rows — and newly tracked competitors now claim their historical citations too, instead of leaving them counted as third-party coverage. Query-addressed pages (?p=123) keep their identity in citation matching while tracking params still normalize away. WordPress sync refuses to mass-archive your library when the REST API suddenly reports most posts missing — that pattern means a plugin is hiding them, not that you deleted your site. Challenge-page detection now recognizes non-English WAF pages, the Competitors screen says how many recurring names are still awaiting brand judgment, and dashboard rates show dashes until something is actually measured.

Docs and tooltips now describe exactly what the product measures

A precision pass over every explanation of how a number is made. Earned sources are now described as what they are — pages AI cites that you may not be on yet, not pages “already citing you”. The play Opportunity tooltip spells out its real formula, the presence-trend help says that a no-answer day scores zero, and the Plays “Won” tile lists all three ways a play can win. Platform claims now say Google AI Overviews plainly, with AI Mode on the roadmap next to Gemini and Copilot. The API and MCP earned-sources responses gained a presenceLastCheck field, so integrations can tell a verified absence from a page that blocks automated checks — the same distinction the app draws.

Every verdict now carries its caveats with it

Shared reports and PDFs now mark partial-run days with hollow points and notes, exactly like the in-app chart, and show dashes instead of zeros before anything is measured. “Biggest movers” and the head-to-head timeline stop reading degraded days as real movement. “Your weakest prompts” only lists prompts that actually got answers — unmeasured is not absent — and covers all three platforms. Digest emails say when a period included failed or partial runs; visibility-drop alerts note when the compared days were degraded. Play impact cards disclose when the cited page couldn’t be re-checked at resolution, onboarding no longer builds your brand profile from an anti-bot challenge page, and content audits skip competitor pages they couldn’t actually read instead of scoring you 100 against them.

Measurement fixes: tricky brand names, honest sentiment, no phantom wins

Four fixes to how mentions are measured. Brand names ending in punctuation (think “Disney+” or “C++”) and accented or non-Latin names now match reliably everywhere — they previously couldn’t be detected at all. If the sentiment judge is briefly unavailable, mentions are kept but sentiment reads unmeasured instead of silently counting as neutral, and any mention the judge sets aside is now recorded so results stay auditable. Editing your brand aliases no longer manufactures fake “won back” or “vanished” alerts — streaks that straddle an alias change stay quiet, matching the break markers on your charts. And answers cut off mid-generation by the AI provider no longer count as evidence that you’re absent.

Verdicts now say “couldn’t check” when we couldn’t check

A sweep of every place a failed check could masquerade as a confident answer. The free crawler checker no longer reports “all crawlers allowed” when a firewall blocked it from reading your robots.txt; the visibility checker no longer says your brand “doesn’t come up” when ChatGPT returned no answer at all; the llms.txt status distinguishes “not found” from “your site wouldn’t let us look” (and re-checks at the first tracking run after a day, instead of waiting out the weekly cycle); and playbook scores, Action Center suggestions, and the “You’re absent from” count no longer treat a blocked page check as proof of absence. Outreach drafts also stop grounding themselves in anti-bot challenge pages.

Sources no longer call you Absent from pages we couldn’t actually read

Some sites answer automated checks with an anti-bot challenge page instead of the article. The presence check used to scan that page, find nothing, and confidently mark you Absent — even when you’re right there in the roundup. It now recognizes blocked pages, shows an honest Unverified state instead, and every source can be re-checked on demand from its play drawer (previously only never-checked sources could).

A calmer homepage and a navigation that shows the product

The homepage now leads with one promise — be the brand AI recommends — and every section below it was cut to a single idea: the loop, the three modules (each on its own band), the receipts. Half the words, same claims. The nav grew up too: Product and Resources menus that lay out the modules, comparisons, docs, free tools and blog in one glance instead of a link row.

A security page that says what we actually do

How your data is protected, in checkable detail: envelope-encrypted site credentials, hashed API keys, scrypt-hashed passwords, read-only OAuth connectors, the complete subprocessor list — and a section on what we don’t claim. Plus a security.txt for researchers.

Read the security page

A much deeper visibility trend chart

Hover any point for the full picture, switch metrics in place, change time ranges, and overlay competitors on the same line. Your shipped fixes now appear as event markers on the trend, with run health and a win-rate strip alongside — so the chart answers “did it work?” at a glance.

Solo — the full loop at $19/month

A new entry plan for a single project: 10 tracked prompts, one competitor, weekly runs on all three platforms, and every module included — nothing in the loop is held back. Starter stepped up in the same release: runs now go out three times a week, with five generated articles a month.

See pricing

The free checker is now the front door

Drop your URL on the homepage and read a real, search-grounded ChatGPT answer about your category — no signup, about a minute. If you like what you see (or don’t), the same page points you at what to do next.

Run a free check

Perplexity is the third tracked platform

Every plan now tracks Perplexity alongside ChatGPT and Google AI — the same prompts, the same mention and citation metrics, and the same competitor benchmarks, so scores stay comparable across platforms.

Smoother setup, prompts that propose themselves

Project setup grew real text fields with editable suggestions, scheduled runs now propose new prompts worth tracking (dismissals stick), the Action Center keeps a history of completed work, and Support moved into the app sidebar.

A running ledger of what the loop delivered

The Overview now keeps a dated ledger of delivered value, and the monthly digest reports it. Underneath: competitor head-to-heads snapshot daily, llms.txt checks and generation moved inside the product, and any result that flips is re-run for confirmation before it touches your score.

Public API + MCP server

Pro and Agency plans get API keys for a REST API — including triggering runs — and an MCP server with one-click, read-only OAuth connectors for claude.ai and ChatGPT. Ask your assistant about your own visibility data.

API reference

Yearly billing

Every plan gained a yearly option — up to 26% less than paying month to month, with the same 14-day money-back guarantee on the first charge.

See pricing

Product emails that respect your inbox

A welcome on signup, a summary after every run, and weekly plus monthly digests. Scheduled runs that change nothing stay silent — and when something improves, the email names the win instead of counting it.

Three free tools, no signup

The AI Visibility Checker runs a real search-grounded ChatGPT query for your category and shows who gets named. The AI Crawler Checker reads your robots.txt against GPTBot, ClaudeBot, PerplexityBot, Google-Extended and more. The llms.txt Generator crawls your sitemap and builds a ready-to-upload file.

All free tools

OptimizeCamp is live

Open signup, and the whole loop from day one — measure how ChatGPT and Google AI answer your buyers, fix the pages costing you citations, create what’s missing, and prove the change moved the answers. Built by DotCamp, nine years of WordPress software behind it.

About OptimizeCamp

Start tracking

Read the next entry from the inside

Your first visibility report takes about 15 minutes. Every first charge is backed by a 14-day money-back guarantee.