Reality Scoring
Understanding how Unveil calculates and interprets reality scores.
Reality Score
The Reality Score is a number from 0 to 100 that represents our heuristic assessment of how "real" a web product appears to be. A higher score indicates more evidence of a functional, shipped product, while a lower score suggests the site may be primarily marketing content without substantial functionality behind it.
Score Ranges
75-100: Appears Legitimate
HIGH CONFIDENCEStrong evidence of a functional product. Multiple positive signals detected including authentication flows, API integrations, dynamic content, and production-grade security configurations.
55-74: Some Concerns
MODERATEMixed signals detected. Some evidence of functionality exists alongside potential red flags. The site may be in development, partially deployed, or have limited functionality behind the marketing layer.
35-54: Likely Performative
LOW CONFIDENCELimited evidence of real functionality. The site appears to be primarily marketing content. Consider requesting a demo or proof of functionality before making commitments.
0-34: Insufficient Data
INCONCLUSIVEUnable to gather enough signals for a confident assessment. This may occur with sites that block automated access, have aggressive caching, or use unusual technical configurations.
Evidence Markers
Evidence markers are individual signals that contribute to the overall score. Each marker has a type (positive, negative, or neutral), a category, and a weight that affects the final calculation.
Positive Signals
| Signal | Description | Weight |
|---|---|---|
| Auth Flow Detected | Login/signup functionality observed | +15 |
| API Calls Present | Dynamic data fetching from APIs | +12 |
| Modern Framework | React, Vue, Angular, etc. detected | +10 |
| Valid TLS | Proper HTTPS configuration | +8 |
| Security Headers | CSP, HSTS, and other headers | +5 |
Negative Signals
| Signal | Description | Weight |
|---|---|---|
| Placeholder Content | Lorem ipsum or similar detected | -15 |
| Static Only | No dynamic content or API calls | -10 |
| No User Interaction | No functional forms or buttons | -8 |
| Missing HSTS | No HTTP Strict Transport Security | -5 |
Neutral Signals
Neutral signals are observations that neither strongly support nor detract from the reality assessment. They provide context without significantly affecting the score.
- Analytics services present (Google Analytics, Segment, etc.)
- CDN usage detected
- Standard meta tags and SEO configuration
- Common third-party integrations (fonts, icons)
Weight System
The final score is calculated by aggregating all evidence marker weights against a baseline score. The algorithm normalizes results to fall within the 0-100 range and applies category multipliers for certain signal combinations.
// Simplified scoring algorithm
baseScore = 50
for each marker in evidenceMarkers:
baseScore += marker.weight
// Apply category bonuses
if hasAuth AND hasAPI:
baseScore += 10
// Normalize to 0-100
finalScore = clamp(baseScore, 0, 100)Example Output
Here's an example of a scan result with scoring information:
{
"score": 78,
"verdict": "legitimate",
"verdictLabel": "Appears Legitimate",
"evidence": {
"markers": [
{
"type": "positive",
"category": "Authentication",
"title": "Auth Flow Detected",
"weight": 15
},
{
"type": "positive",
"category": "Tech Stack",
"title": "Next.js Detected",
"weight": 10
},
{
"type": "negative",
"category": "Security",
"title": "No HSTS Header",
"weight": -5
}
]
}
}