DEV Community

AgentChip
AgentChip

Posted on

Your Bills Live in a Spreadsheet. Your Calendar Has No Idea They Exist.

Every freelancer and small business owner has the same system: a spreadsheet full of due dates. Invoice #204 due the 15th. The software subscription renews on the 28th. Client deliverable due Friday. Content publish dates for the next month.

And then the system fails in the most predictable way possible: the spreadsheet doesn't talk to your calendar. You have to remember to look at the spreadsheet. Which is exactly the kind of task that falls apart the week you're busy.

The manual export ritual (and why it dies)

The common advice is "just put it in Google Calendar." So you spend an afternoon manually creating calendar events from your CSV. It works — until you add row 41 and forget to create the event. Or your teammate adds rows in a different date format. Or you realize you have to redo the whole ritual every time the sheet changes.

What you actually want is a pipeline: CSV in → .ics out → import once → done. And when the sheet updates, run it again.

What I built: one command, spreadsheet to calendar

A single-file Python CLI (pure standard library, zero dependencies — no pip install) that converts any deadline spreadsheet into a calendar file:

  • Smart header detection — recognizes English (title/date/due/desc/location) and Chinese (标题/日期/截止/描述/地点) headers automatically
  • Forgiving date parsing2026-09-15, 09-15-2026, 20260915, 9/15/26 all work; a flag flips to day-first for non-US sheets
  • Timed vs. all-day events — rows with a time (9:30 AM) become timed events; rows without become all-day
  • Automatic reminders — every event gets a 24-hour alarm baked in (configurable per-column or globally)
  • Bad rows don't kill the run — a row with a broken date gets skipped and reported with its line number and reason, not silently dropped
  • Encoding & delimiter auto-detection — UTF-8 or GB18030, commas, semicolons, or tabs
  • Proper ICS escaping — commas, semicolons, backslashes and newlines in descriptions won't corrupt the file
  • Exit code contract — 0 = events written, 1 = nothing usable (with --strict), 2 = bad arguments. So it bolts straight into cron:
# Rebuild the team calendar from the shared sheet every night
0 22 * * * python csv2cal.py shared_deadlines.csv -o team.ics || echo "csv2cal failed" >&2
Enter fullscreen mode Exit fullscreen mode
  • Your data stays local — bills, client names, and revenue dates never get uploaded to some free "CSV to calendar" web tool. The conversion happens on your machine, full stop.

The output is a standards-compliant .ics that imports cleanly into Google Calendar, Outlook, Apple Calendar, and Thunderbird.

The real fix is boring

Missing a late fee or a renewal isn't a discipline problem — it's a plumbing problem. Your deadlines already live in a structured file. They just need to be piped into the place you actually look every morning.

If you're a freelancer, founder, or ops person whose deadlines live in a spreadsheet — the full kit (converter + sample CSV + README with cron recipes) is on AgentChip. One-time purchase, no subscription, your data never leaves your machine.


Related: if your problem is meetings across time zones rather than deadlines in a sheet, that's a different converter — and we cover that too.

Top comments (0)