Overview
Lancer finds the jobs and submits the proposals. You handle as much of the middle as you want.
Every Lancer campaign runs in one of three modes:
- Standard (
automatic, the default): Lancer picks the jobs, writes the proposals, and submits them. This is how Lancer works out of the box. - External proposal (
external_proposal): Lancer finds the jobs and its suitability AI still decides which ones are worth bidding on. Only the suitable ones reach you, and you write the proposal: the cover letter, the screening answers, anything extra. Lancer submits it. - External decision & proposal (
external): Lancer finds the jobs and submits the proposals, but you handle everything in between: deciding which jobs are worth bidding on, writing the cover letter, answering the screening questions.
The two external modes share the same plumbing: the same job.new webhooks, the same API key, the same Trigger button, the same Activity log. The only difference is who decides. Mode is set per campaign, so you can run all three side by side in the same organization, each with its own filters and its own logic.
| Standard | External proposal | External decision & proposal | |
|---|---|---|---|
| Finds jobs | Lancer (campaign filters) | Lancer (campaign filters) | Lancer (campaign filters) |
| Decides if a job is worth bidding on | Lancer's suitability AI | Lancer's suitability AI | Your system |
| Writes the proposal | Lancer's proposal AI | Your system | Your system |
| Submits on Upwork | Lancer | Lancer | Lancer |
| What reaches your webhook | Nothing (org notifications only) | Only jobs rated suitable, with the rating and reason | Every job that passes the filters, unscored |
| Go-live requirements | Bidder account, knowledge base, cover letter template | Bidder account, saved filters, active job.new webhook, knowledge base | Bidder account, saved filters, active job.new webhook |
Only the middle changes: External proposal moves the writing to you, External decision & proposal moves the deciding too. Nothing reaches Upwork unless /bid is called.
How it works
Both external modes are the same simple loop with three parts:
- Lancer sends you the job. Lancer POSTs it to your webhook URL as a
job.newevent. The payload contains everything about the job and the client, plus ready-madebidUrlandrejectUrllinks. Which jobs get sent depends on the mode:- In External decision & proposal, every job that passes the campaign's saved filters is sent, unscored.
- In External proposal, only the jobs Lancer's suitability AI rated suitable are sent, and the lead carries
suitabilityRatingandsuitabilityReason: why Lancer thinks the job fits you, which is useful context for your writer.
- You decide and write. Your system looks at the job and either passes on it or produces a proposal. What happens here is entirely up to you. In External proposal mode the deciding has already been done, so most integrations go straight to writing.
- You call back, Lancer submits. POST your cover letter and answers to
bidUrl, or a rejection torejectUrl, using your API key. Lancer submits the proposal on Upwork through your connected account and confirms with abid_completewebhook.
If you never call back for a job, nothing happens: the lead is simply skipped. There is no timeout and no fallback bid. You are always in control.
Which one should I pick?
Pick External proposal when you like Lancer's screening but want your own writer: your own prompts and voice, per-client intro videos, custom work samples, a proposal page you host yourself. You keep tuning the knowledge base and Lancer keeps deciding; you only replace the writing. It is also the smaller integration, since every job.new you receive is one you should answer.
Pick External decision & proposal when you want your own qualification logic: a scoring model trained on your own history, rules Lancer's suitability AI cannot express, or a human-in-the-loop review before anything is written. You receive every filter match and decide from the raw data.
You can switch a campaign between the two at any time. It keeps running as long as it already meets the new mode's requirements (External proposal needs a knowledge base profile); otherwise the switch pauses it until you finish the setup.
The step in between is the whole point
Once job.new hits your server, Lancer is out of the loop until you call back. That middle step is yours, with full creative freedom:
- No-code workflows in n8n, Zapier, or Make. A webhook trigger plus an HTTP request node is a complete integration. Two sample n8n workflows are linked from the Quickstart.
- Your own prompts and models. Draft proposals (and, in External decision & proposal, score suitability) with whatever AI provider and system prompts you like.
- Personalized extras. Intro videos generated per client (ElevenLabs, HeyGen, Loom), custom work samples built from what the job post mentions, enrichment from your own data.
- Plain code. A small script on any server you host.
Nothing about the in-between step is dictated by Lancer.
What changes when you flip a campaign to an external mode
Effects shared by both external modes:
- Your campaign webhooks become the delivery channel. Slack and Discord "new job" alerts are turned off for this campaign; other campaigns are unaffected.
- Every lead card in the campaign Feed gets a Trigger button that re-sends
job.newfor that job, which makes testing easy. - If the campaign was active and you are coming from Standard, switching pauses it, so nothing streams before your integration is ready. Switching between the two external modes keeps the campaign running as long as it already meets the new mode's requirements: the integration already exists, only the amount Lancer decides changes. If it does not (for example an External decision & proposal campaign with no knowledge base profile moving to External proposal), the switch pauses it until the setup is complete.
- Go-live needs at least one saved filter and one active
job.newwebhook. The cover letter template is not required, because you provide the content.
Effects specific to External proposal:
- Lancer's suitability AI keeps running. Unsuitable jobs never reach your endpoint; they stay in the Feed with the AI's rating and reasoning, exactly as in Standard mode.
- The knowledge base profile is still required, because the suitability AI reads it. Keep tuning it; it is still the biggest lever over which jobs get through.
- Test mode stays available for suitability, so you can check Lancer's decisions on real jobs before wiring up your writer.
Effects specific to External decision & proposal:
- Lancer's suitability AI is skipped for this campaign. Every job that passes the filters goes to your webhook instead.
- Your campaign filters become the only gate. Jobs that do not match never reach your endpoint, so the filters are your volume control.
- Neither a knowledge base profile nor a cover letter template is required.
- Test mode is unavailable, because there is no Lancer decision to test.
Switching back to Standard reverses everything: webhooks stop firing, Lancer takes back over, alerts resume. Your webhooks stay configured but inactive, so you can flip back and forth safely.
What you need
- A Lancer organization on a paid plan, with a campaign and a connected Upwork account.
- For External proposal, a knowledge base profile on the campaign (the same one Standard mode uses).
- An API key (Settings, then Integrations, API keys tab).
- Somewhere to receive a webhook: an n8n/Zapier/Make workflow or any HTTPS endpoint.
Ready? The Quickstart walks through the whole setup in about 15 minutes.