TL;DR: The default answer is no. A client who asks you to complete real work before a contract exists is asking you to carry all the risk of the project's first stage: no escrow, no Hourly Protection, no dispute path, and no earnings or Job Success Score credit if it goes nowhere. The honest counter is a paid trial, one small deliverable on a funded fixed-price milestone at your normal rate, which gives the client exactly the proof they said they wanted and gives you a contract. A short call, a rough approach, or a sample from work you already own are all reasonable to give away. A finished piece of the client's actual project is not. This guide covers the three kinds of "quick test", how to tell a genuine trial from free labour, the wording that declines without losing the job, and the screening that stops the question arriving in the first place.
You spend Connects on the proposal, write a real answer to every screening question, get the reply you were hoping for, and then read the second paragraph: before we decide, could you do a short test task so we can see your work?
It sounds fair. It is also the point where a lot of good freelancers hand over four hours to somebody who was never going to hire them.
The three things "a quick test" can mean
They look identical in a message thread and they are completely different arrangements.
The paid trial. A small first piece of the real project, on a contract, at your rate, so the client can see how you work before committing to the whole thing. This is normal, reasonable, and often a good idea for both sides. It is also the only version with a contract behind it.
The unpaid sample. A generic exercise that is not part of the client's project: a 200-word passage on a topic they made up, a small function against a public API, a mock layout for an imaginary brand. Low value to them, low cost to you, and occasionally worth doing when you have nothing else to show.
The disguised deliverable. A task that is a piece of the actual job, with the real brief, the real brand, real data, and a real deadline. Somebody will use this on Monday whether they hire you or not. This is the one to refuse, and it is by far the most common of the three.
The distinction that matters is not how long the task takes. It is whether the output has value to the client after they say no.
Why the default answer is no
You have already paid to be here. Connects are spent before anyone replies, so the application already cost you money. Adding unpaid hours to a job you have not won turns an ordinary cost of doing business into a genuinely bad trade, and the arithmetic gets worse the more of these you accept.
Nothing outside a contract is protected. Every safeguard Upwork gives you is attached to a contract. Fixed-price work is covered only to the extent the milestone is funded in escrow, hourly work is covered only for time logged through the desktop app, and the dispute process exists only when there is a contract and money in the system to argue about. Work delivered in a message thread before either of those things exists sits entirely outside all of it, which is the same failure mode behind most cases of a client not paying.
It does not count. Unpaid work earns nothing, adds nothing to your total earnings, produces no review, and moves your Job Success Score not at all. Four hours on a funded milestone builds the account. Four hours on a test builds a stranger's project.
It sets the frame. How the relationship starts tends to be how it continues. A client who opens by asking for free work has told you where the boundary sits, and the same instinct reappears later as scope creep, unapproved revisions, and a slow milestone approval.
How to tell a real trial from free labour
Four questions answer it quickly.
Is the output usable? If the task is the client's actual content, actual data, or actual design problem, the deliverable has value to them whether or not you get hired. Generic exercises do not.
Is there a deadline? Real projects have dates. A "test" that must be delivered by Thursday is not a test, it is stage one of the work, and Thursday is when their client is expecting it.
How many people are doing it? Ask directly: how many candidates are you asking to complete this? Four freelancers doing four hours each is sixteen hours of free production, and clients who are running that play often answer honestly because they do not think of it as a problem.
Is there any money attached? Not a promise of money after, a funded milestone before. A client with budget who wants to reduce risk has an obvious way to do it. One who will not attach any money to the first step is telling you something about the budget, and it is worth checking whether this is one of those jobs that was never going to hire anyone.
Two harder signals belong in the scam category rather than the cheapskate category: a request to complete the task somewhere off the platform, and a "test" that involves your personal documents, an account login, or a payment of any kind. Those are not negotiations. Close the tab and report the message.
What to say instead
Declining badly loses jobs. Declining well converts a decent number of them, because a client who is genuinely de-risking will take the counter-offer, and one who is fishing will disappear, which is also a useful outcome.
The counter-offer is the whole move:
Happy to do that. I would set it up as a small first milestone rather than an unpaid task, since it is part of the real project. I would suggest [scope], for [price], delivered by [date]. If the result is not what you wanted, we stop there and you have paid for one small piece rather than a full engagement. If it is, we roll straight into the rest.
That reads as confidence rather than refusal, and it gives the client the exact thing they asked for: evidence, before commitment, with a defined exit. Keep the trial genuinely small, one deliverable and one revision, and do not discount your rate to win it, because a cheap first milestone is just an unpaid test with extra steps.
When there is a real reason not to charge, offer proof that costs you nothing new:
- A portfolio piece that solves the same problem, with a line explaining what was hard about it.
- A short call where you walk through your approach to their specific brief. Fifteen minutes of judgment is more persuasive than four hours of production, and it is how the good interviews go anyway.
- A written outline: the first three steps you would take and the thing that usually breaks. Naming the risk proves you have done the work before. It is not the deliverable, and any client who pushes for the finished output at this stage has answered the question you were asking about them.
If they insist on unpaid production anyway, one clear sentence is enough: "I keep all project work on a contract, so I am not able to do that, but I am glad to start with a small paid milestone or walk you through the approach on a call." Then let it go. You are not going to argue somebody into respecting your time.
The narrow cases where a free sample is fine
Blanket rules make people defensive about obviously reasonable exceptions, so here they are.
You are new, your first job has not happened yet, and you have nothing to show. Thirty minutes on a generic exercise is a real investment in an empty portfolio, and you keep the output either way. Do it once, keep it short, and make sure it is generic.
The task is a standard skills screen. A timed coding exercise on a throwaway repo, a translation of a paragraph from a published article, a short technical quiz. These are assessments, not production, and they are common in agency hiring.
The thing being asked for takes fifteen minutes and produces nothing usable. A rough estimate, a two-line critique of their existing page, a quick yes or no on feasibility. That is pre-sales, and every professional does it.
The test is the last step before a decision, the scope is defined, and you would happily do it as a paid milestone but the amount is trivially small. Your call. Just make it a decision rather than a reflex.
Fewer of these conversations is a filtering problem
Notice what all of this has in common: it happens after you spent the Connects. The freelancers who rarely get asked for free work are not better at saying no. They are applying to different clients.
Clients with real hiring history do not usually run unpaid test rounds. They have a payment method verified, a spend history, reviews from other freelancers, and a hire rate that shows contracts actually get signed. Clients with none of that are the ones improvising a process, and improvised processes are where free test tasks come from.
The problem is that Upwork's own search filters will not sort by client spend, hire rate, or rating, so enforcing those standards means opening posts one at a time while the good jobs collect most of their proposals in the first hours.
That is the job Upwork Scout was built to take over. It watches Upwork continuously, reads the full job detail rather than the listing, applies your floors on client spend, hires, rating, payment verification, and budget before anything reaches you, then scores what survives against your actual profile. Fewer jobs arrive, they come from clients with a history of paying for work, and they arrive early enough that a real proposal still gets read. The free tier lets you set those filters today.
The bottom line
Free test work is a transfer of risk from a client who has not committed to a freelancer who already paid to apply. Give away judgment freely, give away production never, and answer every request for a test with the same offer: a small funded milestone at your normal rate. It is the version that protects you, it is the version Upwork can actually enforce, and it doubles as your own test of whether this client funds escrow and approves work on time. The rest of the fix is upstream, in whose jobs you spend Connects on in the first place.
Frequently asked questions
Is it normal for Upwork clients to ask for a free test project? It is common, but it is not a standard part of hiring on the platform, and it is much more common among clients with little or no hiring history. Established clients reduce their risk with a small paid first milestone, because that is faster, gives them a contract, and does not lose them the strong candidates who decline unpaid work. Treat the request as information about the client rather than as a normal step, and respond with a paid trial offer instead of either an outright refusal or a silent four hours of work.
Is unpaid test work against Upwork's rules? Upwork's position is that work for a client you met on the platform belongs on an Upwork contract, and its own guidance to freelancers is not to work without one, so anything substantial delivered in a message thread is both unprotected and against the spirit of the terms. Requests that push further, asking you to work off the platform, to hand over login credentials, or to pay anything to be considered, break the rules outright and should be reported through the flag option on the job or message. For a small generic sample the line is blurrier, which is exactly why the safer habit is to answer every request for real project work with a funded milestone.
How do you say no to a free test without losing the job? Do not decline, counter. Say you are glad to do the task and would set it up as a small first milestone rather than an unpaid one, then name the scope, the price, and the delivery date, and point out that it gives them a defined exit if the result is not right. Offer a call or an existing portfolio piece as a free alternative so the client has something to say yes to. Clients who were genuinely de-risking usually accept, and the ones who vanish were collecting free work from several applicants, which means the counter-offer saved you the hours rather than costing you the job.