Upwork is a marketplace, not a job board you browse for free. A client posts work or invites you. You spend Connects to send a proposal. If they hire you, the contract, the messages, and the payment all stay on Upwork. For a web developer, that loop is the whole product: profile, proposal, contract, delivery, payout.
This is for developers who want client work through Upwork. Skip it if your clients already come from referrals and you only want a local invoice. Upwork will not invent demand for a vague "full stack developer" profile.
What you are selling on the marketplace
Clients do not buy "web development." They buy an outcome they can describe in a job post: a landing page, a fix to a broken checkout, a small dashboard, a WordPress rescue. Your profile has to name one of those outcomes. A title that lists every framework you have touched gives the client nothing to hire.
The profile is public. The proposal is private and written for one job. The contract is the only place money moves. Mixing those up is how beginners write a life story in a proposal and still have an empty portfolio.
Before you bid, write one sentence you could put on an invoice: "Five-page marketing site in Next.js, two revision rounds, two weeks." If you cannot write that sentence, you are not ready to spend Connects. The profile guide is the next piece of work, not another hour of scrolling jobs.
From job post to a contract
A normal hire looks like this.
You find a job that matches the sentence on your invoice. Open only posts that name a deliverable and a budget, or that are willing to hear a budget from you.
You send a proposal. That spends Connects. The amount changes by job, so read the cost before you submit.
The client messages you, asks for a call, or sends an offer. A call is not a hire. An offer is.
You accept the offer only after the scope, price, and timeline are in the offer itself. Side promises in chat are easy to forget and hard to enforce.
You do the work inside the contract. Files, milestones, and the Work Diary for hourly jobs live there.
You submit the milestone or the week closes on hourly billing. The client approves, or the platform's review window ends. Then the payout can move to your withdrawal method.
Invites skip the public proposal, but they do not skip the contract. An invite with no offer is still a conversation.
Fixed price and hourly are different deals
Fixed price fits a landing page or a small site with a clear end. The client funds a milestone. You deliver against that milestone. Do not start the build on an unfunded milestone. The money is not in escrow until it is funded.
Hourly fits unclear work: bug hunts, ongoing edits, a retainer. Upwork's desktop tracker takes screenshots while the timer runs. If you work off the tracker, you are often outside payment protection for those hours. Turn the tracker on when you start, and stop it when you stop. Padding the diary with idle screenshots is a fast way to lose the client and the dispute.
Pick one mode per contract. A hybrid "I'll just track some of it" arrangement is where arguments start.
Where the fee and the wait come from
Upwork takes a freelancer service fee out of what the client pays you. The percentage is not a rumor you should copy from a blog. Open the fee explanation in your own account before you set a public rate. A rate that looks fine before the fee can be too low after it.
There is also a delay between client approval and money you can withdraw. That delay is part of the platform, not a sign the client vanished. Plan rent and tools around the payout schedule, not around the day you click Submit.
Payment protection is real only when you follow the contract type. Funded fixed-price milestones and properly tracked hourly time are the cases Upwork will even look at. A handshake in messages, a personal PayPal request, or hours you forgot to track are the cases you will lose.
What to ignore at the start
Boosted proposals, a paid membership, and a dozen Connects on a job that says "build an app like Uber" are optional ways to spend money early. None of them fix a profile that does not show a finished site.
Also ignore jobs that ask you to bid on a $50 full website, share a spec over Telegram, or "start today" before an offer exists. Those posts are cheap to write and expensive to answer.
You can apply as a new account. You cannot pretend you have client history you do not have. Use a personal project or a volunteer site as the portfolio piece, and say that is what it is. Fake agency screenshots get accounts closed.
Do this before the first proposal
Set the profile title, overview, and one portfolio item. Add a rate that still works after the fee. Connect a withdrawal method. Read one job all the way through and decide, in writing, whether it matches your invoice sentence.
Then send one proposal, not ten. If you cannot explain the job back to the client in the first four lines, you do not know the job well enough to bid. The proposal template is a separate step. Get the account path straight first, or every later guide is just a way to spend Connects faster.







