Free reference · no sign-up

Google Forms Slack notification templates

Eight ready-to-copy templates for common Google-Forms-to-Slack workflows. Each ships a plain-text version, a Block Kit JSON payload, the workflow it's tuned for, and a suggested routing rule. Copy what fits, edit the values, ship.

:bell: Lead notification

When to use: Standard inbound lead from a pricing / contact / demo-request form. You want to wake the sales team up but not page anyone.

Routing hint: Route by source: IF Source contains "Pricing" → #pricing-leads, otherwise → #leads.

Plain-text Slack
:bell: *New lead*
<!here>
*Name:* Priya Mehta
*Email:* priya@acme.com
*Company:* Acme Co.
*Budget:* $50,000
*Source:* Pricing page
Channel: `#leads` · Open in CRM
Block Kit JSON
{
  "text": "New lead. Priya Mehta",
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": ":bell: *New lead*"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "<!here>\n*Name:* Priya Mehta\n*Email:* priya@acme.com\n*Company:* Acme Co.\n*Budget:* $50,000\n*Source:* Pricing page"
      }
    },
    {
      "type": "context",
      "elements": [
        {
          "type": "mrkdwn",
          "text": "Channel: `#leads` · Open in CRM"
        }
      ]
    }
  ]
}

:rotating_light: Support request

When to use: A help-desk or contact form for existing customers. Urgency-tagged; the on-call subteam should see it without spamming the whole channel.

Routing hint: Route by priority: IF Priority = "High" → #support-oncall, otherwise → #support.

Plain-text Slack
:rotating_light: *New support ticket*
<!subteam^S0123|support-oncall>
*From:* alex@customer.com
*Subject:* Cannot log in
*Priority:* High
*Plan:* Solo
*Details:* Reset email never arrives
Channel: `#support` · Pick up in Helpdesk
Block Kit JSON
{
  "text": "New support ticket. Cannot log in",
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": ":rotating_light: *New support ticket*"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "<!subteam^S0123|support-oncall>\n*From:* alex@customer.com\n*Subject:* Cannot log in\n*Priority:* High\n*Plan:* Solo\n*Details:* Reset email never arrives"
      }
    },
    {
      "type": "context",
      "elements": [
        {
          "type": "mrkdwn",
          "text": "Channel: `#support` · Pick up in Helpdesk"
        }
      ]
    }
  ]
}

:calendar: Booking request

When to use: Calendar-style slot booking, consult call, salon appointment, course slot. Notifies staff without paging anyone; the time has to be scannable.

Routing hint: Route by service: IF Service contains "Consult" → #consult-bookings, otherwise → #bookings.

Plain-text Slack
:calendar: *New booking*
*Customer:* Sara Patel
*Service:* 60-min consult
*Date & time:* 2026-06-04 14:30 IST
*Phone:* +91 98xxxxxxxx
*Notes:* First-time visitor
Channel: `#bookings` · Open in calendar
Block Kit JSON
{
  "text": "New booking — 2026-06-04 14:30 IST",
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": ":calendar: *New booking*"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*Customer:* Sara Patel\n*Service:* 60-min consult\n*Date & time:* 2026-06-04 14:30 IST\n*Phone:* +91 98xxxxxxxx\n*Notes:* First-time visitor"
      }
    },
    {
      "type": "context",
      "elements": [
        {
          "type": "mrkdwn",
          "text": "Channel: `#bookings` · Open in calendar"
        }
      ]
    }
  ]
}

:briefcase: Job application

When to use: Careers-page form. Notifies the recruiter responsible for the role; portfolio links should be visible at a glance.

Routing hint: Route by role: IF Role contains "Engineer" → #hiring-eng, IF Role contains "Design" → #hiring-design, otherwise → #hiring.

Plain-text Slack
:briefcase: *New application*
@recruiter
*Name:* Rahul Verma
*Role:* Senior Backend Engineer
*Location:* Remote (India)
*Years of experience:* 7
*Portfolio:* https://rahul.dev
Channel: `#hiring` · Open candidate profile
Block Kit JSON
{
  "text": "New application. Senior Backend Engineer",
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": ":briefcase: *New application*"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "@recruiter\n*Name:* Rahul Verma\n*Role:* Senior Backend Engineer\n*Location:* Remote (India)\n*Years of experience:* 7\n*Portfolio:* https://rahul.dev"
      }
    },
    {
      "type": "context",
      "elements": [
        {
          "type": "mrkdwn",
          "text": "Channel: `#hiring` · Open candidate profile"
        }
      ]
    }
  ]
}

:speech_balloon: Feedback / NPS

When to use: Post-purchase or post-interaction feedback form. Lowest urgency, no mention, just a clean record the team can triage by score.

Routing hint: Route by score: IF Score (1-10) <= 6 → #cx-detractors, IF Score >= 9 → #cx-promoters, otherwise → #cx-feedback.

