Open source · macOS menu bar

Your freelance revenue,
always visible.

Track retainers, caps, projections, Stripe invoices, and Upwork diary shortcuts right in your menu bar.

curl -fsSL https://raw.githubusercontent.com/dennislysenko/freelance-tracker/main/install.sh | bash

Requires macOS, Python 3, Git · view source

TODAY $425.00
Acme Corp $300 (2.4h)
Moonlight Labs $125 (1.0h)
THIS MONTH $6,840.00
Acme Corp Retainer: 28.5h / 30.0h (95%)
Almost there
Moonlight Labs: 12.0h / 40.0h (30%)
On pace
Month Projection: $9,200 · 14/22 workable days
Features

Built for freelancers who
juggle multiple clients

9:41 AM 💰 $425

Always in your menu bar

Today's earnings are one glance away. No apps to open, no tabs to find.

Acme Retainer: 28.5h / 30.0h
95%

Know when you've hit the cap

Progress bars track your hours against retainer targets. No surprises on the next invoice.

Acme Corp$300
Moonlight Labs$125
Startup X$80

Invoice and diary shortcuts built in

Export CSVs, create Stripe drafts, assign an Upwork contract inline, and copy today's work descriptions when you need them elsewhere.

Month Projection: $9,200
14/22 workable days · $460/day avg

See your month shaping up

A running projection of your monthly revenue based on how you're actually working.

Toggl tells you what you worked on.
This tells you where you stand.

Billing Models

Works however you bill

Hourly

Uses your hourly rate from Toggl. This is the default if you don't configure a project.

Config

  • Rate pulled from Toggl project settings
  • No additional configuration needed

Display

  • Daily, weekly, monthly earnings
  • Hours and dollar amounts per project
  • Included in month projection
Acme Corp — hourly @ $125/hr
Today: 3.5h = $437.50

Hourly with Cap

Billed hourly up to a maximum number of hours. Works in two modes depending on how your billing cycle works.

Monthly cycle (carryover)

  • Cap resets each calendar month
  • Over/under hours carry forward
  • Progress bar adjusts for carryover

Rolling cycle (last_billed_date)

  • Cap resets from your last invoice date
  • Hours counted since that date, not month start
  • Set last_billed_date after each invoice

Config

  • hourly_rate and cap_hours
  • Optional last_billed_date for rolling cycles

Display

  • Progress bar: hours vs cap
  • Daily earnings show $0 past the cap
Moonlight Labs — 28.5h / 30.0h cap
28.5h × $100/hr = $2,850 (max $3,000/cycle)

Fixed + Required Hours

You get paid a fixed monthly amount for a specific number of hours. Over/under hours carry over to adjust next month's target.

Config

  • monthly_amount and target_hours
  • Effective rate = amount ÷ target
  • Carryover auto-calculated monthly

Display

  • Progress bar: hours vs adjusted target
  • Carryover from prior month
  • Fixed amount included in projection
Startup X — 18.0h / 20.0h target
Fixed $4,000/mo · +2.0h carryover from Feb

Fixed + Soft Target

Fixed monthly amount with a target hour guideline. No carryover — once you hit the target, daily earnings show $0 for additional hours.

Config

  • monthly_amount and target_hours
  • No carryover tracking
  • Effective rate = amount ÷ target

Display

  • Progress bar: hours vs target
  • Monthly earnings capped at amount
  • Daily shows $0 past target hours
Agency Y — 10.0h / 10.0h target
Fixed $2,000/mo · at target, today shows $0

Fixed Flat

A flat monthly payment with no hour tracking at all. Hours are logged in Toggl but don't affect earnings.

Config

  • monthly_amount only
  • No target hours or carryover
  • Rate derived from hours worked

Display

  • Hours shown, no progress bar
  • Earnings based on effective rate
  • Fixed amount in projection
Consulting Co — flat monthly
Fixed $3,000/mo · 6.5h logged this month
Setup

Three minutes to clarity

01
Connect Toggl
Paste your API token. That's your only credential.
~ $
Toggl API Token:
████████████
02
Define your projects
Set billing types, Stripe mappings, and optional Upwork contract ids.
Acme Corp
Hourly with cap
Moonlight
Fixed retainer
03
Work as usual
Revenue appears in your menu bar, updating every 30 minutes.
Wi-Fi 3:42 PM 💰 $425

Start tracking in minutes

Free, open source, runs locally. Your data never leaves your machine.

curl -fsSL https://raw.githubusercontent.com/dennislysenko/freelance-tracker/main/install.sh | bash