Skip to content

Every 15 minutes

Draft answers to RFP questionnaires

When an RFP arrives by email, answers are drafted from your company details and saved as a Gmail reply for you to check.

Runs
Every 15 minutes
Apps
Gmail, Slack
AI
Yes, uses the built-in AI allowance
Access
Gmail gmail.modify; Slack chat:write

Send this to your assistant

Create a ClickRuntime automation: when an email arrives with 'RFP' in the subject and an attachment, draft an answer to each question using our company details, save it as a Gmail draft reply, and tell #sales in Slack.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

Responding to a request for proposal, or a customer security questionnaire sent as an attachment, eats days. A sales engineer receives a 60-question document, hunts through old answers for the same questions and copies them into a new file. The deadline is two weeks away, so nothing starts until the last minute, and the early part of the window is wasted.

Every 15 minutes the inbox is checked for matching emails with an attachment. The questions are extracted, ClickRuntime's built-in AI drafts an answer to each, and a draft reply is saved in Gmail. A Slack message tells the team the draft is ready, so someone can review it that same day.

Sales and pre-sales teams, security and compliance leads, and consultancies that respond to many RFPs benefit most. It also suits any team that handles customer questionnaires often.

What you get out of it

  • Deadlines are met with room to spare

    Having every question answered in draft form on day one leaves the remaining time for review and refinement, instead of a frantic rush in the final 48 hours. Reviewers are also less stressed and less error-prone with time in hand.

  • Experts review instead of retyping

    A subject matter expert corrects an existing answer in minutes, which is much faster than writing from a blank page, so their limited availability covers more of the document. Their expertise is applied to accuracy instead of typing.

  • The team knows immediately

    The Slack note tells everyone an RFP arrived and who has the draft, so the start of the response is coordinated and nobody finds out from the customer's reminder. Starting together avoids last-minute surprises for everyone involved.

  • More bids can be pursued

    Cutting the effort of each response means a small team can reply to opportunities it would previously have skipped, which widens the sales pipeline. More proposals mean more chances of winning new customers.

  • Nothing goes out unchecked

    The reply is saved as a draft, not sent, so a person must read and approve the answers before they reach the prospect, which matters where accuracy is contractual. The responsibility for accuracy stays with your own people.

How it works

What happens, step by step

  1. Every 15 minutes, ClickRuntime checks Gmail for emails with "RFP" in the subject and an attachment, skipping any it has already handled.

  2. It reads the attached questionnaire and pulls out the questions.

  3. AI drafts an answer to each question using the company details you provide.

  4. The answers are saved as a draft reply in Gmail for you to check, and a note in your #sales Slack channel tells you it is ready.

Before it runs live

  • Connect Google through your own Google app (a one-time, 10-minute setup), so it works with your own Gmail
  • Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)

What you get

RunsEvery 15 minutes
Draft answers to RFP questionnairestoday, 9:00Succeeded
Slack · #sales📄 Drafted RFP answers for RFP: Northwind IT support 2027 from procurement@northwind.example. Check Gmail drafts.

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • Your own rules

    Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.

  • Any number of apps

    One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.

  • AI where it helps

    Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.

  • On a schedule or on each event

    Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.

Changes you can ask for

  • Act only on the items that match your own rules, and skip the rest
  • Change what the AI looks for, or how it writes the result
  • Add another app, for example also send it to Google Sheets
  • Combine it with other Gmail and Slack steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
draft_answers_to_rfp_emails.pyexample
import base64
from email.message import EmailMessage
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, state, ai, notify, report_fetched

COMPANY = "Acme Ltd: 40 staff, ISO 27001 certified, UK and EU data hosting, 24/7 support, founded 2015."

@on_trigger
def run(event):
    gmail = build("gmail", "v1", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False)
    seen = set(state.get("seen") or [])
    msgs = gmail.users().messages().list(userId="me", q="subject:RFP has:attachment newer_than:2d").execute().get("messages", [])
    new = [m for m in msgs if m["id"] not in seen]
    report_fetched(len(new))
    if not new:
        return {"new": 0}
    for m in new:
        msg = gmail.users().messages().get(userId="me", id=m["id"]).execute()
        h = {x["name"]: x["value"] for x in msg["payload"]["headers"]}
        part = next(p for p in msg["payload"].get("parts", []) if p.get("filename", "").endswith((".txt", ".md", ".csv")))
        att = gmail.users().messages().attachments().get(userId="me", messageId=m["id"], id=part["body"]["attachmentId"]).execute()
        questions = base64.urlsafe_b64decode(att["data"]).decode(errors="ignore")[:15000]
        answers = ai.generate(questions, max_output_tokens=2000,
                              system=f"Answer each RFP question in turn, numbered, using only these facts: {COMPANY}").text
        draft = EmailMessage()
        draft["To"], draft["Subject"] = h["From"], "Re: " + h["Subject"]
        draft.set_content(answers)
        gmail.users().drafts().create(userId="me", body={"message": {
            "raw": base64.urlsafe_b64encode(draft.as_bytes()).decode(), "threadId": msg["threadId"]}}).execute()
        notify.slack(f"📄 Drafted RFP answers for {h['Subject']} from {h['From']}. Check Gmail drafts.", channel="#sales")
    state.set("seen", [m["id"] for m in msgs])
    return {"drafted": len(new)}

FAQ

Common questions

What file formats can it read?
It reads the attachment and extracts questions from common text-based documents. Heavily formatted spreadsheets or scanned images may extract less cleanly, so check the draft against the original before sending. Spreadsheets are the usual trouble spot.
How does it know an email is an RFP?
It matches emails by criteria you provide, such as subject words like RFP or questionnaire, specific sender domains or a label. Only matching emails are processed, and others are ignored. Others are never touched, so the work stays on the emails that really are questionnaires.
Will the AI use my company's earlier answers?
It can if you give it that material, such as a document of approved answers, through your AI assistant. Otherwise it writes from the question alone, so reviewers should check facts and product claims. The reviewer should still confirm facts.
What permissions does it need?
Gmail gmail.modify; Slack chat:write. Nothing else in your accounts is used.
Does it need AI?
Yes. It uses ClickRuntime's built-in AI, so you don't need an OpenAI or Anthropic key. Every plan includes a monthly AI allowance.
How many runs does it use?
One run each time it checks. Checks that find nothing new and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Draft answers to RFP questionnaires” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.