Plain-text Slack
:speech_balloon: *New feedback*
*Score (1-10):* 9
*User:* anil@acme.com
*What worked:* Setup was fast
*What could improve:* More export options
Channel: `#cx-feedback` · View in dashboard
Block Kit JSON
{
  "text": "New feedback, score 9",
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": ":speech_balloon: *New feedback*"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*Score (1-10):* 9\n*User:* anil@acme.com\n*What worked:* Setup was fast\n*What could improve:* More export options"
      }
    },
    {
      "type": "context",
      "elements": [
        {
          "type": "mrkdwn",
          "text": "Channel: `#cx-feedback` · View in dashboard"
        }
      ]
    }
  ]
}

:house: Real estate lead

When to use: Property enquiry form. The local agent for the city wants this first; budget is the key qualifying signal.

Routing hint: Route by city: IF City = "Bangalore" → #blr-team, IF City = "Mumbai" → #mum-team, IF Budget >= 10000000 → #premium-team.

Plain-text Slack
:house: *New property enquiry*
<!here>
*Buyer:* Riya Shah
*City:* Bangalore
*Locality:* Indiranagar
*Budget:* ₹1.2 Cr
*Property type:* 3BHK apartment
*Timeline:* Within 3 months
Channel: `#blr-team` · Open lead
Block Kit JSON
{
  "text": "New property enquiry. Bangalore",
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": ":house: *New property enquiry*"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "<!here>\n*Buyer:* Riya Shah\n*City:* Bangalore\n*Locality:* Indiranagar\n*Budget:* ₹1.2 Cr\n*Property type:* 3BHK apartment\n*Timeline:* Within 3 months"
      }
    },
    {
      "type": "context",
      "elements": [
        {
          "type": "mrkdwn",
          "text": "Channel: `#blr-team` · Open lead"
        }
      ]
    }
  ]
}

:fire: High-value lead

When to use: A lead that crossed your budget or revenue threshold. Pages the senior sales team specifically; high-priority styling.

Routing hint: Route by budget: IF Budget >= 100000 → this template into #hot-leads, otherwise → standard lead template into #leads.

Plain-text Slack
:fire: *High-value lead — $100k+*
<!channel>
*Name:* Jordan Lee
*Company:* Apex Systems
*Title:* VP, Operations
*Budget:* $250,000
*Use case:* Replacing legacy form vendor across 12 teams
*Timeline:* This quarter
Channel: `#hot-leads` · Page sales lead
Block Kit JSON
{
  "text": "High-value lead. Apex Systems, $250k",
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": ":fire: *High-value lead — $100k+*"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "<!channel>\n*Name:* Jordan Lee\n*Company:* Apex Systems\n*Title:* VP, Operations\n*Budget:* $250,000\n*Use case:* Replacing legacy form vendor across 12 teams\n*Timeline:* This quarter"
      }
    },
    {
      "type": "divider"
    },
    {
      "type": "context",
      "elements": [
        {
          "type": "mrkdwn",
          "text": "Channel: `#hot-leads` · Page sales lead"
        }
      ]
    }
  ]
}

:envelope: Contact form

When to use: General 'contact us' form on a marketing site. Not all visitors are sales leads, could be press, partnerships, or existing customers. Low-urgency default; the team triages.

Routing hint: Route by intent: IF Reason = "Sales" → #leads, IF Reason = "Press" → #press, IF Reason = "Partnership" → #bd, otherwise → #contact.

Plain-text Slack
:envelope: *New contact form submission*
*Name:* Sara Kim
*Email:* sara@example.com
*Reason for contact:* Partnership enquiry
*Company (optional):* Northwind Studio
*Message:* Interested in a co-marketing piece on form-to-Slack workflows.
Channel: `#contact` · Open inbox
Block Kit JSON
{
  "text": "New contact form submission. Sara Kim",
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": ":envelope: *New contact form submission*"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*Name:* Sara Kim\n*Email:* sara@example.com\n*Reason for contact:* Partnership enquiry\n*Company:* Northwind Studio\n*Message:* Interested in a co-marketing piece on form-to-Slack workflows."
      }
    },
    {
      "type": "context",
      "elements": [
        {
          "type": "mrkdwn",
          "text": "Channel: `#contact` · Open inbox"
        }
      ]
    }
  ]
}

:warning: Urgent request

When to use: Anything time-sensitive that needs eyes within minutes, escalations, security reports, payment issues. Pages aggressively.

Routing hint: Route by urgency or category: IF Urgency = "Urgent" or Category = "Security" → this template into #incident-room.

