For freelancers pitching on Upwork, Toptal, and beyond

You didn't become a freelancer
to spend your evenings writing pitches.

Four proposals a night on Upwork or Toptal is an hour at a keyboard — an hour you're not sleeping, not living, not doing the work you're actually good at. QuickPitch cuts it to seconds.

Launch price
$19.95
$9.95
One-time. No subscription. Yours to keep.
Get QuickPitch — $9.95 →

Works with Claude (~$0.01/proposal) or Gemini Flash (free tier). Your key, your data.

Tuesday. 10 PM. You open Upwork and sort by newest. Solid job — good fit for your 11 years in IT. Posted 47 minutes ago. There are already 14 proposals in.

You need to move. The client is still opening tabs. Early proposals get read first. Yours needs to be in while the job is still fresh — and it needs to be good, because a bad pitch is worse than no pitch. Each one costs Connects. That's real money on top of the time.

So you open ChatGPT. Paste the job description. The output looks familiar: "I have carefully reviewed your requirements and believe I am the ideal candidate." Nobody wrote that. A machine did, without knowing anything about you — and the client knows it before they finish the first line.

The problem isn't that you used AI. The problem is the AI knew nothing about you. It had the job. It didn't have your eleven years, your actual projects, the specific results you've delivered. Generic in, generic out.

So you go back to writing manually. Fifteen minutes. Fine for one job. But you have four tonight — and your family's in the next room, the evening's almost gone, and you still don't know if any of this will come back to anything.

Some nights there's nothing to pitch. Other nights there are six. You can't plan around it. The inconsistency is its own kind of tax.

That's not a writing problem. That's a system problem.

What actually works

The proposals that win aren't clever. They're specific. They answer what the client actually asked, using the actual background of the person applying.

Context + relevance. Not templates. Not hustle.

QuickPitch is a single HTML file. Upload your CV once — your real history, your actual projects, your specific skills. Paste a job description. Get a proposal in seconds that sounds like you wrote it, because the context is you.

Pitch fast enough to stay consistent. Pitch well enough to win.

How it works
Find a job
You spot it on Upwork
QuickPitch
Paste job → proposal in seconds
Edit & Send
You're in the queue
Total time from job post to proposal sent: under 2 minutes
What makes it different
Opens with the client's problem — not your credentials. Clients read dozens of proposals that start with "I have 10 years of experience." Yours won't.
Uses your real results. One specific outcome with numbers beats five general claims every time.
Asks a diagnostic question. The one thing that proves you actually read their post — and makes them want to reply.
Tone controls. Slide between casual and executive, 5th grade and graduate-level. Match any client, any platform.
Banned words list. Block buzzwords and phrases you hate. The AI avoids them in every proposal.
130–180 words. Short enough to read. Long enough to matter.
Runs on your own API key. Use Gemini Flash for free, or Claude Haiku at ~$0.01 per proposal. No subscription, no tokens to buy from us.
Launch price
$19.95
$9.95
One-time payment. Immediate access. No subscription ever.
Buy now — $9.95 →

By purchasing you agree to our Terms of Sale. 14-day right of withdrawal.

Your data stays yours. QuickPitch runs entirely in your browser. Your CV, your results, your API key — none of it touches our servers. The only data leaving your browser is the API call to Anthropic or Google — which you control with your own key.
*/ (function () { // Don't show if already a customer if (document.cookie.indexOf('qp_customer=1') !== -1) return; // Don't show twice in same session if (sessionStorage.getItem('qp_popup_shown')) return; var shown = false; function showPopup() { if (shown) return; shown = true; sessionStorage.setItem('qp_popup_shown', '1'); var overlay = document.createElement('div'); overlay.id = 'qp-popup-overlay'; overlay.style.cssText = [ 'position:fixed', 'inset:0', 'background:rgba(0,0,0,0.55)', 'display:flex', 'align-items:center', 'justify-content:center', 'z-index:9999', 'font-family:system-ui,sans-serif' ].join(';'); overlay.innerHTML = [ '
', '', '

Free download

', '

The 5-Minute Upwork Proposal Checklist

', '

7 steps to a proposal that sounds human — and wins. Free, no strings.

', '', '', '

', '
' ].join(''); document.body.appendChild(overlay); document.getElementById('qp-popup-close').onclick = function () { overlay.remove(); }; overlay.onclick = function (e) { if (e.target === overlay) overlay.remove(); }; document.getElementById('qp-popup-submit').onclick = function () { var email = document.getElementById('qp-popup-email').value.trim(); var msg = document.getElementById('qp-popup-msg'); if (!email || !email.includes('@')) { msg.textContent = 'Please enter a valid email.'; msg.style.color = '#c00'; return; } msg.textContent = 'Sending...'; msg.style.color = '#888'; // Subscribe to Listmonk list ID for QuickPitch leads fetch('https://n8n.usudu.com/webhook/qp-lead-capture', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: email, source: 'exit-popup' }) }) .then(function (r) { if (r.ok) { msg.textContent = 'Done! Check your inbox — the checklist is on its way.'; msg.style.color = '#1a7a1a'; document.getElementById('qp-popup-submit').disabled = true; } else { msg.textContent = 'Something went wrong. Try again.'; msg.style.color = '#c00'; } }) .catch(function () { msg.textContent = 'Something went wrong. Try again.'; msg.style.color = '#c00'; }); }; } // Trigger 1: 70% scroll depth window.addEventListener('scroll', function () { var scrollPct = (window.scrollY + window.innerHeight) / document.documentElement.scrollHeight; if (scrollPct >= 0.7) showPopup(); }, { passive: true }); // Trigger 2: Mouse exit intent (desktop only) document.addEventListener('mouseleave', function (e) { if (e.clientY <= 10) showPopup(); }); })();