Lancer Hit \$10K/mo: Vibe-Coded with Cursor (Case Study)

October 7, 2026 · 1163 words

FactValue
What it isAI agent that filters Upwork jobs and sends personalized proposals automatically
BuilderDevelopers: Ivan and a co-founder, who previously ran a software development agency
AI toolCursor with Claude Opus 4.5 (current workflow); OpenRouter for the product's LLM calls
StackTypeScript, Next.js, Node.js, GCP + Firestore, Hetzner, Elasticsearch, OpenRouter, Tolt
Time to launchMVP over three months
Revenue$10K/month by month three or four after launch (self-reported, Starter Story)
SourceStarter Story, March 2026

Lancer Upwork AI agent illustration: a robot agent at a laptop scanning freelance job cards and sending tailored proposals, with a rising monthly revenue chart

Lancer is an AI agent for Upwork, the freelance marketplace. It reads new job posts, decides which ones fit you, and sends a tailored proposal within minutes. Its founder, Ivan, told Starter Story the product reached $10,000 a month in its third or fourth month after launch.

This one is a useful contrast to the "I can't code" stories. Ivan's team came from a software agency. Their workflow today is Cursor (an AI code editor) running Claude Opus 4.5. As he put it:

"We barely touch any actual programming language." — Ivan, via Starter Story

The problem: Upwork rewards speed

On Upwork, freelancers pay "connects" (Upwork's bidding credits) to send proposals. Good jobs get flooded fast. If you apply hours late, you're buried.

Agencies feel this most. Someone has to watch the feed, judge fit, and write a custom cover letter every time. Ivan pitches Lancer as a way to turn Upwork into an automated sales channel that saves users more than 10 hours a week.

Ivan knew this pain from the inside. He previously ran a software development agency that, he says, did over seven figures in revenue.

How it was built

The team built the MVP (minimum viable product, the smallest version that works) over three months, using the stack they already knew from agency work:

  • TypeScript on the front end and back end, with Next.js and Node.js.
  • GCP (Google Cloud) and Firestore (Google's hosted document database), plus Hetzner servers.
  • Elasticsearch (a search engine for large amounts of text, useful for matching jobs).
  • OpenRouter, a single API that routes requests to many LLMs (large language models).
  • Tolt for tracking affiliate referrals.

One nuance. The Cursor-plus-Opus quote describes how they work now. The interview doesn't say how much of the first MVP was AI-written. What's clear is that experienced developers now let the AI type while they steer.

Ivan also admits one regret, and it isn't about the MVP. He and his co-founder debated going all in on AI products back when OpenAI first released its API, but chose to keep growing the agency. He now thinks that was probably the wrong approach. In other words: if you want to build products, start sooner.

How it makes money

Lancer's pricing has changed since the interview. That's normal for a young product, and it's worth comparing.

At launch (per Starter Story):

PlanPrice
Pay-as-you-go$79 for 30 proposals, then $2 per extra proposal
Light$300 for 250 proposals, then $1.50 per extra
Unlimited$500/month (launch offer)

Now (pricing page, September 2026):

PlanPrice
Pay-Per-Lead$99/month, 15 leads per quarter, then $19 per lead; one Upwork account
Unlimited$333/month, unlimited conversations, multiple Upwork accounts, done-for-you setup, strategy call

Quarterly billing is "pay 2, get 1 free." No trial or refund terms are listed on the page.

The shift is the lesson. The old model charged per proposal sent. The new one charges per lead, meaning a client conversation. That ties price to the outcome the buyer cares about, not to the AI's activity.

The homepage also claims 400+ freelancers and agencies as users. That's the company's own number.

First users: friends, then "connectors"

How Lancer got its first users: a beta with agency-owner friends, then Upwork coaches as affiliates, then lifetime commissions on referred customers

Lancer ran zero paid ads, per the interview. The path:

  1. Beta with friends who own agencies. Ivan invited several agency-owner friends. They were the exact customer, so feedback was direct.
  2. Find the "connectors." Instead of chasing freelancers one by one, he went after Upwork coaches, people who already teach freelancers how to win work.
  3. Pay them well. Coaches earn a lifetime commission on customers they bring in: 30% as the interview transcript reads it, and 20% for a simple referral.

This is the smart part. Coaches already have the audience and the trust. An affiliate tool like Tolt makes the payouts automatic.

What to copy

  • Sell to a pain you've paid for yourself. An agency owner built a tool for agency owners.
  • Price on outcomes when you can. Moving from "per proposal" to "per lead" matches what buyers value.
  • Find the people who already own your audience. Coaches, newsletter writers and community leads can beat ads.
  • Start sooner than feels safe. The founder's own regret is waiting years to go all in on AI products.

If you vibe-code this

An agent like this stores users' profiles and campaign settings, and feeds untrusted text (job posts) into an LLM. Here are checks for this type of app. They are general, not findings about Lancer.

  1. Treat scraped text as hostile. A job post can hide instructions like "ignore your rules." That's prompt injection. See prompt injection for vibe coders.
  2. Scope every record to its owner. One user must never read another's campaigns or leads. See IDOR explained.
  3. Lock down Firestore rules. Default or test-mode rules can expose every document. See Firebase security rules.
  4. Cap LLM spend per user. Rate-limit generation so one account can't burn your OpenRouter budget. See API rate limiting.

Firestore rules that keep campaigns private to their owner:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /campaigns/{campaignId} {
      allow read, update, delete: if request.auth != null
        && request.auth.uid == resource.data.ownerId;
      allow create: if request.auth != null
        && request.auth.uid == request.resource.data.ownerId;
    }
  }
}

Building an AI agent that acts for your users? Email [email protected] for a security audit before launch.

Key takeaway

Lancer's $10K/month (self-reported) came from an old problem, not new code: agencies need Upwork leads fast. Experienced developers built it, now let Cursor and Opus do the typing, and grew it through coaches instead of ads.

More case studies: vibe-coded apps making money. Before you launch, read the vibe coding security guide.

Sources