Opening Problem Statement
Meet Jim, a sales manager at a mid-sized tech company. Jim spends hours manually sifting through lengthy Request for Proposal (RFP) PDFs trying to identify all questions posed by potential clients. Each question needs a well-crafted response, but the process is tedious and error-prone—Jim often misses questions or duplicates effort. This manual workflow costs his company hundreds of wasted hours each quarter and slows down their ability to respond quickly, risking lost deals.
Jim needs a way to rapidly parse incoming RFP documents, extract all questions accurately, answer them with relevant company context, and neatly compile everything into a response document—all without lifting a finger. This is exactly the problem solved by the n8n workflow we’re about to explore.
What This Automation Does
This n8n automation transforms the cumbersome RFP response process into a hands-free operation. Here’s what happens step-by-step when the workflow runs:
- Receives an RFP PDF document via a secure webhook API, triggered by Jim’s team.
- Automatically extracts the full text from the PDF using the Extract from File node specialized for PDFs.
- Uses OpenAI-powered AI language models to identify and extract all supplier-directed questions from the RFP text.
- For each extracted question, loops individually and uses an OpenAI Assistant pre-loaded with company sales and marketing material to generate context-aware answers.
- Creates a brand new Google Docs document for every RFP response, adding metadata including title, requester email, and timestamp.
- Appends each question and its AI-generated answer sequentially into the Google Doc.
- Once all Q&A pairs are recorded, sends notification emails via Gmail and Slack messages to alert the sales team the RFP response is ready.
By automating these tasks, Jim’s company shrinks RFP response time from days to under an hour, freeing up valuable sales resources and ensuring consistency and completeness of replies.
Prerequisites ⚙️
- n8n account for building and running workflows
- Webhook node setup to receive POST requests with RFP PDFs (secured endpoint)
- Extract from File node configured to extract text from PDF documents
- OpenAI API credentials and an OpenAI Assistant trained with your company’s sales & marketing documents
- Google Docs OAuth2 credentials connected to your Google Workspace account for creating and updating docs
- Gmail OAuth2 credentials ready for sending notification emails
- Slack API token configured for posting notifications to a sales team channel
Step-by-Step Guide
1. Setting up a Secure Webhook to Receive RFP PDFs
Navigate to n8n editor and add the Webhook node. Configure it for HTTP Method POST and give it a unique path (e.g., 35e874df-2904-494e-a9f5-5a3f20f517f8). This node acts as your API endpoint where RFP documents are uploaded.
Use a tool like Postman to test the webhook. Construct a multipart/form-data POST with these fields:
id="RFP001" title="BlueChip Travel and StarBus Web Services" reply_to="[email protected]" data=@"your-rfp.pdf"
Check the webhook’s response to confirm it received the request properly.
Common Mistake: Forgetting to secure the webhook URL can expose sensitive RFP data publicly.
2. Extracting Text from the Uploaded PDF
Add Extract from File Node and set it to operation pdf. Connect it to the webhook node output. This node converts the PDF into raw text that downstream nodes can analyze.
Test by inspecting the output JSON to ensure clean text extraction.
3. Setting Variables for Naming and Reply-To
Use the Set node to define key variables such as the document title (pulled from webhook input), a unique filename incorporating date and title, and the reply-to email address for notifications.
Example expression:
{
"doc_title": "{{ $('Wait for Request').item.json.body.title }}",
"doc_filename": "{{ $('Wait for Request').item.json.body.id }} | {{ $('Wait for Request').item.json.body.title }} | {{ $now.format('yyyyMMddhhmmss') }}| RFP Response",
"reply_to": "{{ $('Wait for Request').item.json.body.reply_to }}"
}4. Creating a New Google Docs for the RFP Response
Add a Google Docs Node configured with OAuth2 for your Google workspace. Set the title to the created filename variable from the Set node.
Choose or create a dedicated folder in Google Drive to store all RFP response documents for easy organization.
Upon execution, a blank document is created where answers will be compiled.
5. Adding Metadata to the Response Document
Use another Google Docs node set to update operation. Insert structured metadata at the top of the document such as:
- Title
- Date generated
- Requester’s email
- Workflow execution link for audit
This contextualizes the response document for internal review and traceability.
6. Extracting Questions Using AI
Use the LLM Chat Model node powered by OpenAI to parse the extracted text. Pass in a prompt instructing the AI to “extract all supplier questions exactly as written in the RFP document.”
The output uses the Item List Output Parser to format the returned questions into an iterable list.
7. Looping Through Each Question to Generate Answers
Introduce a Split in Batches node to process each question individually, feeding them one by one into the AI Assistant.
The Answer Question with Context node uses the OpenAI Assistant (pre-loaded with your company’s documents) to generate focused, relevant answers.
The question and answer are then appended as formatted text into the response Google Docs using the Google Docs update node configured for insertion.
8. Sending Email and Slack Notifications When Complete
When all questions have been processed, a Gmail node sends an email to the original requester’s reply-to address with a message including the document title.
A Slack node follows to post an alert in a dedicated sales channel confirming the RFP is ready.
Ensure you update recipient addresses and Slack channel names in these nodes to your environment.
Customizations ✏️
- Change Notification Channels: In the Send Chat Notification Slack node, update the channelId field to notify the appropriate Slack channel in your workspace.
- Customize AI Assistant: Modify the OpenAI Assistant by uploading additional or updated company sales materials to improve answer relevance.
- Adjust Response Document Folder: In the Create new RFP Response Document Google Docs node, change the destination folder ID to match your preferred Google Drive folder hierarchy.
- Secure the Webhook: Implement authentication headers or IP whitelisting on the webhook node to prevent unauthorized uploads.
- Enhance Question Extraction Prompt: Refine the prompt in the Extract Questions From RFP node to handle specific RFP formats or industry jargon better.
Troubleshooting 🔧
Problem: “Webhook not receiving RFP documents or empty payloads”
Cause: Incorrect HTTP POST format or missing multipart/form-data encoding.
Solution: Verify your API call matches the example curl request with the correct headers and file parameter. Test with Postman.
Problem: “Google Docs node fails to create or update document”
Cause: OAuth credentials expired or insufficient permissions on Google Drive.
Solution: Refresh OAuth tokens, ensure your Google account has Drive editing rights, and the folder ID is correct.
Problem: “AI does not extract accurate questions or produces malformed results”
Cause: Prompt is too vague or input text from PDF is noisy.
Solution: Improve text extraction quality, clean PDF files if needed, and update the AI prompt to be more explicit about expected output.
Pre-Production Checklist ✅
- Confirm webhook URL is secured and accessible
- Verify extraction of text from a sample PDF renders clean, readable content
- Test OpenAI Assistant with mock questions to ensure relevant answers
- Check Google Docs creation and writing permissions with test documents
- Send test notification emails and Slack messages to confirm delivery
- Run end-to-end tests using actual RFP PDFs before going live
Deployment Guide
With all nodes configured, activate the workflow in n8n. Provide the webhook URL to your sales or operations team responsible for RFP submissions.
Monitor workflow executions regularly via n8n to catch any errors quickly.
Maintain OAuth credentials and OpenAI API tokens, renewing them before expiry to avoid downtime.
FAQs
Q: Can I use other AI models instead of OpenAI?
A: Yes, n8n supports various AI integrations. You’d need to swap the OpenAI nodes with your preferred provider, bearing in mind possible differences in prompts and output formats.
Q: Is my RFP data secure?
A: Security depends on your webhook setup and who has access to your n8n instance and Google Drive. Always secure webhooks and limit document sharing permissions.
Q: Can this handle multiple RFPs simultaneously?
A: Yes, the workflow splits questions for each RFP and processes them in batches, allowing scalable concurrent processing limited mainly by your n8n instance resources and API quotas.
Conclusion
By implementing this n8n workflow, Jim and his team have transformed a previously painstaking manual RFP response process into a streamlined, AI-driven system. They save dozens of hours per RFP and produce consistent, high-quality replies tailored with relevant company context. Most importantly, automation frees their sales team to focus on closing deals instead of document processing.
Next, consider expanding this workflow to include automated personalized follow-ups or integration with CRM systems to track RFP opportunities automatically. Happy automating!