🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Salesforce + Slack contract intake with risk alerts

Lisa Granqvist Partner Workflow Automation Expert

Contract intake breaks in the same boring ways. Someone forwards a PDF, it gets saved “somewhere,” a few key dates live in a calendar invite, and the next renewal sneaks up anyway.

This Salesforce Slack intake setup hits sales ops first, because pipeline hygiene depends on it. But legal ops and procurement feel the chaos too. The outcome is simple: clean contract records in Salesforce, fast risk alerts in Slack, and fewer missed renewals.

Below, you’ll see how the workflow captures contract fields, scores risk, prevents duplicates, and posts the right alerts so review happens before a deal goes sideways.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Salesforce + Slack contract intake with risk alerts

The Problem: Contract Intake Is Scattered and Easy to Miss

When contracts arrive through three different channels (email attachments, a shared drive folder, and “it’s in Salesforce notes somewhere”), nothing stays consistent. The same agreement gets uploaded twice, the term dates are copied wrong, and the “final” PDF is actually a redline. Meanwhile, stakeholders want an answer now: Is this risky? Does it match our approved language? What’s the renewal date? Without a single intake path, you end up running a manual mini-project for every contract, and that mental load is honestly what slows teams down the most.

It adds up fast. Here’s where it breaks down in real life.

  • Key fields like effective date, termination terms, and renewal notice periods are retyped from PDFs, which means errors are inevitable.
  • Duplicates creep in because “contract intake” is really five separate inboxes and folders.
  • Risk review happens too late, after the opportunity is already marked “Commit” in Salesforce.
  • Renewal tracking becomes a spreadsheet side quest, so missed reminders turn into churn or surprise auto-renewals.

The Solution: AI Contract Intake That Syncs to Salesforce and Alerts in Slack

This workflow centralizes contract intake across the places contracts actually show up: your email inbox, a Google Drive folder, and your CRM pipeline. When a new contract or amendment appears, n8n pulls the file, checks your database to avoid duplicates, then uses AI-powered PDF extraction to capture the important fields (the stuff people normally skim for). Next, it performs a structured risk review, compares key clauses against your approved templates, and applies a risk score using your own logic. Finally, it stores one clean contract record in Postgres, syncs the right details back into Salesforce, and posts a Slack alert when legal review is required. No chasing. No “did anyone see this PDF?”

The workflow starts with intake triggers (IMAP email, Google Drive, and a scheduled Salesforce poll). From there, it merges those streams, extracts and scores the contract, then routes alerts to Slack and updates the opportunity in Salesforce. A daily scheduled check posts upcoming deadlines so renewals do not quietly expire.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you process 10 contracts a week. Manually, it’s easy to spend about 30 minutes pulling the PDF from email or Drive, another 45 minutes copying key dates and terms into Salesforce, plus 15 minutes posting context to Slack and chasing approvals, so roughly 1.5 to 2 hours each. With this workflow, intake is basically instant, extraction and scoring runs in the background, and legal only gets pinged when the risk score requires it. You still review the contract, but you stop doing the same setup work 10 times a week.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Salesforce for opportunity/account contract sync
  • Slack to alert legal and stakeholders fast
  • Postgres database (create tables for contracts, clauses, alerts)
  • Email inbox (IMAP) to capture contract attachments
  • Google Drive for shared-folder contract intake
  • PDF Vector community node (install from n8n community nodes)

Skill level: Intermediate. You’ll connect accounts, set environment variables, and map a few fields to match your Salesforce schema.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

A contract arrives through email, Drive, or Salesforce. IMAP watches an inbox for attachments, Google Drive watches a folder, and Salesforce gets polled on a schedule so new deals don’t fall through the cracks.

All intake streams get combined and deduped. n8n merges the different sources into one path, then checks Postgres to see if the contract already exists (same file, same identifier, or matching metadata), so you don’t create a mess upstream.

AI extracts contract fields and performs risk review. The PDF is read and analyzed to pull key terms and dates, then the workflow retrieves approved template clauses from Postgres and runs scoring logic to flag deviations and risk factors.

Records and alerts go where teams already work. A clean contract record is stored in Postgres, the Salesforce opportunity is updated with the fields your pipeline depends on, and Slack receives an alert if the contract crosses your “needs legal review” threshold. A daily scheduled run also posts upcoming deadlines so renewals stay visible.

You can easily modify the risk thresholds to change when Slack alerts fire based on contract type, value, or region. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Trigger Type

