If you need to know whether one website was made with an AI builder, the AI Website Detector answers in a few seconds. If you need to know it for a list of sites, a spreadsheet of leads, every supplier in a marketplace, or inside a tool you’re building, you want the same answer from code: an AI website detector API. Here is how, with the CheckAnySite API, its Python library and its MCP server.
The short version: one request returns the AI builders whose traces a site carries, each with the exact line we found, plus anything else you ask for, such as its tech stack and the domain’s age. You get a free key with monthly credits.
One request
Ask for a site’s stored result with the ai check:
curl "https://api.checkanysite.com/v1/sites/lovable.dev?checks=ai" \
-H "Authorization: Bearer $CHECKANYSITE_API_KEY"
What comes back:
ai.level:highwhen a builder’s own trace was found,mediumwhen only a combination of weaker traces was, andnonewhen there were none.ai.builders: each builder found, with itsname, itskind(aifor AI builders,generalfor other site builders) and itsevidence, the line of the page, header or address that gave it away.resultUrl: our result page, where a person can see the same evidence.
A lookup reads our stored result and never scans. For a site we haven’t seen, start a scan with POST /v1/scans; the quickstart shows both.
In Python
Install the library with pip install checkanysite (or uv add checkanysite) and set your key in CHECKANYSITE_API_KEY. Then:
from checkanysite import CheckAnySite
client = CheckAnySite() # Reads the key from CHECKANYSITE_API_KEY.
site = client.sites.retrieve("lovable.dev", checks=["ai"])
if site.ai.level == "none":
print(f"No AI builder traces found on {site.domain}.")
else:
builders = ", ".join(builder.name for builder in site.ai.builders)
print(f"{site.domain}: traces of {builders}, {site.ai.level} confidence")
print(f"Evidence: {site.result_url}")
Check a list of sites
client.sites.batch looks up to 50 sites in one request. This example writes each site’s AI builders, a few of its technologies and the date its domain was registered to a CSV file:
import csv
from checkanysite import CheckAnySite
client = CheckAnySite()
domains = ["lovable.dev", "stripe.com", "example.org"]
batch = client.sites.batch(domains, checks=["ai", "tech", "history"])
with open("sites.csv", "w", newline="") as file:
writer = csv.writer(file)
writer.writerow(["domain", "ai_level", "ai_builders", "technologies", "registered"])
for item in batch.data:
if not item.result:
writer.writerow([item.input, "", "", "", item.error.message])
continue
site = item.result
builders = ", ".join(b.name for b in site.ai.builders if b.kind == "ai")
technologies = ", ".join(t.name for t in site.tech.technologies[:5])
registration = site.history.registration
registered = registration.registered_at.date().isoformat() if registration and registration.registered_at else ""
writer.writerow([site.domain, site.ai.level, builders, technologies, registered])
A site without a stored result comes back with an error in its place and costs nothing. To check those too, client.scans.batch_and_wait scans up to 10 sites and waits for the results.
Ask your AI agent instead
The same answers are tools in our MCP server, so Claude, ChatGPT, Cursor or VS Code can ask them while you work. In Claude Code:
claude mcp add --transport http checkanysite https://checkanysite.com/mcp \
--header "Authorization: Bearer $CHECKANYSITE_API_KEY"
Then ask in plain words: “Was cinegram.lovable.app vibe coded?” The agent calls detect_ai_builder and answers with the traces it found. In the Claude app, add https://checkanysite.com/mcp as a custom connector and sign in: there’s no key to copy. The MCP docs cover every client.
How to read the answer
- A trace proves the builder was used, at least once. A Lovable badge script or a
.lovable.appaddress doesn’t appear by accident. - No traces never proves a person built the site. Builders let people remove their traces, and some leave none. That’s why the level is
none, not “human”. - It says how a site was built, not who runs it or whether to trust it. For that, ask the
trustcheck, which lists signals such as contact details and domain age, with their sources.
Our accuracy test measures the detector on sites whose makers we know, misses included, and How to tell if a website was made with AI explains every kind of trace.
What it costs
Each check costs credits, fewer from a stored result than with a new scan, and a request never costs more than every check at once. A free key comes with monthly credits: get one here, where every check, its price and its MCP tool are listed.