Is this site vibe-coded? See which AI builder made it
Paste a URL. If we find a marker we trust for Lovable, Bolt.new, Base44, v0, Replit, Bubble, Softgen, Same.new, Anything (Create.xyz), Tempo Labs or Firebase Studio, we name the builder and show the marker. Weaker clues aren’t enough, so on some sites we stay silent — no name beats a wrong one. Then we check what sites like it usually get wrong: leaked keys, missing security headers, a page search engines see as empty. Free, no sign-up.
Free, no sign-up. The basic check makes only the requests an ordinary browser would.
What one URL tells you
- NoteFree check
The builder — and the marker that gave it away
A lovable.app address, Bolt’s badge script, v0’s generator tag, Replit’s template description, Bubble’s response headers: if we find a marker we trust — one that can’t come from anywhere else, or two independent ones — we name the builder and show the marker we saw. Weaker clues aren’t enough on their own, so we may stay silent where you’d spot a hint by hand. We don’t guess.
- CriticalFree check
A secret key in the public JavaScript
Builders make it easy to call OpenAI, Stripe or Supabase straight from the page — and to ship the secret key along with it. We search the page and its scripts for known key formats and show what we find, redacted, with the file it’s in.
- CriticalPro
Supabase tables anyone can read
Most Lovable apps and many Bolt apps run on Supabase, where Row Level Security is what keeps tables private. On a domain you have verified as yours, we count how many rows each table returns to the public key — never reading their contents.
- MediumFree check
Security headers nobody added
Most AI-built sites run with whatever the host sends by default. We list which protections are missing: Content-Security-Policy, HSTS, clickjacking protection.
- LowFree check
Search engines get an empty shell
Many builders produce a single-page app: an empty <div id="root"> until JavaScript runs. We check the title, description and link preview both in the raw HTML and in the page a real browser renders.
Check it yourself
These are clues you can look for by hand; the scanner names a builder only on a marker that can’t come from anywhere else, or on two independent ones, so it may stay silent where you find one.
Read the page source
Put view-source: in front of the URL and search the page (Cmd/Ctrl + F) for these strings — they come from the builders’ own templates, scripts and badges. The address is a clue too: *.lovable.app, *.bolt.host, *.base44.app, *.replit.app, *.bubbleapps.io and *.created.app belong to the builders themselves. Firebase Studio’s and Anything’s template title and description count only as a pair: the scanner names the builder when both are left untouched, not on the description alone. Bolt’s default preview image is a clue for you only: any page can link to it, so the scanner doesn’t name Bolt on it.
view-source:https://example.com Lovable /__l5e/ Lovable gpt-engineer-file-uploads Bolt bolt.new/badge.js Bolt bolt.new/static/og_default.png v0 name="generator" content="v0.app" Replit replit-dev-banner.js Replit replit-pill Base44 base44_access_token Bubble bubble_session_uid Firebase <title>Firebase Studio App</title> Firebase Generated by Firebase Studio Anything <title>Anything App</title> Anything Created with Anything Softgen cdn.softgen.ai/script.js Same same-runtime Tempo tempo-public-assets/error-handling.js
Look at the response headers
Some builders sign their responses. Bolt adds x-powered-by: Bolt.new on its bolt.host addresses; Bubble sends x-bubble-perf and x-bubble-capacity-* even on custom domains. A cache-tag ending in :studio points to a Firebase App Hosting backend named studio — the one Firebase Studio creates — but that is a clue for you only: the scanner doesn’t name a builder on it. Vercel, Netlify or Cloudflare in the headers name the host, not the builder.
curl -sI https://example.com | grep -iE '^(x-powered-by|x-bubble|cache-tag)'
Check the domain’s DNS by hand
Connecting a custom domain leaves records behind. A TXT record at _lovable.<domain>, or the address 185.158.133.1, points to Lovable; a replit-verify= TXT record to Replit; a CNAME to base44.onrender.com to Base44. The scanner itself names Lovable on the address 185.158.133.1, and Replit only when replit-verify comes with Replit’s address 34.111.179.208. The _lovable TXT record and the Base44 CNAME are clues for you only: a record can outlive the site it was made for, so check it against the page itself.
dig +short TXT _lovable.example.com dig +short A example.com dig +short TXT example.com | grep replit-verify dig +short CNAME www.example.com
Search the app’s own scripts
DevTools → Sources, reload, then search every loaded file at once (Cmd/Ctrl + Option/Alt + F). These strings sit in the app’s own bundle, so they often survive a custom domain and even a move to another host. The Lovable one appears only in apps that use Supabase or Lovable Cloud. A blog’s bundle can quote these strings in a post, so the scanner names Lovable or Base44 on them only together with a second marker, and for Tempo looks for the code that defines TempoDevtools, not the word.
Lovable lovable-preview-auth Base44 base44SharedInstances Tempo TempoDevtools
Found nothing? That proves nothing
Badges can be hidden, template text edited, projects exported to any host — and code written with Cursor, Claude Code or Copilot leaves no platform marker at all. Once built for production, hand-written and AI-written code look the same; no tool can honestly tell them apart.
Fixes go back into the builder
Every report ends with a prompt for an AI builder: what is wrong, where it is and how to check that the fix worked. Paste it into Lovable, Bolt, v0 or Replit Agent — or into Cursor.
Fix these issues on myapp.bolt.host. Locate each one before changing anything. 1. An OpenAI API key (sk-proj-…7fQ2) is in assets/index-5b0c.js. Revoke it in the OpenAI dashboard, move the call into a server function and read the key from an environment variable there. 2. The raw HTML has no meta description. Add a description and Open Graph tags to index.html so they exist before JavaScript runs. When done, re-check: https://scanyoursite.app/en?check=myapp.bolt.host
Every prompt is a new deploy
An AI builder can rewrite half the app in one go. With Pro we notice each new version, check it within minutes and write only when something new breaks — in Telegram, by email or to Slack and Discord.
See plansQuestions
Can you tell whether the code was written by AI?
No — and nobody can honestly do that from the outside. Once code is built and minified for production, hand-written and AI-written code look the same. We don’t give an “AI probability”. We name a builder only on a marker we trust, and we show you which one.
No builder found — so it was made by hand?
Not necessarily. A site can be built with AI and carry no fingerprint at all: the badge was hidden, the template text edited, the project exported to another host, or the code written with Cursor, Claude Code or Copilot, which leave nothing in the site. No name means only that we found no marker we trust.
Which builders do you recognise?
Lovable, Bolt.new, Base44, v0, Replit, Bubble, Softgen, Same.new, Anything (Create.xyz), Tempo Labs and Firebase Studio. Some markers survive a custom domain; others appear only on the builder’s own address, such as *.bolt.host. For Bubble and Replit a marker proves the platform, not that its AI wrote the app.
Can I check a site that isn’t mine?
Yes. The free check is passive: it requests the page, its scripts, robots.txt, the sitemap, DNS and the certificate — what a browser or search crawler fetches — and identifies itself as ScanYourSiteBot. Deeper probes, such as the Supabase table check, run only on domains whose owner has verified them.
It’s my site and I don’t want it checked.
Enter your domain at scanyoursite.app/bot. It takes effect immediately and needs no account; the same page lists what our bot requests and the User-Agent it sends.
What does it cost?
The check is free, with no sign-up. Monitoring with a check after every deploy starts at $19 / €19 a month for three sites.
Paste your URL. Get the list in about a minute.
Every finding comes with what it means for you and how to fix it — or a prompt your AI coding tool can apply.
Free, no sign-up. The basic check makes only the requests an ordinary browser would.