All posts

How to Write an Upwork Proposal That Gets Replies (2026)

By RemoteSWE ·

Short answer: a winning Upwork proposal is four sentences doing four specific jobs — the client’s problem, one matching proof point, one concrete first step, and one closing question. That structure came out of 629 real proposals we collected by interviewing freelancers, 411 of which won the job. The skeleton repeats on every application; the sentences are written fresh from the job post every time. This post breaks down what each of the four lines has to accomplish, shows a full before-and-after, and gives you a way to test a draft before you spend the Connects.

The short answer: the four-line skeleton

  1. Their problem — one sentence naming the specific thing in the job post, in your words.
  2. Your proof — one sentence, one number, matched to this kind of work. Not your career.
  3. The first step — what you would actually do first, concretely.
  4. One question — something they can answer in a line, that only matters if they are serious.

Two to three short paragraphs total. If it runs longer than that, something in it is about you.

Why generic templates stopped working

Clients now read twenty near-identical, obviously machine-written proposals per posting, and they identify them instantly. The tell is never a specific phrase — it is that the first paragraph would fit any job on the platform. That is what gets skipped, not bad grammar.

The opposite extreme fails too. Free-form essays written from scratch each time are slow, inconsistent, and usually bury the one sentence that would have earned the reply. When we put winning and losing proposals side by side, the winners were neither. They shared a repeating structure with freshly written sentences — most of the speed of a template, none of the copy-paste smell.

What each of the four lines has to do

Line 1: name their problem, not your role

Nine times out of ten a losing proposal opens with a paragraph about the freelancer. The client does not care who you are until they believe you understand what they need. Skip the greeting formulas entirely — no "Dear Sir/Madam", no "I hope this message finds you well" — and open on the thing they are actually worried about. Use a detail from the post that a template could not have produced.

Line 2: one proof point, matched to this job

Not a list. One. And it should be the closest thing you have ever built to what they are asking for, with a number attached: users, transactions, load time, revenue, whatever is countable. A named company or product beats an unnamed one, because named things are checkable. "I have 8 years of experience" is not a proof point; it is a claim you are asking them to accept.

Line 3: the concrete first step

This is the line most freelancers skip, and it does more work than any of the others. Telling the client what you would look at first proves you have already started thinking about their job. It also quietly reframes the conversation from "should I hire someone" to "should I hire this one".

Line 4: a question that filters

End on a question they can answer in one line and that only matters if they intend to hire — something about their stack, their deadline, their existing setup. Do not end with your availability or a request for a call as the primary ask. A good closing question makes replying easier than ignoring.

A worked example: the same proposal, before and after

Job post: a small SaaS needs their Stripe subscription billing migrated to usage-based pricing.

Before: "Dear Sir/Madam, I hope this message finds you well. I am a senior full stack developer with over 8 years of experience in web development, including React, Node.js, Python and various payment integrations. I have worked with many international clients and always deliver high quality work on time. I read your job description carefully and I am confident that I am the right fit for this project. Please let me know if you would like to schedule a call to discuss further. Best regards."

After: "Moving from seat-based to usage-based Stripe billing usually breaks on the proration of mid-cycle plan changes — that is where most migrations lose revenue quietly. I did this migration for a B2B SaaS with about 900 active subscriptions and kept every existing customer on their grandfathered price. First thing I would look at is whether your current subscriptions use one price object or several, because that decides whether this is a two-week job or a two-month one. Are you planning to keep legacy plans running in parallel?"

The before version is 84 words about the freelancer. The after version is 96 words, none of them about the freelancer, and it contains a diagnosis, a matched number, a first step and a filtering question. Same effort. Only one of them tells the client something they did not already know.

Common mistakes that sink good proposals

  • Opening with credentials. Fix: move them to line two, attached to a number.
  • Generic greetings. Fix: use the client’s name if it is visible, and otherwise no greeting at all.
  • Listing tasks instead of outcomes. Fix: frame around what changes for their business, not what you will type.
  • Attaching a portfolio of unrelated work. Fix: one sample that mirrors their industry beats six that do not.
  • Writing long to look thorough. Fix: cut until only the four jobs remain — length correlates with losing.
  • Closing with your availability. Fix: close with a question about their setup.
  • Reusing line one across niches. Fix: the skeleton repeats, the sentences never do.

How to test a proposal before you send it

Four checks, about two minutes, done in this order:

  1. Read sentence one alone. Out of context, does it describe their problem or your job title? If the latter, stop and rewrite.
  2. Count the words about you. More than a quarter of the proposal is too many.
  3. Delete-test the middle. Remove any sentence that would still be true for a different job. If the proposal survives, it was filler.
  4. Check for a real question at the end. "Let me know if you have questions" is not one.

If you would rather have the draft checked against the winning-versus-losing patterns directly, that is what the proposal reviewer does — it scores against the same 629-proposal set rather than general writing advice.

FAQ

How long should an Upwork proposal be?

Two to three short paragraphs. Winning proposals cluster in a fairly narrow length band; going well above it correlates strongly with losing, and stripping it down to a single line does too. If you have the four jobs covered, you are almost certainly the right length already.

Should I use a proposal template at all?

Use a skeleton, not a template. Reuse the four-part structure on every application and write every sentence fresh from the job post. That is the distinction covered in do Upwork proposal templates actually work.

Should I mention my rate in the proposal?

Only if the post asks. Price is roughly the fourth thing clients weigh, after the proposal, the profile and the portfolio, and volunteering a low number early reads as inexperience rather than value. The pricing logic is in how to set your rate and raise it.

My proposals are good but nobody opens them. What now?

Then writing is not your bottleneck yet. An unopened proposal is a targeting and timing problem, and no amount of rewriting fixes it — start with why your proposals are not being viewed and fix job selection first.

Four lines, four jobs: their problem, your matching proof, the first concrete step, one filtering question. Keep the skeleton, never keep the sentences. The fastest improvement available to most freelancers is deleting the opening paragraph they currently have and starting on the client’s problem instead. Run your next draft through the two-minute test above, check it against the proposal reviewer, and if the opens are not happening in the first place, work the targeting problem and the volume question before touching the writing again.