🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Google Sheets + Gmail: offer letters sent and filed

Lisa Granqvist Partner Workflow Automation Expert

Your hiring process shouldn’t fall apart because one candidate forgot to upload an ID or someone can’t find “OfferLetter_Final_FINAL(2).pdf”. But that’s exactly how it goes: lots of tabs, Slack pings, and “just following up” emails that eat up your day.

HR managers feel this when they’re juggling five open roles. Recruiters run into it when they’re moving fast and still need an audit trail. Even an ops lead in a small business ends up doing offer letter automation by hand, one candidate at a time.

This workflow turns Google Sheets into a reliable pipeline: it checks document status, sends reminders, generates a polished PDF offer letter, emails it, stores it in Drive, and updates the sheet so everyone stays aligned.

How This Automation Works

Here’s the complete workflow you’ll be setting up:

n8n Workflow Template: Google Sheets + Gmail: offer letters sent and filed

Why This Matters: Offer Letters Get Stuck in the Middle

Offer letters are “simple” until they aren’t. One candidate is missing a document, another needs a salary line updated, and the hiring manager wants confirmation the offer actually went out. Meanwhile the source of truth (your spreadsheet) is out of date because updating it is the last step, and the last step never happens when you’re busy. So you re-check the same rows, resend the same emails, and hunt through Drive for the right PDF. It’s not hard work. It’s draining work.

The friction compounds. Here’s where things usually break down.

  • You spend about 20 minutes per candidate chasing missing documents through email threads.
  • Offer letters get generated inconsistently, which means more revisions and slower approvals.
  • Files end up scattered across inboxes and Drive folders, so nobody trusts where the final PDF lives.
  • Status in Google Sheets lags behind reality, and that creates awkward “did we send this?” moments.

What You’ll Build: A Self-Updating Offer Letter Pipeline

This workflow watches your candidate tracker in Google Sheets and reacts the moment a row is updated. First, it checks the candidate’s document status. If anything is missing, it automatically sends a reminder email through Gmail, updates the sheet to a “Documents_Pending” state, and stops there (no accidental offer letters sent early). Once documents are complete, it generates a customized offer letter using the candidate data (role, salary, contact info), converts the HTML into a clean PDF via an HTTP request to a conversion service, and retrieves the final file. Then it emails the PDF to the candidate, alerts the hiring manager in Slack, uploads the letter to Google Drive, and writes the Drive link back into the same Google Sheet. The sheet stays accurate without you babysitting it.

The workflow starts with a Sheets update and a document check. It branches into either “send reminder + mark pending” or “generate PDF + deliver + file.” Finally, it records the link and marks the candidate as Offer_Sent so your pipeline stays trustworthy.

What You’re Building

Expected Results

Say you hire 5 people this month. Manually, each offer typically takes about 20 minutes to verify docs, 15 minutes to format/export a PDF, 10 minutes to email, and another 10 minutes to file it and update the sheet, so roughly 1 hour per hire. With this workflow, you update one row in Google Sheets and the rest runs in the background: a minute to trigger, a short wait for PDF conversion, then it’s delivered, stored, and logged automatically. That’s about 5 hours back in a month, plus fewer mistakes.

Before You Start

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets for candidate tracker and statuses.
  • Gmail to send reminders and offer letters.
  • ConvertAPI credentials (get the API key from your ConvertAPI dashboard)

Skill level: Beginner. You’ll connect accounts and edit a few template fields, but you won’t be writing a bunch of code.

Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).

Step by Step

A candidate row changes in Google Sheets. The workflow monitors your tracker, so when you update a candidate’s document status or move them forward, it kicks off immediately.

Document status gets reviewed. An “If” check looks for missing onboarding documents and decides what happens next, so you don’t accidentally generate an offer letter for someone who isn’t ready.

Either a reminder goes out or an offer letter is created. If documents are pending, Gmail sends a clear reminder and the sheet is updated to Documents_Pending. If documents are complete, a code step composes the offer letter content, then an HTTP request sends it to the PDF conversion service and retrieves the finished file.

The PDF is delivered, stored, and logged. The candidate receives the offer letter via Gmail, the hiring manager gets a Slack notification, Google Drive stores the PDF, and Google Sheets records the Drive link and marks the candidate as Offer_Sent.

You can easily modify the email copy and the offer letter template to match your brand voice based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Google Sheets Trigger

This workflow starts when a row changes in your onboarding spreadsheet.

  1. Add and open Sheets Change Watcher.
  2. Set Document to [YOUR_ID] and Sheet Name to Sheet1 (gid=0).
  3. Set Poll Times to Every Minute.
  4. Credential Required: Connect your Google Sheets credentials.

Step 2: Connect Google Sheets for Status Routing

The workflow checks document status and routes candidates into the correct path.

  1. Open Review Document Status and set the condition to Document Status equals Pending using {{ $json["Document Status"] }}.
  2. Ensure the false branch of Review Document Status goes to Compose Offer Letter for approved candidates.
  3. Credential Required: Connect your Google Sheets credentials for downstream nodes Update Pending Status, Record Letter Link, and Mark Offer Sent.

⚠️ Common Pitfall: If the Document Status column uses a different value than Pending, the routing won’t work. Match the exact text in your sheet.

Step 3: Set Up Offer Letter Generation & PDF Conversion

