Home/Free tools/Document expiration tracker

// Free tool

Free document expiration tracker for vendors and contractors

Paste your vendor or contractor list from Excel or Google Sheets and see which insurance certificates, licenses and other documents have expired or expire within 30, 60 or 90 days. Every number is yours. Every formula is on the page. Nothing you type is sent anywhere unless you choose to send it to us.

Loading the Vendor & Contractor Document Expiration Tracker… If nothing appears, please enable JavaScript.

// How it works

How the document expiration tracker works

The tracker reads your list, counts the days each document has left and gives every row a status. These are the exact rules it uses.

Reading your list and matching columns

Paste spreadsheet rows, or open or drop a .csv, .tsv or .txt file up to 5 MB. A tab in the first non-blank line means tab-separated; otherwise semicolons win if that line has more of them than commas. Row 1 is treated as column names when none of its cells reads as a date (you can untick that).

Two hypothetical example lists, not client data, fill in with dates counted from your as-of date: vendors and contractors (certificate of insurance, contractor license, W-9 re-request date) and licensed professionals (state professional license, professional liability/E&O). The vendors list is loaded when you first open the page; “Clear list” empties it.

Columns are matched from header words such as “Vendor”, “COI” or “Expires”. Failing that, expiration is the column with the most readable dates, email the first column containing “@”, and name and document the first free columns. Fix any match from its drop-down.

How dates are read

  • YYYY-MM-DD is always read. Two-digit years mean 20YY; a time after the date is ignored.
  • Auto-detect counts votes: a first number over 12 votes day first, a second number over 12 votes month first. More day-first votes means DD/MM/YYYY; otherwise MM/DD/YYYY.
  • If no date settles it and some could go either way (03/04/2027), they’re read month first with a warning. Mixed styles also get a warning, and you can set the format yourself.
  • Impossible dates (31/02/2027), month names, spreadsheet serial numbers and text like “TBD” show as Check date.

Days left and the status windows

Days left = expiration date − as-of date (default today), in whole calendar days: round((Date.UTC(expiration) − Date.UTC(as-of)) ÷ 86,400,000). Using UTC means daylight saving never shifts a day. Blank settings revert to their defaults, decimals round, negatives become 0, anything over 9,999 days counts as 9,999 and out-of-order windows are sorted. If two windows are equal, the empty bucket shows as “Unused”.

Days left
Status (default windows 30 / 60 / 90)
Below 0
Expired
0 to T1 (0 = expires on the as-of date)
Within 30 days
T1+1 to T2
31–60 days
T2+1 to T3
61–90 days
Over T3
Current (over 90 days)
No readable date
Check date

Duplicates, the vendor rollup and the headline numbers

  • Duplicates: rows with the same vendor and document type (ignoring capitals and extra spaces) keep the latest expiration. Older dated rows become Superseded: dimmed in the table and left out of counts, the rollup, emails and the calendar. Ties keep the first row; undated rows are never superseded.
  • Rollup: each vendor’s earliest expiration and worst status, ranked Expired, Check date, T1, T2, T3, Current.
  • Headline: expired or due within T3 days = Expired + the three window counts; vendors to follow up with = worst status isn’t Current; documents checked = rows minus superseded rows.
  • Sort: Check date first, then fewest days left, superseded last.

Reminder emails and the CSV and calendar exports

  • Emails cover vendors with a dated document that’s expired or inside your windows, one sentence each: “Our records show your {document} expires on {date}. Please send an updated copy by {expiration − reply-by offset}.” Expired documents say “expired on”; a reply-by date on or before the as-of date becomes “as soon as possible.” The button only starts a draft.
  • CSV: every row in the current filter and search, with days left and status. Cells starting with = + - or @ get a leading apostrophe so they can’t run as formulas.
  • Calendar (.ics): one all-day reminder per dated, non-superseded document on the expiration date minus the calendar lead time (default 30 days), alerting at 9:00. Some calendar apps ignore imported alerts, and past reminder dates stay in the past.