Plain-text Slack
:warning: *URGENT, needs attention now*
<!channel>
*Reported by:* admin@enterprise.com
*Category:* Payment failed mid-month
*Severity:* Blocking production
*Account:* Acme (Agency plan, $490 prepaid)
*Details:* Card was charged twice, second invoice marked unpaid
Channel: `#incident-room` · Escalate now
Block Kit JSON
{
  "text": "URGENT, payment failed mid-month. Acme",
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": ":warning: *URGENT, needs attention now*"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "<!channel>\n*Reported by:* admin@enterprise.com\n*Category:* Payment failed mid-month\n*Severity:* Blocking production\n*Account:* Acme (Agency plan, $490 prepaid)\n*Details:* Card was charged twice, second invoice marked unpaid"
      }
    },
    {
      "type": "divider"
    },
    {
      "type": "context",
      "elements": [
        {
          "type": "mrkdwn",
          "text": "Channel: `#incident-room` · Escalate now"
        }
      ]
    }
  ]
}
How to actually use these

From copy-paste to live notifications

The plain-text version is for when you want to demo a notification format to a teammate or paste a one-off message into a channel. The Block Kit JSON is what you wire into automation.

To send a Block Kit body to a Slack channel, POST it to any incoming webhook URL with Content-Type: application/json. The minimum command line:

curl -sX POST "https://hooks.slack.com/services/T.../B.../..." \
  -H "Content-Type: application/json" \
  -d '<paste the Block Kit JSON here>'

Inside an Apps Script handler, replace our generator's default buildSlackPayload(...)with one of these objects. Inside RouteForms, paste the JSON into the form's notification template setting. RouteForms then uses it for every matching submission, substituting field values automatically.

Substituting your fields

The one rule of editing these

The field labels in each template (Name, Email, Budget, etc.) are example labels. To make a template match your form, replace them with your actual Google Form question titles, exactly as the form stores them. A label of Budget won't match a question titled Budget (USD).

The fastest way to get the right labels is our field extractor , paste a real submission, copy the field names verbatim, paste them back into the template.

FAQ

Frequently asked questions

What's on this page?

Eight ready-to-copy Slack notification templates for Google Forms responses. Each template ships a channel-eye-view plain-text version (the kind you'd see in Slack), a Block Kit JSON payload (POST as-is to any incoming webhook), a 'when to use this' description, and a suggested RouteForms routing rule for that workflow. No editor, no signup, straight reference.

How is this different from the message template generator?

Different search intent. The template generator at /tools/slack-message-template-generator is interactive, pick a preset, edit fields, watch the preview, copy. This page is a static reference, for when you want to grab ready-made copy without building anything. The generator is for designing your message. This page is for borrowing one wholesale.

How do I use a template?

Two paths. (1) Drop it into Slack directly: copy the plain text, paste into a Slack channel message, replace the example values with your real ones, send. Good for demoing what a notification will look like to a teammate. (2) Wire it into a form: copy the Block Kit JSON, paste it into your Apps Script (in place of the body our generator emits), or paste it into RouteForms's Notification template field on the form's settings. Then real submissions automatically get this shape.

Where do the mention syntaxes (<!here>, <!subteam^…>, <!channel>) come from?

Slack's special-mention syntax. <!here> pings everyone currently online in the channel. <!channel> pings everyone in the channel regardless of presence. <!subteam^ID|fallback> mentions a specific user group (you'd replace S0123 with your group's actual ID, found under Slack → Manage user groups). <@USER_ID> mentions a single user. The templates that include them are tuned for the right urgency for each workflow.

Can I edit a template after copying?

Yes, the JSON is just an object. Change the icon, swap the mention, add or remove fields, rewrite the footer. Slack's Block Kit accepts a wide range of section / divider / context / actions blocks; once you've copied a template, treat it as a starting point. For an interactive editor with live preview, the message template generator is the better tool.

Do I need RouteForms to use these?

No. The Block Kit JSON works with any Slack incoming webhook, wire it into Apps Script, a Make.com scenario, a Zapier action, your own server, anything that POSTs JSON. RouteForms is the managed option that handles the wiring (and routing rules, retries, delivery monitoring) on top of templates like these, but the templates themselves are just JSON.

What if my form has different fields than the template?

Edit the body. The fields you see in each template (Name, Email, Budget, etc.) are example labels, the structure is what matters. Add or remove `*Label:* value` lines in the Block Kit text body to match your form's question titles. The /tools/google-forms-field-extractor pulls field names verbatim from a sample response so you can paste them in without typos.

Why are mentions different in different templates?

Each workflow has different urgency. Lead notifications use <!here>, wake whoever's online. Support tickets target the on-call subteam, don't ping the channel for routine tickets, but make sure the right group sees urgent ones. Bookings don't ping anyone, they're informational. High-value leads use <!channel> because nobody wants to miss a $250k deal. Urgent requests page aggressively because they should interrupt.

Wire these templates into routing rules

RouteForms picks the right template per form response, high-value leads get the :fire: header, support tickets get the on-call mention. Free for 30 responses a month.