The intake call goes well. The client is ready to move forward. Then you hang up and realize you still have to write the engagement letter before they change their mind.
Most solo attorneys have a template. But the template still needs the client's name, the right matter description, the correct fee structure, and the appropriate scope language filled in accurately. Get the scope too broad and you have taken on obligations you did not intend. Get the fees wrong and you have a billing dispute before the matter even starts.
The engagement letter is not a formality. It is the contract. I built a pipeline that drafts a complete, ready-to-review engagement letter from basic intake information in under 30 seconds.
The pipeline
One API call. Fill in the client name, matter type, and fee terms, and a single structured prompt produces the full letter — all 10 required sections — with [ATTORNEY REVIEW REQUIRED] flags on anything missing or ambiguous.
This one is deliberately different from the intake pipeline and contract date extractor, both of which use two chained calls. The reason is the input. Those tools start from unstructured text — messy phone notes, a raw contract — where the first pass needs to surface and organize facts before anything can be structured. The engagement letter starts from a form: the data is already clean when it hits the prompt. Adding an intermediate extraction pass would just slow things down without improving the output.
The rule is simple: use multiple steps when your input is unstructured and needs interpretation. Use a single well-crafted prompt when your data is already organized.
The prompt
The prompt specifies all 10 sections by number so nothing gets omitted. Without explicit enumeration, the model will sometimes merge sections or skip client obligations entirely.
The [ATTORNEY REVIEW REQUIRED] marker convention is the same pattern used in the demand letter generator. Every missing or ambiguous term gets flagged inline in the letter, and a separate missing_info array surfaces them as a list. You see exactly what needs attention before you sign and send.
The JSON return format makes the output easy to use in any interface: letter gives you the full text, missing_info gives you the review checklist.
Try it on your own intake
Fill in the client details below. The pipeline generates a complete engagement letter in 15–25 seconds.
Works for any matter type: personal injury, business disputes, employment, estate planning, immigration, family law, or general representation.
What to do with the output
The letter is a first draft, not a final document. Once you have it:
- Check every
[ATTORNEY REVIEW REQUIRED]marker. These are the gaps. Fill them in before sending. - Verify the scope paragraph. Make sure it matches exactly what you discussed on the call.
- Confirm the fee terms are accurate. The model writes what you give it. If you typed $350/hr and meant $375/hr, the letter says $350.
- Add your letterhead and signature block. The letter uses
[ATTORNEY NAME]and[FIRM NAME]as placeholders. - Have the client sign and return a copy before beginning any substantive work.
The pipeline saves the drafting. The attorney still owns the review.
Copy the prompt
The prompt is copyable above. To use it in your own setup: replace {client_info} with a structured text block containing the client name, matter type, fee arrangement, and matter description. The prompt returns a JSON object with letter and missing_info fields.
If you are building this into a script or app, it is a single API call with response_format: json_object — the simplest pattern in the series.