Samples

Four Upwork proposal samples, and why each one works

Four complete Upwork proposals — web development, design, writing and virtual assistant — each shown against the job post it answers, with the reason it works and the pattern underneath all four.

Last updated

The short answer

  • A good Upwork proposal runs 110 to 170 words in five parts: greeting, hook, proof, close, sign-off.
  • The opening line must name the client’s specific problem. If it could be pasted into another job, it is not a hook.
  • Give one project with a number in it, not a list of skills — your profile already carries the skills.
  • Close with a question only this client can answer, or an offer to do the first small piece of work before they commit.

How to read these

Each sample below is a complete proposal shown next to the job post it answers, because a proposal read on its own tells you almost nothing. What makes a first line good is that it could not have been written for any other posting, and you can only see that with the posting in front of you.

These are written examples, not letters lifted from anyone’s real Upwork account. The job posts are composites of the kind that actually get posted, and the proposals are written to the same five-part structure we use in the proposal guide. Treat them as a pattern to copy, not a script: a letter pasted unchanged reads exactly like what it is.

Sample 1: Web development

Job post
Laravel developer needed — our admin dashboard has become unusable. The main report page takes 30+ seconds to load and sometimes times out entirely. We have roughly 400,000 orders in MySQL. Need someone to find the bottleneck and fix it. Ongoing work likely if this goes well.

At 138 words:

Proposal
Hi Priya, Thirty seconds on 400,000 rows is almost never the row count — MySQL does not care about 400k. It is usually N+1 queries in the view, or a missing composite index on the columns you filter and sort by at the same time. I fixed this exact shape of problem on a Laravel 10 order dashboard in June. The report was firing about 1,200 queries per load because every row lazy-loaded its customer and its line items. Eager-loading those two relations and adding one index on (status, created_at) took it from 28 seconds to just under 400ms. They kept me on for the rest of their reporting work. If you run DB::enableQueryLog() on that page and tell me the query count, I can tell you which of the two it is before we start. Best, Arun

Why it works: the first sentence disagrees with the client’s implied diagnosis. They wrote “we have 400,000 orders” because they believe the data volume is the problem; saying it is not, and naming the two things it usually is instead, proves the writer has actually thought about the posting rather than pattern-matched “Laravel”. The proof carries a before-and-after number and a specific index, which cannot be bluffed. The close asks for one command’s output — thirty seconds of the client’s time, not a meeting.

Sample 2: Design

Job post
UI/UX designer for a SaaS onboarding redesign. Users sign up fine but around 60% drop off before they connect a data source, and we think the flow is confusing. Figma file exists. Deliverables: wireframes plus hi-fi screens for the new flow.

At 146 words:

Proposal
Hi Daniel, A 60% drop at the connect-your-data step is usually not a visual problem. It is that the step asks for commitment before the product has shown anything worth committing to — people will not hand over database credentials to a screen they have not seen do anything yet. I redesigned onboarding for an analytics tool with the same drop-off shape. We moved the integration step to after a dashboard pre-filled with demo data, and cut the first screen from eleven fields to three. Completion went from 38% to 64% over about six weeks, measured in their own funnel rather than my estimate. Before I draw anything I would want to know where people actually stop — the connector picker, or the credentials screen after it. If you can share that step-by-step breakdown, I will come back with two directions instead of one. Best, Maya

Why it works: the client proposed a cause (“we think the flow is confusing”) and asked for a deliverable. A weak proposal agrees and quotes for wireframes. This one reframes the problem as sequencing rather than clarity, which is a more interesting answer and makes the client want the call. It also refuses to start designing before seeing the funnel — scoping discipline a client recognises, because the last designer probably did start drawing.

Sample 3: Writing

Job post
Writer needed for our B2B fintech blog. 4 posts per month, around 1,500 words each, SEO-focused. You must genuinely understand payments — we have been burned by generalists. Please send relevant samples.

At 138 words:

Proposal
Hi Alex, "Burned by generalists" is the part of this I would want to fix first. Most fintech blog writing explains what interchange is. What your buyers actually search is whether they can avoid paying it, and which processor's pricing quietly hides it. I wrote a 14-post series for a payments platform on exactly that gap — chargeback representment, interchange-plus versus blended pricing, PCI scope for embedded checkouts. Two of those still sit in the top three for their terms eighteen months later, and the series is what their sales team sends after a first call. The interchange piece is the closest to your audience; it is the first link in my portfolio. One question before I quote: do you want these to rank, or to close deals already in motion? The structure is quite different. Best, Tom

Why it works: it quotes the client’s own words back (“burned by generalists”) and then demonstrates the difference rather than claiming it, by naming three subjects a generalist would not reach for. It handles “send samples” in one line by pointing at the single most relevant piece instead of attaching five. The closing question is the strongest move on the page: it is a real strategic fork, and answering it costs the client nothing.

Sample 4: Virtual assistant

