Skip to main content

Cover letter troubleshooting: rates, formatting, length & variables

Fix wrong rates, irrelevant references, em-dashes/asterisks, the 5,000-character limit, and how variables work.

Written by Ivan Nedelkovski

Short answer

Most cover-letter problems come down to two things: the AI is missing a fact (so it guesses), or it needs a clearer instruction. Both are quick to fix — and always re-check your changes in Test Mode.


Wrong or missing rate, pricing, or links

If the AI states the wrong hourly rate, makes one up, or skips a pricing question, it's because that fact isn't in its context. Put your rate, pricing and portfolio links into your Knowledge Base so it uses the real numbers instead of guessing.


It references the wrong work, or "forces" a connection

By default, Lancer only cites a case study when there's a concrete, specific overlap with the job — the same industry, the same underlying problem, or a clearly overlapping tech stack. A shared generality like "both use AI" or "both involve automation" isn't enough on its own to trigger a citation. Referencing zero case studies is a valid, expected outcome when nothing genuinely fits — instead of forcing a connection, the AI will say something like "I haven't done X specifically, but I have experience with Y" and talk about its approach instead.

If a connection still feels forced, it's almost always a Knowledge Base problem rather than a prompt one: keep each case study's industry, tools, and problem specific, so there's a genuine best match for the AI to rank first and cite. You can reinforce this further with a line in your cover letter template or Cover Letter Instructions, like "only reference a case study if it's a close match; otherwise talk about my approach instead."


It changes or adds text you didn't ask for

Only the parts of your template wrapped in {{ }} are rewritten by the AI on every proposal — everything else goes out exactly as you typed it. If a line you want kept word-for-word (an opener, a standing claim about yourself, your closer) keeps coming out different, check whether it's sitting inside a {{ }} span. Take it out of the braces and type it as plain text instead, and it will stop changing.

Reserve {{ }} for the handful of things that genuinely have to vary per job: the client's name, a one-line paraphrase of their ask, which case study fits, or a job-specific question. A template built mostly from placeholders is unpredictable by design, since each one is a fresh AI decision on every send — a template that's mostly your own plain text with a few targeted placeholders is far more consistent.


Em-dashes, asterisks, and weird formatting

To stop em-dashes, add an explicit instruction: "never use em-dashes." For bold, Upwork doesn't render Markdown **asterisks** — ask for Unicode bold instead, or just drop the emphasis. Small, explicit formatting instructions in the template work best.


Controlling generated letter length

On jobs with no screening questions, Lancer targets 80–120 words by default. On jobs with screening questions, the AI writes to fit the job without a fixed limit. To adjust the length on either path, add an explicit instruction in your campaign's Cover Letter Instructions field. Examples:

  • "Keep the cover letter to 150 words or fewer."

  • "Write no more than 100 words."

  • "Aim for 3 short paragraphs maximum."

The instruction takes effect on the next bid — re-check in Test Mode to confirm the output matches your preference.


A "bid failed" on a long proposal — the 5,000-character limit

Upwork rejects cover letters over 5,000 characters, which can surface as a failed bid. Keep your template tight — trim sections and cut filler so the final letter stays comfortably under the limit.


Dynamic variables

Templates support dynamic instructions (the {{ }} segments) so each proposal adapts to the job — but the rest of the template should stay as your own plain text, not more placeholders. For how they work, see The Cover Letter & Question Handling.

Did this answer your question?