Skip to content

Time Tracking for Freelancers: Tools and Techniques

DodaTech Updated 2026-06-22 6 min read

In this tutorial, you'll learn time tracking techniques and tools for accurate billing and productivity analysis. Why it matters: without tracking your time, you cannot price accurately or understand your true earnings. By the end, you will have a complete time tracking system.

Time is your most valuable asset as a freelancer. Every hour you spend on a project should be accounted for, not just for billing but for understanding your productivity and profitability.

Why Track Time

Time tracking serves multiple purposes beyond client billing.

Purpose Benefit
Accurate billing Clients pay only for hours worked
Productivity analysis Identify where your time goes
Project estimation Use historical data for future quotes
Profitability tracking Know which projects are worth repeating
Tax Compliance Support deductions and billing records

Time Tracking Tools Comparison

Tool Price Best Feature Platform
Toggl Track Free - $20/month One-click timing Web, desktop, mobile
Harvest $12-42/month Invoicing integration Web, desktop, mobile
RescueTime Free - $12/month Automatic tracking Desktop, mobile
Clockify Free - $15/month Unlimited users Web, desktop, mobile
Timely $14-28/month Automatic time mapping Web, desktop, mobile
flowchart TD
    A[Choose Tool] --> B[Set Up Projects]
    B --> C[Create Client Tags]
    C --> D[Track Daily]
    D --> E[Review Weekly]
    E --> F{Accurate?}
    F -->|Yes| G[Generate Reports]
    F -->|No| H[Adjust Categories]
    H --> D
    G --> I[Export for Invoicing]

Setting Up Your Tracking System

A good tracking system requires organisation upfront.

const timeTrackingSetup = {
  projects: [
    { name: "Acme Website", client: "Acme Corp", rate: 100 },
    { name: "Beta API", client: "Beta Inc", rate: 120 },
    { name: "Internal Marketing", client: "Self", rate: 0 },
    { name: "Learning", client: "Self", rate: 0 }
  ],
  categories: ["Development", "Client Communication", "Testing", "Admin"],
  billableDefaults: true,
  reminderInterval: 60 // minutes
};

function logTime(tool, project, duration, description) {
  return {
    tool: tool,
    project: timeTrackingSetup.projects.find(p => p.name === project),
    duration: duration,
    description: description,
    timestamp: new Date().toISOString()
  };
}

console.log(logTime("Toggl", "Acme Website", 120, "Implemented login system"));

Expected output: A time entry object with project, duration, and description.

Tracking Methodologies

Real-Time Tracking

Start a timer when you begin work and stop it when you finish. This is the most accurate method.

import time
from datetime import timedelta

class TimeTracker:
    def __init__(self):
        self.start_time = None
        self.is_running = False

    def start(self):
        self.start_time = time.time()
        self.is_running = True
        print("Timer started")

    def stop(self):
        if not self.is_running:
            return 0
        elapsed = time.time() - self.start_time
        self.is_running = False
        return timedelta(seconds=round(elapsed))

tracker = TimeTracker()
tracker.start()
time.sleep(2)
duration = tracker.stop()
print(f"Tracked: {duration}")

Expected output: Tracked time of approximately 0:00:02.

Retrospective Tracking

If you forget to start the timer, log time at the end of the day. This is less accurate but better than no tracking.

Automatic Tracking

Tools like RescueTime run in the background and categorise your activity automatically. Review and adjust categories weekly.

Understanding Your Billable vs Non-Billable Time

Activity Type Billable? Example
Client development work Yes Writing code, debugging
Client communication Yes (usually) Emails, calls about project
Admin and invoicing No Creating invoices, bookkeeping
Learning new skills No Taking courses, reading docs
Marketing and outreach No Writing proposals, networking
def calculate_billable_percentage(entries):
    total_hours = sum(e["hours"] for e in entries)
    billable_hours = sum(e["hours"] for e in entries if e["billable"])
    return round((billable_hours / total_hours) * 100, 1) if total_hours else 0

entries = [
    {"project": "Acme", "hours": 5, "billable": True},
    {"project": "Learning", "hours": 2, "billable": False},
    {"project": "Admin", "hours": 1, "billable": False}
]
print(f"Billable: {calculate_billable_percentage(entries)}%")

Expected output: Billable percentage of 62.5%.

Using Time Data for Better Estimates

Historical time data is your best tool for accurate project estimates.

Project Type Average Hours Buffer Recommended Quote
Landing page 20 hours 20% 24 hours
E-commerce site 80 hours 25% 100 hours
API development 40 hours 30% 52 hours
Bug fix 4 hours 50% 6 hours

Productivity Analysis

Review your time tracking data weekly to identify patterns.

# Weekly productivity review template

## Hours Summary
Total hours: 35.5
Billable hours: 28.0 (79%)
Non-billable hours: 7.5 (21%)

## Time by Category
Development: 22.5 hours (63%)
Client communication: 5.5 hours (15%)
Testing: 3.0 hours (8%)
Admin: 2.5 hours (7%)
Learning: 2.0 hours (6%)

## Observations
- Admin time is increasing - automate invoicing
- Most productive between 9 AM and 12 PM
- Client communication is efficient

## Action Items
1. Set up automated invoicing to reduce admin time
2. Block 9-12 for deep work every day
3. Batch client calls on Tuesdays and Thursdays

Expected output: A structured weekly review that identifies improvement areas.

Avoiding Time Tracking Pitfalls

Pitfall Solution
Forgetting to start timer Use Pomodoro technique with timer
Tracking too broadly Use detailed task descriptions
Not tracking non-billable time Track everything for full picture
Inconsistent tracking Set daily reminder at 5 PM
Estimating from memory Always use logged data, not memory

Practice Questions

  1. What are the five main reasons to track time as a freelancer?
  2. What is the difference between real-time and Retrospective tracking?
  3. How do you calculate your billable percentage?
  4. Why should you track non-billable time?
  5. How does historical time data help with project estimates?

Answers:

  1. Accurate billing, productivity analysis, better estimates, profitability tracking, tax Compliance.
  2. Real-time tracks as you work; Retrospective is logged at the end of the day from memory.
  3. Divide billable hours by total hours and multiply by 100.
  4. To understand your true working hours and identify areas where you can improve efficiency.
  5. It provides actual data from similar past projects rather than guesses.

Challenge

Track every hour of your work for one week. Categorise each entry as billable or non-billable. At the end of the week, calculate your billable percentage and identify one change to improve it.

Real-World Task

Choose a time tracking tool from the comparison table. Set up your projects and clients in the tool. Track all work time for the next seven days, then export a report and review your productivity patterns.

Do I need to track time if I charge fixed prices for projects?

Yes. Tracking time on fixed-price projects helps you understand your effective hourly rate and whether the project was profitable. Use this data to improve future quotes.

Should I share my time logs with clients?

Share time logs only if your contract requires it or if you use hourly billing. For fixed-price projects, detailed logs are internal data, not client deliverables.

How do I track time when switching between multiple clients in one day?

Use a tool with one-click switching between projects. Toggl and Harvest both offer quick-switch features. Log each session separately with a clear description.

Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro