⏱️ Lectura: 10 min

Since July 2026, there’s a standardized for-sale DNS record that states, unambiguously, that an active domain is for sale: without touching the site it already serves or the email that already works. It’s called _for-sale, a reserved TXT record, defined in RFC 10023, published as Informational and registered with IANA.

📑 En este artículo
  1. TL;DR
  2. What Happened
  3. Context and History
  4. Technical Details and Performance of the for-sale DNS Record
  5. How to Start Implementing It
  6. Impact and Analysis
  7. What’s Next
  8. Frequently Asked Questions
    1. Does _for-sale replace parking a domain?
    2. Can I publish price and contact in the same record?
    3. Does _for-sale replace WHOIS or RDAP?
    4. Is DNSSEC required to use _for-sale?
    5. What happens if I want to withdraw the offer?
    6. Can I put every domain under a TLD up for sale with a single record?
  9. References

The problem it solves is specific: today, if the owner of an active domain wants to sell it, there’s no reliable channel to announce it. A cold email to the WHOIS contact, which privacy protection has probably already hidden, is the only option available. _for-sale moves that signal to where brokers and automated availability services already look: DNS itself.

TL;DR

  • RFC 10023 (Informational, July 2026) standardizes the _for-sale DNS record and registers it with IANA.
  • The TXT record is published at _for-sale.domain.com without affecting the site, email, or any other service on the domain.
  • Required format: it starts with v=FORSALE1; followed by a single tag=value pair (ftxt, furi, fval, or fcod).
  • Only one pair is allowed per record: for both price and contact, you need two TXT records in the same RRset.
  • The limit is 255 octets per character-string, and a TTL of 3600 seconds or less is recommended.
  • It doesn’t replace WHOIS or RDAP: a registered domain can still be for sale, and that gap is exactly what it solves.
  • The RFC recommends signing the zone with DNSSEC, because an unsigned TXT record with a price and contact is easy to forge.
  • specification.website, the source for this article, clarifies that its own domain doesn’t publish the record: it’s not for sale.

What Happened

RFC 10023 formally reserves the _for-sale leaf node name within the DNS tree and registers it with IANA as an underscore namespace, the same technical family already used by _dmarc for mail policies or _acme-challenge for certificate validation. The full specification, with the tag table and common implementation errors, is published at specification.website.

A minimal record looks like this:

_for-sale IN TXT "v=FORSALE1;furi=https://miempresa.com/en-venta"

The core rule is that this TXT record doesn’t change anything the domain already does. The homepage keeps responding, email keeps being delivered, and the record can be added or removed without any side effects on traffic. A browser never sees it: only those who already know to look for it query it.

Context and History

The most common confusion is thinking _for-sale is a form of domain parking. It’s nearly the opposite. Parking a domain replaces the site with a sales page, which costs every visit the domain still receives. _for-sale coexists with an active site without telling the browser anything.

It’s also not the same as registration data. WHOIS and RDAP answer a different question: is this name registered? A registered name can still be for sale, and an unregistered one might be worthless. That difference is why the convention exists, and it explains why the target audience is brokers and automated availability services, not people browsing by hand.

Technical Details and Performance of the for-sale DNS Record

The record supports four tags, and each TXT record carries at most one:

TagMeaningExampleWhen to Use It
ftxt=Free human-readable textftxt=Serious offers onlyClarify conditions without giving direct contact
furi=Contact or information URIfuri=mailto:[email protected]Route offers to a single point
fval=Asking price: currency + amountfval=USD12500When the price is fixed and public
fcod=Proprietary code, by prior agreementfcod=XX-aHR0cHM...Broker-platform integrations with a custom format

The format rules are strict on purpose, so an automated processor never has to guess:

  • The version tag is mandatory and case-sensitive: every record starts with v=FORSALE1;. It exists so a processor can distinguish a real _for-sale record from an unrelated TXT record that a DNS wildcard accidentally expanded to that name.
  • Only one tag-value pair per record. To publish both a price and a contact URI, two records are published in the same RRset, and the processor picks the one it understands. It’s not like SPF: the pairs don’t get concatenated.
  • One character-string per record, with a maximum of 255 octets, so nothing has to be reassembled during parsing.
  • The recommended TTL is 3600 seconds or less. A stale record announcing a price that’s already been withdrawn, or a domain that’s already sold, is worse than having no record at all.
  • The record goes on a leaf node. _for-sale.miempresa.com is valid at any level of the tree, but algo._for-sale.miempresa.com is not, and records under .arpa must be ignored: an offer to sell address space falls outside the scope.
for-sale DNS record visualized as a zone file next to a server
The TXT record coexists with the active zone: it doesn’t replace any other record. Foto de Justin Morgan en Unsplash

Here’s what the flow looks like when a broker queries a candidate domain:

sequenceDiagram
participant B as Broker
participant D as DNS Resolver
participant Z as Domain Zone
B->>D: query TXT _for-sale.midominio.com
D->>Z: resolve the record
Z-->>D: v=FORSALE1;fval=USD12500
D-->>B: responds with the TXT record
Note over B,Z: the website never takes part in the query
⚠️ Heads up: an unsigned TXT record announcing a price and contact is an easy target to forge. The RFC recommends signing the zone with DNSSEC before publishing the record.

How to Start Implementing It

Publishing the for-sale DNS record is a single line in the zone file, at the _for-sale leaf node of the zone being sold, and only while the offer stands:

; Zone: midominio.com
_for-sale IN TXT "v=FORSALE1;fval=USD12500"
_for-sale IN TXT "v=FORSALE1;furi=https://midominio.com/en-venta"

With that, any broker or availability service that already resolves the domain gets, with one extra query, something a rendered page can’t say: that what’s underneath is negotiable.

To confirm the record is published and well-formed, the query differs depending on the operating system:

Linux (Debian/Ubuntu):

sudo apt install -y dnsutils
dig +short TXT _for-sale.midominio.com

macOS:

brew install bind
dig +short TXT _for-sale.midominio.com

Windows:

nslookup -type=TXT _for-sale.midominio.com

REM alternative with dig, via Chocolatey
choco install bind-toolsonly -y
dig +short TXT _for-sale.midominio.com

The response should start with v=FORSALE1; and contain at most one tag=value pair per string. To check the TTL specifically:

dig TXT _for-sale.midominio.com | grep _for-sale
💡 Tip: if the domain is no longer for sale, deleting the record is the only way to say no: the convention doesn’t define a “not for sale” value.

On the reading side, the content of ftxt= and furi= is controlled by whoever published it, not by you. The RFC says this explicitly, with an example of <script>...</script> as possible content. Any processor has to sanitize before displaying it, and should never automatically navigate to a furi= without explicit user confirmation:

// saneaSenalForSale.js
const dns = require('node:dns').promises;

async function leerForSale(dominio) {
  const registros = await dns.resolveTxt(`_for-sale.${dominio}`);
  const valor = registros.map(partes => partes.join('')).join('');

  if (!valor.startsWith('v=FORSALE1;')) return null;

  const par = valor.slice('v=FORSALE1;'.length);
  const [tag, ...resto] = par.split('=');
  const contenido = resto.join('=');

  const escapado = contenido.replace(/[<>&\"]/g, c => ({
    '<': '<', '>': '>', '&': '&', '\"': '"'
  }[c]));

  return { tag, valor: escapado };
}

leerForSale('midominio.com').then(console.log);

The script resolves the TXT record, validates the version prefix, splits the tag from the value, and escapes characters before returning it. For a domain publishing fval=USD12500, the expected output is { tag: 'fval', valor: 'USD12500' }.

terminal showing a dig TXT query to a for-sale record
Verification is the same TXT query as any other DNS record. Foto de Eric Prouzet en Unsplash

Impact and Analysis

The most relevant design point is that the record doesn’t ask anyone’s permission or obligate anyone. Publishing it doesn’t commit the domain owner to selling, and a published fval= is indicative: the RFC instructs processors to display a disclaimer and never treat it as a purchase commitment.

For brokers and domain marketplaces, the savings amounts to one query: if they already resolve the name to check availability, adding a TXT query for _for-sale gives them a signal that previously didn’t exist in any standard protocol. There’s no way to say “every domain under this TLD is for sale” with a single record, because _for-sale.*.miempresa.com isn’t a valid wildcard: each domain needs its own TXT record.

💭 Key point: publishing the record aspirationally, to attract offers that aren’t real, is exactly the abuse the RFC explicitly names as misuse of the convention.

The honest limitation is that RFC 10023 is Informational, not Standards Track. That means no registrar or DNS panel is required to make editing underscore names easy, and adoption depends on brokers, registrars, and panels deciding to support it. Publishing the TXT record by hand on a provider that doesn’t expose underscore subdomain editing may require technical support or a different DNS provider.

What’s Next

What comes next depends on adoption, not on the specification: if a major registrar adds a “publish _for-sale” field to its panel, or if a domain marketplace starts querying the TXT record as part of its appraisal flow, the convention goes from being a DNS trick to a real market signal. Until then, anyone with write access to their zone can try it out today.

📖 Summary on Telegram: View summary

Try it yourself: publish a test TXT record at _for-sale.tudominio.com and run dig +short TXT _for-sale.tudominio.com to confirm in minutes whether your DNS provider supports it.

Frequently Asked Questions

Does _for-sale replace parking a domain?

No. Parking replaces the site with a sales page and loses the traffic the domain still receives. _for-sale coexists with an active site without touching it.

Can I publish price and contact in the same record?

Not in the same string. Each TXT record carries a single tag-value pair; for both price and contact, you need two TXT records in the same RRset.

Does _for-sale replace WHOIS or RDAP?

No, it answers a different question. WHOIS and RDAP confirm whether a name is registered; _for-sale confirms whether, being registered, its owner is selling it.

Is DNSSEC required to use _for-sale?

It’s not required, but the RFC recommends it: without a signature, anyone can forge a TXT record with a fake price and contact.

What happens if I want to withdraw the offer?

You delete the record. The convention doesn’t define a “not for sale” value: the absence of the TXT record is the only way to say no.

Can I put every domain under a TLD up for sale with a single record?

No. _for-sale.*.miempresa.com is not a valid wildcard; each domain needs its own TXT record.

References

📱 Like this content? Follow @programacion on Telegram for daily tech content in Spanish: quick summaries, fresh content every day.

Imagen destacada: Foto de Lightsaber Collection en Unsplash

Categories: Redes

Javier Alarcón

Infrastructure engineer specializing in networking, Linux systems, Kubernetes, and cloud architectures. Covers hardware, networking, observability, and engineering practices for production teams.

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.