Worked example (hypothetical, not client data)

Five rows from the vendors and contractors example, as of March 1, 2027, with default settings:

Vendor and document
As entered
Days left
Status
Blue Heron Roofing, COI
02/17/2027
−12
Expired
Blue Heron Roofing, older COI
02/17/2026
−377
Superseded
Blue Heron Roofing, contractor license
04/18/2027
48
31–60 days
Lakeside Grounds Co., COI
03/06/2027
5
Within 30 days
Ridgeline Plumbing, contractor license
TBD
—
Check date

Because 17 and 18 can only be days, the list is read month first, so 03/06/2027 is March 6. With just these five rows, the headline shows 3 documents expired or due within 90 days, 3 vendors to follow up with and 4 documents checked. Blue Heron’s email asks for its COI “as soon as possible” (its February 10 reply-by date has passed) and its license “by April 11, 2027”. The license’s calendar reminder lands on March 19, 2027.

Limits, and why it stays in your browser

  • It tracks only the dates you give it. It doesn’t read certificates, confirm coverage or check licenses.
  • “COI” and “Certificate of insurance” count as different documents.
  • Long emails may be cut off by some email apps; “Copy email” always works.
  • Nothing is uploaded and there’s no account. Share-link settings sit after the #, which browsers don’t send to servers, and saving on this device is off until you tick it.

// Beyond the spreadsheet

When a COI tracking spreadsheet stops being enough

A check you run works while one person owns the list and remembers to run it. If you keep finding out a vendor’s insurance lapsed after the fact, look at who opens the list, and when.

Once the list outgrows one person, vendors and contractors should upload their own documents and get reminders without your team sending them. Capabilities we build into contractor and vendor portals:

  • Phone uploads, with the expiration date checked on entry
  • Statuses that update as dates approach, rolled up to each vendor
  • Staged reminders to the vendor, then to whoever on your team owns the follow-up
  • A review step before a new document counts, with the old one kept as history

See contractor portal development or customer and vendor portals. To design the process first, read our guide to automating document expiration reminders, or browse more free tools.

// FAQ

Document expiration tracker: common questions

Does my list leave my browser?

No. Pasted text and opened files are read in your browser and never uploaded. You decide on three extras: a share link carries the list (after the #) only if you tick “Include the list itself”, a saved copy goes into this browser’s local storage only if you tick “Remember”, and “Send results to an engineer” opens our contact form with counts and document types that you can edit before sending.

What date formats does it accept?

YYYY-MM-DD (also with / or .), MM/DD/YYYY and DD/MM/YYYY, with two-digit years read as 20YY. Auto-detect warns you when dates could be read either way or mix styles, and you can choose the format yourself. Month names and spreadsheet serial numbers show as “Check date”, so format the column as numeric dates before you copy it.

How far ahead should reminders go out?

A staged schedule such as 90, 60, 30 and 7 days before expiry is a reasonable start. The tracker’s defaults follow the same idea: status windows at 30, 60 and 90 days, a calendar reminder 30 days before expiry and a reply-by date 7 days before it. Adjust them to how long renewals take for your vendors. Our reminder guide goes deeper.

Can this send reminders automatically?

No. It’s a check you run: it drafts emails you send yourself and builds a calendar file you import. Automatic reminders and vendor uploads belong in a portal; see contractor portal development.

Does it verify insurance coverage or licenses?

No. It tracks the expiration dates you provide. It doesn’t read certificates, check coverage or look anything up with an insurer or licensing agency.

How does it handle duplicate rows for the same document?

Rows with the same vendor and document type count as one document and the latest expiration wins. Older rows are marked Superseded and left out of counts, emails and the calendar file. Names must match apart from capitals and extra spaces, so use one name per document type.

// Bring us in

Tell us about the software your business runs on.

A new build, a system that’s hard to use, a stuck project or a prototype that needs to go live. An engineer, not a salesperson, will get back to you.

202-88-MAGIC · or email info@effortlesspresence.com