Skip to content
article

How I price on Upwork after 7 years: hourly, fixed, and the number I never go below

From $8 an hour in 2017 to $45 now. The formulas, the proposals, and the clients I say no to.

Oluwatobi Adeyemi@tobi_freelance

June 28, 2026 · 3 min read

My first Upwork job in 2017 was $8 an hour fixing a WordPress contact form. Today I charge $45 an hour for Laravel and React, and fixed projects are priced from the same number. Here is how I think about it. Numbers are mine, from Lagos, Top Rated Plus. Your market may be different.

1. Pick a floor and never go below it

My floor is $35 an hour. If a job cannot pay that, I do not apply. The floor comes from simple math: what I need per month to live, support my family and save, divided by the hours I can realistically bill. Not the hours I work. The hours I bill. Mine is about 100 a month. Proposals, calls, invoices, learning: none of that is billable.

2. Hourly for unclear work, fixed for clear work

  • "Fix our checkout bug" on a codebase I have never seen: hourly. Nobody knows how deep the hole is.
  • "Build this admin panel with these 6 screens, here are the designs": fixed.

3. My fixed price formula

Estimate hours honestly. Multiply by 1.6. Multiply by my rate. That 1.6 is not greed, it is the meetings, the "small change", the deployment that breaks because their server is from 2015. After 7 years, my real hours divided by my estimate is around 1.5. The extra 0.1 is my rent.

4. Milestones or nothing

Never start a fixed job without a funded milestone. Never deliver all the source code before the last milestone is released. Break big projects into milestones of 1 to 2 weeks. If the client refuses milestones, that is your answer about the client.

5. Connects are money, spend them like money

Every proposal costs Connects, and Connects cost real dollars. I only apply to jobs where:

  • The client has a verified payment method
  • The client has hired before, and their reviews of freelancers are not all angry
  • The description has real details. "Need app like Uber, simple" is not a job, it is a trap

6. The first line of the proposal is the whole proposal

Nobody reads past two lines. My first line answers their problem using their own words. "Your checkout fails on mobile Safari after the coupon step, I have fixed this exact bug in two Laravel shops." Then one line of proof. Then a question. No "Dear Sir, I have read your job description carefully".

7. Raise your rate on new clients first

Every 6 months I add $5 for new clients. Old clients get a polite email with one month notice. Most stay. The ones that leave were already the ones paying late.

8. What I see in my pocket

After the platform fee, withdrawal and the Payoneer rate, I see roughly 85 to 87 percent of what I invoice. Price for that, not for the number on the contract.

Na so. If you are starting, you will start low. That is normal. Just do not stay low because you are scared to ask. Ask, my brother. The worst they can say is no.

Written by

Oluwatobi Adeyemi

Upwork Top Rated Plus since 2019. Laravel, React, a bit of everything clients pay for. Lagos. I have been paid in USD, GBP, crypto and once in "exposure". Freelance Files is where we talk money.

Get the best of #freelance_files weekly

One email each Monday with the most useful posts. No spam; unsubscribe in one click.

Comments

11

Sign in to join the conversation.

Sign in to comment
Ayesha Siddiqui@laravel_ayesha#9 in Freelance Files
The 1.6 multiplier, yes yes. Mine is 1.5 and I still lose money on Gulf clients because "small change" has a different meaning there. Kindly also tell people: put revisions count in the contract
0 net votes
Oluwatobi Adeyemi@tobi_freelance#1 in Freelance Files
"Two rounds of revisions included, after that hourly." Thank you Ayesha, I forgot to add it. That one line has saved me more than any certificate
2 net votes
Bayu Setiawan@bayu_laravel#8 in Freelance Files
Good post. But $45 for Laravel is too high for the SEA market I think. Many clients from Australia compare with Indonesian rates, $20-25 is the normal for the case of mid level here
1 net votes
Oluwatobi Adeyemi@tobi_freelance#1 in Freelance Files
I hear you Bayu. But I do not price against Indonesia or Nigeria, I price against the problem. When their checkout is down, they are not comparing countries
0 net votes
Bayu Setiawan@bayu_laravel#8 in Freelance Files
Hmm that is fair for urgent bugs. For long projects the comparison still happens, but ok, I will try +$5 on new clients like you say. If I starve I blame you wkwkwk
1 net votes
Martín Ferraro@tincho_go#2 in Freelance Files
from Buenos Aires the floor thing is key. here everyone undercharges because "in pesos it is a lot". in pesos everything is a lot, che, that is the problem
3 net votes
Jo Brennan@jo_ships3 rep in Freelance Files
client side again: i always shortlist the proposal that names my actual problem in line 1. the "Dear Sir" ones go straight to archive. point 6 is real
1 net votes
Jessica Tan@nomad_jess2 rep in Freelance Files
Billable hours vs worked hours is the lesson I wish someone told me at 24. Grabe, I was calculating with 160 hours and wondering why I was always broke
2 net votes
Sofía Ramírez@sofi_dev_mx2 rep in Freelance Files
esto es oro. guardado. the "need app like uber, simple" part me mató 😂
0 net votes
Thiago Valadares@thiago_pj1 rep in Freelance Files
In Brazil we do the same math for PJ contracts, plus taxes and no 13th salary, so the multiplier is even bigger. People forget they are paying their own vacation
0 net votes
Camilo Restrepo@camilo_parce#3 in Freelance Files
parce this is the best pricing post I have read in a while. The milestone rule saved me with a client last year, no milestone no code, pues. Gracias Tobi
2 net votes