Retainer Tracker
Track monthly retainers, included hours, used hours, renewals, and rollover notes.
Retainer Tracker for Freelancers - Monthly Hours, Deliverables, and Renewals
Local retainer tracker. Monthly hours, deliverables, and renewal dates.
What's included
Features
About this tool
Track Monthly Retainers Before Hours and Deliverables Blur
Retainers are the most valuable revenue model in freelancing - predictable monthly income with a defined scope and a known client. They are also the most common source of quiet profit erosion when included hours creep beyond the monthly fee, deliverables expand without a conversation, or renewal dates slide past without a pricing review.
This retainer tracker gives you a local browser workspace for each monthly agreement: fee, currency, included hours, used hours, included deliverables, renewal date, rollover notes, and internal notes. The summary shows active monthly revenue, total remaining included hours, and retainers approaching renewal - the three numbers that matter most for retainer profitability monitoring. Everything is stored in IndexedDB on your device and is not uploaded anywhere.
Hours tracking is the core of retainer management. Enter included hours when the agreement is signed and update used hours throughout the month. The remaining hours metric across all active retainers tells you whether you are on pace to stay within scope or heading toward overuse. For detailed session-level tracking, use Time Tracker and update the summary here for the retainer-level view.
Deliverables clarify what the monthly fee actually covers. Use the deliverables field to list exactly what is included: monthly analytics report, three rounds of content edits, up to four support calls, weekly maintenance check, or whatever applies. Clear deliverables are the first defense against scope creep, because both you and the client have a written reference for what is and is not part of the retainer. Scope changes that fall outside the deliverables list go to Scope Creep Tracker.
Renewal tracking prevents the awkward expiry conversation. Add a renewal date to every retainer. When renewal approaches, you have time to review usage against the fee, decide whether to adjust pricing, prepare a scope update, or plan the conversation. A renewal call with data - here is what we accomplished, here is average hours used, here is the new rate for next term - is easier and more professional than a surprised client receiving a new invoice.
Rollover rules are often verbal agreements that get forgotten. Use the rollover notes field to record whether unused hours expire at month end, carry forward, or have a maximum rollover limit. When rollover questions come up mid-retainer, the answer is in the record rather than a search through old email threads.
Use alongside Time Tracker for session-level time entries, Local Invoice Tracker for monthly billing records, and Client CRM for relationship context. Export JSON backup before clearing browser data.
If you are a developer or designer freelancer looking to raise your rates through skill development, the React Playground, CSS Playground, and HTML Playground offer structured, interactive learning - no install, no setup required.
Step by step
How to Use
- 1Add the retainer agreementEnter the client, retainer name, status, monthly fee, currency, included hours, used hours, and renewal date.
- 2List included deliverablesUse the deliverables field for what the monthly fee includes, such as maintenance, reports, content edits, analytics reviews, or support calls.
- 3Track used hoursUpdate used hours during the month. The summary calculates remaining active retainer hours so you can see when a client is close to the cap.
- 4Record rollover rulesUse rollover notes for whether unused hours expire, roll over, or have a maximum carry-forward limit.
- 5Review and exportReview active revenue, renewal dates, and remaining hours. Export CSV for monthly review or JSON for backup and restore.
- 6Back up to GitHub Gist (optional)Click the GitHub icon in the toolbar and paste a personal access token with gist scope. Your retainer agreements sync automatically every 10 seconds after edits and are stored as a private Gist - restore on any device by entering the same token and Gist ID.
- 7Keep your Gist private — never store sensitive data in itGitHub private Gists are not truly encrypted — they are unlisted links. Anyone who has your Gist URL or Gist ID can read the full contents without logging in. Never share your Gist URL, Gist ID, or Personal Access Token with anyone. Avoid storing passwords, API keys, or highly sensitive credentials. For maximum privacy with no data leaving your device, skip Gist sync and use the Export and Import buttons to transfer files manually instead.
Real-world uses
Common Use Cases
Got questions?
Frequently Asked Questions
Create one retainer record per client agreement. Enter included hours, used hours, monthly fee, and renewal date. Update used hours during the month so you can see remaining capacity before the client exceeds the retainer.
Track client name, monthly fee, included hours, used hours, included deliverables, renewal date, rollover rules, and notes. These fields cover the main sources of retainer confusion: scope, time, renewal, and billing.
Yes. Use the rollover notes field to record whether unused hours expire, roll forward, or have a maximum cap. The tool does not automatically apply complex rollover math, but it keeps the rule visible.
Compare used hours against included hours. The summary shows remaining hours across active retainers, and each record shows the used and included values. If usage is consistently high, consider a higher monthly fee or a narrower scope.
Yes. CSV export gives you retainer fields in spreadsheet format for monthly review, client reporting, or manual analysis. JSON export is better for full backup and restore.
No. This tool tracks the retainer agreement and summary usage. Use Time Tracker for detailed session-level time entries, then update used hours here for high-level retainer visibility.
Yes. Add a renewal date to each retainer. Use it to plan contract updates, price increases, renewal calls, or ending notices before the current term expires.
Yes. Records are saved in IndexedDB in your browser. Export JSON before clearing site data, changing devices, or resetting your browser profile.
Yes - use the GitHub Gist backup. Click the GitHub icon in the header, paste a personal access token (gist scope only), and click Sync Now. Your data is saved as a private Gist and auto-syncs every 10 seconds after edits. On another device, paste the same token and Gist ID to restore.
GitHub "private" Gists are not encrypted — they are unlisted links. Anyone who has your Gist URL or Gist ID can read the full contents without needing a GitHub login. Never share your Gist URL, Gist ID, or Personal Access Token with anyone. Avoid storing passwords, API keys, or highly sensitive credentials. Use Gist sync for regular workflow data only. For maximum privacy with no data leaving your device at all, skip Gist sync and use the Export and Import buttons to move files manually via USB or your own encrypted storage.