Beta Per-domain valuation ranges built from 94,567 recorded sales · every comp cites its publisher · median error , published. How we measure ourselves
94,567 recorded sales · cited comps · median error, published

The domain appraisal that shows its work.

Valuly prices a domain the way the market does: a Low–Mid–High band built from 94,567 recorded sales, comparable sales that each cite the publication that reported them, and an exact-match screen of 3.78M live US trademarks. We publish our median error — , measured on 35,447 names the model has never seen — because you shouldn't have to take a number on faith.

5 free appraisals a month on a free account. No card.

Looking for a new domain and want to know whether it’s any good? Describe what you’re building in one sentence. Our domain name generator suggests names and scores every one against the same recorded sales an appraisal is built from. Every name is checked against the registries for registration status and screened for exact matches against live US federal trademarks — a point-in-time reading and an exact-match screen, never a clearance opinion.

See a sample report

The numbers behind every number.

No estimates of our own popularity, no invented records. Each figure is one you can go and check.

RECORDED SALES
94,567
anchor every band
CITED COMPS
across publications
MEDIAN ERROR
on 35,447 held-out names
US TRADEMARKS
3.78M
screened, exact match

How we measure ourselves

Percentiles by name length, from the same corpus: what short domains sell for. Or search domain sales comps — free, no account.

From domain to defensible number in three steps.

No black box. Every step leaves evidence you can inspect.

1

Add your domains

Type one name, upload a CSV (25 per batch on Pro, 100 on Business), or import straight from Cloudflare, GoDaddy, Namecheap or Porkbun with your own API credentials — used for the import, never stored.

2

We build the evidence

The engine anchors your name to 94,567 recorded market sales, matches comparable sales that cite their sources, measures readability against sold names, and runs an exact-match screen across 3.78 million live US federal trademarks.

3

You get a band you can defend

A Low–Mid–High market range, a readability score measured against sold names, lease-to-own payment schedules, and a white-label PDF ready to put in front of a client — with the basis of every figure labeled on the page.

A valuation you can't check isn't worth having.

Most appraisal tools hand you a single confident number and no way to test it. We tried that once. Then we measured ourselves against 35,447 real names the model had never seen, and published what we found: a typical estimate is off by about — for us and, as far as anyone has shown, for everyone else in this business. We wrote up how accurate domain appraisals are in full, including the row where a fixed $2,358 scores 2.01× — about the same as we do. What reading the name buys is not a smaller error, it is better ordering.

So we changed the product instead of the marketing. Valuly gives you the range names like yours actually sell in, comparable sales that cite their sources, and section-by-section labels telling you whether a figure is measured, sourced, heuristic, or arithmetic.

That's the deal: we market hard, and we claim only what we can show you.

Read the measurement

Everything a portfolio needs. Nothing we can't back up.

The evidence-grade appraisal

Market bands rather than oracle numbers, comparable sales each linked to the publication that reported it, an exact-match trademark screen with owner, status and classes, and a readability score measured against the names that have actually sold.

Portfolio command

Registrar sync from Cloudflare, GoDaddy, Namecheap and Porkbun, with renewal dates from your last import — a snapshot, and labeled as one. Tags, cost basis, portfolio-wide bands, CSV export. Scheduled re-appraisals append a point to a domain's history; results appear in the app, because email and SMS delivery are not built and we won't pretend otherwise.

The deal room

White-label PDF appraisals with your logo, firm name and contact block rendered into the document. Lease-to-own schedules at 12 / 24 / 36 months with the financing fees stated in the open — 10% at 24 months, 18% at 36.

Built for teams & agents

Shared portfolios owned by your organisation. Invitations that expire in 7 days, work once, and only for the address invited. Org-scoped API keys, hashed at rest and shown exactly once. A native MCP server so Claude or Cursor can appraise and audit directly.

Start free. Pay when it pays.

Every limit below is enforced by the same file that renders it.

Free

$0

5 appraisals / mo

Full report, no card.

Pro

$49/mo

100 appraisals / mo

Registrar import + bulk.

Business

$199/mo

500 appraisals / mo

Teams, API & white-label PDF.

Annual billing saves 20% — $39/mo Pro, $159/mo Business.

Compare plans
Name Finder

Don’t have the name yet? Describe the idea.

Write a sentence about what you’re building. We pull out the words that carry its subject and suggest names two ways — recombined from your own words, and coined to allude to the idea — then score every one against the same market data an appraisal uses. Each name is then checked against the registries for registration status, and screened for exact matches against 3.78 million live US federal trademarks. Both are point-in-time checks with real limits: “not registered” is not the same as purchasable, and an exact-match screen is not a clearance opinion.

“A payments API for small businesses in emerging markets.”
mintracoined
marketablerecombined
tendocoined
marketiorecombined

Appraise your first domain now.

Five free appraisals a month. A band you can defend, comps you can click, and an error rate we publish so you don’t have to guess how much to trust us.

Read the methodology first

Pricing that matches the meter.

Every limit on this page is enforced by the same file that renders it — a test fails if these numbers drift from the product. Monthly allowances reset each calendar month (UTC).

Monthly Billed Annually SAVE 20%

Free

For individual domain exploration and testing

$0/mo
  • 5 appraisals / mo
  • Unlimited stored domains
  • Standard report view

Business

For domain brokers, M&A teams & registrars

$199/mo
  • 500 appraisals / mo
  • Shared team portfolios
  • REST API access
  • 1,200 requests / minute on Business
  • Custom white-label PDFs

$199 charged monthly and renews automatically until you cancel. Cancel anytime from Settings → Manage Subscription; cancelling stops the next charge and access continues to the end of the period you have paid for.

Something else?

For funds, brokerages and teams whose shape is not on this page

Talk to us

There is no hidden tier. If Business does not fit — a larger allowance, a different billing arrangement, a question about whether this is the right tool at all — say so and we will answer honestly, including when the answer is no.

Need to compare feature details across all plans?

Compare All Plan Features Side-by-Side

Submit Domain for AI Appraisal

Choose manual entry, bulk file upload, or connect your registrar portfolios.

Single Domain
Bulk CSV
Registrar Import
Appraising more than one? Upload a CSV in Bulk CSV — 25 domains a request on Pro, 100 on Business, each row returning its own result. Or pull a whole account in via Registrar Import. Every domain still spends one appraisal from your monthly allowance.
Price paid to acquire/register the domain. Used for portfolio ROI calculations. Auto-defaults to Cloudflare wholesale registrar rates (e.g. $70 for .ai, $9.77 for .com).
Organize domains into custom categories (e.g. SaaS, Core, For Sale) to filter and group domains on your Portfolio Dashboard.

Domain Name Generator

Describe what you’re building. You get candidates two ways — recombined from your own words, and invented to allude to the idea — and every one is scored against the same sales data our appraisals use.

A language model reads your description and invents the coined candidates. It does not score or rank them, and it is not used anywhere in an appraisal — the ranking, the market bands and the comps matching are deterministic, with no embeddings anywhere in the product.

A full sentence works better than keywords — the more specific the idea, the better the words we can pull from it.
Short names are the scarcest kind, so a narrow range on a specific idea may come back with few names or none — we say which it is rather than returning an empty table. What short domains have sold for, or how this compares to Namelix.

Example output — not a live result

Illustration

This is what the tool returns for “a payments ledger for small businesses in emerging markets”. The names below are an illustration of the format, not names we are offering you — run it yourself for real ones.

Name Extensions How it was made Sayability Trademark Band for this shape
paytally .com .io .ai .co? Invented — alludes to the idea 8.4 the 5–6 character band
marketally .com .io .ai$ .co Recombined — built from your words 7.9 1 exact match — MarketAlly, LLC the 5–6 character band

Four states, and the last two are the point. .com struck through is registered. .co? means we could not verify it — never a claim you can have it. .ai$ means registered and listed for sale: buyable, but not at the registration fee. A trademark cell shows a hit with its owner; a name with no match shows , because absence of an exact match in one register is not clearance. Band for this shape is what names of that class and length have sold for — a fact about the shape, never a price for a name nobody has traded. The live tool shows the figure; this illustration deliberately does not, because printing a dollar amount beside an invented name is the one thing the band must never be read as. See what short domains have sold for for the real percentiles.

5 free appraisals a month, no card. The name generator is included on every plan.

VALULY.AI

Report date 2026-07-23 · Basis: Loading…

Every section is labeled by evidence class: What the labels mean
§1

What names like this actually sold for

The band is the answer. A per-domain point estimate does not beat the market median at current accuracy, so this is the distribution rather than false precision.

§2

Comparable sales — every row cites its publisher

§3

US federal trademark screen

Exact matches against the live US federal register. A screen, not a clearance opinion: no near-misses, no common-law marks, no non-US registers.

§4

Other extensions of this name

§5

Brandability & linguistics

Scores are our model's judgment, not market measurements — useful for comparing names against each other.

§6

Demand & SEO signals

Market breadth, commercial intent and buyer pool are modelled signals — our judgment, not a measurement. Search volume and cost-per-click are real Google Ads figures for the words in the name, bought from DataForSEO and dated below. The backlink profile is a live lookup on the Pro and Business plans, dated when it was fetched. Search Console impressions and clicks appear only on a report for a domain you have connected and Google confirms you own — every other report says nothing about them at all. Manual actions and penalties are never reported, for anyone: Google publishes no API for them. Type-in traffic is not reported at all and never will be — it is visible only inside a domain’s own analytics, so nobody can measure it for a domain you do not own.

