Note: Learn more about PDF.co Fill PDF Form API
PDF Contract Generator with Automated Approval: Complete Form-to-Decision Workflow
What You'll Have When Done
A fully automated system that monitors your Google Sheets for new contract requests, auto-fills professional PDF contract forms, sends them to clients for review, captures their approval decisions through interactive email forms, and notifies you of the final outcome all within 24 hours.
Prerequisites
Before you begin, make sure you have:
- A PDF.co API Key (Get yours here)
- SMTP credentials configured in N8N
- Google Sheets OAuth2 credentials configured in N8N
- An N8N instance (cloud or self-hosted)
- A Google Sheet with columns for contract information
- A PDF contract template uploaded to PDF.co with fillable form fields
Quick Start Options
Option A: I Want It Working Now
- Import this workflow template → Download JSON File
- Connect your Google Sheets account in N8N
- Add your PDF.co API key and upload your PDF contract template
- Configure your SMTP email credentials
- Set up your Google Sheet with the required columns
- Test with a sample contract request
- Activate and let it run
Option B: I Want to Build It Step-by-Step
Follow the 4-step guide below to create the automation from scratch.
What This Automation Does (Overview)
- Monitors your Google Sheet for new contract requests
- Auto-fills PDF contract forms with client data using PDF.co
- Sends professional emails with contract links and approval forms
- Captures client decisions through interactive email responses
- Notifies you immediately when contracts are approved, rejected, or need changes
Real Example: Client data entered in Google Sheets → PDF contract auto-generated → Email sent to client → Client clicks "Approve" → You receive instant notification with decision and signature. View Samples Here.
Step-by-Step Build Guide
Step 1: Monitor for New Contract Requests
Node: Google Sheets Trigger
Settings:
- Document From List: Select your contract information spreadsheet
- Sheet: Choose the sheet containing contract requests (usually Sheet1)
- Trigger On: Row Added
What This Does: Automatically detects when a new contract request is added to your spreadsheet and starts the PDF generation and approval process.
Success Looks Like: The trigger activates immediately when a new row is added, capturing all contract information for processing.
Step 2: Generate PDF Contract Form
Node: PDF.co API → Fill a PDF Form
Settings:
- URL: Upload your PDF contract template to PDF.co Files, then copy the `
filetoken://
` link - Form Fields Mapping (Use the PDF Inspector tool to easily identify the field names, pages and more in your PDF):
- Proposal Date:
{{ $json.Date }}
- Client Name:
{{ $json['Client Name'] }}
- Description:
{{ $json['Service Description'] }}
- Timeline:
{{ $json.Timeline }}
- Amount:
{{ $json.Amount }}
- Proposal Date:
- Advanced Options → Expiration: 1440 minutes (24-hour expiration requires a Business 2 or higher subscription level)
What This Does: Takes your PDF contract template and automatically fills in all the form fields with data from your Google Sheet, creating a personalized contract for each client.
Success Looks Like: PDF.co returns a secure URL to the completed contract form that's ready for client review.
Step 3: Send Contract for Approval
Node: Send and Wait for Response
Settings:
- From Email: your-business@email.com
- To Email: Use client email from your sheet
- Subject:
Contract Approval Required - {{ $('Google Sheets Trigger').item.json['Client Name'] }}
- Message: Professional HTML email template with:
- Personal greeting with client name
- Download link to the PDF contract
- Clear instructions for approval
- 24-hour expiration notice
- Response Type: Custom Form
- Form Fields:
- Approval Decision (Dropdown)
- Approved Contract
- Rejected Contract
- Requested Change
- Comment (if any) (Text Area)
- Electronic Signature (Text Input - Required)
- Approval Decision (Dropdown)
- Wait Time Limit: 24 hours
What This Does: Sends a beautifully formatted email to the client with their personalized contract and an embedded approval form. The workflow pauses until the client responds.
Success Looks Like: Client receives a professional email with their contract and can view it, then submit their approval decision through the embedded form.
Step 4: Send Decision Notification
Node: HTTP Request → PDF.co Send Email
Settings:
- Method:
POST
- URL:
https://api.pdf.co/v1/email/send
- Headers:
- Content-Type:
application/json
- x-api-key:
[Your PDF.co API Key]
- Content-Type:
- JSON Body:
{
"url": "{{ $('PDFco Api').item.json.url }}",
"from": "Your Business <your@email.com>",
"to": "You <your-notifications@email.com>",
"subject": "{{ $json.data['Approval Decision'] }} - {{ $('Google Sheets Trigger').item.json['Client Name'] }}",
"bodyHtml": "
<h3>Contract Decision Received</h3>
<p><strong>Client:</strong> {{ $('Google Sheets Trigger').item.json['Client Name'] }}</p>
<p><strong>Decision:</strong> {{ $json.data['Approval Decision'] }}</p>
<p><strong>Comment:</strong> {{ $json.data['Comment (if any)'] }}</p>
<p><strong>Electronic Signature:</strong> {{ $json.data['Electronic Signature'] }}</p>
<p><strong>Contract:</strong> <a href='{{ $('PDFco Api').item.json.url }}'>View Original Contract</a></p>
",
"smtpserver": "smtp.gmail.com",
"smtpport": "587",
"smtpusername": "your@gmail.com",
"smtppassword": "[Your Gmail App Password]"
}
What This Does: Immediately sends you a detailed notification email when the client makes their decision, including their choice, comments, electronic signature, and the contract attached.
Success Looks Like: You receive an instant email notification with the client's decision, allowing you to take immediate next steps based on their response.
Important: For Google-hosted emails, use Gmail App Passwords for SMTP authentication. Learn how to create them here.
Congrats! You've created a sophisticated contract approval system that automates the entire process from request to decision.
Built something cool with this workflow? Share it with us @pdfdotco
Related Tutorials



