Domains

Domain portfolio renewal calendar

Paste the domains and dates you already have, see them sorted and grouped by month, and download the whole lot as a calendar file.

Free, no accountIn your browser

One domain per line, with its date. Commas, tabs or " - " all work, and so do 2027-03-14 and 14/03/2027. Nothing you paste is stored.

Added to every event in the download as a display alarm.

Leave this blank for today. Set a day, as 2027-01-31, to see the list as it will look then.

Try

Result

Nothing pasted yet

Paste your domains and their renewal dates and they are sorted, grouped and turned into a calendar file as you type.

What this is

This builds a domain renewal calendar from list data you already hold - a registrar CSV export, a column out of a spreadsheet, the names you keep in a notes file - by sorting the dates, grouping them into months, flagging anything inside the next thirty days or already behind you, and writing the whole portfolio into a single calendar file you can import.

A portfolio renewal calendar is only a list of dates until it is somewhere you will see it. The pasted list goes in, a date-ordered grouping comes out, and the calendar file carries one all-day event per renewal so the dates live in the calendar you already check every morning rather than in a spreadsheet tab.

The parser is deliberately forgiving about how a row is written, because nobody exports domains the same way twice: a comma, a tab or a " - " between the name and the date all work, the date can be written 2027-03-14 or 14/03/2027, extra columns are ignored, and a blank line or a line starting with # is skipped rather than treated as broken input.

Nothing is looked up. Every date shown is the date pasted, which is the whole point of this tool as opposed to a checker: it is for the person who already has the dates and needs them organised, not for the person who needs to find out what they are.

How to read the result

Read the top of the month table first. Order is by date, so anything whose date has passed is at the very top, followed by whatever is closest. The "When" column counts whole days from the day being counted from, which is today unless you set it.

The facts block is the portfolio in six numbers: how many renewals were read, across how many months, which one is next, how many sit inside thirty days, how many are already behind, and how many pasted lines could not be read at all.

The calendar file at the bottom can be copied as text or downloaded as domain-renewals.ics. Either way it was built in your browser from the text in the box, which is why it appears before you have pressed anything and why the box is never sent anywhere.

A calendar reminder is one part of running a portfolio, not the whole of it: our guide Holding a domain portfolio: renewals, status codes and the names that attack yours covers what to do with a renewal once this calendar flags it, from budgeting the cost to checking for the other risks worth running against the same list.

Common mistakes

What goes wrong most often, and how to tell.

  • Trusting a registrar export that is months oldA renewal date changes the moment a name is renewed or transferred, so an export taken in January and pasted in June will quietly show last year's dates for everything that has already rolled over. The dates here are only as fresh as the file they came out of.
  • Pasting two exports together and getting two remindersRows from two registrars, or the same registrar twice, put one domain in the calendar twice with two different dates. The duplicate warning names which domains it happened to, because one of the two rows is always the stale one and importing both means a reminder that fires on the wrong day.
  • Assuming an ambiguous slashed date was read your wayIn 04/03/2027 either number could be the month, and no parser can tell from the text which was meant. This one reads the day first, so a US-style export silently moves a renewal by months - check the flagged rows against the ISO column before trusting the calendar file.
  • Importing the file and never checking the card on itA calendar reminder cannot renew anything. The most common way a domain is lost is an auto-renew that failed on an expired payment card while the reminders all fired exactly as planned, which is worth checking once a year rather than once a renewal.

Questions

What people ask about this tool.

  • One domain per line with its date on the same line. The two can be separated by a comma, a tab, a semicolon, a pipe or a spaced hyphen, extra columns such as a registrar name are ignored, and dates can be ISO (2027-03-14) or day-first (14/03/2027 and 14-03-2027).
  • The file is built in your browser from the text in the box and offered as a link that already contains it, so no request is made and nothing you paste leaves the page. That is also why the result appears as you type rather than after a submit.
  • Each event carries a UID built from its position, date and domain, so a calendar that honours UIDs will update rather than duplicate when the same file is imported again. Change the list and the UIDs change with it, which can leave an old event behind.
  • Thirty days is roughly the point at which your registrar is required to start emailing you about an expiry, so a renewal inside that window is one where the only remaining warnings are emails you may already be filtering away into a folder.
  • Yes. Put a date in the "Count from" box and every "in N days", every past-date flag and the timestamp inside the calendar file are measured from that day instead of today, which is how the fixed examples below stay fixed.

Sources

Every fixed value here comes from the provider’s own documentation. These pages change, so each says the day it was last read.

Use it from the API

The same check, as one request.

Request
curl -X POST https://resellerhq.com/api/tools/domain-portfolio-renewal-calendar \
  -H "Content-Type: application/json" \
  -d '{"list":"example.com, 2027-03-14\nexample.net, 2027-03-02\nexample.org, 2027-11-02","remindDays":"30","countFrom":"2026-10-13"}'