Market breadth
Commercial intent
Buyer pool
Searches for these words
Top cost-per-click

§7

Liquidity & price tiers

Three slices of one retail distribution: the middle band is the figure this report leads with, and the outer two are where the quieter and stronger tenths of comparable sales landed.

10th – 25th percentile

Where the quieter quarter of sales for names of this class and length landed.

The market band

The 25th to 75th percentile — the middle half of recorded sales, and the figure above.

75th – 90th percentile

Reached by names of this shape. Not a price promised for this one.

The per-name corpus records what names sold for, not how long they took or where they traded. We hold no listing durations, so there is no time-to-sale or fast-sale window here, and no wholesale price for this domain — wholesale is measured per extension, and there is no per-name equivalent of it at any price.

§8

Lease-to-own schedules

Pure arithmetic from the indicative mid. 24-month terms carry a 10% financing fee, 36-month 18%. Valuly doesn't broker, escrow, or guarantee any transaction.

12 months
total
no financing fee
24 months
total
10% fee
36 months
total
18% fee

An evidence-based opinion of value — not a certified appraisal, not USPAP-compliant, and not a qualified appraisal for tax purposes.

Domain Portfolio Dashboard

Manage your appraised domain library, track portfolio value and cost basis, and see registrar-reported renewal dates from your last import.

Total Portfolio Value

$80.8K

Est. Range: $12.5K – $327K
Total Stored Domains

38

100% Appraised
Renewals within 60 days

From your last registrar import

Aggregate Portfolio Valuation

One appraisal is one point. Each domain carries its most recent appraisal forward, so the line steps up when you appraise, not when the market moves.

Domain Name

Mid Value Benchmark

Acquisition Cost

Historical Valuation Trajectory (Low / Mid / High)

Appraisal Version History

Scheduled Re-Appraisals & Price Alerts

Active (Monthly)

Re-run this domain’s valuation on a schedule. Each run appends to its valuation history in the app. Alert delivery is not built yet, so nothing is emailed or texted.

SMS alerts are built and wired to Azure Communication Services, but not yet delivering: US carriers block toll-free senders until verification is approved. Save your number now and it will be used the moment that clears.
SINGLE DOMAIN DATA PORTABILITY

Export Domain Records & Historical Reports Archive

Download a structured CSV record or a complete `.zip` archive containing all appraisal reports and valuation trajectory data for .

DANGER ZONE

Delete Domain from Portfolio

Permanently delete from your portfolio library. WARNING: This action CANNOT be undone and will permanently remove this domain, its valuation trajectory history, and all generated appraisal reports.

Held-out validation

How wrong are we? Here's the measurement.

Every appraisal tool gives you a number. Almost none will tell you how far off it usually is. We measured ours against 35,447 real names the model has never seen, and this page is the result — including the part that does not flatter us.

1

What we measured against

NameBio publishes a free retail keyword dataset. After filtering to plain lowercase labels of 3–20 characters with at least one recorded sale, that is 70,825 observations, split in half by a hash of the keyword: 35,378 to fit on and 35,447 held back.

The split is a pure function of the keyword, so it is identical on every run and cannot drift toward a flattering partition. Nothing fitted has ever seen the held-out half. That matters because the figure this replaced — “typically within ~1.4×” — was measured on the same eight owner-supplied valuations that were used to choose the engine's constants. It was a training score published as an accuracy claim.

2

The result

Held-out, n = 35,447. Lower is better; a bias of 1.00× means the errors are centred.

Model Median abs. error Bias Within 2×
The engine before this work 7.61× 7.45× high 9.6%
The engine as shipped today 1.99× 1.00× 50.2%
A constant that always answers $2,358 2.01× 0.99× 49.8%
Read the third row. A model that ignores the domain entirely and always answers $2,358 is about as accurate as ours: 2.01× median error against our ~2.0×. That is why the product leads with a band rather than a point estimate — the range is what the evidence supports. What reading the name buys is not accuracy but order. The market band, how the name reads, how long it is, how often the word has been recorded selling inside a longer name, how many other extensions of it are already registered, and what advertisers pay for the word are fitted against recorded sales and scored on sales the fit never saw. Together they rank names against price at +0.28, where a fixed number ranks at 0.00 and the estimate we shipped before ranked at −0.04 — worse than chance.
3

Why there is so little per-name signal

The engine described below emitted 90 distinct values across 35,447 domains. Its replacement, the market band alone, emitted 11. The fitted model shipped on 30 July 2026 emits 210, and once the sibling-extension and keyword lookups have run it is continuous — all at the same median error, and ranking names correctly rather than worse than chance.

CORRELATION r
0.054
0.003
OUTPUT SPREAD
0.074
MARKET SPREAD
0.584

In log space the engine's output has about one-eighth the spread of the market it is estimating. It is very nearly a constant already. The level used to be wrong as well — median prediction $16,717 against a median observed price of $2,375 — and recentring by a factor of 0.3696 fixed that. It did not, and cannot, create signal that is not there.

4

We tried to fix it, and here is what happened

A 12-feature least-squares regression over the free NameBio keyword statistics, fitted on train and scored held-out.

Population Constant Engine 12-feature regression
n = 35,4472.01×2.03×2.02×
n = 6,2751.98×2.01×2.02×
n = 2,2981.98×2.02×2.17×
n = 6332.02×2.05×2.43×

The constant wins at every threshold, and the regression gets worse as the target gets cleaner — it is fitting noise. So roughly is the honest ceiling for any model built on free data, and it is reachable without looking at the domain at all.

5

What the measurement does not cover

These limits travel with every number above.

  • TLD is mixed. The free dataset carries no per-TLD split for a keyword, so a .com prediction is scored against a population containing .net, .org and the rest. It supports no per-TLD claim, which is why we do not make one.
  • Vintage is mixed. A 2004 sale and a 2026 sale count alike.
  • Most targets are a single transaction, so the target itself carries the spread of one negotiation.
  • The comparable sales are not a sample of the market. News outlets report large sales and ignore ordinary ones, so that set skews high. It is displayed as evidence you can click, and it is deliberately not what the band is computed from.
  • Wholesale is measured per extension, not per name. The band above is built from retail sales only. The wholesale figure on a report is one average for the whole extension — NameBio publishes no per-keyword wholesale data and no wholesale sale count, so there is no wholesale equivalent of the class-and-length band and none is implied. Auction prices and time-to-sale are not measured at all.
6

What would have to be true for the beta badge to come down

Three of the four open items are one dependency, not three: each needs individual, TLD-resolved, current sale records.

  • The model beats the null baseline on held-out data by a margin worth stating. Three separate free feature sets failed to provide the per-name signal that requires.
  • Bands resolve by TLD. Today a .ai and a .net sit in the same band. We will not paper over it with a multiplier: the two available candidates disagree about whether .ai is above or below .com, and neither is measured.
  • Scheduled re-appraisal gains delivery, or the controls come out. Schedules run and append to history today; nothing is emailed or texted, and the controls say so.

One item on that list closed on 27 July 2026: the comparable sales stopped being illustrative and became cited facts, each linked to the publication that reported it.

Now run a name through it.

You know exactly what you are getting: a band, comparable sales that cite their publishers, a trademark screen, and a published error rate.

Measured 26 July 2026 with scripts/validate-model.mjs. Market statistics, keyword sale counts and keyword vocabulary provided by NameBio.

Account Settings & Preferences

Manage your profile, security, team access, developer API keys, and custom white-label PDF branding.

User Profile & Info

Plan Limits & Monthly Meter

Appraisals Consumed Pro Tier

Stored Domains
Rate Limit

Google Search Console

Connect a Google account to show your own Search Console figures on reports for domains Google confirms you own — impressions, clicks, click-through rate, average position, and whether your home page is in Google’s index. This is the only signal on the report that comes from the domain’s own measured performance rather than from market comparables.

Access is read-only (webmasters.readonly). Reports for domains you have not connected say nothing about Search Console at all. Manual actions and penalties are never reported, for anyone — Google publishes no API for them, so any such claim would be guesswork.

SMS Price Alerts & Mobile Notifications (Azure ACS)

Not delivering yet

Security & Password Management

Upgrade to Business Tier

Unlock Enterprise Tools & Automation

Business & Enterprise subscribers get access to Shared Team Portfolios, org-scoped REST API keys and custom white-label PDF branding.

Export & Download Account Data Archive

Download a complete ZIP archive containing a CSV report of all your domains and individual historical appraisal reports for each domain.

Danger Zone — Permanent Account Deletion

Deleting your account will permanently delete your user profile, all associated domain portfolios, and historical appraisal valuation reports. This action cannot be undone and your data is permanently unrecoverable.

Please download your account data archive before deleting your account.
256-Bit SSL Encrypted • Powered by Stripe

Complete Your Valuly.ai Subscription

Securely activate your account and gain immediate access to institutional AI domain appraisals.

Order Summary

Pro Plan Subscription

Billed monthly • Cancel anytime
$49.00 / month

100 AI Appraisals / MonthIncluded
NameBio market band analysisIncluded
USPTO trademark screen on every appraisalIncluded
Backlink profile on every appraisalIncluded
SMS price & expiration alertsNot delivering yet
Account Name:
Account Email:

