Contents
6 sections · 6 min read
Domain Management

How to Import Domains via CSV: The Exact Format That Avoids Errors

A
Domain 360 Team
·August 7, 2026·6 min read

A CSV import is the fastest way to get a large domain portfolio into Domain 360, but the importer is unforgiving about format: it reads columns by position, applies no validation, and skips anything it can't parse without telling you what went wrong. This is the exact format it expects, based on how the import actually works under the hood, not a general "how CSV works" explainer.

Quick answer: Domain 360's CSV import expects nine columns in a fixed order — Domain, Type, Registrar, Status, Registered, Expires, Email, Auto-renewal, Notes — with dates in YYYY-MM-DD format and no commas inside any field. Only the Domain column is required; everything else can be left blank.

What's the Exact Column Order?

The importer doesn't match your header row against expected column names — it reads position 1 as the domain, position 2 as the type, and so on, no matter what text is actually in row 1. That means your header row can say almost anything, but the columns underneath it must be in this order:

  1. Domain — the only required field, e.g. example.com
  2. Type — own, client, or personal
  3. Registrar — free text, e.g. Namecheap, GoDaddy, Cloudflare Registrar
  4. Status — active, expired, pending, or parked
  5. Registered — the registration date, in YYYY-MM-DD format
  6. Expires — the expiry date, in YYYY-MM-DD format
  7. Email — the contact email tied to the domain
  8. Auto-renewal — yes or no
  9. Notes — free text

If you export your existing domains from Domain 360 first (Dashboard → Export), the file you get back is already in this exact order — editing that export and re-importing it is the safest way to bulk-update domains, since you know the format will round-trip cleanly.

Why Is a Header Row Mandatory (Even Though Its Text Doesn't Matter)?

The import always discards row 1, treating it as a header, regardless of what's actually written there. If you paste raw domain data into row 1 with no header above it, that entire row is silently thrown away — not imported, not flagged as an error, just gone. Always keep a header row, even a simple one like the nine column names above.

What Happens If You Get the Date Format Wrong?

Registered and Expires accept whatever text you give them with no validation or reformatting at import time. The dashboard's expiry countdowns and renewal alerts read that value back through JavaScript's built-in date parser, which reliably understands YYYY-MM-DD (2026-03-15) but handles other formats inconsistently — DD/MM/YYYY and MM-DD-YYYY can parse into the wrong date entirely, or fail silently and show a broken countdown, without any error appearing during import itself. If you're exporting dates from Excel or Google Sheets, format the date columns as plain text in YYYY-MM-DD before saving to CSV, since spreadsheet software often auto-formats dates in a locale-specific way that doesn't match.

What's the Comma Mistake That Shifts Every Column After It?

This is the least obvious failure mode and the one most likely to silently corrupt a whole row rather than just skip it. The importer splits each line on commas and does not correctly handle commas placed inside quoted fields — so a Notes entry like "Renewal, handled by IT" doesn't stay in one column. It splits into two, and every column after Notes (in this case, nothing — but if you reorder columns, this can shift real data) ends up misaligned. Keep every field comma-free. Use a semicolon, a dash, or just rephrase — "Renewal handled by IT" or "Renewal - handled by IT" both work fine.

Why Do Duplicates and Plan Limits Fail the Same Way?

Two other things cause rows to disappear without an explicit error, and both get reported together in one confirmation message after import: Imported X domain(s). Skipped Y duplicate(s). A domain already in your account (matched case-insensitively, so Example.com and example.com count as the same domain) gets skipped as a duplicate. Separately, if you're on the free plan (15 domains) or Pro (50 domains) and your import would push you past that limit, the import stops adding new domains once the limit is hit — those remaining rows get lumped into the same "skipped" count as duplicates, so the message alone won't tell you which reason applies. If your skipped count is higher than expected, check your current domain count against your plan's limit before assuming every skip was a duplicate.

What Does a Template That Imports Cleanly Look Like?

Rather than building a CSV from scratch, download the import template with the correct header row and three example rows already in the right format and order — replace the example rows with your own domains and the column positions, date format, and field values will already be correct.

Once your domains are in, set up expiry reminders so a CSV import is the last time you have to think about tracking renewals manually.

Quick Answers

What columns does the Domain 360 CSV import expect, and in what order?
Nine columns in this exact left-to-right order: Domain, Type, Registrar, Status, Registered, Expires, Email, Auto-renewal, Notes. The importer reads columns by position, not by matching header text, so the words in row 1 don't need to match exactly — but the column order does.
Do I need a header row in my CSV?
Yes. The import always treats the first row as a header and discards it, regardless of what it contains. If your file starts directly with real domain data and no header row, that first domain gets silently thrown away.
What date format should I use for Registered and Expires?
YYYY-MM-DD (for example, 2026-03-15). The importer stores whatever text you provide without validating or reformatting it, and the dashboard's countdown and expiry alerts depend on that string being a format JavaScript's date parser understands — non-ISO formats like 15/03/2026 can silently produce broken countdowns instead of an error.
Why did some of my rows not get imported?
Three common causes: a blank Domain column (the only required field — rows without one are skipped with no message), a domain that already exists in your account (matched case-insensitively and skipped as a duplicate), or hitting your plan's domain limit partway through the file. All three are silent — check the "Imported X, skipped Y" confirmation message after import to see if anything was dropped.
Can I put a comma inside my Notes field?
No — avoid commas anywhere in the file, including Notes. The importer splits each row on commas without properly handling commas inside quoted fields, so a Notes entry like "Renewal, handled by IT" gets split into two columns and shifts every column after it out of position. Use a semicolon or a dash instead.
What are the valid values for Type, Status, and Auto-renewal?
Type: own, client, or personal. Status: active, expired, pending, or parked. Auto-renewal: yes or no. These aren't strictly enforced at import time, but using anything else means the value won't match what the dashboard's dropdowns expect when you later edit that domain.

Never lose a domain again

Track every domain you own in one dashboard. Free for up to 15 domains.