The fix you shipped at 11pm belongs on an invoice.
Time tracking and invoicing for freelance developers
In Aeto, every hour belongs to a task, every task to a project, and every project to one client, so time from one codebase never lands on another client's invoice. Start the timer from the browser or the Mac menu bar without leaving your editor.
30-day free trialNo credit card requiredmacOS 12+Apple Silicon
How do freelance developers keep billing separate across clients?
Tie every hour to a client before it's logged. Most billing mix-ups start with a timer running against a vague "dev work" entry that gets sorted out at the end of the month. In Aeto, a timer only runs on a task, a task belongs to a project, and a project belongs to one client. If you move from one client's API work to another client's bug queue at 2pm, you stop one timer and start another on a different card. At invoice time, Aeto pulls only that client's unbilled hours, so work from one client can't end up on another's invoice.
How do you bill different rates for different kinds of work?
Set a default rate for each client, then override it on the tasks that should cost more or less. Plenty of developers charge one rate for planned feature work and a higher one for urgent fixes, or a lower rate for agency subcontracts than for direct clients. In Aeto, each client carries its own hourly rate, and any task can carry a rate of its own. Both appear on the same invoice at the correct amounts, with no adjustments in a spreadsheet afterward.
What does a developer's invoice look like in Aeto?
Illustrative example. Two weeks of work for a direct SaaS client with a default rate of $140 an hour. One task carries an urgent rate.
| Line item | Hours | Rate | Amount |
|---|---|---|---|
| Fix checkout webhook retries | 4.25 | $140 | $595.00 |
| Migrate tax calculation to Stripe Tax | 6.50 | $140 | $910.00 |
| Code review call with CTO | 1.00 | $140 | $140.00 |
| Weekend outage fix | 2.00 | $210 | $420.00 |
| Total | 13.75 | $2,065.00 |
Each line is a card from the board, named the way the client would recognize it. The weekend fix has its own rate set on the task, so it bills at $210 while everything else bills at the client default.
Does the Aeto timer run while you code?
Yes. On the Mac app, the timer sits in the menu bar and runs in the background while your editor and terminal stay in front. Pick the task from the menu bar when you start, and stop the timer when you switch to something else. The session logs to that task. In the browser, the timer runs from the task card at app.aeto.app and keeps counting while you work in other windows. Either way, there's nothing to reconstruct from commit history at the end of the week.
What doesn't Aeto do for developers?
Aeto has no GitHub, GitLab, Jira, or Linear integration, so tasks don't sync from your issue tracker. You create cards on the Aeto board yourself. It takes a few seconds per card, but it is a manual step. There's no API or CLI for starting timers. If you want time pulled automatically from commits or ticket activity, a tracker built around integrations will fit better, and the Aeto vs Harvest comparison covers that tradeoff. Aeto is built for one person, with no team seats.
Want the full walkthrough? See how Aeto works.
Answers to the questions we get most.
Everything you're likely to ask before you download the trial.
Q.01Does Aeto support fixed-price development projects?
Yes. Choose flat fee when you set up the project. It invoices at the agreed amount while you keep tracking hours against its tasks, and Aeto shows your effective hourly rate on the project, so you know what the last fixed price really paid before you quote the next one.
Q.02Which devices does Aeto run on?
Aeto runs in any modern browser at app.aeto.app, so Windows and Linux are fully supported. It also runs as a native Mac app for Apple Silicon. The Mac app adds a menu bar timer, which is the one feature the web app doesn't have. An iOS app is in progress.