owndle.start free →

// portfolio ops

the domain portfolio spreadsheet template (and when to stop using it).

the exact column schema for a domain inventory spreadsheet, the formulas worth adding, and the three things a spreadsheet structurally cannot do no matter how well you build it.

published 4 August 2026

a spreadsheet is a perfectly good domain portfolio tracker right up until it quietly is not, and the transition is not announced.

this is the schema worth building, the formulas that make it earn its keep, and — more usefully — a clear-eyed account of the three failures no amount of spreadsheet craft can fix. if you build this and it serves you for five years, good. that is a win, not a missed upsell.

the columns

one row per domain. no merged cells, no colour-as-data, no second sheet for 'the old ones'. thirteen columns:

  • domain — the full name, lowercase, no protocol, no trailing slash. this is your key; keep it clean or every lookup you ever write will fight you.
  • registrar — where you actually pay. not where WHOIS says, which is frequently a different company entirely (more on that below).
  • account / login — which of your five accounts holds it. the single most under-recorded field and the one that causes the most panic.
  • expiry date — ISO format, YYYY-MM-DD. sort order and date maths both depend on it, and DD/MM vs MM/DD will bite you on the twelfth of any month.
  • auto-renew — on / off / unknown. 'unknown' is an honest and common value; treat it as off until you have looked.
  • renewal price — what you will be charged next time, not what you paid in year one. these are different numbers and the gap is the whole point of the column.
  • cheapest alternative — the lowest renewal you can find for that TLD elsewhere, with the registrar name. this is the column that turns an inventory into an audit.
  • saving/yr — renewal price minus cheapest alternative. sort descending and you have your transfer queue.
  • nameservers — where DNS is served. tells you at a glance whether a domain is live, parked or forgotten, and warns you what breaks if you move it.
  • purpose — one short phrase. 'client site — acme', 'redirect to main', 'idea, never built'. be honest; 'brand protection' is usually a euphemism.
  • keep / sell / drop — a decision, reviewed annually. a domain with no decision is a domain you renew forever by accident.
  • estimated value — only if you are selling. a rough band is fine; false precision here is worse than a blank.
  • notes — the trademark dispute, the client who might not renew, the fact that transferring it breaks a verification record.

you can populate expiry, registrar and nameservers for a hundred domains at once with a bulk WHOIS lookup and paste the result straight in, which beats typing them and beats being wrong.

the three formulas that matter

days until expiry. `=A2-TODAY()` against the expiry column, formatted as a plain number. sort by it and your spreadsheet has a job to do every time you open it.

annual cost. `=SUM()` down the renewal price column. most people have never seen this number and react to it visibly. if the total makes you wince, that is the spreadsheet doing exactly what it was built for.

total overpayment. `=SUM()` down the saving/yr column. this is the number that justifies an afternoon of transfers. fill the cheapest-alternative column honestly from the current price tables — a guess here produces a fantasy saving and a wasted afternoon.

conditional formatting, done in two rules

on the days-until-expiry column: amber below 60, red below 30. two rules, not seven. a sheet where everything is coloured communicates nothing.

a third rule earns its place on the auto-renew column: highlight anything that is not 'on'. those are your actual exposure, and they hide well in a list of ninety rows.

the three things a spreadsheet cannot do

none of this is about spreadsheet skill. these are structural, and they are the same three every time.

it cannot update expiry dates from the registry. the date in your sheet is a photograph of the day you typed it. you renew for two years and forget to edit the cell; the sheet now confidently displays a date that is wrong in the dangerous direction. worse, a domain you renewed at a different registrar keeps its old row. registries publish current expiry over RDAP continuously — a spreadsheet just has no way to ask. you can re-check by hand with expiry check, but 'by hand' is the failure mode, not the fix.

it cannot notice that auto-renew failed. this is the one that actually loses domains. your card expires, the registrar's charge declines, the retry fails, the notification lands in a promotions tab, and the domain lapses. every cell in your spreadsheet still says 'on' and shows an expiry date months away, because the sheet is recording your intention rather than the registrar's behaviour. a spreadsheet is incapable of being surprised.

it cannot tell you a price changed. you filled in the renewal price column in march. in september the registrar raises it, or the registry raises the wholesale rate and every registrar follows, or a competitor cuts theirs. your sheet reports last spring's market with total confidence. the number that matters — the gap between what you pay and the best available — is precisely the number that goes stale fastest. re-checking a single TLD with price check is quick; re-checking ninety rows quarterly is not something anyone actually does twice.

the pattern across all three: a spreadsheet stores what you told it. it never goes and looks.

the registrar column is lying to you

worth its own warning. a WHOIS or RDAP lookup often names a company you have never paid. buy through Hover, Squarespace or a web host and the record may show Tucows, Key-Systems or another wholesale registrar, because that is who actually holds the accreditation. your 'registrar' column should record who takes your money — that is who you log in to, who sets the renewal price and who you argue with. keep the accredited registrar in notes if you like, but do not let it drive the column your audit depends on.

when the spreadsheet is genuinely fine

one registrar. auto-renew on across the board. under about ten domains. no client obligations. a card that is nowhere near expiring. in that shape the three failures above are all survivable, and adding a subscription would be solving a problem you do not have.

when to stop

any two of these, and the sheet has become a liability that looks like an asset: domains across three or more registrars; anything a client or your revenue depends on; a portfolio past forty rows; a previous near-miss or an actual lapse; or you cannot say from memory when you last updated the expiry column.

the honest replacement test is narrow. does it read expiry from the registry itself rather than from you, does it alert on a channel you cannot ignore, and does it know what renewals cost elsewhere. that is the entire brief — this is what owndle does with a CSV import, and it is also what to demand of anything else you consider, including the tool you already pay for. if you only fix one thing this week, fix the alerting: expiry monitoring is the layer that stops a spreadsheet failure from becoming a lost domain.

keep the sheet either way. it is still the best place for the column no software will ever have opinions about: why you bought the thing.

questions people actually ask.

what columns should a domain portfolio spreadsheet have?

Domain, registrar, account, expiry date in ISO format, auto-renew status, renewal price, cheapest alternative, saving per year, nameservers, purpose, a keep/sell/drop decision, estimated value if you sell, and notes. The two that turn an inventory into an audit are cheapest alternative and saving per year, because sorting by saving gives you a ranked transfer queue.

how do I track domain expiration dates in Google Sheets?

Store expiry in a YYYY-MM-DD column and add a days-remaining column using =expiry-TODAY(). Apply two conditional formatting rules, amber under 60 days and red under 30, then sort by that column. The dates still will not refresh themselves, so re-verify them against a WHOIS or RDAP lookup on a fixed schedule.

why does my spreadsheet show the wrong registrar?

Usually because the row was filled from a WHOIS lookup. If you bought through a reseller or web host, the record names the accredited registrar behind them rather than the company you pay. Record whoever charges your card, since that is who controls the renewal price and the login, and keep the accredited registrar in your notes column.

when should I stop using a spreadsheet for domains?

When any two apply: domains at three or more registrars, anything a client or your revenue depends on, more than about forty domains, a past lapse or near-miss, or you cannot remember when you last updated the expiry column. Below that threshold a well-built sheet plus auto-renew is genuinely sufficient.

// stop checking one at a time

every domain you own, one dashboard.

Owndle imports your portfolio from every registrar, shows what each domain costs to renew against the cheapest alternative, and alerts you at 90, 30, 7 and 1 days before expiry. Free for ten domains.

start free — 10 domains

// no card · magic-link sign-in · alerts at 90/30/7/1 days