iCal billing: turn your calendar into an invoice

iCal is the standard all calendars support. Connect once, and your billing generates itself from tagged calendar events. No timer, no spreadsheet.

5 min read Adrien

Most freelancers think of their calendar as a specific app — Google Calendar, Outlook, iCloud. What they don’t realize is that underneath, all of these use the same format.

iCal (the .ics format) is a 30-year-old open standard that every major calendar platform supports. It’s why you can send a meeting invite from Gmail to an Outlook user. It’s why Apple Watch syncs events from Google. The format is universal, and that universality is useful: any calendar you already use can become the source of your billing data.

What iCal actually is

When you create an event in any calendar app, the app stores it as an iCal record. Each record contains: event name, start time, end time, and optional fields like location or description. The name is the only required field beyond the timestamps.

That name field is where billing information lives. Add [Acme] at the start of the event name, and the event becomes a structured billing record for Acme. The iCal standard stores the name exactly as you wrote it. Any system that reads the iCal feed — including Timescanner — can extract that tag.

The mechanism is simple: naming conventions imposed on existing data.

Getting your iCal URL

Every major calendar platform generates a private, read-only URL that external systems can use to read your events. This URL is how your phone syncs calendars across apps, how calendar widgets embed your schedule in dashboards, and how Timescanner reads your billing data.

You share the URL once. After that, any reading happens automatically as new events are added.

Where to find it:

Google Calendar: Settings → click your calendar in the left column → scroll to “Secret address in iCal format”

Outlook.com (Microsoft personal account): Settings → View all Outlook settings → Calendar → Shared calendars → “Publish a calendar” → copy the ICS link

Outlook / Microsoft 365 (work account): in Outlook on the web, go to your calendar → right-click the calendar name → “Sharing and permissions” → set to “Can view all details” → copy the ICS link. Full walkthrough for both Outlook account types in this Outlook-specific guide.

Apple iCloud Calendar: iCloud.com → Calendar → click the share icon next to the calendar → enable “Public Calendar” → copy the URL

Proton Calendar: Settings → Calendar → click the calendar → “Copy link for sharing”

Fastmail: Settings → Calendars → export or sharing link

The URL is a long, randomized string ending in .ics. It’s not sensitive in the way a password is, but treat it like a read-only API key — don’t post it publicly.

The naming convention

The iCal URL gives Timescanner access to your events. The naming convention gives it something to work with.

Without structure, an event called “Call with Sarah” is just text. With [Acme] Call with Sarah, it’s a billing record: client Acme, duration from start to end time, status: unbilled.

The full convention uses up to three bracket tags:

  • [Client] — minimum, required for any billable event
  • [Client][Project] — when you bill separately per project
  • [Client][F] — already invoiced
  • [Client][O] — offered for free, not billed but tracked

The bracket naming guide has the complete reference including edge cases (accents, spaces, recurring events, private events).

What Timescanner generates from your iCal feed

Paste your iCal URL into Timescanner once. From that point:

  1. Timescanner reads your calendar events on demand
  2. It identifies bracket tags in event names
  3. It groups hours by [Client], sub-groups by [Project]
  4. It excludes [O] hours from the billable total
  5. It separates [F] hours (already invoiced) from hours still to bill
  6. It calculates totals and applies your hourly rates

The output is a billing summary per client, per project, per period. You read it, verify, and invoice. The reconstruction phase — the 2-3 hours most freelancers spend at end of month trying to remember what they did — disappears.

Nothing is installed on your calendar app. Nothing changes in how you schedule events. The iCal URL is a passive connection: Timescanner reads, your calendar stays exactly as it is.

Why this works when time trackers don’t

Time tracking apps require a separate action at the moment of work: start a timer, stop a timer, categorize an entry. That action competes with the work itself. The timer gets forgotten. The habit breaks.

iCal billing requires an action at the moment of planning: add [ClientName] to the event you’re creating anyway. The cost is near zero. The event exists whether or not you tag it — the tag is just two extra characters and a bracket.

The billing data accumulates as a side effect of normal scheduling. By end of month, the report is already there. You didn’t track your time. You planned it, which you were doing anyway.


Timescanner connects to any iCal calendar — Google Calendar, Outlook, iCloud, Proton Calendar, Fastmail, Infomaniak, and more — and generates billing reports automatically from tagged events.

Timescanner

Your calendar already knows how much you worked.

No timers. No new habits. Timescanner reads your calendar — Google Calendar, Outlook, iCloud, and more — and generates your billing reports automatically.

Start free trial — 30 days, no credit card