Why Clients Don't Send Materials (and What to Do)
Clients rarely withhold a logo or photos on purpose — they stall from being overwhelmed, an unclear ask, no deadline, or no one owning it on their end.
Why "just send it over" doesn't work
Every web project has a moment where the ball leaves your court and lands in the client's. You need their logo, their copy, their photos, maybe an old CMS password. You send a friendly email — "whenever you get a chance, could you send over your logo and some photos?" — and then nothing happens for two weeks.
It feels personal. It isn't. From the client's side, that email arrived between forty other things they consider more urgent: their actual job, their kids, an invoice they're chasing. Your open-ended, undated, unowned request loses every time it competes with something that has a due date attached. The problem isn't that they don't care about the project. It's that you gave them nothing that forces a decision about when to act.
This is also, structurally, not their job. They hired you to make the technical and creative decisions. Being handed a vague homework assignment — "send us your brand assets" — puts them back in a role they didn't sign up for. The less specific the ask, the more it feels like work, and the more it gets deferred.
Diagnose the real cause
Different stalls have different causes, and the fix only works if it matches the cause. Before assuming a client is simply slow or difficult, check which of these patterns fits:
| Symptom | Likely cause | Fix |
|---|---|---|
| Agrees enthusiastically, then goes silent | Overwhelmed by an open-ended list ("send us everything you have") | Split the ask into small, individually completable items |
| Sends half the files, ignores the rest | Doesn't know the exact format, size, or quantity needed | State constraints explicitly — "5 to 15 photos, JPG or PNG" beats "some photos" |
| Says "I'll get to it" for weeks | No deadline, and no consequence attached to missing one | Give an explicit due date tied to your own project timeline |
| Materials arrive scattered across email, WhatsApp, and a Dropbox link | No single place to submit or check what's still needed | Point them at one link and one status page, not a thread |
| Total silence from a request sent to "the team" | No named owner on the client's side | Address one specific person, not a shared inbox or group |
| Uploads a screenshot instead of the source file | Doesn't understand why the low-res version doesn't work | Explain the requirement in the client's terms ("blurry on phones") not yours ("under 512px") |
Most stalled projects are a combination of two or three of these, not one. A vague ask sent to a shared inbox with no due date fails for three separate reasons at once, and fixing only one of them won't be enough.
Four fixes that make materials arrive
One place, not a thread
Every time a client has to remember which email thread, which shared folder, or which text message the request lives in, you've added a decision they have to make before they can even start. Consolidate everything they owe you — files, text, credentials — behind one link. A single page that shows what's done and what's left removes the guesswork about whether they already sent something and you lost it, which is a real and common source of the standoff where both sides think the ball is in the other's court.
Small chunks, not one big ask
"Send us your brand assets, some copy, and your opening hours" is one request that feels like three separate chores, each vague enough to postpone. Break it into a checklist with a handful of named, specific items — logo, hero text, opening hours, five to fifteen photos — each with a one-line explanation of what it's for. A checklist with a progress bar gets finished item by item, in spare five-minute windows, in a way a single open-ended email never does. If you want the full list of what to ask a new client for and why, see our client onboarding questionnaire for web design — turning that list into a structured request is most of the fix on its own.
A deadline and a named owner
"Whenever you get a chance" sets no deadline, so nothing competes with the client's actual deadlines. Give a real date, ideally tied to a consequence they care about ("we need this by the 14th to keep the launch date"). And send it to one named person, not a general inbox or "your team" — a request with nobody's name on it is nobody's job to finish.
A reminder cadence, not manual nagging
A single request, however well written, will still get missed. The fix isn't sending it once and hoping — it's a planned sequence of reminders that don't require you to remember to send them, phrased so the fifth one doesn't sound like the first one did.
A reminder cadence that works
A workable rhythm has four checkpoints, each with a different job:
- Day 0 — the invite. State exactly what's needed, why it matters for their project, and roughly how long it will take (most checklists run five to fifteen minutes). One link. No ambiguity about where to submit.
- Day +3 — the friendly nudge. Short and warm, not a guilt trip. If they've already sent something, say so — "thanks for the logo, still waiting on photos and opening hours." Restate the same link.
- Day +7 — the specific ask. Name the exact one or two items still outstanding, not "the rest of the materials." Offer an alternative for anyone stuck: a ten-minute call, or permission to send something rough ("a phone photo of the menu is fine for now").
- Day +10 — the last reminder before consequence. State plainly what happens if nothing arrives — the launch slips, or you proceed with placeholder content that they'll need to review and approve later. No pressure tactics, just the actual consequence.
Building and babysitting that sequence by hand across several active projects is exactly the kind of thing that quietly eats a week a month. BriefGate's chase engine runs a schedule like this automatically once you set it up — sending only for what's still missing, respecting the client's working hours, and stopping the moment they finish or after enough reminders that continuing wouldn't help.
Put it in the contract
A cadence of reminders handles clients who are stalling by accident. It does nothing for the rare client who simply never sends anything. For that, the fix has to live in the contract, not in your inbox.
The clause below is a starting point to adapt, not legal advice — have it reviewed by a lawyer licensed in your jurisdiction before you use it in a real agreement.
Client-Supplied Materials. Client agrees to provide all materials listed in the project intake (logos, copy, images, and any required credentials) within [X] business days of the effective date of this agreement, or by [specific date]. If Client has not provided the required materials within [X + grace period] days after that deadline, [Company] may, at its discretion: (a) pause work on the affected deliverables without adjusting the overall project deadline; (b) proceed using placeholder content, with any resulting rework billed at the standard hourly rate; and/or (c) treat the delay as a change in scope subject to the change-order process described in Section [_]. Materials submitted after this point will be incorporated as time allows, not guaranteed by the original delivery date.
The clause matters less for its legal weight — most agencies never invoke it — and more because naming a deadline and a consequence up front changes how the client treats the whole request. It stops looking optional the moment it's in a document they signed.
Where BriefGate fits
Everything above works whether or not you use any particular tool — a shared folder with a checklist and a calendar reminder gets you most of the way there. BriefGate exists for the parts that are tedious to build by hand across many projects at once: a branded client portal that needs no login, a chase schedule that runs itself, and typed results an AI coding agent can read back without re-parsing an email. If you're setting up the request itself, our guide to the client onboarding questionnaire for web design covers exactly what to ask for before you send anything. Start at briefgate.dev if you want to see the whole flow end to end.