Approved candidates trigger HTML generation and PDF conversion.

  1. Open Compose Offer Letter and review the embedded HTML template in JavaScript Code. Update company details like Example Company, [YOUR_EMAIL], and [YOUR_PHONE] as needed.
  2. In PDF Conversion Call, set URL to https://v2.convertapi.com/convert/html/to/pdf and Method to POST.
  3. Keep Body Parameters with StoreFile=true and File mapped to data.
  4. Set the Authorization header to [CONFIGURE_YOUR_TOKEN] in PDF Conversion Call.
  5. In Parse PDF Output, set Operation to fromJson.
  6. In Retrieve PDF File, set URL to {{ $json.data.Files[0].Url }}.

⚠️ Common Pitfall: If ConvertAPI credentials are missing or invalid, PDF Conversion Call will return an error and no PDF will be generated.

Step 4: Configure Output Actions (Email, Drive, Slack, Sheets)

After the PDF is retrieved, the workflow sends notifications, stores the file, and updates the spreadsheet. Retrieve PDF File outputs to Upload Letter to Drive and Email Offer Letter and Notify Manager Channel in parallel.

  1. In Email Offer Letter, set Send To to {{ $('Review Document Status').item.json.Email }} and confirm the subject 🎉 Congratulations! Your Offer Letter from Example Company.
  2. Credential Required: Connect your Gmail credentials for Email Offer Letter and Dispatch Missing Docs Email.
  3. In Upload Letter to Drive, set Name to {{ $('Review Document Status').item.json['Candidate ID'] }} and choose your Folder ID as [YOUR_ID].
  4. Credential Required: Connect your Google Drive credentials.
  5. In Notify Manager Channel, set Channel to [YOUR_ID] and keep the message template using {{ $('Review Document Status').item.json.Name }} and {{ $('Review Document Status').item.json.Profession }}.
  6. Credential Required: Connect your Slack credentials.
  7. In Record Letter Link, set Candidate ID to {{ $('Review Document Status').item.json['Candidate ID'] }} and Offer Letter Link to {{ $json.webViewLink }}.
  8. In Mark Offer Sent, set Candidate Status to Offer_Sent and match on Candidate ID.

⚠️ Common Pitfall: If the Drive upload fails, Record Letter Link will not receive webViewLink and the sheet update will be incomplete.

Step 5: Configure the Missing Documents Email Path

When documents are still pending, the workflow sends a reminder and updates the sheet.

  1. Open Dispatch Missing Docs Email and verify Send To uses {{ $json.Email }}.
  2. Keep the Subject as Reminder:{{ $json.Name }} Please submit your pending documents to proceed with your offer and verify the pending documents section uses {{ $json['Pending Documents'] }}.
  3. In Update Pending Status, set Candidate Status to Documents_Pending and match on Candidate ID using {{ $('Review Document Status').item.json["Candidate ID"] }}.
  4. Credential Required: Connect your Google Sheets credentials.

Step 6: Test and Activate Your Workflow

Validate both the pending-docs and approved-docs paths before going live.

  1. Manually run the workflow with a test row where Document Status is Pending and confirm Dispatch Missing Docs Email sends and Update Pending Status updates the sheet.
  2. Run again with Document Status not equal to Pending and confirm Compose Offer LetterPDF Conversion CallParse PDF OutputRetrieve PDF File completes, then check the parallel actions (Drive upload, candidate email, and Slack notification).
  3. Check that Record Letter Link and Mark Offer Sent update the candidate’s row in your sheet.
  4. When everything works, toggle the workflow to Active for production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Troubleshooting Tips

  • Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Credentials screen and confirm the Google account still has access to the spreadsheet.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.

Quick Answers

What’s the setup time for this offer letter automation automation?

About 30 minutes if your accounts are already connected.

Is coding required for this offer letter automation?

No. You’ll mostly copy in an offer letter template and map fields from Google Sheets.

Is n8n free to use for this offer letter automation workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in ConvertAPI usage (typically a small per-file cost, depending on your plan).

Where can I host n8n to run this automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I modify this offer letter automation workflow for different use cases?

Yes, and you should. You can replace Gmail with a shared inbox setup (still Gmail, just different credentials), tweak the “Compose Offer Letter” code step to match your contract language, and change the Google Drive folder destination in the upload step. Some teams also add a manager approval checkpoint by inserting a Slack message and only sending the offer after a reaction or a manual status change in Google Sheets.

Why is my Google Sheets connection failing in this workflow?

Usually it’s an expired Google authorization or the sheet moved to a Drive location your connected account can’t access. Reconnect Google Sheets in n8n, then re-select the spreadsheet in the nodes that reference it. Also check that the trigger still points to the right document and worksheet tab, because renaming tabs can break lookups.

What volume can this offer letter automation workflow process?

For most small teams, dozens of candidates per week is fine.

Is this offer letter automation automation better than using Zapier or Make?

For this workflow, n8n has a few advantages: more complex logic with branching at no extra cost, a self-hosting option for unlimited executions, and easier handling of “generate file then fetch file” patterns through HTTP requests. Zapier or Make can still do parts of this, but file conversion plus reliable status updates tends to get fiddly. If you only need “send an email when a row changes,” they may be quicker. If you want the full lifecycle with reminders, PDF generation, Drive filing, and a clean audit trail, n8n is usually the smoother build. Talk to an automation expert if you’re not sure which fits.

Once this is running, your spreadsheet stops being a wish and starts being the record. The workflow handles the repetitive follow-ups and filing so you can focus on the actual hiring decisions.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal