Tally.
A daily billing sheet: cards, spreadsheet summary, to-dos, Excel backups, and reminders.

Abbreviations & replacements

Whole-word, case-insensitive. Left is what you type, right is what it becomes. Applied on Clean up. Saved automatically.

Type thisBecomes

Item quick keys (1–9)

Assign your most-used PracticePanther Items to number keys. Then, while an Item dropdown is focused (click it on a card, in Summary, in Batch edit, or in Edit entry), press 19 to set it instantly. Saved automatically.

Timekeepers

Enter your firm’s PracticePanther user names, one per line, exactly as they appear in PracticePanther’s “Billed By” list. (Find them in PracticePanther under Settings → Team Members, or in the Billed By dropdown when adding a time entry; your PracticePanther export’s “Billed By” column also shows the exact spellings.) These feed the Timekeeper autocomplete and the entryโ€™s billed_by on the API lane. To let a Zap look each person up by email (PracticePanther’s Find User matches on email, not name), add the address after the name on the same line, e.g. Michael A Firestone <michael@lawmdjd.com>. Tally then also sends billed_by_email for that person. Lines without an email still work. Saved automatically.

AI assistant (optional) — make the downloaded file do everything

The Clean and Improve with AI buttons and the email/transcript importers call Anthropic’s API. Inside the Claude app they work automatically. In the downloaded Tally file they need your own Anthropic API key — paste it here and the downloaded file in Chrome can do both AI editing and Send to PracticePanther, with no bouncing back and forth. The key is stored only on this device and is never put in a backup file. Create one at console.anthropic.com (API keys).

The faint example text shown in every empty entry box. Type your own and it applies immediately, everywhere; leave blank for the neutral default.

Sounds

Quick phrases (hot buttons)

Build a set of one-tap task descriptions. Click a phrase on a card, or in the Phrases bar (toggle it in the toolbar), and it drops the wording into the entry with a (.) time slot ready for the number. Click Suggest from my entries to have AI study your past entries and propose a starter set; then edit freely, one phrase per line.

Billing reminder alerts

Pop-ups and a sound nudge you to log time during the work-day, with an end-of-day reminder if you haven't billed. Reminders run only while this page is open.

Add multiple empty entries

Create several blank entry lines at once for a date, and optionally pre-fill a client and matter. Shortcut: Ctrl/Cmd + Shift + E.

Import emails (PDF) โ†’ proposed entries

Print a day's sent & received emails to a single PDF, upload it here, and Claude reviews them and proposes billing entries grouped by client and matter. Review and fix any client or matter, approve the good ones, and they are added for the chosen date with the time left blank for you to fill in. Best with one day's batch at a time. (AI runs when Tally is open inside Claude.)

Drag & drop the email PDF here, or use the button above

Import entries (JSON) → batch add

Upload one or more Tally JSON files (the { "date": "YYYY-MM-DD", "entries": [ … ] } shape). Each entry is shown for review with an Approve checkbox so you can deselect or edit it before importing, and Tally flags any that look like duplicates of entries you already have so you can skip, replace or merge them. Select several files to load multiple days together. Use Undo to reverse an import.

Drag & drop JSON file(s) here, or use the button above

Client & matter directory

Load an .xlsx or .csv of your clients, matters, emails, and phone numbers to get autocomplete dropdowns in every Client and Matter field, smarter email matching, and phone-call logging. Use columns headed Client, Matter, Email, Phone (Matter/Email/Phone may hold several values separated by semicolons). Repeat a client across rows to add more.

Export a flat roster (client, matter, role, name, email, phone) for Claude Desktop to match against your inbox. When Claude finds new people tied to a matter (opposing counsel, co-counsel, family), have it save a JSON file in the documented shape, then load it here to fold them into the directory.

Posts to a second Zapier Catch Hook (separate from the time-entry one). Every post carries a type of client, matter, or contact; branch on it with Zapier Paths. New clients (type client, sent from the client editorโ€™s โ€œSave + send to PPโ€) carry first_name, last_name, email, phone, plus the default matter inline: matter, matter_rate, legal_issue, notes. Matter posts (type matter) carry client, matter, rate, legal_issue, notes, opposing_counsel_name, opposing_counsel_contact. Contact posts (type contact) carry name, role, email, phone. The opposing-counsel fields are filled from the related contact whose role contains โ€œopposing.โ€

