n8n • quoting/CPQ

n8n CPQ Quoting: Draft Sales Quotes from Slack with AI

Ask for a quote in plain English and get a priced draft back with a review link, without ever opening the quoting tool. Here is the n8n CPQ workflow that does it.

Nicolas Fry
Nicolas FryFounder & CEO
August 27, 20266 min read

Last updated August 2026

The n8n workflow canvas: a Slack request runs through an AI agent that maps products to catalog SKUs, then TurboQuote drafts a priced quote and posts a review link

The full workflow on the n8n canvas. Open the interactive version on n8n.

Why this workflow is different: on n8n, a search for "quote" returns about 36 templates and "proposal" about 52, but none turns a plain-English Slack request into a priced draft quote with an AI agent. This one does, and the AI only ever picks products, never sets a price.

How do you generate a CPQ sales quote from Slack with n8n? You mention a bot in Slack with a plain-English request, an AI Agent maps the products to real SKUs in your TurboQuote price book, and this n8n quoting workflow builds a priced draft quote and posts a review link back to the channel. The AI only picks products; a code step attaches every price straight from your catalog.

That is the whole pitch for n8n CPQ quote automation: your reps stay in Slack, the quote lands in TurboQuote as a draft, and nobody has to open the quoting tool to spin up a first pass. The AI never invents a number, because it is structurally prevented from doing so.

The full n8n TurboQuote template is live and free to copy. It is 16 functional nodes plus one AI agent with three sub-nodes, and you can import it in a couple of minutes.

How it works, in four steps

The workflow moves through four stages: Listen, Match, Find, and Create. Each one is a small, readable cluster of nodes, so the whole thing is easy to audit and adapt.

  1. Step 1: Listen

    Catch the request in Slack

    A Slack Trigger fires on an app_mention, so a rep can type something like "@quotebot I need a quote for Acme Corp: 25 Pro licenses and an onboarding package" right in the channel. A single "Set quote defaults" config node stamps the request with your currency, term length, validity window, and app base URL.

  2. Step 2: Match

    Map plain English to real SKUs

    The workflow fetches your catalog and aggregates it, then an AI Agent reads the request and uses the TurboDocx node as a catalog-search tool to pick products. A structured output schema forces the agent to return only { customerName, items:[{ productId, quantity }] }. A code step then attaches each real list price straight from the catalog, so the AI picks products but never sets a price.

  3. Step 3: Find

    Look up the customer

    The workflow finds the customer company by name. An IF node checks whether it exists: if found, it gets the primary contact and moves on; if not, it posts a clear "not found" message back to Slack so the rep can fix the name or create the company first.

  4. Step 4: Create

    Build the draft and post the link

    Finally it creates a draft quote in TurboQuote, adds every matched line item with its catalog price, and posts a .../turboquote/<id>/configure review link back to the Slack channel. The quote is a draft the sales team reviews, never something sent to the customer automatically.

Why the AI never sets prices

This is the part that makes n8n AI quoting safe to put in front of a sales team. The obvious fear with an AI-generated quote is that the model quietly invents a price. This workflow makes that impossible by construction, not by trusting the model to behave.

The AI Agent is constrained by a structured output schema that lets it return only a productId and a quantity for each line item. It has no field in which to put a price. A separate code node then joins those product IDs to the catalog the workflow fetched a moment earlier and stamps each line with its real listPrice.

So a hallucinated price can never reach the quote. The worst thing that can happen is a product the AI cannot match to a SKU, and that is reported right back in Slack instead of being guessed. The guardrail is not a warning in the prompt, it is the shape of the data the agent is allowed to return.

What you need to set it up

Setup is short. Three credentials, one config node, and a catalog that already reflects how you sell.

Install the community node

Add @turbodocx/n8n-nodes-turbodocx on self-hosted n8n. It is not yet on the n8n Cloud verified list, so this template runs on a self-hosted instance.

Add a TurboDocx API credential

A standard org API key is enough. No admin key and no webhooks are required for this quoting workflow.

Add an OpenAI credential

The AI Agent runs on OpenAI out of the box, and it is swappable for Claude or Gemini if you prefer a different model.

Create a Slack app

Subscribe to the app_mention event and grant chat:write so the bot can read requests and post the review link back.

Edit "Set quote defaults"

Set appBaseUrl, currency, termDays, and validDays once. This single config node drives every quote the workflow creates.

Prepare TurboQuote first

Your products need a list price and billing frequency in the catalog, and the customer company must already exist with at least one contact. The template looks them up, it does not create them.

If you would rather wire quoting into a tool that is not n8n, the same catalog, customer, and quote operations are available through the TurboDocx API and SDK, and the CPQ engine itself lives in TurboQuote.

Frequently asked questions

Can I create a sales quote from Slack with AI?

Yes. This n8n CPQ template lets a rep ask for a quote in Slack in plain English, like "@quotebot I need a quote for Acme Corp: 25 Pro licenses and an onboarding package", and get back a priced draft quote with a review link. An AI Agent reads the request, maps the products to real SKUs in your TurboQuote price book, and the workflow creates the draft for you without anyone opening the quoting tool.

Does the AI make up prices?

No. The AI Agent is constrained by a structured output schema that lets it return only a productId and a quantity for each line, never a price. A code node then joins those product IDs to your fetched catalog and stamps each line with its real list price. A hallucinated price can never reach the quote. The worst case is a product the AI cannot match, which is reported back in Slack rather than guessed.

Do I need TurboQuote set up first?

Yes. The template looks up your data rather than inventing it, so a few things need to exist first. Your products must be in the TurboQuote catalog with a list price and a billing frequency, and the customer company must already exist with at least one contact. The workflow finds the company and its primary contact, it does not create them, and it will tell you in Slack if it cannot find a match.

Is the review link safe to send to a customer?

No, and that is by design. The .../turboquote/<id>/configure link the workflow posts is an internal, login-gated review link for your sales team, not a public customer link. This template stops at the draft. The customer-facing signing link is emailed separately when the quote is later sent from TurboQuote, so a rep always reviews the draft before anything reaches the customer.

Which AI model does the n8n quoting workflow use?

The AI Agent runs on OpenAI by default, wired as one agent with three sub-nodes: the model, a catalog-search tool, and a structured output parser. Because the agent only picks products and never sets prices, the model choice is low risk, and you can swap OpenAI for Claude or Gemini without changing the pricing guardrail that keeps every line tied to your catalog.

Related Resources

Quote from Slack in a couple of minutes

Import the live n8n template, add your credentials, and your team can draft a priced quote without leaving the channel.