Blog · · 5 min read
How to remind customers about documents pending signature with n8n and AI
Step-by-step guide to having n8n check your pending-signature sheet in Google Sheets every morning, spot contracts or forms waiting too long and use AI to draft a polite reminder in Gmail.

You sent the contract, proposal or onboarding form… and it still isn't signed. Days go by, you don't want to nag and, by the time you follow up, the deal has gone cold or the customer has signed elsewhere.
In this guide you'll build an n8n workflow that checks a pending-signature log in Google Sheets every morning, spots documents waiting too long and uses AI to draft a polite reminder in Gmail. You review the draft and send it.
This is not the same as a contract renewal reminder: there the contract is already signed and the end date is approaching; here the document still hasn't been signed and you want the customer to finish it without sounding pushy.
What you're going to build
A five-step workflow that runs on its own every day:
- Daily trigger: a Schedule Trigger node runs at 09:25.
- Read pending documents: a Google Sheets node reads your "Pending signatures" sheet.
- Wait filter: a Code node keeps only documents sent X days ago that have not yet hit the reminder cap.
- AI reminder: a Basic LLM Chain writes a warm email that recalls the document, shares the signing link and offers help.
- Draft and log: Gmail creates the draft and Google Sheets records the stage in
reminder_sent.
What you need
- An n8n instance (cloud or installed free on your computer).
- Google Sheets and Gmail connected in n8n.
- An OpenAI or other AI API key, with a monthly spend limit set in the provider's dashboard.
- A "Pending signatures" sheet with columns:
customer,email,document,sent_on(YYYY-MM-DD),sign_link(optional),notesandreminder_sent(empty or1/2).
You can fill the sheet by hand when you send a DocuSign, HelloSign, Adobe Sign or PDF email, or with another n8n flow that logs those sends. This guide assumes the rows are already in Sheets.
Step 1: prepare the pending-signatures sheet
Keep sent_on in a consistent date format and only leave rows that are truly unsigned (not completed or cancelled). Put your e-sign link or PDF URL in sign_link when you have one; leave it blank otherwise so the prompt won't invent one. Use notes for useful preferences ("prefers WhatsApp", "reviewing with lawyer", "needs to sign before Friday").
Step 2: trigger and read
Add a daily Schedule Trigger at 09:25 (check that the workflow timezone in Settings is correct for you). Connect it to Google Sheets → Get Row(s) on your "Pending signatures" sheet.
Step 3: filter documents that still need a reminder
Add a Code node (Run Once for All Items) with this code:
const today = new Date(); today.setHours(0, 0, 0, 0);
const out = [];
for (const i of $input.all()) {
const c = i.json;
if (!c.email || !c.sent_on) continue;
const days = Math.round((today - new Date(c.sent_on)) / 86400000);
if (days < 2 || days > 30) continue; // wait at least 2 days; ignore > 30
const already = Number(c.reminder_sent || 0);
let stage = null;
if (already < 1 && days >= 2) stage = 1; // first reminder after 2+ days
else if (already === 1 && days >= 7) stage = 2; // second reminder after 7+ days
if (!stage || stage > 2) continue;
out.push({ json: { ...c, days, stage } });
}
return out;
Each document gets at most two reminders. If nothing is pending, the workflow ends without calling the AI.
Step 4: draft the reminder with AI
Add a Basic LLM Chain with a small, cheap model (for example gpt-4o-mini) and this prompt:
You work at [BUSINESS NAME]. Write a short email to
{{ $json.customer }} reminding them that the document "{{ $json.document }}"
sent on {{ $json.sent_on }} ({{ $json.days }} days ago) is still awaiting signature.
Signing link (include it if present; if empty, do not invent one): {{ $json.sign_link }}
Notes: {{ $json.notes }}
- Warm, professional tone, max 6 sentences.
- Recall the document without blame or pressure; offer help if they have questions.
- If sign_link exists, invite them to sign in one click; otherwise ask them to reply to this email.
- Do not invent legal deadlines, discounts or links that are not in the data.
Return only the email body.
The facts come from your sheet; the AI only sets the tone. If your e-sign tool already sends the first automatic email, use this flow only for a polite second reminder.
Step 5: create the draft and mark the reminder
Connect a Gmail → Create Draft node with recipient {{ $('Code').item.json.email }}, subject Pending signature: {{ $('Code').item.json.document }} and the AI text as the body. Drafts let you review before sending, just like contract renewal reminders or unpaid invoice reminders.
Then a Google Sheets → Update Row node that looks up by email + sent_on and writes the stage into reminder_sent.
Once you trust the wording, you can switch Create Draft to Send.
How to test it
- Add a test row with your own email and a
sent_onof 3 days ago, withreminder_sentempty. - Run the workflow by hand and check that a draft appears and
reminder_sentbecomes1. - Run it again: no new draft should be created.
- Change
sent_onto 8 days ago (leavingreminder_sentat1) and confirm the second reminder is prepared.
Cost and good practices
- Cost: each reminder costs well under a tenth of a cent on the AI API. Set a monthly spend limit in the provider's dashboard.
- Don't nag: at most ~2 reminders per document; if they don't reply, log it and hand them to a human call or sales follow-up.
- Don't invent signing links: if
sign_linkis empty, the prompt asks them to reply to the email. - Catch failures: add an error workflow so you know if Gmail or Sheets fails, as in n8n error handling.
- Combine it with contract renewal reminders once the signed document has an end date, and with quote follow-up if the signature closes a commercial proposal.
Start with ready-made templates
If you'd rather skip the basic n8n setup, download the WhatsApp agent for free or check out the AgentKiosk pack: 8 ready-to-import agents in English and Spanish, each with workflow, prompt and guide, ready to combine with these pending-signature reminders.