Job post
Virtual assistant, 20 hrs/week — inbox management, calendar, and travel booking for a busy founder. Must overlap 9-5 EST. Experience with Gmail, Google Calendar and Notion required. Long-term role for the right person.

At 148 words:

Proposal
Hi Rachel, The part of this that usually goes wrong is not the inbox or the calendar. It is the handover — knowing which emails you want to see yourself and which I should simply handle, without checking with you every time and recreating the work. I ran inbox and calendar for a founder with this exact setup for fourteen months. In the first week we built a one-page rule sheet in Notion: who always gets through, what gets archived unread, what I answer in her voice and what I draft for her to approve. By the second month she was seeing about twelve emails a day instead of two hundred. I am in Manila, so 9-5 EST is my evening shift and I have held it for two years. Would it help if I drafted that rule sheet from one week of your inbox first? Best, Liza

Why it works: VA postings attract the highest volume of identical proposals on Upwork, almost all of which restate the job description back as a list of skills. This one names a failure mode the client has probably lived through, which is the fastest way to sound like someone who has done the job rather than someone who wants it. The availability line answers the hard constraint directly instead of hoping it goes unnoticed, and the close offers work up front.

What all four have in common

The four jobs have nothing to do with each other, and the letters are nearly identical in shape. That shape is the thing worth copying.

PartWhat it doesLength
GreetingThe client's first name when the post gives it. Never "Dear Sir/Madam" and never "Dear Hiring Manager".A few words
HookNames the real problem, often correcting the one the client assumed. Impossible to paste into another posting.One or two sentences
ProofOne project, with a number or a specific technical detail. Never a list of skills — the profile already carries those.Two to four sentences
CloseA specific, low-effort next step: one question, or an offer to do a small piece of the work first.One or two sentences
Sign-off"Best," and a first name. Nothing after it.Two lines

All four land between 138 and 148 words. That is not a coincidence — it is about what fits before a client has to decide whether to keep reading. Below roughly 110 words there is no room for real evidence; above about 170, the proof gets skimmed past.

The lines to delete

None of the samples contain any of the following, and that is most of what separates them from the other forty proposals on the job.

  • “I hope this message finds you well.” It spends the one line the client is guaranteed to read on nothing.
  • “I have 8+ years of experience in…” Your profile says this, directly above the letter.
  • A skills list. Same reason. A list of technologies proves exposure, not judgement; one project proves both.
  • “I would love the opportunity to work with you.” Everyone who applied would. It carries no information.
  • “Please check my portfolio.” Point at one specific piece and say why it is the relevant one, as the writing sample does.

Adapting one to your own job

Work in this order, which is the order a client reads in rather than the order that feels natural to write in.

  1. Read the post for the one detail that says what is actually wrong. It is usually a symptom the client has misdiagnosed, or a constraint buried in the last line.
  2. Write the hook about that detail only. If the sentence would survive being pasted into another posting, it is not a hook yet.
  3. Pick the single closest thing you have done. Closest beats most impressive, every time.
  4. Give one number from it — a before and after, a duration, a measured result. If you have no number, give a concrete technical detail instead.
  5. End with a question only this client can answer, or an offer to do the first small piece before they commit.

The slow step is the fourth one, because it means remembering which of your past contracts is actually relevant. That is the step Nibwright automates: it reads your real Upwork work history and client feedback through the official API, and drafts the letter from the contract that actually matches the posting — then you edit it and press Submit yourself.

Questions

Can I copy these Upwork proposal samples?

Copy the structure, not the words. These are written examples rather than letters taken from real accounts, but a proposal pasted unchanged still reads as generic, because the whole effect depends on the hook referring to one specific job post. Use the five-part shape — greeting, hook, proof, close, sign-off — and rewrite every sentence against the posting in front of you.

How long should an Upwork proposal be?

Between 110 and 170 words. All four samples here land between 138 and 148. Shorter than about 110 words leaves no room for a real piece of evidence; longer than about 170 and the client skims past the proof, which is the part that was doing the work.

What should the first line of an Upwork proposal say?

It should name the client's actual problem in their own terms, and often correct the cause they assumed. The client already sees your name, rate and job success next to the letter, so the opening does not need to introduce you. Its only job is to prove you read this specific post. A first line that could be pasted into a different proposal has failed.

Do I need a different proposal for every Upwork job?

The hook and the proof have to change every time; the structure does not. In practice that is two or three sentences rewritten per job, not a letter from scratch — pick the past project closest to this posting, and open on the detail in the post that tells you what is really wrong.

Should I attach a portfolio or samples to an Upwork proposal?

Point at one piece and say why it is the relevant one, rather than attaching several and asking the client to choose. A client reviewing thirty applicants will not open a folder. Naming the single closest piece and the reason it matches does the sorting for them, which is itself evidence of how you work.

See a real draft for a real Upwork posting before you pay anything.

Connect Upwork with read-only OAuth, save a search, and the first proposals arrive on the free 100 starter credits. You still press Submit yourself.

Start free

Related