Payment Details

You'll enter your card details on Stripe's secure checkout page. Valuly never sees or stores your card number.

By continuing you agree to the Terms of Service, including these renewal terms. Cancel anytime from Settings → Manage Subscription, or through the link in your confirmation email.

Valuly.ai REST API & MCP Server Reference

MCP Protocol 2024-11-05

Value domains from your own code, or connect an AI agent over Model Context Protocol. Everything documented here is callable today — every URL, payload and limit on this page is the one the server actually implements.

§1. Quickstart

One base URL, one header, three steps. The REST API and the MCP server share the same host and the same key.

1

Create an API key

Settings → API Keys. Keys are organisation-scoped and shown once — we store only a SHA-256 hash, so a lost key is replaced rather than recovered.

2

Point your client at valuly.ai

Send Authorization: Bearer val_live_... to https://valuly.ai, or add the MCP server to any MCP-capable client.

claude mcp add --transport http valuly https://valuly.ai/api/mcp --header "Authorization: Bearer val_live_..."
3

Run your first valuation

POST /api/appraise/single over REST, or call the appraise_domain tool over MCP. Results are computed at the edge and return immediately — there is no queue and nothing to poll.

200 OK • market band + readability

§2. Authentication

One mechanism: a bearer API key, used identically for REST and MCP. There is no OAuth flow — if you need browser-side access, call the API from your own server rather than shipping a key to the client.

Bearer API key

Include your key in the standard Authorization header on every REST or MCP request.

HTTP HEADER
Authorization: Bearer val_live_EXAMPLE_KEY_NOT_REAL

How keys are handled

Hashed at rest. Only a SHA-256 digest is stored; the plaintext key is returned once at creation and never again.
Organisation-scoped. A key acts for the organisation that owns it, not for a personal account.
Revocable. Revoking takes effect on the next request.
Scoped reads. Every response is limited to the key holder's own data; an id passed in arguments is ignored, not honoured.

§3. Model Context Protocol (MCP) Server

A JSON-RPC 2.0 endpoint at POST https://valuly.ai/api/mcp implementing protocol version 2024-11-05initialize, tools/list, tools/call, ping and batched requests. It is an HTTP server, so any MCP client that speaks HTTP can connect; there is no npm package to install.

Client setup

Claude Code
claude mcp add \
  --transport http valuly \
  https://valuly.ai/api/mcp \
  --header "Authorization: Bearer val_live_..."
JSON config (Cursor, Claude Desktop)
{
  "mcpServers": {
    "valuly": {
      "url": "https://valuly.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer val_live_..."
      }
    }
  }
}
Discovery (no auth)
curl https://valuly.ai/api/mcp/tools

Returns the tool list, generated from the same definitions the JSON-RPC endpoint serves — so what is advertised is always what is callable.

The seven tools

appraise_domain Core valuation

Values a domain against 94,567 recorded market sales. Returns a market band (25th–75th percentile of real sales for names of the same class and length), the extension’s wholesale channel alongside it, and an exact-match screen of the US federal trademark register. Every response restates the model's measured error, so a caller reading only the midpoint still carries its uncertainty. The wholesale figure is one average per extension and carries its own scope note saying so — it is never a price for the name you asked about.

FieldTypeRequiredDescription
domainstringYesFully qualified domain, e.g. workspaces.ai.
askingPricenumberNoA quoted price to locate as a percentile among comparable sales.
get_portfolio Portfolio query

Lists the key holder's domains with last recorded valuation, acquisition cost, tags and renewal date. No arguments. Rows carry no grade and no score — both were withdrawn, because the composite behind them measured a rank correlation of +0.045 against held-out price with a median error straddling zero, and an agent reads a letter grade as a verdict.

get_valuation_history Trend analysis

Returns recorded valuation snapshots for one domain, oldest first. Snapshots come from appraisals actually run, so a domain appraised once has one point — the tool says so rather than returning an empty list without explanation.

calculate_lto_terms Financing calculator

Computes 12, 24 and 36-month lease-to-own schedules from the valuation midpoint, or from an agreed sale price you supply. Arithmetic only: the 24 and 36-month terms carry 10% and 18% financing fees. Valuly does not broker, escrow or guarantee any transaction.

check_expirations Renewal audit

Lists portfolio domains whose registrar-reported expiry falls inside a window you choose. Dates are a snapshot from your last registrar import, not a live feed — credentials are never stored, so nothing refreshes them in the background. Every response reports how many domains actually have expiry data, because “nothing is expiring” and “we have no data” are different answers.

check_sibling_tlds Live registry lookup

Whether the same name is registered under other extensions, from a live lookup against each registry’s own RDAP service with DNS delegation as a second check. Every result is one of three values, and the third one is the point: registered, unregistered, or unverified — which means we could not find out, and never means available. A timeout or registry error returns unverified too. Of the six extensions checked by default, only .co has no reachable RDAP service — this page used to name .io and .me as well, which stopped being true when Identity Digital's endpoint was added: both are confirmable, and the stale claim understated the product by saying a lookup could not answer when it could. Nothing collapses into “available”.

Two limits travel in every response. unregistered is not purchasable — premium, reserved and pending-delete names all read as unregistered without being available at the standard fee, and no price is checked. And “responds on https” is not “developed”, because a parked or for-sale page responds too. Rate limited separately at 60 calls per hour: each call queries domain registries directly, and their terms prohibit high-volume automated querying.

suggest_domain_names Naming

Names from a one-sentence description of what you’re building, ranked by our sayability model and the market band for each name’s shape. A language model proposes some of the candidates; it never scores or ranks them. No name in the result is confirmed purchasable, and no field reports that it is.

Registration per extension is one of four values: taken, unregistered, marketed — registered and listed for sale, so buyable but never at the registration fee — or unverified, which means we could not find out and never means available. unregistered is a registry reading at a moment in time, not purchasability: premium, reserved, registry-held and pending-delete names all read that way, and this tool checks no price. The four definitions ship inside every response, next to the statuses they describe, because a tool description is read once at connection time while the result is what a model actually reasons over.

Names are screened for exact matches against the live US federal trademark register. A hit is reported with its owner; a miss reports nothing — there is deliberately no clear or conflicts: false field, because absence of an exact match in one register is absence of evidence and a boolean there is exactly what would be read as clearance. Rate limited at 20 calls per hour for the language-model spend, and each call also draws on the same 60/hour registry budget as check_sibling_tlds, since one call fans out across candidates and extensions.

On find_buyer_prospects

This tool was previously listed and is still not exposed — but the reason has changed, and half of it now ships. Its only implementation returned a fixed table asserting which TLD variants were “taken and developed”, identically for every domain, without checking anything. That part is fixed: registration status is a real registry lookup, and it is available above as check_sibling_tlds, named for what it returns rather than for what you might do with the answer.

What is still missing is the other half. The buyer categories behind it are the same three strings for every domain, so a tool by that name would imply it had identified specific prospects for your name when it had not — the same over-claim, moved from the data to the label. It ships when the category signal is real and per-domain.

§4. Agent Recipes

Both chains below use only tools that exist and can be called today.

Recipe 1: Price a name, then structure the offer
appraise_domain calculate_lto_terms

The agent values the name, reads the band rather than a single figure, then generates 12, 24 and 36-month payment structures from the midpoint or from a price you have already agreed.

Recipe 2: Renewal audit against value
check_expirations get_portfolio get_valuation_history

The agent finds names approaching renewal, cross-references what each is worth and how that has moved, and reports which renewals are worth paying. Requires a registrar import first — the tool reports its own coverage so the agent knows whether an empty result means “all clear” or “no data”.

§5. REST Endpoints

Base URL https://valuly.ai. Most endpoints require the Authorization header. Six do not — this page previously named only the first two: GET /api/health, GET /api/mcp/tools, GET /api/comps, POST /api/contact, POST /api/telemetry/client-error and the authentication routes /api/auth/login, /api/auth/signup, /api/auth/forgot-password and /api/auth/reset-password, which cannot require a key because obtaining one is what they are for. The unauthenticated endpoints are rate limited by IP rather than by account; see §7.

Every authenticated endpoint can also return 403 TERMS_ACCEPTANCE_REQUIRED with an acceptUrl, for an account that has not accepted the current Terms version. Handle it before anything else; see §7.

POST /api/appraise/single Value one domain

Body: { "domain": "example.com", "askingPrice": 5000 }askingPrice optional. Returns the market band, the readability percentile and the trademark screen. There is no grade and no score — the composite behind them measured a rank correlation of +0.045 against held-out price and was withdrawn. See the response schema below.

Response schema — 200 OK
{
  "success": true,
  "report": { /* see the table below */ },
  "basis": "Heuristic model centred on NameBio market statistics…",
  "trademark": {
    "checked": true,
    "matches": [ { "mark": "STRIPE", "owner": "…", "status": "LIVE", "class": "…" } ]
  },
  "usage": { "used": 12, "limit": 100, "remaining": 88, "resetsAt": "2026-09-01T00:00:00Z" }
}

trademark.matches is an exact-match list from the live US federal register. An empty array means no exact match was found, never that the name is clear — there is deliberately no clear or conflicts boolean to read as clearance.

