Docs
What you can value
Every valuation surface RealSiteWorth runs today, what each one takes as input, what it returns, and where it is gated or degraded.
RealSiteWorth runs ten valuation surfaces and four buyer-facing tools. Each one takes a different input and returns a range plus a confidence band. This page lists what exists, what it needs from you, and where it stops.
Everything below was checked against the shipped code. If a capability is not on this page, assume it does not exist yet.
How every surface behaves
Every valuation API endpoint under /api/ is POST only, accepts JSON, and returns JSON — none of them has a GET handler. The per-handle pages such as /twitch/<channel> are ordinary server-rendered pages, so loading one in a browser does start a valuation; it is submitted to the same POST endpoint on your behalf and is subject to the same quota and plan gates.
Every response carries an x-request-id header. Quota-bearing responses also carry x-quota-limit, x-quota-remaining, and x-quota-reset.
Every result is a range (low, mid, high) with a confidence label of LOW, MEDIUM, or HIGH. There is no single-number output anywhere in the product. That is deliberate.
The AI Firewall
Deterministic code computes the number. AI only explains it after the number exists.
The rule is stated to the model on every narration call:
Every dollar figure, percentage, score, and multiple in the data below was computed by RealSiteWorth's deterministic valuation engine. You must NOT invent, change, recompute, or contradict any number.
Two consequences you can rely on:
- No input, no estimate. The crypto and e-commerce surfaces are input-driven by design. If you do not supply comparable sales or revenue, they return a
422and tell you what is missing. They do not guess. - Unmeasured is not zero. A signal the adapters could not measure comes back as
null, and the UI renders it as "Not measured". Rendering it as0would assert a fact nobody checked.
Every page that shows a valuation figure also carries the on-report banner: "This value range is an automated estimate. The Memo and Roadmap explain the estimate after it exists; they do not generate the number or invent facts."
Usage allowances
Run depths are named Quick valuation (lite), Full valuation (standard) and Full Diligence Valuation (deep); the table below uses the run-type column names the app's counters use. Paid Quick valuations use one shared monthly pool across website, domain-only, and supported social valuations. Full valuations use separate counters for website, domain-only, and social; exhausting one Standard counter does not consume another. Free Lite limits stay surface-specific launch protections.
| Who you are | Lite | Website Standard | Domain-only Standard | Social Standard | Deep |
|---|---|---|---|---|---|
| Anonymous | 3/day per IP, shared across supported Lite surfaces | 0 | Paused | 0 | 0 |
| Signed-in Free | 15/mo website + domain; 25/mo social with a 5/day social cap | 0 | Paused | 0 | 0 |
| Basic | 1,000/mo shared | 100/mo Core | Paused | 50/mo | 3/mo |
| Pro | 2,500/mo shared | 250/mo Expanded | Paused | 100/mo | 25/mo |
A burst limiter sits in front of all of it at 8 requests per IP per minute.
Two refunds are wired in. A run that fails before producing a usable response releases its reservation. A fully degraded run, where every provider missed and the report is an all-null stub, also releases its reservation and skips the billing commit. A dead result costs you nothing.
Website and SEO
Page: / API: POST /api/value
Input: a public URL. The scheme is optional and https:// is prepended if missing. Localhost, bare hostnames with no dot, and private IP ranges are rejected. Optional kind of "basic" or "deep". Deep meters against its own separate Deep counter on both paid plans (Basic 3/month, Pro 25/month). Anonymous and free callers are refused with deep_requires_upgrade; a paid caller who has spent the allowance gets tier_deep_cap.
curl -sS https://realsiteworth.com/api/value \
-H 'content-type: application/json' \
-d '{"url":"example.com"}'
Returns: the range and confidence band, an asset-mode classification, a category, an RSW Auth score and an RSW Trust score with their components, weakness and flag lists, and a domain-name asset value. Paid tiers also get the AI Memo, the Value-Gap Roadmap, and the name-value breakdown. Free responses have those fields stripped and are marked summaryOnly: true.
Modes. The classifier sorts the asset into Mode A (operating website), Mode B (aged domain with a minimal site), or Mode C (bare or parked domain). The mode picks the valuation stack.
Honest limits.
- If the site blocks the request, you get
502with reasonblocked. If it cannot be reached,502with reasonunreachable. - A Quick run never attempts a traffic pull — on any tier. When it finds no readable site content, it falls back to a Mode C domain-only valuation instead of erroring. Only a paid Standard or Deep run, which does attempt traffic, can get
502with reasontoo-thinwhen none comes back. - Signing in for free is a quota and history change, not a data-depth change. Anonymous and signed-in free runs pull the identical shallow adapter profile — domain age and page authority only. Only upgrading to Basic or Pro (which unlocks the Standard and Deep run depths) changes what is collected.
- If the AI narration provider is down, the range still returns. You get
504only when narration was required and failed on a paid run; otherwise the memo and roadmap come back empty and the number stands.
YouTube
Page: /youtube, then /youtube/<handle> API: POST /api/value-youtube
Input: handle or channelUrl. Optional niche from finance, tech, business, education, health, gaming, lifestyle, entertainment, other.
curl -sS https://realsiteworth.com/api/value-youtube \
-H 'content-type: application/json' \
-d '{"handle":"mkbhd","niche":"tech"}'
Returns: range, confidence, multiple, estimated monthly revenue and annual SDE, the normalized signal set, weaknesses and flags. Free callers get a teaser: no Memo, no Roadmap.
Honest limits. The channel page falls back to a "needs verified signals" screen when the midpoint computes to zero, rather than showing a $0 to $0 band. That happens when no provider in the chain resolved public signals for the handle. The result is honest, but it is not a valuation.
Twitch
Page: /twitch, then /twitch/<channel> API: POST /api/value-twitch
Input: login, or handle as an alias, or channelUrl. Optional niche from just_chatting, gaming, esports, irl, creative, music, other.
curl -sS https://realsiteworth.com/api/value-twitch \
-H 'content-type: application/json' \
-d '{"login":"shroud"}'
Returns: the same shape as YouTube. Free callers get the teaser.
Honest limits. Same degraded path as YouTube. When the provider chain misses, the report comes back marked servedBy: "degraded", the channel page shows the "needs verified signals" screen, and your quota is refunded.
TikTok
Page: /tiktok, then /tiktok/<handle> API: POST /api/value-tiktok
Input: handle or url. Optional niche from a 14-value list. Optional overrides where you supply signals yourself: followerCount, avgViewsPerPost, avgLikesPerPost, avgCommentsPerPost, engagementRate, postsLast30d, accountAgeYears, hasShopSignal, hasAffiliateSignal.
curl -sS https://realsiteworth.com/api/value-tiktok \
-H 'content-type: application/json' \
-d '{"handle":"nasa","niche":"education"}'
Returns: range, confidence, multiple, estimated monthly revenue split across sponsorship, creator fund, and commerce, annual SDE, mode classification (audience-monetized, commerce-monetized, or creator-fund-only), weaknesses and flags.
Honest limits. The in-code note on the handle page is blunt about it: TikTok stays a stub until a connected-account or provider-backed engine lands. If public signals do not resolve, you get the "needs verified signals" screen. The overrides field is the working path when you already have the numbers.
Page: /instagram, then /instagram/<handle> API: POST /api/value-instagram
Input and returns: identical to TikTok. Same shared engine with the platform discriminator set to instagram, same overrides block, same niche list.
Honest limits. Instagram does not expose lifetime likes at account level, so totalLikes comes back null here where TikTok can populate it. Same degraded fallback when providers miss.
X (Twitter)
Page: /twitter, then /twitter/<handle> API: POST /api/value-twitter Launch status: Public creator surface. The landing page is discoverable in navigation, pricing, sitemap, LLM discovery, and MCP discovery. A route response is not valuation proof: only a measured report may publish a dollar range.
Input and returns: the gated API path exercises the shared social engine. A measured report may publish a conservative range with evidence and confidence; provider-unavailable, paused, quota, entitlement, private, no-record, partial, and insufficient-pricing-evidence outcomes stay explicitly unpriced and do not claim buyer readiness, revenue, comparable sales, Memo, Roadmap, or transfer readiness.
Page: /facebook, then /facebook/<handle> API: POST /api/value-facebook Launch status: Hidden preview — direct route retained for controlled QA only; absent from nav, pricing availability, cross-sell, sitemap, and LLM public-link discovery.
Input and returns: the gated API path can exercise the shared social engine, but the public result remains visibly labeled Limited preview and does not promise a range, revenue analysis, comparable sales, Memo, Roadmap, or transfer readiness.
Newsletter
Launch status: Limited — advertised only with that visible label.
Page: /newsletter, then /newsletter/<handle> API: POST /api/value-newsletter
Account and plan gate: The explainer page is public, but running a newsletter valuation requires a verified Basic or Pro account. Anonymous form submissions go through signup and preserve the requested result. Anonymous API calls return 401 AUTH_REQUIRED; authenticated Free calls return 403 with kind: plan_required, requiredTier: basic, and surface: newsletter. Both denials happen before quota, provider, or LLM work. An auth lookup outage returns a retryable 503 AUTH_UNAVAILABLE.
Input: handle or substackUrl. A bare handle without a dot is expanded to <handle>.substack.com.
curl -sS https://realsiteworth.com/api/value-newsletter \
-H 'content-type: application/json' \
-d '{"handle":"lennysnewsletter"}'
Returns: Basic and Pro receive the same deterministic range, confidence, detected platform, inferred niche, evidence state, Memo, and Roadmap. Tier never changes the estimate.
Honest limits. Substack is the only first-class platform. A Substack with a readable subscriber count runs in full mode. Beehiiv and Ghost are detected from page markup but fall back to directional mode, which is a low-confidence result. Anything else is unknown. If the fetch fails outright you get an error with reason fetch_failed. The niche is guessed from keywords in the handle and URL, not classified by AI; a wrong guess only shifts the multiple band.
Crypto, ENS, and NFT
Launch status: Preview — advertised only with that visible label.
Page: /crypto API: POST /api/value-crypto
This surface is input-driven. There is no URL-only "guess my ENS worth" path, and that is intentional.
Input: all fields optional individually, but you must supply either at least 2 compSales or an annualRevenue. Fields: assetIdentifier, assetType (ens_domain, nft_collection, nft_item, token, other), nameType (dictionary, brandable, coined, numeric, random), ageYears, compSales (up to 20 positive numbers), annualRevenue. The schema is strict and rejects unknown keys.
curl -sS https://realsiteworth.com/api/value-crypto \
-H 'content-type: application/json' \
-d '{"assetIdentifier":"example.eth","assetType":"ens_domain","nameType":"dictionary","ageYears":4,"compSales":[12000,15500,9800]}'
Returns: range or null, confidence, the anchor type (comp, revenue, or none), a human-readable anchor label, the comp count, the applied adjustments (name-type multiplier, age adjustment, conservatism factor), a deterministic value-driver disclosure, and a crypto-specific disclaimer.
Honest limits.
- Fewer than 2 comps and no revenue returns
422with reasonno_compsorno_revenue. The teaser says "No defensible estimate". It will not invent a price. - This surface makes no external provider call and no AI call. It is pure deterministic math over the comps you supply. Free returns the band with an empty memo and roadmap; Basic and Pro additionally receive a deterministic templated memo and roadmap written from the same computed numbers. No language model is involved on any tier, and the estimate itself is identical on all three.
- A conservatism factor of 0.85 is applied to the comp anchor.
E-commerce and business
Launch status: Limited — advertised only with that visible label.
Page: /ecommerce-store-valuation API: POST /api/value-ecommerce
Also input-driven. There is no path that infers your Shopify revenue from a URL.
Tier gate: Basic or Pro required. This is the only valuation surface that anonymous and free signed-in callers cannot run at all. The gate fires before the body is parsed and before any quota is reserved, so a denied call costs you nothing. You get 403 with reason ecommerce_requires_basic. If the account lookup itself fails, you get a retryable 503 instead, never a tier denial.
Input: monthlyRevenue is required and must be positive. Optional: monthlyCogs, monthlyEmployeeCost, platform (shopify, woocommerce, amazon_fba, bigcommerce, custom, dropshipping), businessModel (held_inventory, amazon_fba, dropship, print_on_demand, marketplace, digital_product), averageOrderValue, monthlyOrders, topTrafficSourcePct, monthlyChurnPct, ecommerceCategory, inventoryValue, ltvCacRatio, topSkuRevenuePct, ip, ageYears. Strict schema.
curl -sS https://realsiteworth.com/api/value-ecommerce \
-H 'content-type: application/json' \
-b 'your-session-cookie' \
-d '{"monthlyRevenue":42000,"monthlyCogs":18000,"platform":"shopify","businessModel":"held_inventory","ageYears":3}'
Returns: range, confidence, a multiple band label, the effective multiple midpoint, and a disclaimer.
Honest limits. Missing revenue or a computed negative SDE returns 422 with reason no_revenue or negative_sde. Both are user-correctable. Memo and roadmap are empty today on every tier.
Buyer-facing tools
Is this listing overpriced
Page: /is-this-listing-overpriced API: POST /api/buyer-sanity-check
A pressure test on a listing you are considering, not a valuation of an asset you own.
Input: at least one of listingUrl or siteUrl, both of which must be valid URLs. Optional: assetType (content_affiliate, ecommerce, saas, lead_gen_local, marketplace), askingPrice, monthlyProfitClaim, monthlyRevenueClaim, monthlyTrafficClaim, topTrafficSourcePct, topCustomerRevenuePct, monthlyChurnPct, ownerHoursPerWeek, platformDependency, a set of has*Proof booleans, and up to 20 sellerClaims strings.
curl -sS https://realsiteworth.com/api/buyer-sanity-check \
-H 'content-type: application/json' \
-d '{"listingUrl":"https://flippa.com/12345","askingPrice":48000,"monthlyProfitClaim":1800,"hasProfitProof":false}'
Returns: a buyer range with an explicit valuationBasis of profit, revenue_proxy, traffic_proxy, or unavailable; a confidence score with reasons; a price-sanity label of looks_plausible, needs_caution, stretched, likely_overpriced, or too_many_unknowns; categorized risk flags with severity; a missing-proof checklist; and seller questions to ask next.
Tier gate: none, but it draws from the same 3-per-day anonymous IP bucket.
Honest limits. This is deterministic. It imports from the valuation model and makes no AI call. When the range cannot be computed it returns status: "range_unavailable" rather than a number. Its own disclaimer says it plainly: a directional sanity check based on public or user-provided signals that may be incomplete or unverified.
Domain-only appraisal
Page: /domain-appraisal API: POST /api/value-domain
Domain-only appraisal is paused. The endpoint returns a paused message instead of a value while the model is recalibrated against comparable sales, and nothing is charged against your allowance while it is paused. Use Website & SEO valuation instead for a domain whose value depends on the site running on it. The rest of this section describes the rsw.domain.v1 report contract for when the surface resumes.
Which lane to use, once it resumes. Use Domain-only for name, extension, age, archive, liquidity, comparable domain sales and trademark screening. Use Website / SEO Diligence when the purchase depends on backlinks, referring domains, rankings, traffic, existing content, brand demand, AI visibility or operating-site history. A domain you are buying for its backlinks is an SEO-diligence purchase and consumes the Website/Diligence allowance — the link profile is the asset, and only the website lane measures it.
Honest limits. The lane uses name quality, extension, registration/age evidence, archive continuity, marketability, liquidity, benchmark context, and a conservative collision screen. It never prices traffic, backlinks, rankings, content, or revenue, and model anchors are not represented as matched sold-domain comps. Use Website & SEO valuation when those site-level signals are part of the asset.
Cached report pages
Page: /worth/<domain>
One public URL per cached valuation. It reads from the valuation cache, which has a 14-day TTL.
A cache miss returns 404 with noindex metadata. It does not run a fresh valuation on demand, because that would make every crawler a load generator.
It exposes the weighted ensemble range, the confidence band, the memo text when cached, a lastValuedAt timestamp, and a beyondCompRange flag. It never exposes per-vendor raw values. A live RDAP availability check runs alongside the page render and renders nothing if it fails.
Passing a social profile URL here redirects to the right surface. A youtube.com, tiktok.com, instagram.com, or twitch.tv URL sends you to /youtube/<handle> and so on.
Authority check
Page: /authority/<domain>
A free single-metric lookup, not a valuation. It returns an independent page-authority score on a 0 to 10 scale plus a plain-English band comparison. Cached for 24 hours. (Provider names are never surfaced in product output.)
When the score is unavailable the page says so rather than showing a zero.
Programmatic access
No separate public developer API is offered. The MCP / agent endpoint at /api/mcp is an operational Pro-only Beta authenticated with a Bearer key. It remains de-emphasized and is not a headline Launch 1.0 feature.
A versioned public REST API is not offered either — if you find references to versioned REST endpoints anywhere, they are not shipped and requests to them fail.
What is not here
- Telegram. Retired.
- A bulk or CSV upload path for valuations. Pro includes a CSV export of results; there is no batch input.
- A promise of automatic re-valuation. Watchlist slots exist at 5, 10, and 50 for free, Basic, and Pro. Basic's watchlist refresh is manual.