Set up the three intake triggers that start the workflow: email, Google Drive, and scheduled CRM polling.

  1. Open Email Contract Intake and set Mailbox to INBOX.
  2. In Email Contract Intake, set Custom Email Config to [YOUR_EMAIL] and keep the polling set to every minute.
  3. Open Drive File Intake and set Folder ID to [YOUR_ID].
  4. In Drive File Intake, keep Events set to file:created and file:updated.
  5. Open Hourly CRM Poll and set Unit to hours with Value 1.
  6. Open Daily Deadline Trigger and set Unit to days with Value 1.

Credential Required: Connect your IMAP credentials in Email Contract Intake, Google Drive credentials in Drive File Intake, and set up any required credential links before testing.

Step 2: Connect Salesforce and Intake Merging

Configure Salesforce retrieval and merge all inbound sources into a single stream.

  1. Open Fetch Salesforce Deals and set Resource to opportunity and Operation to getAll.
  2. Set the Filters in Fetch Salesforce Deals to stage: Contract Review and lastModified: {{$now.minus({hours: 1}).toISO()}}.
  3. Open Combine Intake Streams and set Mode to multiplex.
  4. Confirm Drive File Intake, Email Contract Intake, and Fetch Salesforce Deals all connect into Combine Intake Streams.

Credential Required: Connect your Salesforce credentials in Fetch Salesforce Deals and Update CRM Opportunity.

Step 3: Prevent Duplicates and Route New Contracts

Check for duplicate contract hashes and route only new contracts for AI extraction.

  1. Open Detect Duplicate Record and confirm Query is set to SELECT contract_id FROM contracts WHERE hash = '{{ $json.fileHash }}' LIMIT 1.
  2. Open Is Contract New and confirm the condition checks Value 1 as {{$json.contract_id}} with Operation isEmpty.
  3. Ensure the execution flow matches: Combine Intake StreamsDetect Duplicate RecordIs Contract NewAI Extract Contract Fields.

Credential Required: Connect your Postgres credentials in Detect Duplicate Record, Retrieve Template Clauses, Store Contract Record, and Fetch Upcoming Alerts.

Step 4: Set Up AI Extraction and Risk Analysis

Extract structured contract fields, perform AI risk analysis, and fetch template clauses in parallel.

  1. Open AI Extract Contract Fields and keep Operation set to extract, Input Type to file, and Binary Property Name to data.
  2. Verify the Prompt and Schema fields in AI Extract Contract Fields match the provided extraction logic.
  3. Open AI Contract Risk Review and keep Operation set to ask, Input Type to file, and Binary Property Name to data.
  4. Open Retrieve Template Clauses and set Query to SELECT template_id, clauses FROM contract_templates WHERE contract_type = '{{ $json.contractType }}' AND active = true.
  5. Confirm parallel execution: AI Extract Contract Fields outputs to both AI Contract Risk Review and Retrieve Template Clauses in parallel.

Credential Required: Add the required PDF/AI credentials in AI Extract Contract Fields and AI Contract Risk Review.

Step 5: Score and Store Contract Records

Combine AI outputs and CRM data, compute risk, and store the resulting contract record.

  1. Open Score Contract Logic and keep the full JavaScript Code block as provided (it references AI Extract Contract Fields, AI Contract Risk Review, Retrieve Template Clauses, and Fetch Salesforce Deals).
  2. Open Store Contract Record and set Table to contracts.
  3. Set Columns in Store Contract Record to contract_id,type,parties,value,effective_date,expiration_date,risk_score,risk_level,approval_level,extracted_data,risk_analysis,alerts,crm_data,created_at,status.
  4. Set Values in Store Contract Record to ={{ $json.contractAnalysis.contractId }},={{ $json.contractAnalysis.type }},={{ JSON.stringify($json.contractAnalysis.parties) }},={{ $json.contractAnalysis.value }},={{ $json.contractAnalysis.effectiveDate }},={{ $json.contractAnalysis.expirationDate }},={{ $json.riskAssessment.overallScore }},={{ $json.riskAssessment.riskLevel }},={{ $json.approvalRouting.level }},={{ JSON.stringify($json.fullExtraction) }},={{ JSON.stringify($json.riskAssessment) }},={{ JSON.stringify($json.alerts) }},={{ JSON.stringify($json.crmAlignment) }},={{ $now.toISO() }},pending_approval.

⚠️ Common Pitfall: Ensure Score Contract Logic receives data from all three upstream nodes before running; missing inputs can cause undefined fields and insert failures.

Step 6: Configure Review Routing and CRM Updates