report.*TypeWhat it is
domainstringThe name as submitted, upper-cased.
marketBandobjectThe answer. p10/p25/p50/p75/p90 for names of the same class and length, plus n, class, bucket, tldCaveat and NameBio attribution.
wholesaleChannelobjectThe extension’s wholesaleAvg, retailAvg and ratioOfRetail, with a scope note. One average per extension — never a price for this name. measured is false and the figures null where none is published.
tradingActivityobjectHow often the extension trades and which way its prices move: salesLast12Months, velocity (last year against the prior two years’ annual rate) and priceMomentum (1y average over 3y average). Population statistics for the extension — never a claim about this name, and nothing here measures time-to-sale. velocityFromThinBase flags a ratio taken against a base too small to be a rate.
lowNumeric, midNumeric, highNumericnumberThe band as plain integers. midNumeric is the middle of a range, not a prediction.
estimateEnrichmentobjectWhich inputs the estimate actually had: applied, factor, siblingsTaken, scarcityUnverified, hasKeyword. factor is exactly 1 when nothing was looked up.
priceTiersobjectlow/mid/high, each {label, range, desc}. Percentile slices of one retail distribution, not separate markets.
compsarraySourced comparable sales, each citing its publisher. Shown for orientation; the band is not computed from them.
backlinksobjectThe backlink profile, on the Pro and Business plans. state is one of measured, not_fetched, cap_reached or vendor_errorbranch on it. Only measured carries figures (referringDomains, backlinks, rank) and only measured is a fact about the domain; the other three are facts about us. A measured 0 is a real finding, and is not the same as an absent lookup — so a vendor row arriving without one of the three figures is a vendor_error rather than a measured zero, and the three ship together or not at all. rank is the vendor’s own rank, passed through unchanged, and 0 is a real value — a low-authority target is ranked zero, not “unranked”. There is no null rank: a target the vendor holds no data on arrives as vendor_error, so “we could not get a rank” is a state and never a figure. Cached ~30 days; fetchedAt dates it.
seoobjectGoogle Ads volume and CPC for the words in the name. A token with no Ads data reports as unmeasured, never zero.
searchConsoleobjectUsually absent, and absence carries no meaning about the domain. Present only when the authenticated account has connected a Google account that Google confirms — at request time, not at connection time — owns the appraised name. Every other case omits the key entirely: not connected, no property for this name, ownership lapsed, token revoked, Google unreachable. Do not render a placeholder for it and do not infer “no search traffic” from its absence, which is a claim about a Google account neither of us can see. When present it carries property, googleAccount, connectedAt, verifiedAt, window (startDate/endDate, 28 complete days ending 3 days back), and hasDatabranch on hasData, because false means Google returned no row for those dates and the figures are null, which is not a count of zero. With hasData: true: impressions, clicks, ctr (a fraction, not a percentage) and position. indexing reports Google’s URL Inspection verdict for the home page, or is null. No field reports manual actions or penalties, and none ever will — Google publishes no API for them; doesNotReport and scopeNote carry that limitation in the payload so a caller building their own UI cannot present this block as a penalty check.
siblingTldsobjectThree-valued, and this page said four. Assigned from checkSiblings(), whose vocabulary is registered, unregistered and unverified. It is not the taken/unregistered/marketed/unverified set — that four-valued vocabulary belongs to POST /api/suggest alone, and a parser branching on taken here never matches while marketed never appears. Two vocabularies for one concept, and nothing said so until now. unverified means we could not find out and never means available; of the six extensions checked by default only .co has no reachable RDAP service. unregistered is not purchasable — premium, reserved, registry-held and pending-delete names all read that way — and no price is checked. checked: false with an empty siblings array means the lookup did not run at all, which is the state /api/appraise/bulk always returns.
ltoFinancingobject12/24/36-month schedules. Arithmetic on midNumeric after the valuation is final; not an offer of finance.
liquidityobjectAll fields null. We hold sale prices, not listing durations or venues — kept in the shape so its absence is explicit.
buyerTargetsobjectIdentical for every domain, and says so: basis is "generic" and note states it is not a list of identified prospects.
brandability, marketDemandobjectReadability (measured against sold names) and the brand-term screen. There is no overall grade.
date, basis, coreThesis, compBenchmarkNotestringReport date and the prose stating what the figures rest on.
POST /api/appraise/bulk Value a batch

Body: { "domains": ["a.com", "b.io"] }. 100 domains per request on Business, 25 on Pro. Bulk is a paid feature: Free returns 402 UPGRADE_REQUIRED, and an over-sized batch returns 400 BATCH_TOO_LARGE with the limit rather than silently truncating. Each domain gets a full valuation with its own trademark screen, not a bulk-rate approximation.

Response schema — 200 OK
{
  "success": true,
  "requested": 3,
  "succeeded": 2,
  "failed": 1,
  "results": [
    { "domain": "a.com", "success": true,  "report": { /* same shape as /single */ } },
    { "domain": "b.io",  "success": true,  "report": { /* … */ } },
    { "domain": "not a domain", "success": false, "error": "Not a valid domain name." }
  ],
  "usage": { "used": 12, "limit": 100, "remaining": 88, "resetsAt": "2026-09-01T00:00:00Z" }
}

A batch succeeds as a whole while individual rows fail. The envelope is 200 with success: true; check results[].success per domain rather than the outer flag. failed and succeeded always sum to results.length. Each report carries the trademark screen and keyword demand, so a bulk row is not a stripped-down report — but it is not the identical object /api/appraise/single returns, and this page said it was. Three fields differ, all in the same direction: bulk runs no sibling-TLD lookup, so siblingTlds stays at the not-checked default (checked: false) where /single would report per-extension status; bulk runs no backlink lookup, so backlinks stays not_fetched where a Pro or Business key on /single would measure it; and bulk calls the engine with no enrichment argument, so estimateEnrichment.applied is always false, factor is always exactly 1, and the midpoint is un-enriched. Same keys, different report — if you are comparing a bulk figure with a single one, compare estimateEnrichment.factor first.

POST /api/suggest Names from an idea

Body: { "idea": "fast payments for small shops", "minLength": 4, "maxLength": 9 }. Only idea is required, and it is truncated at 400 characters. It suggests names. It does not tell you a name can be bought, and it runs no clearance search — registration status is a registry answer at one moment, and the trademark check is an exact-match screen of one register.

Every plan can call it — this is not a paid feature. 20 requests per hour per account, and it does not draw on your monthly appraisal allowance; a suggestion is not an appraisal. Your plan sets how many of the returned names get their registration checked, not whether you can call it. There is no limit parameter on this endpoint; the MCP tool has one, the REST endpoint returns up to 24.

Response schema — 200 OK
{
  "success": true,          /* the HTTP envelope */
  "ok": true,               /* the generator. ABSENT on a failure, not false */
  "idea": "fast payments for small shops",
  "seeds": ["fast", "payments", "shops"],
  "seedPlacements": [ { "word": "fast", "placement": { "start": 157, "end": 78, "middle": 6, "lean": "prefix" } } ],
  "modelUsed": false,
  "note": null,
  "tldsChecked": [".com", ".io", ".ai", ".co"],
  "lookupBudget": 24,
  "lookupsUsed": 24,
  "lengthFilter": null,
  "checked": { "availability": true, "trademark": true },
  "availabilityCaveat": "Not registered according to the registry at the time of this check…",
  "disclaimer": "…",
  "suggestions": [
    {
      "label": "fastable", "source": "recombined", "how": "suffix able",
      "sayability": 9.88, "class": "derived", "length": 8, "keepsSeedWord": true,
      "bandP50": 2500, "bandBasis": "class+length",
      "tlds": [ { "tld": ".com", "status": "taken", "source": "rdap", "reason": null } ]
    },
    { "label": "paylane", "how": "compound", "tlds": null, /* … not checked — see below */ }
  ]
}

There are two success flags and they are not the same one. success is the HTTP envelope; ok comes from the generator. On a failure ok is absent rather than false, so branch on success. This endpoint carries no registrationStates and no coverage block — those are added by the MCP tool only, and copying that shape across will not match.