The directory is also included in the full Backup (Download/Restore). These buttons back up or restore only the client/matter list (with emails, phones, tags, and statuses), as its own file, without touching your billing entries.

Drag & drop a clients file (.xlsx or .csv) here, or use the button above

Type to filter the list live; matches are highlighted. Click any row to edit that client and its matters (status, legal issue, notes), emails, phones, tags, and related contacts.

Analyze transcript / meeting โ†’ entry

Upload a Plaud (or any) transcript as a .txt or Word file, or paste it below. Claude estimates how long the discussion lasted (using timestamps if present, otherwise speaking pace), rounds to the nearest 0.1 hour, summarizes it into a billing entry, and lists action items you can add as to-dos. (AI runs when Tally is open inside Claude.)

Drag & drop a .txt or Word transcript here, or use the button above

Import PracticePanther time entries (.xlsx or .csv)

Upload a PracticePanther time-entry export, .xlsx straight from PP or .csv, no conversion needed. Tally maps the columns (with manual override if needed) and carries the rate into each entry. Each entry’s time is taken from the numbers in parentheses in its Description, summed (more reliable than the hrs. column); the hrs. column is used only as a fallback when a description has no parenthetical times. For very large historical exports, import in reasonable chunks.

Leave blank to import every date. Set one or both to skip rows outside the range.
Drag & drop a PracticePanther export (.xlsx or .csv) here, or use the button above

Send approved entries to PracticePanther

One-click billing. Each entry that has a time value and a matter is sent to your Zapier webhook, which creates the matching time entry in PracticePanther. Entries already sent are remembered and skipped, so you can press this safely every day. Tick the checkbox on any entry card to send only those (use Send selected), or use Send all not yet sent for the whole batch. Paste your Zapier “Catch Hook” URL once below; it is saved on this device.

Sends ride the PracticePanther API through pp.php โ€” the passphrase in โ‡… Sync is the only key. The Zapier hook era is retired.

Each entry is sent with a billed_by field. If an entry already has a Timekeeper (for example from a PracticePanther import), that name is sent; otherwise this default is used. In your Zap’s “Create Time Entry” step, map PracticePanther’s Billed By to this field. The name must match a PracticePanther user; send one test entry and confirm it shows the right person before relying on it.

Import phone calls โ†’ proposed entries

Upload one or more AT&T usage files (.xlsx, the Talk sheet), 8x8 exports (Call Records or Call Legs .csv from 8x8 Analytics), or any generic call log (.csv). 8x8 files are recognized automatically by their headers: only answered external calls are kept, each call is attributed to its extension's timekeeper, and loading a Call Legs file adds the “8x8: bill for” selector (just me / me or Jeff / everyone) with per-person talk time on transferred calls. Overlapping files are de-duplicated automatically.

Step 1 ยท Load your files 8x8 Call Legs (Simplified) + AT&T, date range only, no filters

Use Only calls from โ€ฆ to โ€ฆ to keep just the dates you want, since AT&T cycles rarely line up with a calendar month. Tally matches each number to your client directory (including related contacts like opposing counsel), rounds up to the nearest 0.1 hour (minimum 0.2), and proposes entries to review. Add phone numbers to clients and contacts first so calls can match. Texts to matched numbers are grouped into one entry per client per day. Use Ignore numbers (or the per-row Ignore # button) for family and personal numbers.

Drag & drop a call-log CSV here, or use the button above
Step 2 ยท iPhone screenshots optional; one client at a time โ€” screenshot their Call History pages and load them here

Load screenshots any way you like: the file picker, drag & drop onto the box below, or copy an image and paste (Ctrl+V) while on this tab (handy for images emailed from the phone to the PC). Reading happens entirely on this device (the text reader downloads once, then runs locally; nothing is uploaded). Overlapping screenshots are de-duplicated automatically. Calls that look already billed (an entry for this client on the same day whose text mentions a call) are flagged and left unchecked. Missed calls and calls under the short-call threshold start unchecked too.

Drag & drop Call History screenshots here, or copy one and paste it (Ctrl+V) anywhere on this tab
Step 3 ยท Review each call Approve (fills queue), Skip โœ“ (already logged, remembered), Delete (this session), Ignore # (number forever); then Add approved to Tally
Step 4 ยท Email correspondence optional monthly pass; load the Claude Desktop file after calls are done

Have Claude Desktop search your inbox against the exported contacts roster and save a JSON file of client and matter correspondence (see the contacts workflow guide for the shape). Load it here and each day of correspondence becomes a “Correspondence with client re …” entry in the Comms queue, with the subject pre-filled as the description. The same file may also carry a newContacts array (people not in your directory, with details harvested from signatures); those appear below under “New contacts from email” for one-click client and matter creation.

Filter by client & matter

Tick one or more clients (and optionally matters) to show only their entries in the Card, Summary, and Analysis views. This combines with the date range so you can analyze one client at a time. Leave everything unticked to show all.

Clients
Matters
Timekeepers

Backup & restore

Save everything โ€” entries, reminders, the client/matter directory, recent call phrases, abbreviations, and settings โ€” to one file. Keep it in a cloud folder (Google Drive, OneDrive, Dropbox) and restore it on another machine to move your data between home and office. Restoring replaces the data on the current device.

Move between computers (Hand off and Resume)

One tap to carry your work between your office and home PCs through your Dropbox folder. At the office, click Hand off to save a full, timestamped snapshot into the folder so Dropbox can sync it. At home, click Resume to load the newest snapshot, after a one line confirm that shows its date and entry count. Before Resume replaces anything, Tally quietly saves a “before-resume” copy in the same folder, and Hand off keeps the last several snapshots, so a load is never a one way door. Needs Chrome and the downloaded Tally file.

Leave the name blank to use the automatic name, which includes the date and the time. Type a name to label this backup (for example tally-MASTER); the date, time, and .json are added for you if you leave them off.

Have a second backup that overlaps this one (for example a home file and an office file for the same weeks)? Use Merge entries (review) instead of Restore. It does not overwrite anything blindly: it reads the entries from the chosen backup, compares each against what you already have by matter, date, and how similar the task text is, and flags the likely duplicates. For each flagged one you choose Skip, Replace, or Merge, and on Merge you can hand-edit or let AI draft a combined version and approve it before it replaces the existing entry.

Automatic backup to a folder

Writes the full backup (entries, the client/matter directory, reminders, abbreviations, call phrases, and settings) into a folder you pick, on a timer. Needs Chrome or Edge and the downloaded Tally file (not the in-Claude preview). For security, browsers re-ask for the folder each time you open Tally, so click “Choose backup folder” again after reopening.

Pre-import restore points

Each time you import (emails, phone calls, JSON, PracticePanther, or a transcript), Tally first saves a snapshot of your entries here. If a batch goes in wrong, restore the snapshot from just before it. The last six are kept on this device.

Change history

A running log of edits to your entries this session โ€” what changed and when. Restore returns your entries to how they were right after that change (itself undoable). The toolbar ↵ Undo / ↷ Redo still step one change at a time.

Range
Columns

PracticePanther reconcile

Export time entries from PracticePanther as CSV or Excel (.xlsx), with the Date, Matter, Description, Private Notes, and hrs. columns, then load it here. Excel files are read directly; no conversion needed. Tally compares the export against its own entries over the same date range and flags: duplicates inside PP, PP entries whose wording is out of date, entries Tally sent that never arrived, and PP entries Tally has never seen. Compare itself changes nothing; the buttons on each result row, and Sync PP status, make deliberate changes, each recorded with a safety snapshot and undoable from History.

or
PP Firm View
Trust-grade totals straight from PracticePanther โ€” every timekeeper, every entry in the range. Pull can take a minute for two months of firm data.

Switch between the card view and the spreadsheet Summary view any time; edits in either update the other. Use Add ToDo on an entry to tag a reminder with its client and matter. Everything is saved with your sheet.

Tally is open in another tab

Two live Tally tabs overwrite each other's saves, so only one tab can be active at a time. Taking over first asks the other tab to save its work; anything unsaved is lost only if that tab does not respond within a couple of seconds.