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 — 2×, 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.
The numbers behind every number.
No estimates of our own popularity, no invented records. Each figure is one you can go and check.
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.
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.
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.
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 2× — 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.
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
5 appraisals / mo
Full report, no card.
Pro
100 appraisals / mo
Registrar import + bulk.
Business
500 appraisals / mo
Teams, API & white-label PDF.
Annual billing saves 20% — $39/mo Pro, $159/mo Business.
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.
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.
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).
Free
For individual domain exploration and testing
Always free
- 5 appraisals / mo
- Unlimited stored domains
- Standard report view
Pro
For active domain investors & brokers
- 100 appraisals / mo
- Unlimited stored domains
- Bulk CSV upload
- External registrar import
$49 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.
Business
For domain brokers, M&A teams & registrars
- 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
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-SideSubmit Domain for AI Appraisal
Choose manual entry, bulk file upload, or connect your registrar portfolios.
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.
VALULY.AI
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.
Comparable sales — every row cites its publisher
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.
Other extensions of this name
Brandability & linguistics
Scores are our model's judgment, not market measurements — useful for comparing names against each other.
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.
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.
Where the quieter quarter of sales for names of this class and length landed.
The 25th to 75th percentile — the middle half of recorded sales, and the figure above.
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.
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.
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.
$80.8K
Est. Range: $12.5K – $327K38
100% Appraised—
From your last registrar importAggregate 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.
—
—
—
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.
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 —.
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.
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.
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.
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% |
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.
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.
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,447 | 2.01× | 2.03× | 2.02× |
| n = 6,275 | 1.98× | 2.01× | 2.02× |
| n = 2,298 | 1.98× | 2.02× | 2.17× |
| n = 633 | 2.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 2× is the honest ceiling for any model built on free data, and it is reachable without looking at the domain at all.
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.
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.
Loading the Terms of Service…
Loading the Privacy Policy…
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
—
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)
Security & Password Management
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.
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 anytimePayment Details
Valuly.ai REST API & MCP Server Reference
MCP Protocol 2024-11-05Value 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.
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.
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_..."
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.
Authorization: Bearer val_live_EXAMPLE_KEY_NOT_REAL
How keys are handled
• 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-05 — initialize, 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 mcp add \
--transport http valuly \
https://valuly.ai/api/mcp \
--header "Authorization: Bearer val_live_..."
{
"mcpServers": {
"valuly": {
"url": "https://valuly.ai/api/mcp",
"headers": {
"Authorization": "Bearer val_live_..."
}
}
}
}
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.
| Field | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Fully qualified domain, e.g. workspaces.ai. |
askingPrice | number | No | A 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.
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.
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.
/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.* | Type | What it is |
|---|---|---|
domain | string | The name as submitted, upper-cased. |
marketBand | object | The answer. p10/p25/p50/p75/p90 for names of the same class and length, plus n, class, bucket, tldCaveat and NameBio attribution. |
wholesaleChannel | object | The 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. |
tradingActivity | object | How 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, highNumeric | number | The band as plain integers. midNumeric is the middle of a range, not a prediction. |
estimateEnrichment | object | Which inputs the estimate actually had: applied, factor, siblingsTaken, scarcityUnverified, hasKeyword. factor is exactly 1 when nothing was looked up. |
priceTiers | object | low/mid/high, each {label, range, desc}. Percentile slices of one retail distribution, not separate markets. |
comps | array | Sourced comparable sales, each citing its publisher. Shown for orientation; the band is not computed from them. |
backlinks | object | The backlink profile, on the Pro and Business plans. state is one of measured, not_fetched, cap_reached or vendor_error — branch 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. |
seo | object | Google Ads volume and CPC for the words in the name. A token with no Ads data reports as unmeasured, never zero. |
searchConsole | object | Usually 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 hasData — branch 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. |
siblingTlds | object | Three-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. |
ltoFinancing | object | 12/24/36-month schedules. Arithmetic on midNumeric after the valuation is final; not an offer of finance. |
liquidity | object | All fields null. We hold sale prices, not listing durations or venues — kept in the shape so its absence is explicit. |
buyerTargets | object | Identical for every domain, and says so: basis is "generic" and note states it is not a list of identified prospects. |
brandability, marketDemand | object | Readability (measured against sold names) and the brand-term screen. There is no overall grade. |
date, basis, coreThesis, compBenchmarkNote | string | Report date and the prose stating what the figures rest on. |
/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.
/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.
| Field | Type | What it is |
|---|---|---|
seeds | string[] | The words pulled from your idea and generated against. note says if they came from a fallback rather than the model. |
seedPlacements | object[] | 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. |
modelUsed | boolean | Whether the language model contributed any coinages. It is a flag, not a model name. |
note | string \| null | Present 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. |
tldsChecked | string[] | 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 / lookupsUsed | number | How 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. |
lengthFilter | object \| null | The 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. |
checked | object | { availability, trademark } — whether each lookup ran. Never whether a name can be bought. |
disclaimer | string | Composed from what was actually checked, so it differs between calls. Display it; do not template your own. |
suggestions[].label | string | The name, without an extension. length counts the label only. |
suggestions[].source | string | recombined 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[].how | string | How 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[].sayability | number | 0–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[].class | string | dictionary, 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[].keepsSeedWord | boolean | Whether 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 / bandBasis | number / string | bandP50 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[].tlds | array \| null | Per-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. unverified — we 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.
/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.
/api/mcp
MCP JSON-RPC
The MCP server. See §3.
/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.
/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.
/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
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/importand/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 onPOST /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 getsunverifiedfor it. - Registry lookups over MCP: 60 per hour, shared between
check_sibling_tldsandsuggest_domain_names. Registry RDAP terms prohibit high-volume automated querying, so this is terms compliance rather than politeness. - Unauthenticated endpoints:
GET /api/comps30 per hour by IP (a bandwidth budget — the payload is the 774 KB comps set, and a repeat visitor arriving withIf-None-Matchgets a304without touching the counter);POST /api/contact5 per hour by IP;POST /api/telemetry/client-error30 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
| Code | Meaning |
|---|---|
200 | Success. On /api/appraise/bulk this is the ENVELOPE — check results[].success per row. |
202 | Accepted 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. |
204 | No content — a CORS preflight, or a JSON-RPC batch in which every message was a notification. |
304 | GET /api/comps only, in reply to If-None-Match. It does not consume the comps rate limit. |
400 | Invalid payload, or BATCH_TOO_LARGE with your plan's limit. |
401 | Missing, malformed or revoked API key. |
402 | UPGRADE_REQUIRED — the feature is not on your plan — or QUOTA_EXCEEDED when the monthly allowance is spent. |
403 | TERMS_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. |
404 | No such endpoint, or no such row on one you may read. |
405 | Wrong method on a real path. |
409 | Conflict — an email already registered, or an invitation already used. |
410 | Gone — an expired invitation or a withdrawn resource. Distinct from 404: it existed. |
413 | Request body over the 1 MiB cap, or a logo over 2 MB. |
415 | Unsupported media type — a logo that is not PNG or JPEG. |
424 | An upstream dependency failed. Used instead of 502 where Cloudflare would replace the body with its own error page. |
429 | Rate limited. Read RateLimit-Reset. |
502 | A named third party answered badly — a registrar API, or the host of a logo URL you supplied. |
503 | A 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.
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.
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
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.
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?
How do these tools handle newer TLDs like .ai and .io?
Can I import my domain portfolio directly from GoDaddy, Namecheap, Porkbun or Cloudflare?
Does Valuly.ai check for trademark legal risks?
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.
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.
What an appraisal returns
Five outputs, and what each one is built from.
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.
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.
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.
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.
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.
Linguistic & Scarcity Indexing
Analyzes length, character composition, pronounceability, the longest run of consonants, and a per-TLD market anchor across 136 extensions.
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.
USPTO Legal Risk Scan
Screens the name against 3.78 million live US federal trademarks and lists exact matches with owner, status and class.
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?
What do the low and high figures mean?
Can I appraise new TLDs like .ai, .io, .xyz, and .tech?
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 FreeBulk 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.
Supported Automated Registrar Imports
Bulk Appraisal FAQs
How many domains can I appraise in bulk at once?
Which domain registrars are supported for direct import?
Is my domain portfolio kept private and confidential?
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 FreeHistorical 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:
- Does the site want robots at all? If
robots.txtsays no, we stop there. We do not look for a way around it. - 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.
- 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?
How does Valuly match a domain to comparable sales?
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 NowDomain 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.
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?
What is Model Context Protocol (MCP) and how does Valuly support AI agents?
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 AccessHow 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.
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 scored | Median error | What 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:
| Model | Rank correlation with price |
|---|---|
| The point estimate we replaced | −0.04 |
| A fixed number, by definition | 0.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.
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.
The numbers
Percentiles over recorded retail sales. Every cell is a real quantile of real sales, not a model output.
| Length | Sales | 10th | 25th | Median | 75th | 90th |
|---|---|---|---|---|---|---|
| 3–4 characters | 21,098 | $150 | $550 | $1,988 | $4,288 | $10,947 |
| 5–6 characters | 17,963 | $772 | $1,444 | $2,700 | $5,000 | $11,750 |
| 7–9 characters | 20,210 | $650 | $1,312 | $2,500 | $4,620 | $10,000 |
| 10+ characters | 11,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.
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.
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
| State | What it means |
|---|---|
| taken | The 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 get | Valuly.ai | Typical AI name generator |
|---|---|---|
| Names from a description | Yes, two independent generators | Yes |
| Registration state per extension | Live lookup against each registry, four states | Usually a two-state indicator, often cached |
| Aftermarket listings surfaced | Yes — marketed is its own state | Typically collapsed into “taken” |
| Trademark screen | Exact-match over 3.78M live US federal marks, with owner | Usually none; sometimes a separate paid step |
| Ranking basis | Sayability model on 35,378 sale labels + market band | Not published |
| Published methodology and error rate | Yes, including the baseline that nearly matches us | Not published |
| Logo and brand styling | No — we do not do this | Often 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.
Welcome Back
Sign in to access your domain portfolios & AI valuation reports.
Our Terms of Service have changed
You need to accept the current version before continuing. Nothing else about your account has changed, and your data is untouched.
Read the Terms of Service and the Privacy Policy.