FieldTypeWhat it is
seedsstring[]The words pulled from your idea and generated against. note says if they came from a fallback rather than the model.
seedPlacementsobject[]For each seed, how often it has sold at the front of a longer name against the back, and the lean that follows. placement: null means too few recorded sales to tell — not that the word sells badly either way.
modelUsedbooleanWhether the language model contributed any coinages. It is a flag, not a model name.
notestring \| nullPresent only when something degraded — the model declined the brief, was unreachable, or a length filter matched nothing. Prose for a human; do not parse it.
tldsCheckedstring[]Fixed at .com .io .ai .co; not caller-controlled. .co is the one with no reachable RDAP service — GoDaddy Registry runs it and no public endpoint answered probing — so .co often comes back unverified by design. The other three are confirmable, .io through Identity Digital's endpoint rather than IANA's bootstrap.
lookupBudget / lookupsUsednumberHow many of your names got checked. Free 24, Pro 60, Business 120 lookups, and each name costs one per extension in tldsChecked (four) — so Free checks the top 6 names, Pro 15, Business all 24. Spent in rank order, so the names you are most likely to act on are the ones that get checked.
lengthFilterobject \| nullThe range actually used after clamping to 3–20 and after an inverted range is swapped — not the one you sent. null means the effective range is the full 3–20, including when you asked for exactly that.
checkedobject{ availability, trademark } — whether each lookup ran. Never whether a name can be bought.
disclaimerstringComposed from what was actually checked, so it differs between calls. Display it; do not template your own.
suggestions[].labelstringThe name, without an extension. length counts the label only.
suggestions[].sourcestringrecombined or invented — a closed set, and the one to branch on. The two are interleaved rather than ranked against each other, because they measured equal on every quality column.
suggestions[].howstringHow the label was built: compound, portmanteau, prefix re, suffix able, truncate+ly, language model. Free text with the word part interpolated, not a closed set — display it, never switch on it. Use source for that.
suggestions[].sayabilitynumber0–10, and it is a percentile. 3 reads as “at least as word-like as the 30th percentile of labels that have actually sold”. Measured against sold names, not against beauty: a high score is not a prediction that the name is good, and not a prediction of price.
suggestions[].classstringdictionary, derived or unparsed. unparsed is named for what it is — bestcarinsurance is unparsed, not invented. Read it as “we could not tell”, never as “this name has no meaning”.
suggestions[].keepsSeedWordbooleanWhether a seed word survived into the name. false is not worse — a coined name keeping no seed word is a different strategy that measured equally well.
suggestions[].bandP50 / bandBasisnumber / stringbandP50 is only as specific as bandBasis says. class+length is a band for this shape and this length; length means the class cell was too thin and only length was used; overall means neither cell had enough sales and this is the whole population’s band, not a band for this name. Read them together, or do not read bandP50.
suggestions[].tldsarray \| nullPer-extension registration, each { tld, status, source, reason } where source is rdap or research. null means this name was not checked — it fell past the lookup budget. It is not an empty result, and it must not render as a blank beside names that were checked, because a blank reads as “nothing found”. Render it as not checked.

The four registration states, and the third one is the point. taken — the registry has a record. unregistered — the registry has none, which is not the same as purchasable: premium pricing, registry reservations and pending registrations all sit behind it. marketed — registered and listed for sale. unverifiedwe could not confirm either way, and it never means available. These four belong to this endpoint; check_sibling_tlds and report.siblingTlds use a different, three-valued vocabulary in which the registered state is spelled registered.

The trademark screen reports a hit, never a clearance. A miss reports nothing — there is deliberately no clear or conflicts: false field, because an exact-match screen of one register cannot support that claim. It does not cover near-misses, common-law marks, unregistered marks or any non-US register. It is not a clearance opinion.

A short list is not evidence of scarcity. Names whose every offered extension came back taken are removed before the response; a name with an unverified anywhere is kept, because refusing to show a name we merely failed to check would punish a registry timeout.

POST /api/suggest/check One name, with a price

Body: { "domain": "paylane.com" }. 30 requests per hour per account. This is the only endpoint that returns a real registrar price, and it is deliberately separate from /api/suggest: the registrar answers roughly one request every ten seconds, so it cannot back a list. Keeping it its own endpoint means a suggestion run can never fan out into it.

Response schema — 200 OK
{
  "success": true,
  "domain": "paylane.com",
  "source": "porkbun",
  "status": "unregistered",
  "premium": false,
  "price": 11.06,
  "renewalPrice": 11.06,
  "currency": "USD",
  "reason": null,
  "checkedAt": "2026-08-04T04:12:00.000Z",
  "caveat": "Registration status and price come from Porkbun at the time of this check…"
}

One registrar’s price, not a market rate, and it can change before a purchase completes. premium is three-valued: true, false, or null when the registrar did not say. status degrades to unverified with a reason on a rate limit, a timeout, a missing credential or an invalid name — it never degrades to “available”. When the registrar’s own limit is hit the response carries retryAfterMs; honour it. No trademark search runs here.

POST /api/mcp MCP JSON-RPC

The MCP server. See §3.

GET /api/mcp/tools Tool discovery

Unauthenticated. Returns the tool list, endpoint and auth scheme.

Response schema — 200 OK
{
  "success": true,
  "protocol_version": "2024-11-05",
  "server_name": "valuly-domain-valuation",
  "endpoint": "https://valuly.ai/api/mcp",
  "transport": "JSON-RPC 2.0 over HTTP POST",
  "authentication": "Authorization: Bearer <val_live_ API key>",
  "tools": [ { "name": "appraise_domain", "description": "…", "inputSchema": { /* JSON Schema */ } } ]
}

Generated from the same definitions the JSON-RPC endpoint serves, so what is advertised is always what is callable. tools/list over JSON-RPC returns the same array but requires authentication; this endpoint does not, so a client can discover the server before a key is issued.

Two corrections here. The field is authentication, not auth — this page named it wrongly. And inputSchema is now genuinely served: the handler previously emitted name and description only, which half-undid the guarantee above. The tool NAMES could not drift from the callable set; the ARGUMENT SHAPES could, because they were never sent, so an integrator working from this endpoint had no way to learn what to pass.

POST /api/{cloudflare|godaddy|porkbun|namecheap}/import Import a portfolio

Four served routes that this reference did not name at all — while §7 published their rate limit. They are matched by pattern rather than by exact path, which is why a pathname === '…' inventory of the router missed them. All four accept val_live_ keys. You send the registrar credentials with the request; they are used for that one call and never stored, which is why nothing refreshes expiry dates in the background and why every imported row carries the date it was imported.

Request & response
POST /api/godaddy/import
{ /* registrar credentials — the fields each one needs are in Settings → Portfolio */ }

200 OK
{
  "success": true,
  "source": "GoDaddy REST API (api.godaddy.com)",
  "domains": [
    { "domain": "EXAMPLE.COM", "tld": "com", "status": "ACTIVE",
      "cost": null, "autoRenew": true, "expires": "2027-03-14" }
  ]
}

source names the API the rows came from, because they are not interchangeable — Cloudflare returns DNS zones, which are not necessarily domains registered with Cloudflare, and its source string says so. cost is always null: no registrar API returns what you paid, and it is never inferred.

Rate limited at 20 per hour, shared across all four. A registrar that rejects the credentials or fails returns 424 with code: "REGISTRAR_IMPORT_FAILED" and the registrar's own message — 424 rather than 502 because Cloudflare replaces a 502 body with its own error page. There is deliberately no fallback list: the handlers these replaced returned success with fabricated domains on every failure.

GET /api/health Service check

Unauthenticated liveness check.

Response schema — 200 OK
{ "status": "ok", "service": "valuly-edge-api" }

Reports that the Worker is serving. It does not check D1, the trademark index or any upstream, so a 200 here is not a claim that an appraisal will succeed.

§6. Code Snippets

Copy, paste, run:
cURL
JavaScript (Fetch)
Python (requests)
MCP JSON-RPC
curl -X POST https://valuly.ai/api/appraise/single \
  -H "Authorization: Bearer val_live_EXAMPLE_KEY_NOT_REAL" \
  -H "Content-Type: application/json" \
  -d '{"domain": "workspaces.ai", "askingPrice": 5000}'

§7. Rate Limits & Errors

Limits

  • Valuations: 60 requests / minute on Free, 300 requests / minute on Pro, 1,200 requests / minute on Business.
  • Monthly allowance: 5 appraisals / mo on Free, 100 appraisals / mo on Pro, 500 appraisals / mo on Business.
  • MCP requests: 240 per hour. Tool calls that run a valuation also draw on both limits above.
  • Registrar imports: 20 per hour, across POST /api/cloudflare/import, /api/godaddy/import, /api/porkbun/import and /api/namecheap/import.
  • Name suggestions: 20 per hour on POST /api/suggest — a spend ceiling, because every call bills a language-model request to us. A further 30 per hour on POST /api/suggest/check, which is below what the registrar upstream allows the whole product (one request per ten seconds), so a caller who ignores it spends a budget shared with everyone else and gets unverified for it.
  • Registry lookups over MCP: 60 per hour, shared between check_sibling_tlds and suggest_domain_names. Registry RDAP terms prohibit high-volume automated querying, so this is terms compliance rather than politeness.
  • Unauthenticated endpoints: GET /api/comps 30 per hour by IP (a bandwidth budget — the payload is the 774 KB comps set, and a repeat visitor arriving with If-None-Match gets a 304 without touching the counter); POST /api/contact 5 per hour by IP; POST /api/telemetry/client-error 30 per hour by IP.

The per-minute figure is a burst ceiling; the monthly allowance is how much you may actually run. They are separate: exceeding the ceiling returns 429, exhausting the allowance returns 402 with code QUOTA_EXCEEDED and the date it resets. API traffic draws on the same allowance as the application — it is not extra capacity. Other endpoints (authentication, registrar import, invitations, key creation) have their own budgets, the same on every plan. RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset are returned on a 429, and only there — they tell you how long to wait once you have been refused, not how much budget is left before you are. Do not poll a successful response for them; there is no header to read until you are over.

Status codes

