How to Write a Proposal That Wins Freelance Work
A winning freelance proposal has four parts: a specific reference to the client's project (not a generic greeting), a brief explanation of how you would approach the work, a link to one relevant portfolio project, and a question that invites a reply. Keep it under 150 words for Upwork and under 200 words for emails. The biggest mistake is sending generic copy-paste proposals. Clients can spot them instantly, and they delete them.
Why Most Freelance Proposals Fail
A typical Upwork job posting receives 20-50 proposals within the first 24 hours. A well-posted job might get 100+. The client is not reading all of them. They scan the first few lines and decide within 5 seconds whether to keep reading or move on.
Here is what 90% of proposals look like:
"Dear Hiring Manager, I am an experienced web developer with expertise in React, Node.js, Angular, Vue, Python, Django, PHP, Laravel, and many other technologies. I have read your job description and I am confident I can deliver excellent results within your timeline and budget. Please check my profile for more details."
This tells the client nothing specific. It reads like a template. It does not reference their project. It does not show understanding of their problem. It does not include proof of relevant work. It gets deleted.
The proposals that win share three qualities: they are specific, they are brief, and they show the freelancer already understands the problem.
The Upwork Proposal Template
Here is a structure that consistently wins jobs. Adapt it for each specific posting.
Line 1: Reference something specific from the job posting.
"I noticed you need a booking system for your salon that integrates with WhatsApp notifications."
Lines 2-3: Explain your approach briefly.
"I would build this with React for the frontend and Supabase for the backend. For WhatsApp integration, I would use the WhatsApp Business API to send automatic appointment reminders. I built a similar booking system for a Nairobi-based clinic last month."
Line 4: Include one relevant portfolio link.
"Here is the clinic booking system I built: [live URL]. The flow is similar to what you described."
Line 5: End with a question.
"Would it help if I showed you a quick wireframe of how the booking page would look for your salon?"
Total: about 100 words. Specific, relevant, and actionable.
What makes this work:
- The client sees you read their posting (line 1).
- You demonstrate technical understanding (lines 2-3).
- You provide proof of relevant experience (line 4).
- You make it easy for them to respond (line 5).
The Cold Email Template for Direct Clients
Cold emails to potential clients follow a slightly different structure because the client has not posted a job. You are identifying a need they may not have expressed.
Subject line: Keep it short and specific. "Quick question about [Business Name]'s website" works better than "Web Development Services."
Paragraph 1: What you noticed.
"I was looking at [Business Name] online and noticed your website has not been updated in a while [or: you do not have a website yet]. Your competitors in [area] like [Competitor A] and [Competitor B] have professional sites that rank on Google and bring in customers."
Paragraph 2: What you can do.
"I build websites for businesses in [town]. Here is a recent example: [live URL]. I could build something similar for [Business Name] that works well on mobile and shows up in Google searches for [relevant search term]."
Paragraph 3: Low-pressure ask.
"Would you have 10 minutes for a quick call this week to discuss? No obligation."
Send 10-15 of these per week. Expect 1-2 responses per batch. Follow up once after 5 days if there is no reply. After that, move on.
The WhatsApp Pitch for Local Kenyan Clients
In Kenya, WhatsApp is often more effective than email for reaching small business owners. Many business owners check WhatsApp before they check email.
Template:
"Hi [Name], I hope you are well. My name is [Your Name], and I build websites for businesses in [town]. I noticed [Business Name] does not have a website yet, and I think a professional site could help you get more customers who search online. I recently built a site for [similar business]: [live URL]. I could do something like that for your business for around KES [price range]. Would you like to have a quick chat about it?"
Keep it to one message. Do not send multiple follow-ups on the same day. If they do not respond after 3-4 days, one gentle follow-up is fine. After that, leave it.
Getting phone numbers: Business phone numbers are usually on their Google listing, their Facebook page, or literally on the door of their shop. You are not cold-calling strangers. You are contacting a business through their publicly listed number about a service that would benefit them.
Proposal Mistakes That Cost You Jobs
Leading with your resume. "I have 5 years of experience in web development and have worked with 50+ clients..." The client does not care about your history. They care about their project. Lead with their problem, not your biography.
Listing every technology you know. "Expert in React, Angular, Vue, Svelte, Next.js, Nuxt.js, Gatsby, Node.js, Django, Flask, Laravel, PHP, Ruby on Rails..." This screams "generalist with no specialization." Mention only the technologies relevant to the specific project.
Using a template without customizing. Clients can tell. If your proposal could apply to any job posting without changing a word, it is too generic.
Writing too much. A 500-word proposal is not impressive. It is a burden. The client has 30 more to read. Get to the point.
Not including portfolio links. Words are claims. Links are proof. A proposal without a relevant portfolio link is asking the client to take your word for it. Why would they, when the next applicant includes a live demo?
Spelling and grammar errors. If your proposal has typos, clients assume your code will have bugs. Proofread everything.
Quoting before understanding the scope. "I can do this for $300." Based on what? You do not know the full scope yet. Instead: "Based on what you described, this would likely fall in the $300-500 range. I would need to clarify a few details to give a precise quote."
Following Up Without Being Annoying
Not every proposal gets an immediate response. Many clients are busy, evaluating multiple options, or waiting for budget approval. A well-timed follow-up can revive a conversation.
For Upwork: If the client viewed your proposal but did not respond, wait 3-4 days and send a brief follow-up message (if the job is still open). "Hi [Name], just wanted to check if you had any questions about my proposal for the [project]. Happy to clarify anything." One follow-up only.
For emails: Follow up after 5-7 days. Reference your original email briefly. "Hi [Name], I sent a message last week about building a website for [Business Name]. Just wanted to make sure it did not end up in spam. Would love to chat if you are interested." One follow-up only.
For WhatsApp: Follow up after 3-4 days. One message. If no response after the follow-up, the answer is no. Move on.
Persistence is good. Pestering is bad. One follow-up shows professionalism. Three follow-ups show desperation. Know the difference.
Key Takeaways
- ✓Generic proposals get deleted. Every winning proposal references something specific from the job posting or the client's business.
- ✓Keep proposals short: 100-150 words for Upwork, 150-200 words for emails. Clients read dozens of proposals. Respect their time.
- ✓Always include one relevant portfolio link. Not your entire portfolio. The single project most similar to what the client needs.
- ✓End with a question. "Would it be helpful to see a quick mockup?" invites a conversation instead of a yes/no decision.
- ✓Your proposal quality matters more than your price. A $30/hour developer with a great proposal beats a $15/hour developer with a generic one.
Frequently Asked Questions
- How long should an Upwork proposal be?
- Under 150 words. Ideally around 100 words. Clients scan proposals quickly and skip long ones. Your proposal should have four parts: a specific reference to their project, your approach, a relevant portfolio link, and a question. That is it.
- Should I include my price in the proposal?
- On Upwork, yes, because the platform requires you to set a bid amount. In cold emails, give a range rather than a fixed price ("typically KES 25,000-40,000 for a project like this") because you have not scoped the work yet. A range sets expectations without locking you in.
- How many proposals should I send per day?
- Quality beats quantity. Three to five well-customized proposals per day will outperform 20 generic ones. Each proposal should take 10-15 minutes to research and write. If you are spending less than that, you are probably not customizing enough.
- What if I do not have a portfolio project similar to what the client needs?
- Build one quickly. If a client needs an e-commerce site and your portfolio has no e-commerce projects, spend a weekend building a small demo store. Deploy it. Now you have a relevant link to include. The project does not need to be production-quality. It needs to show the client you understand the domain.
Ready to build real-world apps?
Join the McTaba Labs full-stack marathon (4 months full-time · 6 months part-time). Learn M-Pesa, USSD, and WhatsApp engineering while shipping 8 production apps.
Apply to the McTaba Marathon