Method

How the verdict is computed

No language model is involved in the verdict. A scan fetches the page once, server-side, and runs a fixed rule set against it. The same input always produces the same output, and every point is attributable to a named rule.

Pipeline

  1. The URL is normalised, and refused if it resolves to a private or reserved address.
  2. The page is fetched with a desktop browser User-Agent, following up to 5 redirects, with a hard 10 second budget. Nothing on the target is executed.
  3. The HTML is tokenised into a flat description: tags with attributes and nesting depth, visible text, comments, inline scripts. robots.txt and sitemap.xml are fetched separately, and up to 10 subresources are size-probed with HEAD requests.
  4. Rules and structural checks run against that description, producing evidence rows.
  5. Evidence is scored by family, weighted, and turned into a verdict.

Scoring

The fingerprint family takes the strongest single match plus 5 points per corroborating match (capped at 100), because one conclusive fingerprint should not be diluted by the absence of others. The other three families are additive: many small smells add up. Families are then weighted 50 / 25 / 15 / 10.

Active rule set

103 enabled rules
RuleBuilderFamilySignal typePatternWeight
Lorem ipsum placeholder copy-contenttextlorem ipsum|dolor sit amet|consectetur adipiscing40
Placeholder brand name-contenttextyour (company|brand|business) name|company name here|your (company|brand) here|\[your (company|brand)\]|\[company name\]|acme (inc|corp|co)\b30
Untouched default hero copy-contenttextwelcome to your new (website|site|app)|build something amazing|start building your|your journey starts here|edit this text|click to edit|this is a paragraph|add your text here30
Placeholder contact details-contenttextexample@example\.com|your@email\.com|123-456-7890|555-555-5555|123 main st20
Placeholder legal or footer text-contenttextall rights reserved\.? (your|company name)|\[company\]|\{\{\s*\w+\s*\}\}15
Lovable / GPT Engineer script hostLovablefingerprintscript_host(^|\.)gpteng\.co$100
Lovable hosting domainLovablefingerprinthost(^|\.)lovable(project)?\.app$100
Lovable generator meta tagLovablefingerprintmeta_generatorlovable100
v0 generator meta tagv0 by Vercelfingerprintmeta_generatorv0(\.dev| by vercel)100
Durable generator meta tagDurablefingerprintmeta_generatordurable100
v0 generator meta tag (v0.app)v0 by Vercelfingerprintmeta_generatorv0\.app100
v0 hosting domainv0 by Vercelfingerprinthost(^|\.)v0\.(build|dev)$95
Bolt generator meta tagBolt.newfingerprintmeta_generatorbolt\.new|stackblitz95
Bolt hosting domainBolt.newfingerprinthost(^|\.)bolt\.host$95
Framer generator meta tagFramerfingerprintmeta_generatorframer95
Wix generator meta tagWixfingerprintmeta_generatorwix\.com|wix website builder95
Wix response headerWixfingerprintheader^x-wix-[a-z-]*:95
Webflow generator meta tagWebflowfingerprintmeta_generatorwebflow95
Figma Make source markerFigma Makefingerprinthtmlcreated in figma make|isFigmake:\s*true|<title>figma make app</title>95
Base44 page-view loggerBase44fingerprinthtml/api/app-logs/[0-9a-f]{24}/log-user-in-app92
Anything (Create) asset CDNAnythingfingerprintscript_host^cdn\.created\.app$92
Emergent runtime script hostEmergentfingerprintscript_host^assets\.emergent\.sh$92
Macaly badge or platform scriptMacalyfingerprinthtmldata-macaly-badge|made with ai in macaly|macaly\.com/js/(platform-app|macaly)\.js|assets\.macaly-user-data\.dev92
Floot runtime markerFlootfingerprinthtml__FLOOT_CSS_ORDER__|floot\.com/t\.js|assets\.floot\.app/92
Wegic asset CDNWegicfingerprintscript_host^cdn\.wegic\.ai$92
Gamma Sites script hostGammafingerprintscript_host^assets\.gammahosted\.com$92
Softr source comment or asset hostSoftrfingerprinthtmlwas created in softr|assets\.softr-files\.com/92
Lovable project badge or backlinkLovablefingerprinthtmllovable-badge|lovable\.dev/projects|lovable\.app/projects|data-lovable90
v0 script hostv0 by Vercelfingerprintscript_host(^|\.)v0\.dev$90
Replit hosting domainReplitfingerprinthost(^|\.)replit\.(app|dev)$|(^|\.)repl\.co$90
Durable asset hostDurablefingerprintscript_host(^|\.)durable\.co$|(^|\.)durablesites\.com$90
Base44 hosting domainBase44fingerprinthost(^|\.)base44\.app$90
Hostinger AI / Zyro generator meta tagHostinger AI Builderfingerprintmeta_generatorhostinger|zyro90
Framer hosting domainFramerfingerprinthost(^|\.)framer\.(website|app|ai)$90
Wix static asset hostWixfingerprintscript_host(^|\.)parastorage\.com$|(^|\.)wixstatic\.com$90
Wix hosting domainWixfingerprinthost(^|\.)wixsite\.com$|(^|\.)editorx\.io$90
Webflow data attributesWebflowfingerprinthtmldata-wf-page|data-wf-site|data-wf-domain90
Webflow hosting domainWebflowfingerprinthost(^|\.)webflow\.io$90
Squarespace generator meta tagSquarespacefingerprintmeta_generatorsquarespace90
Replit default meta descriptionReplitfingerprintmeta_anybuilt on replit\. update this description90
Base44 auth storage key in the JS bundleBase44fingerprintbundlebase44_access_token|base44SharedInstances90
Anything (Create) hosting domainAnythingfingerprinthost(^|\.)created\.app$90
Emergent hosting domainEmergentfingerprinthost(^|\.)emergent\.host$|\.preview\.emergentagent\.com$90
Emergent runtime or asset referenceEmergentfingerprinthtmlemergent\.sh/scripts/emergent-main\.js|customer-assets\.emergentagent\.com90
Macaly hosting domainMacalyfingerprinthost(^|\.)macaly\.app$90
Floot hosting domainFlootfingerprinthost(^|\.)floot\.app$90
Wegic hosting domainWegicfingerprinthost(^|\.)wegic\.app$90
Wegic default OpenGraph titleWegicfingerprintmeta_anymade with wegic90
Gamma Sites hosting domainGammafingerprinthost(^|\.)gamma\.site$90
Figma Sites hosting domainFigma Sitesfingerprinthost(^|\.)figma\.site$90
Durable hosting domainDurablefingerprinthost(^|\.)(durable\.co|mydurable\.com)$90
Softr hosting domainSoftrfingerprinthost(^|\.)softr\.app$90
Typedream hosting domainTypedreamfingerprinthost(^|\.)typedream\.(app|page)$90
Typedream default descriptionTypedreamfingerprintmeta_anya website made with typedream90
v0 default project domainv0 by Vercelfingerprinthost^v0-[a-z0-9-]+\.vercel\.app$88
Base44 media CDNBase44fingerprinthtmlmedia\.base44\.com/88
Durable asset storageDurablefingerprinthtmldurable\.sfo3\.cdn\.digitaloceanspaces\.com|cdn\.durable\.co/88
Lovable default OpenGraph imageLovablefingerprintmeta_anylovable\.dev/opengraph|gpteng\.co/[^"\s]*og85
v0 source markerv0 by Vercelfingerprinthtmlv0\.dev/chat|data-v0-t=|built with v085
Bolt source markerBolt.newfingerprinthtmlbolt\.new/~|built with bolt|__bolt85
Replit badge or runtime markerReplitfingerprinthtmlreplit-badge|__replco85
Base44 script hostBase44fingerprintscript_host(^|\.)base44\.(app|com)$85
10Web AI generator meta tag10Web AIfingerprintmeta_generator10web85
Mixo generator meta tagMixofingerprintmeta_generatormixo85
Framer asset hostFramerfingerprintscript_host(^|\.)framerusercontent\.com$|(^|\.)framer\.com$85
Webflow asset hostWebflowfingerprintscript_host(^|\.)website-files\.com$|(^|\.)webflow\.com$85
Shopify response headerShopifyfingerprintheader^x-shopify-stage:|^x-shopid:85
AI generation comment left in source-fingerprinthtml<!--\s*(generated|created) (by|with) (chatgpt|claude|gpt|copilot|cursor|lovable|bolt|v0)85
Lovable runtime package in the JS bundleLovablefingerprintbundle@lovable\.dev/|gptengineer|gpt-eng\.com|lovable-tagger85
Base44 SDK in the JS bundleBase44fingerprintbundle@base44/sdk|base44\.app/api85
Figma Sites source markerFigma Sitesfingerprinthtmlcontent="created with figma"|isFigmake:\s*false85
Replit script hostReplitfingerprintscript_host(^|\.)replit\.com$80
Dora AI source markerDora AIfingerprinthtmldora\.run|__dora_80
Softr generator meta tagSoftrfingerprintmeta_generatorsoftr80
Squarespace asset hostSquarespacefingerprintscript_host(^|\.)squarespace\.com$|(^|\.)sqspcdn\.com$80
Durable badge or backlinkDurablefingerprinthtmldurable\.co/\?|made with durable75
Shopify CDN hostShopifyfingerprintscript_host(^|\.)shopifycdn\.com$|(^|\.)shopify\.com$75
WordPress generator meta tagWordPressfingerprintmeta_generatorwordpress70
Elementor generator meta tagElementorfingerprintmeta_generatorelementor70
Bubble generator meta tagBubblefingerprintmeta_generatorbubble70
Carrd generator meta tagCarrdfingerprintmeta_generatorcarrd70
Cursor / Copilot scaffold marker-fingerprinthtmldata-cursor-generated|__CURSOR_|generated-by-copilot70
Bolt / StackBlitz reference in the JS bundleBolt.newfingerprintbundlebolt\.new|webcontainer-api70
Gamma media referencesGammafingerprinthtmlcdn\.gamma\.app/|imgproxy\.gamma\.app|assets\.api\.gamma\.app70
10Web hosting domain10Web AIfingerprinthost(^|\.)10web\.site$70
Relume component libraryRelumefingerprintscript_host(^|\.)relume\.io$65
Ghost generator meta tagGhostfingerprintmeta_generatorghost60
Link to lovable.dev inside the JS bundleLovablefingerprintbundlehttps?://lovable\.dev60
Vercel preview domainVercelfingerprinthost(^|\.)vercel\.app$50
Netlify preview domainNetlifyfingerprinthost(^|\.)netlify\.(app|com)$50
Vercel deployment headerVercelfingerprintheader^x-vercel-id:|^server: vercel45
Netlify deployment headerNetlifyfingerprintheader^x-nf-request-id:|^server: netlify45
Cloudflare Pages domainCloudflare Pagesfingerprinthost(^|\.)pages\.dev$45
Render deployment domainRenderfingerprinthost(^|\.)onrender\.com$40
Fly.io deployment domainFly.iofingerprinthost(^|\.)fly\.dev$40
data-testid attributes shipped to production-hygienehtmldata-testid\s*=18
Untouched shadcn/ui class vocabulary-hygieneclass_namebg-background|text-foreground|text-muted-foreground|bg-card|border-border|ring-offset-background16
Default template layout classes left unrenamed-hygieneclass_namemin-h-screen|container mx-auto|hero-section|feature-card|cta-section|section-wrapper12
Vite / CRA single-root client-render shell-hygienehtml<div id="root">\s*</div>|<div id="app">\s*</div>10
Default lucide icon classes-hygieneclass_namelucide lucide-|lucide-icon8
TODO / FIXME comment left in shipped markup-hygienehtml<!--[^>]*(TODO|FIXME|XXX)8
Source map reference in the JS bundle-hygienebundlesourceMappingURL=[^\s]+\.map6
Source maps referenced in production output-hygienehtmlsourceMappingURL6

Structural checks (nesting depth, utility-class bloat, missing canonical, absent JSON-LD and similar absence tests) cannot be expressed as patterns and live in code. They appear in the evidence table with the signal type "structural check".