Response
{
  "tool": "domain-portfolio-renewal-calendar",
  "input": {
    "list": "example.com, 2027-03-14\nexample.net, 2027-03-02\nexample.org, 2027-11-02",
    "remindDays": "30",
    "countFrom": "2026-10-13"
  },
  "result": {
    "verdict": {
      "tone": "success",
      "headline": "3 renewals · next in 140 days",
      "summary": "Counted from 2026-10-13, across 2 months, with a calendar file below."
    },
    "findings": [
      {
        "id": "calendar-file-ready",
        "severity": "info",
        "title": "Calendar file built, one event per renewal",
        "detail": "The download holds 3 all-day events in the iCalendar format RFC 5545 defines, each with a display reminder 30 days before. It was built here, from the text in the box, so nothing had to be uploaded for it to exist."
      },
      {
        "id": "renewals-grouped-by-month",
        "severity": "pass",
        "title": "3 renewals across 2 months",
        "detail": "Sorted by date and grouped below, counted from 2026-10-13. The next one is example.net on 2027-03-02, in 140 days. Nothing here was looked up: these are the dates you pasted, read back to you in order."
      }
    ],
    "parts": [
      {
        "kind": "facts",
        "title": "Your portfolio",
        "rows": [
          [
            "Counted from",
            "2026-10-13"
          ],
          [
            "Renewals read",
            "3"
          ],
          [
            "Months covered",
            "2"
          ],
          [
            "Next renewal",
            "example.net, 2027-03-02 (in 140 days)"
          ],
          [
            "Inside 30 days",
            "0"
          ],
          [
            "Already past",
            "0"
          ],
          [
            "Lines left out",
            "0"
          ]
        ]
      },
      {
        "kind": "table",
        "title": "Renewals by month",
        "columns": [
          "Month",
          "Domain",
          "Renews",
          "When"
        ],
        "rows": [
          [
            "March 2027",
            "example.net",
            "2027-03-02",
            "in 140 days"
          ],
          [
            "",
            "example.com",
            "2027-03-14",
            "in 152 days"
          ],
          [
            "November 2027",
            "example.org",
            "2027-11-02",
            "in 385 days"
          ]
        ],
        "mono": [
          1,
          2
        ],
        "note": "The month is shown once per group. Order is by date, so anything already past sits at the top."
      },
      {
        "kind": "record",
        "title": "Calendar file for your domains",
        "value": "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//ResellerHQ//Domain renewal calendar//EN\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:[email protected]\r\nDTSTAMP:20261013T000000Z\r\nDTSTART;VALUE=DATE:20270302\r\nDTEND;VALUE=DATE:20270303\r\nSUMMARY:Renew example.net\r\nDESCRIPTION:example.net renews on 2027-03-02. Date as pasted into the Resel\r\n lerHQ renewal calendar\\; check it against your registrar.\r\nTRANSP:TRANSPARENT\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:example.net renews in 30 days\r\nTRIGGER;RELATED=START:-P30D\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nUID:[email protected]\r\nDTSTAMP:20261013T000000Z\r\nDTSTART;VALUE=DATE:20270314\r\nDTEND;VALUE=DATE:20270315\r\nSUMMARY:Renew example.com\r\nDESCRIPTION:example.com renews on 2027-03-14. Date as pasted into the Resel\r\n lerHQ renewal calendar\\; check it against your registrar.\r\nTRANSP:TRANSPARENT\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:example.com renews in 30 days\r\nTRIGGER;RELATED=START:-P30D\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nUID:[email protected]\r\nDTSTAMP:20261013T000000Z\r\nDTSTART;VALUE=DATE:20271102\r\nDTEND;VALUE=DATE:20271103\r\nSUMMARY:Renew example.org\r\nDESCRIPTION:example.org renews on 2027-11-02. Date as pasted into the Resel\r\n lerHQ renewal calendar\\; check it against your registrar.\r\nTRANSP:TRANSPARENT\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:example.org renews in 30 days\r\nTRIGGER;RELATED=START:-P30D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n",
        "capped": true,
        "download": {
          "filename": "domain-renewals.ics",
          "mediaType": "text/calendar"
        },
        "note": "Download it and open it, or import it into a calendar that takes a file - Google Calendar, Outlook and Apple Calendar all do."
      }
    ],
    "limits": [
      "Every date here is the one you pasted. This tool makes no lookup of its own, so a date that was wrong in your export, or right a year ago, is read back exactly as wrong.",
      "A registrar that auto-renews, or a name set to expire on purpose, looks identical to this: it only knows the date, not what you intend to do on it.",
      "Grace and redemption periods are not shown. A date in the past does not say whether the name can still be recovered, only that the day has gone."
    ]
  }
}

Resell domain registration across the endings your customers ask for, at your own price.

Get started

Company names and logos are trademarks of their owners, shown only to identify each service.