CodeMeaning
200Success. On /api/appraise/bulk this is the ENVELOPE — check results[].success per row.
202Accepted with no body. A JSON-RPC notification to /api/mcp (one with no id) must not be answered, and /api/telemetry/client-error returns it too.
204No content — a CORS preflight, or a JSON-RPC batch in which every message was a notification.
304GET /api/comps only, in reply to If-None-Match. It does not consume the comps rate limit.
400Invalid payload, or BATCH_TOO_LARGE with your plan's limit.
401Missing, malformed or revoked API key.
402UPGRADE_REQUIRED — the feature is not on your plan — or QUOTA_EXCEEDED when the monthly allowance is spent.
403TERMS_ACCEPTANCE_REQUIRED, and this is the one to handle first. Returned on every REST endpoint for an account that has not accepted the current Terms version, so it is a first-day, every-request blocker rather than an edge case. The body carries the machine-readable code and an acceptUrl designed to be relayed to a human — an agent cannot accept on someone's behalf, and POST /api/user/terms refuses API keys for that reason. Also returned for a permission the account genuinely lacks.
404No such endpoint, or no such row on one you may read.
405Wrong method on a real path.
409Conflict — an email already registered, or an invitation already used.
410Gone — an expired invitation or a withdrawn resource. Distinct from 404: it existed.
413Request body over the 1 MiB cap, or a logo over 2 MB.
415Unsupported media type — a logo that is not PNG or JPEG.
424An upstream dependency failed. Used instead of 502 where Cloudflare would replace the body with its own error page.
429Rate limited. Read RateLimit-Reset.
502A named third party answered badly — a registrar API, or the host of a logo URL you supplied.
503A dependency of ours is unconfigured or down (database, session signing, scheduler, mail). Retryable; nothing was charged.

Webhooks

Outbound webhooks are not available. Valuations are computed synchronously and return in the same response, so there is no asynchronous job to notify you about. If you want notification on a schedule, use scheduled re-appraisal in the app.

Competitive Analysis

Why Modern Domain Investors Choose Valuly

See how Valuly's AI valuation engine, multi-registrar sync, and custom white-label report generator outperform legacy tools.

Capability Valuly.ai EstiBot Registrar estimators
Valuation method Heuristic model, with published median error Statistical model over 100+ attributes estibot.com Varies by registrar
Every comp cites its source Yes — each sale links to the publication that reported it Not documented Not documented
Registrar import Cloudflare, GoDaddy, Porkbun and Namecheap, with your own credentials — used for the import, never stored Not documented No cross-registrar portfolio documented
White-label PDF report Your logo and contact details Not documented Not documented
Developer REST API Yes, on Business Yes, on higher plans estibot.com/api-info Registrar APIs exist, but are per-registrar and not portfolio-wide porkbun.com
MCP server for AI agents Native, for domain valuation None documented estibot.com/api-info Cloudflare publishes an MCP server, with no appraisal tooling in it cloudflare.com

Competitor rows describe what each vendor's own public documentation said as of July 2026, and link to it. Where a vendor does not document something we say “not documented” rather than claim they lack it — we can check what a company publishes, not what it builds. Found something out of date? Tell us and we will fix it.

Ready to Elevate Your Domain Intelligence?

Join leading domain investors, brokers, and enterprise IP teams who rely on Valuly for institutional valuations.

Get in Touch with Our Team

Have questions about domain valuations, enterprise API access, or custom data feeds? We're here to help.

No Compromise AI will use the information you submit to respond to this inquiry. It is not a marketing opt-in. See our Privacy Policy for how the information is handled.

Corporate Office

No Compromise AI, LLC

Delaware, USA • www.nocompromise.ai

This page doesn’t exist

The address you followed doesn’t match anything here. It may have moved, or the link may be wrong.

Or try one of these

Search sales comps How we measure Pricing API & MCP docs Contact us
Heuristic valuation with published accuracy

The Next-Generation AI Alternative to EstiBot & GoValue

Most appraisal tools hand you one number and no way to test it. Valuly.ai returns a market band from 94,567 recorded market sales, cites the publication behind every comparable sale, screens the live US federal trademark register, and publishes its median error.

5 free appraisals a month. No card.

94,567 Recorded Market Sales USPTO Exact-Match Trademark Screen Market bands, not point estimates 136 extensions priced from their own sales Modern TLD Semantic Analysis (.ai, .io)

Valuly.ai vs Legacy Appraisal Tools

See how our heuristic valuation model compares against legacy keyword tools.

Feature / dimension Valuly.ai EstiBot GoDaddy GoValue
Valuation method Heuristic model over 94,567 recorded sales, with published median error Statistical model over 100+ domain attributes; internals not published estibot.com/methodology Proprietary machine-learning model; internals not published godaddy.com
Published accuracy 2× median error on 35,447 held-out names, published in full No accuracy measurement published No accuracy measurement published
Comparable sales shown Every comp cites the publication that reported it, and links to it Shows related sales; no per-comp citation documented estibot.com Shows comparable sales godaddy.com
Trademark screen Exact-match screen of 3.78M live US federal marks, inside every appraisal Separate USPTO trademark tool, not bundled into the appraisal estibot.com/trademark No trademark screen documented in the GoValue API response godaddy.com
Valuation output Market band — 25th to 75th percentile of recorded retail sales, plus the extension’s wholesale average alongside it A single valuation rather than a range Domain Name Wire, May 2026 Estimate plus wholesale, list price and a min/max range godaddy.com
Lease-to-own terms 12, 24 and 36-month schedules, with the financing fee stated Not documented Not documented
API access REST API and a native MCP server REST/JSON API on higher plans estibot.com/api-info Paid GoValue API, from $99/mo godaddy.com
MCP server for AI agents Native MCP server None documented estibot.com/api-info None documented godaddy.com

Competitor rows describe what each vendor's own public documentation said as of July 2026, and link to it. Where a vendor does not document something we say “not documented” rather than claim they lack it — we can check what a company publishes, not what it builds. Found something out of date? Tell us and we will fix it.

Brandability Scoring

Five scores computed from the characters in the label alone — pronounceability, memorability, visual appeal, fit for the extension, and a screen against a short list of well-known brand terms. Memorability and visual appeal are length rules. Pronounceability is one of the six fitted terms in the price model; the rest set the grade, not the figure.

USPTO Trademark Screen

See the registered marks before you bid. Every appraisal screens the domain against 3.78 million live US federal trademarks and lists what it finds — owner, status and class. No risk score, because a register lookup cannot produce one honestly.

Wholesale vs Retail Pricing Split

See what your domain’s extension trades at wholesale against what it fetches at retail, measured from NameBio’s TLD statistics and shown side by side. It is a figure for the extension, not a price for your name — and we hold no auction data or time-to-sale, so nothing here claims either.

Frequently Asked Questions

Everything you need to know about switching from EstiBot to Valuly.ai

Why is Valuly.ai a superior alternative to EstiBot and GoDaddy GoValue?
The difference is what you can check. EstiBot describes a statistical model over 100+ domain attributes but publishes no accuracy measurement, and returns a single figure rather than a range. Valuly.ai returns a market band drawn from 94,567 recorded sales, cites the publication behind every comparable sale so you can read the source yourself, labels every section of the report measured, sourced, heuristic or arithmetic, and publishes its median error — 2× on 35,447 held-out names — including the baseline where a fixed constant does as well as the model.
How do these tools handle newer TLDs like .ai and .io?
Independent testing has found legacy estimators inconsistent on newer extensions — one 2026 review recorded a .io name selling for $14,995 against a $270 estimate, and a .ai name selling for $8,000 against a $9,300 estimate. Valuly.ai computes the market band per TLD from recorded sales, so .ai, .io and .xyz are priced against what names in those extensions actually sold for rather than against a .com table with a multiplier on top. The band is an estimate either way; the difference is that ours shows the sales it came from.
Can I import my domain portfolio directly from GoDaddy, Namecheap, Porkbun or Cloudflare?
Yes. Valuly.ai supports bulk CSV upload and direct registrar API imports from Cloudflare, GoDaddy, Namecheap and Porkbun. Up to 25 domains per request on Pro and 100 on Business, with a per-domain outcome for every row, renewal dates from your last import, and CSV or white-label PDF export. The PDF is a report, not a certificate — no appraisal here is certified.
Does Valuly.ai check for trademark legal risks?
Every appraisal screens the second-level domain against the US federal trademark register — 3.78 million live marks — and lists any exact matches with their owner, status and classes. It is an exact-match screen, so it will not catch near-misses, common-law marks or non-US registers, and a clean result is not a clearance. Most appraisal tools do not check at all; this one does, and tells you its limits.

Ready for Institutional AI Domain Valuations?

Stop relying on outdated algorithms. Test Valuly.ai for free and unlock full sales comps, trademark checks, and LTO leasing rates.

Start Free AI Appraisal Now Import Portfolio CSV
How the number is built

How a domain is valued: the band, its spread, and what each number means

A band is a range, not a price, and a lease-to-own schedule is neither. This is what each figure is built from, where it comes from, and which of them you should actually plan around — computed over 94,567 recorded sales.

5 free appraisals a month. No card.

Spread measured per name shape White-label PDF report

What an appraisal returns

Five outputs, and what each one is built from.

The strong end

Where the top tenth landed

The 90th percentile for names of this class and length, scaled to the estimate. Drawn from recorded sales rather than a target you hope for — and it moves with the name: short dictionary words spread far wider than long coinages.

The quiet end

Where the slowest tenth landed

The 10th percentile for names of this class and length, scaled to the estimate. Every sale behind it is a retail sale, so this is the bottom of one retail distribution — not a wholesale or liquidation price. Wholesale is reported separately, and per extension.

The second channel

What the extension trades at wholesale

