How do I get a client to confirm they received my deliverables?

Put the confirmation on the delivery itself. Send the work as a handover link and ask for one act: the client records their decision on that page, received and accepted, or received with a hold naming the item. The confirmation is then dated, attached to the exact deliverable, and findable in one place forever.

Last updated: 2026-10-17

Receipt confirmations fail as evidence because they live in the wrong places: a thumbs-up in a thread, a "looks good" in a call, an email that names no version. Each is real and none is retrievable when the question turns serious, which is the only time confirmations matter.

The handover pattern fixes the location and the content in one move. The client opens the delivery, sees the steps and the results, and records the decision on the same object: who decided, what they decided, when. A hold is as valuable as an acceptance, because it converts a vague stall into a named item with a next step. The confirmation you need for payment terms, for version arguments, and for the simple question "did they get it" is the same record.

Ask for it in the delivery message with a single sentence that makes the act small: "Please record your decision on the delivery page when you have read it; accepted, or hold and name the step." Clients comply because the act is genuinely one click after a genuinely short read, and because the record protects them too: their acceptance is bound to the version they actually saw.

Checklist: confirmation that holds up

1. Deliver as a handover link, not as attachments alone. 2. Delivery message asks for the decision on the page, in one sentence. 3. Name the approver in the message; send to them, not to a group thread. 4. On acceptance: file the link and the decision date in the job index; start the payment clock your terms name. 5. On hold: fix the named item as a new step; the re-decision lands on the same record. 6. If the client confirms in chat anyway: reply in the thread naming the handover link and the date, binding the chat words to the record.

Worked example

The confirmation state, public: https://zambo.dev/handover/45434a17-4afc-486a-9646-e689bcee4297 shows a job in its accepted state, the decision recorded by the client on the delivery itself. That visible state is what "confirmed" means when it has to be shown to anyone else later.

Frequently asked questions

The client confirmed by email already. Is that enough?

An email naming the deliverable and its date is a real confirmation; keep it in the job folder. The handover decision is stronger because it binds the confirmation to the exact record and version, and because it lives where the work lives instead of in an inbox.

What if the client never records a decision?

Follow the approval pattern in this file: a reminder naming the decision, then the record's open state itself becomes the fact (delivered, awaiting decision, dated), which your terms should price, for example by starting late-payment steps from the delivery date after a set review window.

Does a recorded confirmation start the payment clock?

It does if your terms say so, which is why the clause belongs in the agreement: payment due a set number of days after recorded acceptance. The record gives both sides the same start date to point at.

By Brennan Zambo, founder of Zambo.

Last verified: 2026-10-17.

Ask for the decision on the delivery page in your next delivery message: https://zambo.dev/demo/ .

Try a handover

A handover gives your client one proof link with verifiable receipts to review, then Accept or Flag.

try it: say 'use zambo to hand this over to <client>' in your ai

Add Zambo · Handover docs · Real public handover · AER-1