How to Write Upwork Proposals That Get Replies

The anatomy of an Upwork proposal that actually converts — what to say, what to skip, and a template you can adapt in 5 minutes.

6 min read1,060 wordsBy YoPakistan Editorial

I sent 47 proposals on Upwork before I got a single reply. The 48th landed me a $1,200 client who's still with me two years later. Nothing changed about my skills — only how I wrote the proposals. Here's what I fixed, in the order it matters.

The three things I was doing wrong#

Looking back at those first 47 proposals, every single one had the same problems:

  • I opened with "Hi, I hope you are doing well." The client had 30 proposals to read. They skipped past that line in every one.
  • I listed my skills instead of proving them. "I am expert in React, Node, MongoDB, AWS..." tells the client nothing. They've read that exact paragraph 20 times today.
  • I didn't ask one specific question. My proposals ended with "Looking forward to working with you." That gives the client nothing to reply to.

Fix those three and your reply rate jumps immediately. Everything below is a refinement of those three things.

The anatomy of a winning proposal#

A proposal that gets replies has four parts, in this order:

1. The hook (1–2 lines)#

Open with something that proves you read the job post. Quote back a detail from their description. If they said "we need someone who can work in our existing Next.js 14 codebase with App Router," your first line is:

Saw you're on Next.js 14 App Router — that's the only version I work in these days, so no migration learning curve for me.

That single line puts you in the top 10% of proposals. Most freelancers send a copy-paste opener. You're already ahead.

2. The proof (2–3 lines)#

Don't list skills. Show one specific thing you've done that's relevant. Numbers beat adjectives.

Last year I migrated a client's Next.js 13 Pages Router to App Router and cut their LCP from 4.2s to 1.1s. Happy to share the repo privately.

If you don't have a directly relevant past project, build a small demo. I once applied to a job that needed Stripe integration. I spent 3 hours building a working checkout demo and attached it. Got the job at $45/hr.

3. The plan (3–4 lines)#

Tell them what you'd do first. Clients hire people who've already started thinking about their problem.

For your dashboard, I'd start by auditing the current data fetching — most App Router slowdowns come from over-fetching in server components. I'd ship a quick Lighthouse report on day one, then tackle the top 3 bottlenecks.

This is where most proposals die. Generic ones say "I can do this work." Specific ones say "here's how I'd start." Specific wins.

4. The question (1 line)#

End with one specific question that forces a reply.

Quick question: is the dashboard currently deployed, or should I work against a staging env? Affects how I'd set up the Lighthouse run.

Now they have to respond. Even a "it's deployed" reply opens the conversation.

Pricing: the part where everyone panics#

Two mistakes here, both common:

  • Going too low. A $50 bid on a $500-budget job signals "I'm desperate" or "I didn't read the budget." Clients filter those out.
  • Going weird. Bidding $347 instead of $350 signals you're trying to game some algorithm. Bid round numbers within 5% of the client's stated budget.

If the client hid the budget, bid what the work is actually worth to you. Don't anchor to "$5/hr because I'm in Pakistan." Anchor to "this saves the client 20 hours of their time at $80/hr."

Common proposal mistakes (still seeing these daily)#

  • "Dear Sir/Madam." Half the clients on Upwork are women. Half the buyers are founders in their 30s who hate formality. Use their first name if it's on the profile, otherwise just "Hi."
  • Attaching a generic portfolio PDF. If your PDF doesn't open with a project relevant to this job, don't attach it. One relevant link beats ten irrelevant ones.
  • Writing 400 words. Client attention span is ~15 seconds. If your hook + proof + plan + question doesn't fit in 150 words, cut.
  • Promising "100% satisfaction" or "unlimited revisions." This is a red flag to good clients. It says "I don't value my time." Experienced clients avoid these.
  • Not using connects strategically. Don't boost every proposal. Boost only on jobs where you're a genuine top-3 fit. I boost maybe 1 in 8 proposals.

A template that actually works#

Here's the skeleton I use for ~80% of my proposals. Adapt the words, keep the structure:

Hi [name], saw you need [specific thing from job post]. I just wrapped up [relevant past project with one number] — happy to share it.

For your project, I'd start by [specific first step that shows you understand the problem]. Then [second step]. Estimated [realistic timeframe] for a first usable version.

Quick question: [one specific question about their setup/scope that requires a reply].

Bid: $X (within 5% of stated budget, or fair market if hidden). — [Your name]

That's it. No "I have 5 years of experience." No "I am hardworking." No "I will deliver quality work." Those sentences are noise.

What to do when they reply#

A reply is not a hire. Now you have to close.

  • Reply within 4 hours. First responder wins a surprising share of contracts. I check Upwork at 9pm PKT because that's morning in the US.
  • Ask 2–3 clarifying questions before quoting a final price. This shows you take the work seriously and gives you info to scope properly.
  • Offer a paid trial. "Happy to do a 2-hour paid test on a small piece of the project" filters out clients who waste your time. The ones who agree almost always convert.

The one metric that matters#

Reply rate, not hire rate. If you're getting replies but no hires, your closing needs work. If you're not getting replies at all, your proposals need work. Track it. Mine went from 2% to 28% over six weeks once I started following the structure above.

It's not magic. It's just stopping doing what everyone else does.


Got a proposal that's not getting replies? Paste it in #freelance-help on our Discord community — folks who've been there will give you blunt feedback.

Related guides