The wholesale and retail averages for your domain’s extension, side by side, from NameBio’s free TLD statistics. The gap is large — .com averages $716 at wholesale against $8,595 at retail. It is a figure for the extension, not an estimate for your name: no per-keyword wholesale data exists to build one from.

How the name reads

A readability score, and a brand-term screen

How closely the letter pattern matches names that have sold, as a percentile against that population — not an opinion, and not a grade. Beside it, the label parsed into its words, and a screen against a short list of well-known brand terms. There is no overall grade: the composite one was withdrawn when two of its three scores turned out to be length.

Trading activity

How often the extension trades, and which way

How often the extension trades and where its prices are heading: sales in the last 12 months, that year against the prior two, and the average sale price against its own three-year average. .io is up 26% while .vip is down 54% over the same window. Reported only where the base is large enough for a ratio to mean a rate, and it is the extension — never a claim about your name, and nothing here measures time-to-sale.

A report also prints 12 / 24 / 36-month payment schedules. Those are not part of the valuation and do not affect it — they divide the midpoint across the term, with a flat 10% at 24 months and 18% at 36. We don’t lend, broker, escrow or hold funds, and a schedule is not an offer of finance.

The 4-Step Valuation Pipeline

How the heuristic model computes an appraisal.

01

Linguistic & Scarcity Indexing

Analyzes length, character composition, pronounceability, the longest run of consonants, and a per-TLD market anchor across 136 extensions.

02

Comparable Sales Match

Matches against 1,835 sourced sales — every row cites its source — by category, keyword and TLD. These are evidence you can check, not a statistical input: the valuation comes from the market band, computed from 94,567 recorded sales.

03

USPTO Legal Risk Scan

Screens the name against 3.78 million live US federal trademarks and lists exact matches with owner, status and class.

04

Market Liquidity Synthesis

Computes a market band from recorded sales, and lease-to-own terms as arithmetic from the indicative mid.

Domain Calculator FAQs

How does the Valuly.ai AI domain value calculator work?
The calculator evaluates domain names through character scarcity indexing, market band lookup from NameBio aggregate statistics, and an exact-match US federal trademark screen.
What do the low and high figures mean?
They are the 10th and 90th percentiles for names of the same class and length, scaled to the estimate. Every sale behind them is a retail sale from NameBio’s exact-match dataset, so they are the quiet and strong ends of one retail distribution, not two separate markets. Wholesale is reported separately, as one average per extension rather than a figure for your name; we hold no auction data and no listing durations at all. The spread is measured per name shape: short dictionary words spread far wider than long coinages.
Can I appraise new TLDs like .ai, .io, .xyz, and .tech?
Yes. The market band is computed per TLD from recorded sales, so .ai, .io, .xyz and .tech are priced against what names in those extensions actually sold for, rather than against a .com table with a fixed multiplier applied.

Calculate Your Domain Value Today

Get an appraisal, a white-label PDF report and cited sales comps. The PDF is a report, not a certificate — no appraisal here is certified.

Calculate Domain Value Free
Institutional Bulk Analytics

Bulk Domain Portfolio Appraisal & Registrar Sync

Appraise a whole portfolio from one file. Connect Cloudflare, GoDaddy, Namecheap or Porkbun, or upload a CSV — up to 25 domains per request on Pro and 100 on Business, with a per-domain outcome for every row.

CSV and drag-and-drop upload are on the appraise screen

Supported Automated Registrar Imports

GoDaddy Namecheap Porkbun Cloudflare

Bulk Appraisal FAQs

How many domains can I appraise in bulk at once?
Up to 25 domains per request on Pro and 100 on Business — the limits functions/lib/plans.js enforces. Larger portfolios go in successive batches, and every row comes back with its own outcome, so a partial failure is reported as one.
Which domain registrars are supported for direct import?
Valuly.ai supports direct API imports from Cloudflare, GoDaddy, Namecheap and Porkbun. Any other registrar works by CSV upload.
Is my domain portfolio kept private and confidential?
Your portfolio is scoped to your account and is never listed publicly or shared with brokers. Registrar API credentials are used for the import and never stored. Data is held in Cloudflare D1 and served over TLS.

Appraise Your Entire Domain Portfolio Now

Upload a portfolio CSV and get a band, a trademark screen and an exportable report for every row. Alert delivery is not built — results appear in the app.

Upload Portfolio CSV Free
Illustrative Domain Sales Comps

Historical Domain Sales Comps & Market Intelligence

Search our illustrative set of 1835 publicly reported domain sales — free, no sign-in. Use it to sanity-check a number. It is not a market index and not a live feed; the statistically meaningful figure is the market band in a full appraisal, drawn from 94,567 recorded sales.

The reference set, in full

All 1835 rows, published rather than sampled — and every one cites the publication that reported it. Skewed to the top of the market, because that is what gets reported.

What this set is and is not. Every row cites the publication that reported it — click any of them. They are notable sales as publicly reported, which means the set skews high: outlets report large sales and ignore ordinary ones. They are also not how a valuation is computed. The market band in an appraisal comes from 94,567 recorded sales in NameBio's published statistics, not from these 1835.

Where our data comes from

Every number on this page has a source you can click.

1,835 comparable sales, each citing the publication that reported it, across 17 publishers — from the Financial Times and TechCrunch to the domain-industry press, plus 28 disclosed in company filings with the SEC. 1,410 of them also carry an archived copy captured while the article was live, and 124 sales reported in euros, pounds or yuan are converted at the European Central Bank reference rate for the day, with the original amount kept beside the conversion. Archiving of the newest rows is still in progress. Market bands are computed from 94,567 recorded sales in NameBio's published statistics, used under their terms and credited throughout the product.

How we decide what to collect

Three checks, in order, before any code is written:

  1. Does the site want robots at all? If robots.txt says no, we stop there. We do not look for a way around it.
  2. What do their terms actually say? We read them first and write down the answer — yes or no — before writing a line of code against them. Several sources we would have liked are excluded on this step.
  3. Does their work reach us by a side door? When a source we have excluded turns up republished somewhere we are permitted to use, we exclude it there too.

That third check is the one that costs us, and it is the one we care most about. A publisher whose terms ask that their content not be copied should not have their work reach us through a third party who quoted it. Ten sales entered our set that way before we caught them, and we took them out. We refuse republished sales charts on the same principle: a compilation belongs to whoever built it, even when the individual facts inside it belong to nobody.

A sale price is a fact, and facts can be reported freely with attribution — that is the basis for everything here. But permitted and right are not the same test, and where they part company we take the narrower one. We end up with less data than we could have. Every figure we do show is one you can check yourself.

Sales Comps Search FAQs

Where does Valuly.ai obtain historical domain sales comps?
Valuly.ai references an illustrative set of 1835 publicly reported domain sales, published in full on this page. It is a sanity check, not a comprehensive market index and not a live feed.
How does Valuly match a domain to comparable sales?
By category, keyword overlap and TLD across the 1835-row reference set. It is deterministic matching, not a semantic embedding model — there are no embeddings anywhere in the product. The market band in a full appraisal is the statistically meaningful comparison.

Explore the Sales Comps Reference Set

Run a full appraisal to get the market band, a USPTO trademark screen and lease-to-own terms.

Search Sales Comps Now
High-Speed REST API & Model Context Protocol (MCP)

Domain Valuation REST API & MCP AI Agent Protocol

Embed domain appraisals, USPTO trademark screening, and reference sales comps directly into your applications, registrar backends, or autonomous AI agents.

Unlock API Access with Business Plan View MCP Tool Spec
Endpoint: POST /api/appraise/single
bash
curl -X POST "https://valuly.ai/api/appraise/single" \
  -H "Authorization: Bearer YOUR_VALULY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "cloudagent.ai",
    "askingPrice": 2995
  }'

Developer & MCP Agent Features

The valuation runs at the edge, so there is no third-party API in the path.

Computed at the edge

The valuation is a local computation on Cloudflare’s edge in 300+ cities, so there is no third-party API to wait on.

Model Context Protocol (MCP)

Plug directly into Claude Desktop, Cursor, or LangChain agents to let LLMs perform real-time domain appraisals autonomously.

Published rate limits

60 requests / minute on Free Plan, 300 requests / minute on Pro Plan, 1,200 requests / minute on Business Plan — the figures the limiter actually enforces, and the same ones on the developer docs. No SLA is offered; when one is, it will be in the Terms.

API & MCP Integration FAQs

How do I authenticate with the Valuly Domain Valuation API?
Authentication is performed via Bearer tokens in the HTTP Authorization header (e.g. Authorization: Bearer val_live_EXAMPLE...). API keys can be generated instantly from the developer dashboard.
What is Model Context Protocol (MCP) and how does Valuly support AI agents?
Model Context Protocol (MCP) is an open standard allowing LLM agents (Claude Desktop, Cursor, Custom Agents) to connect directly to external tools. Valuly provides a native MCP server for automated domain valuation workflows.

Build Next-Gen Domain Tools with Valuly API

Upgrade to our Business Plan ($199/mo) to unlock REST API keys and MCP AI agent integration.

Upgrade to Business Plan for API Access
Measured, published, and reproducible

How accurate is a domain appraisal? We measured ours and published the answer.

Every appraisal tool hands you a number. None of the big ones tells you how often that number is right. We measured ours against 35,447 held-out sales the model had never seen, and published the result — including the part that does not flatter us.

5 free appraisals a month. No card.

~2× median error, published 35,447 held-out sales The null baseline published too 94,567 recorded market sales

The question this market does not answer

Search for the accuracy of any major appraisal tool and you will find reviews, forum threads and anecdotes. What you will not find is a number from the vendor.

That is not a small omission. An appraisal is a number you might price a sale against, or refuse an offer over. Without an error figure, there is no way to know whether a $12,000 estimate means “somewhere between $9,000 and $16,000” or “somewhere between $1,200 and $120,000”. Those are very different pieces of information and they look identical on the screen.

So we measured ours. Not on the sales the model was built from — that measures memory, not skill — but on 35,447 held-out sales, kept back from fitting entirely.

What we found, including the part that does not flatter us

What was scoredMedian errorWhat it means
The estimate we used to ship 7.6× A point estimate, scored on sales it never saw. It is gone.
The market band we ship now ~2.0× The 25th–75th percentile of real sales for names of the same class and length.
A fixed constant of $2,358 2.01× A “model” that ignores the domain completely and answers the same number every time.

Read the last two rows again. A constant is about as accurate as we are. We publish that because it is true, and because it is the single most important fact about every appraisal tool in this category — not just ours. If a fixed number scores 2.01× on real sales, then any tool claiming dollar-level precision is claiming something the data does not support.

So what does reading the name actually buy?

Order. Not level.

Accuracy asks “how close is this number to the sale price”. Ordering asks “given two names, does the tool put the more valuable one first”. They are different questions and only the second one improved. Measured as rank correlation against sale price, on sales the fit never saw:

ModelRank correlation with price
The point estimate we replaced−0.04
A fixed number, by definition0.00
The market band alone+0.19
Fitted and enriched — what ships+0.28

The first row is the one worth sitting with. The estimate this product used to ship ordered names worse than chance — you would have done better sorting them at random. That is not a claim about a competitor. It is what we found when we measured our own previous work, and it is why the number stopped being the headline.

+0.28 is not a large correlation, and we are not going to dress it up as one. It means the ranking carries real signal and a long way from certainty. A reader comparing two names is being told something true. A reader reading one number to the dollar still is not.

What we still cannot tell you

The limits are part of the measurement, not a disclaimer bolted to the end of it.

Bands pool extensions A band is computed by name class and length, not per TLD. The underlying population is .com-dominated, so read a band as approximately .com. We tested per-TLD multipliers and could not justify them for 6 of 11 extension groups, so we did not ship them.
“Coined” is a parser artifact The class label coined means our classifier could not parse the name. It holds acronyms, place names, non-English words and compounds we missed — not “this is a brandable”. Do not read a per-class figure as a statement about coinages.
Reported sales skew high Publications report large sales and ignore ordinary ones, so any set built from them is top-heavy. Our comparable-sales set is thin below $10,000 and we say so on the page that shows it.
An appraisal is not an offer Nobody is bound by it, least of all a buyer. It is a read of what similar names have traded for.

Read the whole measurement, or put a name through it

The full validation — every figure above, the method behind it, and the ones we are still unhappy with — is published on the methodology page. Nothing is held back for the paid tier.

Starting from scratch instead? Every name the domain name generator suggests carries the same band, as a fact about the name’s shape.

39,061 recorded short-name sales

What short domains actually sell for, by length

Not an average, and not one number. A distribution — because the top tenth of short-name sales run about five times the median, and any single figure hides exactly the thing you need to see.

3–4 characters: median $1,988 5–6 characters: median $2,700 Percentiles, not averages

The numbers

Percentiles over recorded retail sales. Every cell is a real quantile of real sales, not a model output.

LengthSales10th25th Median75th90th
3–4 characters21,098 $150$550 $1,988$4,288$10,947
5–6 characters17,963 $772$1,444 $2,700$5,000$11,750
7–9 characters20,210 $650$1,312 $2,500$4,620$10,000
10+ characters11,554 $472$1,100 $2,096$3,600$7,466

Why there is no “5-letter .com” figure on this page

It is the most-asked version of this question and we are not going to answer it, because we would have to invent the answer. Two reasons, both structural:

Our buckets are 3–4 and 5–6 There is no 5-exact cell. Splitting one out would mean re-cutting the data to fit the question, which is how you end up reporting noise as a finding.
The bands do not split by extension They are computed by name class and length. The sales population is heavily .com, so read these as approximately .com — but that is a caveat, not a .com-only measurement, and we will not relabel it as one.

The spread is the finding

For 3–4 character names the 90th percentile ($10,947) is about 5.5× the median ($1,988), and the 10th ($150) is about a thirteenth of it. Two names of identical length, both genuinely short, can sit two orders of magnitude apart. Length is a weak signal on its own.

Being a real word is worth more than being short. Across the 1,435 recorded sales of 3–4 character names our classifier reads as dictionary words, the median is $4,371 against the whole bucket’s $1,988.

One caveat on that comparison, because it matters: the contrasting class is labelled coined, which in our classifier means “could not parse this”. It holds acronyms, place names, non-English words and compounds we missed. So the honest reading is “names we recognise as words sold higher than names we did not”, which is a weaker and truer statement than “real words beat coinages”.

Looking for a short name rather than pricing one?

The generator takes a length range, so you can ask it only for names in the bucket you are shopping in.

Describe what you’re building and set the length to 3–4 or 5–6. The range is not a filter applied to a finished list — it is sent to the generator, so the candidates are produced inside it. Every name comes back with its registration status per extension, an exact-match screen against the live US federal trademark register, and the band for its shape. Short names are the scarcest kind, so a narrow range on a specific idea may come back with very few names; the tool says so rather than showing you an empty table.

See the named sales behind the numbers

Our comparable-sales set publishes every row with the publication that reported it. Free, no sign-in.

Name Finder

A Namelix alternative that checks the registry — and tells you what that does not prove

Describe what you’re building. Every name comes back with its registration state per extension, an exact-match screen against the live US federal trademark register, and what names of that shape have actually sold for. The word “available” appears nowhere, and this page explains why.

Four registration states, not two 3.78M live US federal marks screened Sayability trained on 35,378 sale labels Published methodology

What Namelix is good at

Worth saying plainly, because it is true and because a comparison that pretends otherwise is not worth reading.

Namelix is a genuinely good name generator. It learns from the names you save and sharpens its suggestions as you go, and it hands you a logo alongside the name. If what you want is a short brandable and a visual identity in one sitting, it does that well and we do not do it at all — we produce no logos and we have no styling controls.

What it hands you is a list of names. What you do next is check every one of them, by hand, somewhere else. That is the part this tool replaces.

Four states, and the third and fourth are the point

StateWhat it means
takenThe registry has a record. It is registered.
unregistered The registry had no record at the moment of the check. This is not a claim you can buy it: premium, registry-reserved, registry-held and pending-delete names all read this way without being purchasable at the standard registration fee, and no price was checked.
marketed Registered and listed for sale. Buyable — but never at the registration fee. Most tools collapse this into “taken” and you never learn the name was for sale.
unverified We could not find out. A timeout, a rate limit, a registry error or a registry with no public lookup service all produce this. It is an answer, and it never means available.

A two-state green tick has to decide what to call a timeout, and every tool that shows one has quietly decided to call it available. That is the failure mode that sends someone to a registrar to buy a name that was never for sale.

The trademark screen, and what a clean result is not

Every suggested name is screened for exact matches against 3.78 million live US federal trademarks. A match is shown next to the name with its owner, so you find out before you have fallen in love with it.

A name with no match shows nothing at all. No green tick, no “clear” badge, no count of zero. That is deliberate and it is the most important sentence on this page: absence of an exact match in one register is not evidence that a name is clear. The screen finds no near-misses, no common-law or unregistered marks, and nothing outside the US register. It is a screen, not a clearance opinion, and a real naming decision needs a lawyer.

We could show a tick and most people would prefer it. It would also be the single most expensive false reassurance this product could give.

How the names are ranked

By our scorer, never by the model that invented them.

Two generators run on every request. One recombines words from your own description deterministically; the other is a language model that reaches the subject by allusion. We measured them against each other and they came out equal on every quality column, with zero overlapping names — so they are interleaved rather than ranked against each other, because presenting one first would assert an ordering the measurement does not support.

Both are then scored by the same deterministic machinery: a sayability model trained on 35,378 labels that have actually sold, and the market band for the name’s shape — its class and its length. The language model never scores or ranks its own output.

The band is a fact about the shape, never a price for the string. Nobody has traded these names, so nobody knows what they are worth, and we do not put a figure on one.

Side by side

What you getValuly.aiTypical AI name generator
Names from a descriptionYes, two independent generatorsYes
Registration state per extensionLive lookup against each registry, four statesUsually a two-state indicator, often cached
Aftermarket listings surfacedYes — marketed is its own stateTypically collapsed into “taken”
Trademark screenExact-match over 3.78M live US federal marks, with ownerUsually none; sometimes a separate paid step
Ranking basisSayability model on 35,378 sale labels + market bandNot published
Published methodology and error rateYes, including the baseline that nearly matches usNot published
Logo and brand stylingNo — we do not do thisOften yes

Describe what you’re building

One sentence. You get names two ways, each with its registration state, a trademark screen, and the band for its shape — and an honest account of what none of that proves.

Appraise Portfolio Report