In this video· click a step to jump to it
Test recording
CrawlSpider — authed AI-visibility walkthrough
37,945 ms · 0 pixels changed · matches baseline
We built this regression test for www.crawlspider.com — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against www.crawlspider.com. Claim it into your own workspace and re-run it on every deploy — free.
export async function test(page, baseUrl, screenshotPath, stepLogger) {
const shot = function (n, slug) { return screenshotPath.replace('.png', '-' + n + '-' + slug + '.png'); };
const LOGIN_RE = /continue with google|sign in with google|sign up with google|log in to your account|sign in to your|create your account|welcome back\s*$/i;
const state = { actions: 0, gated: [] };
const settle = async function () {
await page.waitForLoadState('domcontentloaded').catch(function () {});
await page.waitForLoadState('networkidle', { timeout: 2500 }).catch(function () {});
await page.waitForTimeout(1000);
};
const frame = async function (n, slug, label) {Checks run
Notes from the demo run
AI-generatedWe created a CrawlSpider account, activated it from the emailed link, added 'Lastest' as a tracked brand and walked the signed-in product: Overview, Brands, the new-brand form, the Prompt manager, the new-prompt composer and Runs. The mental model is the clearest part - 'each prompt paired with an AI model becomes one scheduled scan' is stated on the prompts page itself, so the pricing and the data model explain each other in one sentence. That is genuinely hard to do in an AI-visibility product and most competitors don't.
- The unit of work is defined where you use it'Each prompt paired with an AI model becomes one scheduled scan. Deactivating keeps its history - it just pauses that scan.' Two sentences under the table and we understood the billing model, the data model and the pause semantics.
- Empty state offers both pathsThe prompt pool zero-state gives 'write your own with New prompt' next to 'Suggest prompts to have CrawlSpider draft some for you' - it serves the user who knows their buyer questions and the one who doesn't, without picking for them.
- Brand form captures geo up frontDefault city / state / country on the brand record, with 'Prefills new prompts' location - leave blank for global'. Getting locale into the brand rather than every prompt is the right place for it.
- The activation link has a double slash in itThe email sends crawlspider.com/hub//icy_activate.php?code=... - it resolves, but a doubled path segment is the kind of thing that trips strict proxies and makes a careful user hesitate before clicking a link about their account.
- Signed-in surface is reachable but URL-fragileThe app lives at /app/llm/public/dashboard.php and an unauthenticated hit redirects through /hub/icy_getin.php with the target in a query string. It works, but the .php paths and the redirect chain leak implementation detail into URLs people will paste to teammates.
- Suggest prompts·That button spends the founder's model budget - we opened the composer and drafted a prompt by hand instead.
- Save new brand (second time)·The brand already existed from setup; we filled the form to show it and cancelled rather than create a duplicate.
Share this run
Proof your app is not AI slop
This test was built for www.crawlspider.com — claim it free
One click copies the test and baseline screenshots into your own Lastest workspace. Re-run on every deploy and catch regressions before your users do — free, no card required.