Route high-risk contracts to legal and update CRM opportunities in parallel.

  1. Open Require Legal Review and set conditions to check {{$json.riskAssessment.riskLevel}} equals High OR {{$json.riskAssessment.missingClauses.length > 0}} is true, with Combine Operation set to any.
  2. Open Alert Legal Channel and set Channel to [YOUR_ID] and keep the alert message text as provided.
  3. Open Update CRM Opportunity and set Opportunity ID to {{$json.crmAlignment.opportunityId}}.
  4. In Update CRM Opportunity, set custom fields: Contract_ID__c to {{$json.contractAnalysis.contractId}}, Contract_Status__c to Under Review, Contract_Expiration__c to {{$json.contractAnalysis.expirationDate}}, and Contract_Risk_Score__c to {{$json.riskAssessment.overallScore}}.
  5. Confirm parallel execution: Store Contract Record outputs to both Require Legal Review and Update CRM Opportunity in parallel.

Credential Required: Connect your Slack credentials in Alert Legal Channel and Post Daily Summary.

Step 7: Configure Daily Alert Summary

Pull upcoming deadlines and post a daily summary into Slack.

  1. Open Fetch Upcoming Alerts and confirm Query is set to SELECT c.*, json_array_elements(c.alerts) as alert FROM contracts c WHERE c.status = 'active' AND (alert->>'date')::date BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL '30 days'.
  2. Open Post Daily Summary and keep Text set to =📅 Daily Contract Alert Summary\n\nYou have {{ $items.length }} upcoming contract deadlines:\n\n{{ $items.map(item => `• ${item.json.alert.type}: ${item.json.alert.description || item.json.contract_id} - Due ${item.json.alert.date} (${item.json.alert.daysRemaining} days)`).join('\n') }}.
  3. Set Channel in Post Daily Summary to [YOUR_ID] and keep Authentication as oAuth2.

Step 8: Test and Activate Your Workflow

Run end-to-end tests for each intake path and confirm outputs before activating.

  1. Use Execute Workflow to test: drop a PDF into the Drive File Intake folder and confirm it flows through Combine Intake Streams, Detect Duplicate Record, and AI Extract Contract Fields.
  2. Trigger Email Contract Intake by sending a contract email and confirm it joins the same pipeline.
  3. Verify successful execution by checking: a new row in the contracts table from Store Contract Record, Slack alerts from Alert Legal Channel when risk is high, and CRM updates from Update CRM Opportunity.
  4. Manually run Daily Deadline Trigger to confirm Post Daily Summary posts a Slack summary.
  5. Once validated, toggle the workflow to Active for production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Salesforce credentials can expire or need specific permissions. If things break, check your connected app access and user permission sets in Salesforce setup first.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.

Frequently Asked Questions

How long does it take to set up this Salesforce Slack intake automation?

About 60 minutes if your accounts and database are ready.

Do I need coding skills to automate Salesforce Slack intake?

No. You’ll mostly connect tools and map fields. You may tweak a small scoring script if you want custom risk logic.

Is n8n free to use for this Salesforce Slack intake workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in AI extraction costs from your PDF/LLM provider.

Where can I host n8n to run this automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I customize this Salesforce Slack intake workflow for vendor contracts instead of customer deals?

Yes, but plan the field mapping first. You can keep the same intake and extraction nodes, then change the “Update CRM Opportunity” mapping to write into your vendor object (or a dedicated custom object) in Salesforce. Common customizations include a different risk matrix for data processing terms, a new Slack channel for procurement, and separate deadline rules for auto-renewing vendor agreements.

Why is my Salesforce connection failing in this workflow?

Usually it’s expired OAuth or a user permission issue. Reconnect Salesforce in n8n, then confirm the integration user can read opportunities and write to the specific fields you’re updating. If it only fails on certain records, check validation rules or required fields on that object. Rate limits can also bite if you poll too aggressively.

How many contracts can this Salesforce Slack intake automation handle?

A lot, and the real limit is your infrastructure. On n8n Cloud, your monthly execution cap depends on your plan. If you self-host, there’s no hard execution limit, but you’ll want a decent VPS and a database that’s indexed well. AI PDF extraction is the usual bottleneck, so teams often batch low-priority contracts during off-hours.

Is this Salesforce Slack intake automation better than using Zapier or Make?

Often, yes. This workflow isn’t just “send a file from A to B”; it merges multiple intake sources, dedupes records, runs AI extraction, applies risk logic, then conditionally routes alerts and updates Salesforce. n8n is well suited for that kind of branching without turning your automation into a pile of separate Zaps or scenarios. Zapier or Make can still work if you keep it very simple, like one intake channel and a basic Slack message. If you’re unsure, Talk to an automation expert and get a second opinion.

Once this is running, contract intake stops being a daily fire drill. The workflow handles the repetitive cleanup and routing so your team can focus on decisions, not copy-paste.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal