Direct answer

Your client disputes the hours you billed. A timesheet will not settle it. A record for each hour will.

A timesheet screenshot proves nothing, because anyone can type one in five minutes, and your client knows it. That is why the argument goes in circles. Settle it a different way: go through the invoice line item by line item, and map each disputed hour to a work product with a timestamp, the call that ran, the file that was produced, the receipt for that step. The conversation moves from trust my spreadsheet to check the record, and checkable beats believable every time.

See what a checkable record looks like: check any Zambo receipt free at zambo.dev/verify, with no signup. If your disputed work ran through Zambo, each step already has that receipt waiting to be attached to its line.

Updated October 24, 2026.

Why the usual proof fails off platform

On a big freelance platform, the platform tracker is the referee. Off platform, which is where most hourly consultants and freelancers actually work, there is no referee. There is your spreadsheet, your screenshots, and your word, against a client who has decided the number feels too high.

Screenshots do not fix that. A screenshot has no history anyone can check, its date is whatever the file says it is, and it shows a summary you wrote about your own work. The client is not really disputing arithmetic. They are disputing whether the work behind the hours happened at all. Answer that question, hour by hour, and the arithmetic mostly takes care of itself.

Settle it line item by line item

1. Pull the disputed lines, and only those lines. Ask the client to name the exact invoice lines they question, in writing. Do not defend the whole invoice at once. A dispute about 6 of 40 hours is a small, answerable problem. A vague feeling that the bill is high is not.

2. Attach the work record for each disputed line. For each line, find what that hour produced: the tool call that ran, the draft or file it created, the message it was sent in. Where the work ran through Zambo, the receipt for that call carries the task, the timestamp for when it was saved, and a fingerprint of the result, so the client can open the receipt link and confirm the saved result was not changed after it was saved. Where the work ran elsewhere, use the file history, version history, or sent message for that step, and say plainly which kind of evidence each line rests on.

3. Build one table the client can check in ten minutes. One row per disputed line: the date, the hours claimed, what was produced, and the record link for that step. No narrative, no defensiveness. If a row has no direct record, write that in the row and attach the best supporting item you have, a file timestamp or a sent email. A table with one honest gap in it is far more convincing than a table that pretends there are no gaps.

4. Send one link, not a zip of screenshots. Package the work as a single handover and send that link. A handover collects the steps, their receipts, and the outputs into one record the client can open and walk through in order, instead of 30 attachments they will never unzip. Zambo is the verifiable work layer for AI, and HANDOVER is its flagship product, built for exactly this handoff: chains of work, recorded acceptance, and a dispute pack assembled from the same records when a question like this one arrives. How handovers work is explained in AI agent handover.

5. Close the dispute in writing. Your covering note should be short: here is each disputed line, here is the record for it, tell me which specific lines you still question and why. That request matters. It forces any remaining disagreement to be specific, and specific disagreements can be settled. Vague ones just repeat.

For the wider fight, when the client is disputing the invoice as a whole and not just the hours, see client disputing my invoice. For the delivery side of the same record, see prove I delivered the work.

A worked example of one disputed line

Say line 14 reads: Tuesday, research and draft memo, 3 hours. The client says they only ever saw a two page memo, so 3 hours feels invented.

The record based answer looks like this. The research calls for that memo ran Tuesday morning, each with its own receipt and timestamp. The first draft file was created after those calls, and its history shows two more revisions that afternoon. The memo the client received is the last of those revisions, sent the same day. So the row in your table is not trust me, it is: 3 calls with receipts, 1 draft, 2 revisions, 1 sent memo, all on Tuesday, all linked. The client can disagree about whether the memo was worth 3 hours. That is a pricing conversation. They can no longer say the work did not happen, because the record for each step is sitting in front of them. For teams, that same per step trail doubles as an internal record, covered in team AI usage audit.

Offer the same method for the next engagement, from hour one

Once a dispute is settled this way, make the offer that prevents the next one: from the first hour of the next engagement, work runs with per step records as it goes, and the client gets the handover link with the invoice, every time.

That changes the relationship in your favor. The client stops budgeting attention for checking up on you, because checking is now a link they can open in a minute. You stop keeping defensive notes, because the record is the note. And if an hour is ever questioned again, the answer already exists, saved at the time the work ran, not assembled under pressure weeks later.

The receipt format underneath is AER-1, an open Internet-Draft (draft-zambo-aer1-26), not a finalized standard. The client does not need to know that. They need a link that checks out.

Honest limits

Records prove what ran and when it was saved. They do not prove that every minute between two calls was billable thinking time, and you should not claim they do. A call at 10:00 and a file at 11:30 show work happened across that window. They do not, by themselves, account for all 90 minutes.

Handle thinking and research time the honest way: log it as its own recorded step at the time you do it. Write the short note while you are thinking, save the research summary while you are researching, run the outlining step through the same recorded path as the production steps. A two line note saved at 10:40 that says what you were working out is a record. The same note written three weeks later during a dispute is a reconstruction, and it will be read as one.

A verifiable receipt also proves a narrow thing: the saved result was not changed after it was saved. It does not prove the work was good, fast, or worth its price. Those are judgment calls the record informs but does not settle. What the record settles is the factual layer underneath the dispute: this step ran, at this time, and produced this result.

Run the next engagement on a record instead

Work run through the Zambo MCP endpoint at zambo.dev/mcp (153 tools) saves its result when the call runs and returns a verifiable AER-1 receipt for every call. Close each week or each deliverable with a handover, and the invoice writes its own evidence as you go. Start free: 20 free calls per day, then they upgrade. The Day Pass is $0.99 for 24 hours, and checking any receipt is always free at zambo.dev/verify.

Questions, answered

What if I did the work in tools that leave no record?

Use the indirect record honestly. File creation and edit times, sent emails, calendar invites, version history, and the client own replies can place work on a date even when the tool itself saved no receipt. Present those for what they are: supporting evidence, not a step by step record. Then be plain about the gap. A line that says this step has no direct record, here is the file it produced and when it was sent, is more credible than pretending every hour is equally documented.

Can I reconstruct my hours after the fact?

Partially, and you should mark what is reconstructed. You can rebuild a timeline from timestamps that already exist in files, messages, and receipts, and that reconstruction can be accurate. What you cannot do honestly is invent precise start and stop times that no record supports. Label reconstructed lines as reconstructed, show the source timestamp each one rests on, and keep estimates rounded and clearly marked as estimates. A marked reconstruction holds up. A fake exact timesheet falls apart under one question.

What if the client still refuses to pay after seeing the record?

Ask them to name the specific lines they still dispute, in writing, now that each line has a record attached. Vague refusal after a line by line answer is a different situation from a genuine question about hours, and it moves the conversation toward the normal unpaid invoice path: a final written demand with a date, then mediation or small claims where the same line by line packet becomes your evidence. Keep the handover link and every reply. Do not keep redoing free work to prove the same hours a second time.

Does this work for teams, or only solo freelancers?

It works for teams, and the need is usually larger there. When several people and several AI tools contribute, no single timesheet covers the work, and the dispute becomes whose hours produced what. Per step records answer that by person and by tool: each call leaves its own receipt, handovers collect them per contributor, and the client sees one combined record. The same packet also serves as an internal audit of AI usage, which is covered in the team guide linked below.

What does it cost to keep per step records?

Checking any receipt is free at zambo.dev/verify, with no signup. Running work through Zambo starts on the free tier: 20 free calls per day, then they upgrade. A Day Pass is $0.99 for 24 hours. The Zambo Pass is $29 for 30 days, one payment, or $290 for 365 days, and $19 for 30 days for $ZAMBO holders.

Related

Start where the work starts: run the next engagement through zambo.dev/mcp, send the handover link with the invoice, and check any receipt free at zambo.dev/verify. If you only need a day to assemble a dispute packet, the Day Pass is at zambo.dev/day-pass.