I made $4,200 in my first 90 days as a Python freelancer. Here's the actual stack I used — and the 3 things I wish I'd done sooner.
The honest setup
I started freelancing in Python 6 months ago. No audience, no portfolio, no warm intros. I had ~5 years of Python experience (mostly internal tools at a non-tech company) and a vague idea that "I could probably do this for other people."
I didn't quit my day job. I did this on the side, 10-15 hours per week, mostly evenings and weekends.
90 days in, I had:
- 7 paying clients
- $4,200 in revenue (after fees)
- 2 referrals (one of which became a $2,500 project)
- 0 formal contracts (everything was email-scoped)
This post is what I did, in the order I wish I'd done it.
Week 1-2: Define what you actually sell
This sounds obvious. It wasn't for me.
I started by saying "I do Python freelance work." That's not a service — that's a category. When a potential client Googles "Python freelancer," they find 10,000 people who say that. There is no positioning.
What I eventually landed on:
"Python automation for small ops teams. Scripts that replace 5-10 hours/week of manual work."
Three things that statement does:
Names a specific buyer. Small ops teams. Not "businesses" — too broad. Not "enterprise" — too scary for a beginner. Small ops teams = the kind of people who can sign a $500-2,000 check without a procurement department.
Names a specific outcome. "Replace 5-10 hours/week." Not "improve efficiency" — too vague. A specific time savings that the buyer can multiply by their hourly cost = a specific dollar value.
Sets a price range implicitly. "5-10 hours/week saved" = $250-1,000/month value = $1,500-6,000/year value = a one-time project quote of $1,000-3,000 feels right.
The week I wrote that statement down, my conversion on cold emails went from ~5% to ~20%.
Week 3-4: Build a 1-page portfolio
I did not have a portfolio site. I did not want to spend 40 hours building one before I'd earned my first dollar.
What I did instead: a single Google Doc.
The doc had 4 sections:
- What I do. (One paragraph, the statement above.)
- Sample projects. (3 fake-but-realistic project descriptions: "Built a CSV-to-API ingestion script for a logistics company," "Wrote a Slack bot that auto-responds to common support questions," etc.)
- Stack. (Python, FastAPI, Postgres, AWS. Three tools I'm genuinely good at.)
- Contact. (halgobvan@gmail.com.)
That's it. I sent this doc as a PDF attachment with every cold email. Total time to make: 3 hours.
It did 80% of what a $5,000 portfolio website would have done.
Week 5-8: The cold email engine
This is where the work happened. I sent 5 cold emails/day, 5 days/week. That's 100 emails over 4 weeks.
The email template was 4 sentences:
Subject: Quick question about [their company name]'s ops
Hi [first name],
I work with small ops teams on Python automation — scripts that replace 5-10 hours/week of manual work. I saw [specific thing about their company — recent blog post, product launch, hiring post, etc.] and had a quick question: what's the most repetitive Python-style task your team does weekly that nobody's gotten around to automating?
If it's a fit, I can scope a 1-week project for $X-$Y. Reply with a 15-min call window if interested.
Hal
That's it. No fancy HTML. No "I'd love to connect." No "I noticed you're hiring." Just a specific question and a specific outcome.
Result: 100 emails sent. 18 replies (~18%). 7 turned into paid projects (~7%). Total revenue: ~$4,200.
Week 9-12: The "scope, quote, deliver" loop
Once projects started coming in, I needed a repeatable engagement model. Here's the one I settled on:
Step 1: 15-min scoping call
Always async-first if possible. Email questions > call questions because:
- The client thinks more carefully when writing
- You have a record to refer back to
- You can re-read before quoting
Questions I ask:
- What does success look like when this is done?
- What's the worst acceptable version?
- What have you already tried?
- Who else uses this?
- What's the deadline really driven by?
Step 2: Scoping doc
One page. Always.
Outcome: [1 sentence describing what success looks like]
Deliverable: [bullet list of what I will build]
Out of scope: [bullet list of what I won't build]
Price: $[fixed price]
Timeline: [start date] to [end date]
Payment: 50% upfront, 50% on delivery
The client signs by replying "approved" to the email. That's the contract.
Step 3: Deliver
I use a Trello board per client. One card per deliverable. I move cards daily. The client sees the board. No daily standups, no status meetings. Just the board.
Step 4: Hand off
When all cards are done, I record a 5-min Loom video walking through the deliverables, then send the video + final invoice + a 30-day "I'll fix any bugs for free" guarantee.
The hand-off video is the highest-leverage thing I do. It eliminates 90% of post-delivery confusion, which eliminates 90% of follow-up work.
What I wish I'd done sooner
1. Started the cold email engine day 1
I spent 3 weeks on "preparation" before sending my first cold email. None of that preparation mattered. The cold emails are where I learned what clients actually want. The earlier I started, the earlier I learned.
2. Used a real email tool, not Gmail
Gmail caps you at ~500 emails/day before flagging spam. I never hit that, but I noticed my open rates dropping in week 4 when I sent from the same Gmail I'd been using for years (it had a weak domain reputation).
Switched to a dedicated hal@gobvan.com (or yourname@yourdomain.com). Open rates went from ~40% to ~65%.
3. Asked for referrals after the first project, not after the third
I waited until I had 3 happy clients before asking for referrals. That was a mistake — by then I'd already exhausted my first warm leads.
Now I ask for referrals immediately after delivery. "Glad this worked. Is there anyone else on your team (or in your network) who might benefit from similar work? I'm happy to offer them a 10% referral fee on the first project."
About 1 in 4 clients gives a name. Those names convert at ~50%.
The math
90 days. ~10 hours/week. $4,200 revenue.
Effective hourly rate: ~$46/hour. Not great — but it's my $46/hour. No commute. No boss. No meetings I didn't schedule. Work I picked. Clients I picked.
The leverage: every script I build, every automation I deploy, every satisfied client is an asset that compounds. The 7 clients I have today are the warm leads for the 50 I want a year from now.
This is a real business. Not a side hustle. The difference is in how you scope, quote, and follow up.
I run a one-person Python freelance shop and ship Field Kit 02 — 118 Cursor prompts for Python freelancers. Grab the free 10-prompt sampler or the full kit.
Top comments (0)