Slack workflows
1,961 results — 383 downloadable workflow files, 1,578 source-linked n8n references
Triage support tickets with Claude Sonnet, Infini Analytics, and Slack
Quick overview Automatically triage incoming support tickets with an AI agent powered by Claude Sonnet. High-confidence responses are sent instantly, low-confidence cases escalate to a human on Slack, and every step is logged in Infini Analytics for full observability. How it works A webhook receives the incoming support ticket and generates a unique execution_id to correlate every event of this run. Infini Analytics logs a START event for the execution. An AI Agent (Claude Sonnet) reads the ticket, optionally queries a knowledge base data table, and drafts a response with a confidence score. The agent logs structured ticket data via a data table tool (Infini Analytics records this as an EVENT). An IF node checks the confidence: high-confidence tickets get an automatic reply and log an EVENT; low-confidence tickets escalate to a human on Slack and log a WARNING. Infini Analytics logs the final END event, or an ERROR event if any step failed along the way. Setup Import this workflow into your n8n instance and open it in the editor. Create an Anthropic credential with your Claude API key and select it in the AI Agent node Create an Infini Analytics credential with your Bearer Token,
Onboard employees and manage Slack access with Google Sheets and Gmail
Quick Overview This workflow automates HR onboarding by capturing new hires via a webhook, saving them to Google Sheets, emailing a Slack invite via Gmail, and notifying managers in Slack, then listening for Slack team_join events to add new hires to department channels and update onboarding status. How it works Receives a POST webhook request from an HR form with new employee details and validates required fields. Appends the employee record to a Google Sheets spreadsheet and assigns a department-based list of Slack channels plus a static Slack invite link. Sends the new hire a welcome email through Gmail containing their start details and the Slack workspace invite link. Sends a Slack direct message to a manager user with the new hire details and the channels they will be added to, then updates the Google Sheets row to “Invite Sent” with a timestamp and responds to the HR form. Receives Slack Events API requests for the workspace and replies to url_verification challenges or immediately acknowledges real team_join events within 3 seconds. Extracts the joining user’s Slack ID and email, looks up the matching employee row in Google Sheets, and resolves the department’s target chann
Draft LinkedIn posts from RSS feeds with OpenAI, Google Sheets and Slack
Quick overview This workflow runs daily at 7am, reads an RSS feed, uses OpenAI to score articles for niche relevance and draft LinkedIn posts, then appends approved candidates to a Google Sheets review queue and notifies a Slack channel. How it works Runs every day at 7:00 AM on a scheduled trigger. Reads items from the configured RSS feed and keeps only articles published in the last 24 hours. Limits the list to the first five recent articles to reduce processing volume. Uses OpenAI to score each article’s relevance (0–10) and generate an angle and hot take in structured JSON. Filters to only the articles with relevance scores of 7 or higher. Uses OpenAI to write a 120–180 word LinkedIn draft in your specified voice based on the article, angle, and hot take. Appends the draft and metadata to a Google Sheets “Drafts” tab and posts a notification to a Slack channel for review. Setup Add OpenAI credentials for both OpenAI nodes and customize the audience/beat and voice instructions in the prompts. Add a Google Sheets OAuth credential, set the spreadsheet ID, and ensure a “Drafts” sheet exists with matching columns (Date, Angle, Status, Relevance, Draft Post, Source Link, Source Title
Score call audio and alert risky calls with Tyto and Slack
Quick overview This workflow receives a webhook when a call recording is ready, sends the audio URL to a self-hosted ai-coustics Tyto scoring API, and posts a Slack alert for risky calls before returning the scored JSON response. How it works Receives a POST webhook containing an audio_url and call_id for a completed call. Sends the audio URL and call ID to a self-hosted Tyto scoring endpoint via HTTP to retrieve a risk_score, band, and main degradation cause. Checks whether the returned band indicates a risky call (band equals "bad"). Posts a formatted alert to a selected Slack channel with the call ID, risk score, band, cause, and duration when the call is risky. Labels non-risky calls as OK. Returns the resulting JSON payload (including the Tyto scoring fields) as the webhook response for downstream storage or chaining. Setup Deploy and run a Tyto HTTP wrapper on a machine that has the ai-coustics Tyto SDK and a valid ai-coustics license key. Update the api_base_url value to point to your Tyto wrapper (for example, http://localhost:8000) and ensure the wrapper exposes a POST /score endpoint. Add a Slack credential in n8n and select the target channel for the alert message. Copy
Send monthly rent and sales market updates to Slack with Rentcast and Supabase
Quick overview Youtube Video: https://youtu.be/zJlncb1T074 This workflow runs monthly, checks Supabase for up-to-date real estate market records for a configured ZIP code, and either reports existing month-over-month rent and sale trends or fetches fresh market stats from the Rentcast API, upserts them into Supabase, and posts to Slack. How it works Runs on a monthly schedule and sets the target ZIP code to analyze. Queries Supabase for rental and sales market records for that ZIP code that are older than the start of the current month. If prior data exists, calculates the last 3 months of average rent and average sale price changes from Supabase history fields and posts a status summary to Slack (or alerts if comparisons are not possible). If no up-to-date data exists, requests the latest market statistics from the Rentcast markets API for the same ZIP code. Upserts the returned rental and sales metrics (including history) into Supabase tables for market_rentals and market_sales. Computes month-over-month changes from the newly fetched history and posts the formatted market update to Slack (or sends an error alert if insufficient data is returned). Setup Create/connect Supabase cr
Send monthly real estate market summaries to Slack with Supabase and Rentcast
Quick overview Youtube Video: https://youtu.be/zJlncb1T074?si=fnKE7SPh7I-JGdmx This workflow runs monthly for a configured ZIP code, checks Supabase for recent market rental and sales records, and either reports the existing stats or pulls fresh data from the Rentcast API, upserts it into Supabase, and posts a formatted market update to Slack. How it works Runs on a monthly schedule and sets the target ZIP code to analyze. Queries Supabase tables for rental and sales market records for that ZIP code that are older than the start of the current month. If existing data is found, calculates month-over-month changes from the stored history and posts a Slack update (or an admin error message if the history is insufficient). If no current data exists, fetches the latest rental and sales market statistics from the Rentcast Markets API. Upserts the fetched rental and sales statistics (including history and summary fields) into Supabase using the REST endpoint. Calculates month-over-month changes from the newly fetched history and posts a Slack market summary, or posts an error message if the data is incomplete. Setup Create a Supabase project with market_rentals and market_sales tables and
Generate studio product photos for new Shopify products with Dreem AI
Quick overview This workflow triggers on new Shopify products, generates studio-style product shots from one product image using Dreem.ai and appends the rendered images back to the Shopify product listing, with optional Slack posting and approval before publishing. How it works A Shopify webhook fires when a product is created. Products without a photo are skipped. he Dreem node generates your chosen shot types (defaults: flat lay + ghost mannequin) from the product's first image. Sends the product’s first image (and optionally a second/back image URL) to Dreem AI to generate the configured product shot types and provides an n8n callback URL. Waits for Dreem AI to call back with the render result and verifies the render status is completed. Optionally posts the generated image links to Slack and waits for an Approve/Reject response. Finished shots are appended to the product, keeping existing photos. An optional second row renders back-view shots from the product's second image. Setup Install the Dreem community node and add a Dreem API key credential (dreem_pk_...) to the Dreem generate nodes. Add a Shopify Admin access token credential with read_products and write_products scope
Route ecommerce review alerts from Gmail to Slack with OpenAI and Google Sheets
Quick Overview This workflow polls Gmail for unread ecommerce review notification emails, extracts key review details, checks Google Sheets to prevent duplicate processing, uses OpenAI to classify sentiment and urgency, posts routed alerts to Slack, and logs each processed review and its AI metadata back to Google Sheets. How it works Polls Gmail every minute for unread emails with the “Reviews” label. Extracts the message ID, received time, customer details, product name, star rating, and review text from the email content. Reads the existing review audit log from Google Sheets and skips processing if the message ID already exists or the review text is too short. Sends the review details to OpenAI to return a JSON classification with sentiment, urgency, themes, summary, suggested action, and a sentiment score. Routes the review based on sentiment and urgency, escalating low-star or high-urgency negative reviews and optionally notifying on positive reviews. Posts a formatted alert to the selected Slack channel when notification is enabled. Appends the review (including route, AI fields, and whether Slack was notified) to Google Sheets as an audit log. Setup Create a Gmail label (fo
Send a daily Holded sales summary to Slack
Quick overview This workflow runs daily at 08:00 to pull yesterday’s invoices from Holded, aggregate invoice count and totals, identify the top customer, and post a formatted sales digest to a Slack channel. How it works Runs every day at 08:00 on a scheduled trigger. Retrieves all invoices from Holded dated yesterday. Calculates the number of invoices, total billed amount, and the top customer by billed total, then formats the results into a Slack-ready message. Posts the daily sales report message to the selected Slack channel. Setup Add your Holded API v2 credentials (API key) to allow the workflow to read invoices. Add your Slack credentials and select the channel where the report should be posted. Adjust the schedule time if you want the report to run at a different hour. Install the free Holded community node first: in n8n go to Settings → Community Nodes → Install and search for @francodesystems-npm/n8n-nodes-holded. It is a verified community node, so it is also available on n8n Cloud. Requirements A Holded account with an API key (Settings → Developers → API keys) A Slack workspace where you can install apps and post to the target channel The @francodesystems-npm/n8n-nodes
Assist hospital doctors via Telegram with OpenAI, Google Sheets, Gmail and Slack
Quick overview This workflow combines a Telegram doctor bot, OpenAI, Google Sheets, Gmail, Slack, and a webhook to summarize PDF reports, generate and email discharge summaries, analyze lab values, report bed availability, send daily patient follow-ups, and post error alerts. How it works Runs every day at 9:00 AM to read patient records from Google Sheets, filter those due for follow-up today with a Pending status, send each patient a Telegram check-in, and mark the follow-up as Sent. Triggers when a doctor sends a Telegram message and routes it based on whether it includes a document or a supported command. If a PDF is attached, downloads it from Telegram, extracts the text, uses OpenAI (gpt-4o-mini) to create a short clinical summary, logs the result to a Google Sheets Reports tab, and replies to the doctor on Telegram. If the message starts with "/discharge PATIENTID", extracts the patient ID, looks up the patient in the Google Sheets Patients tab, uses OpenAI (gpt-4o-mini) to generate a discharge summary, saves it back to Google Sheets, emails it to the patient via Gmail, and confirms completion on Telegram. If the message starts with "/labs", sends the provided lab values to
Manage clinic appointments and prescriptions with Telegram, Gmail and Google
Quick overview This workflow manages clinic appointments across Google Sheets and Google Calendar, using webhooks and Telegram to book and confirm visits, Gmail and Telegram to deliver prescriptions, scheduled Telegram reminders for upcoming appointments, and Slack notifications for workflow errors. How it works Receives a POST webhook request to book an appointment, generates a Booking ID, stores the booking in Google Sheets, and notifies the doctor via Telegram. Triggers when a patient messages your Telegram bot, extracts the Booking ID from the message, and replies with instructions if the ID is missing or invalid. When the Booking ID is valid, updates the matching Google Sheets row to Confirmed, sends a confirmation message to the patient on Telegram, and creates a Google Calendar event. Reads the confirmed appointment details from Google Sheets and sends the full patient and appointment information to the doctor via Telegram. Receives a POST webhook request with post-visit prescription details, updates the matching Google Sheets row to “Prescription Sent,” emails the prescription link and medicines to the patient via Gmail, and sends the same details via Telegram. Runs every h
Verify customs shipping documents with GPT-4o-mini, Gmail and Slack
Quick overview This workflow receives shipment document text via a webhook, uses OpenAI (GPT-4o-mini) to extract key fields from the Bill of Lading, cross-checks the extracted data against Invoice and Packing List fields, then emails a compliance verdict via Gmail and sends failure alerts to Slack. How it works Receives a POST request via webhook containing submitterEmail, shipmentRef, and the plain-text Commercial Invoice, Packing List, and Bill of Lading. Uses OpenAI (GPT-4o-mini) to extract structured Bill of Lading fields into JSON, and posts a Slack alert if the extraction fails. Compares key fields across the Invoice, Packing List, and Bill of Lading (for example consignee/shipper names, ports, package counts, gross weight, HS codes, quantities, and shipping marks) and calculates a verdict and discrepancy list. Emails a “READY_TO_FILE” report via Gmail when all checks pass. Emails a “NEEDS_CORRECTION” report via Gmail with detailed mismatch explanations and check IDs when discrepancies are found. Sends a Slack message when any workflow-level error occurs so issues are visible even if the run fails early. Setup Add an OpenAI credential and ensure the OpenAI node is configured
Send ranked freight quote PDFs with GPT-4o, Google Sheets, Gmail and PDFShift
Quick overview This workflow receives shipment requests via webhook, pulls carrier rate data from Google Sheets, uses OpenAI GPT-4o to generate a ranked HTML freight quote, converts it to a PDF with PDFShift, and emails the PDF to the customer via Gmail, with Slack alerts on workflow errors. How it works Receives a POST webhook request containing shipment details like origin, destination, weight, mode, and customer contact information. Reads rate information in parallel from three carrier tabs in a Google Sheets spreadsheet (BlueDart, DTDC, and Delhivery). Combines the carrier results and calculates per-carrier total cost based on the shipment weight. Sends the shipment and carrier data to OpenAI GPT-4o to generate a complete HTML quote page with a ranked comparison table. Converts the generated HTML into an A4 PDF file using the PDFShift API. Emails the PDF quote to the customer using Gmail with a prefilled subject and message. If the workflow fails, posts an error alert message to a Slack channel. Setup Configure the webhook path in n8n and copy the production webhook URL into the system that submits shipment requests. Add Google Sheets OAuth2 credentials and ensure the reference
Validate invoice tax compliance from Gmail using Groq, Notion, and Google Sheets
Quick overview This workflow monitors a Gmail inbox for PDF invoices, uses Groq (Llama 3.3) to extract structured invoice fields, validates the invoice against Purchase Orders in Google Sheets and tax rules in Notion, logs an audit entry to Notion, and notifies Slack and the supplier based on pass/fail. How it works Triggers every minute when a new email arrives in Gmail and downloads the attached PDF invoice. Extracts text from the PDF and sends it to Groq (Llama 3.3) to parse invoice fields into a structured JSON schema, including SEZ/LUT detection. Looks up the referenced PO number in Google Sheets and fetches applicable tax rules from a Notion database. Validates the invoice against the PO (existence, approval status, currency, and total amount) and against Notion tax rules (SEZ/import/domestic matching and GST expectations). Writes the compliance result, matched rule, and any violations to a Notion “Compliance Audit Log” database. If the invoice passes, posts an approval message to Slack and archives the PDF to a Google Drive folder. If the invoice fails, posts a blocking alert to Slack and emails the supplier a rejection notice listing the violations. Setup Connect your Gmail
Predict supplier churn and generate retention plans with Notion, Slack, and Groq
Quick overview This workflow runs weekly to pull supplier activity from Notion, engineer churn-risk features, and use Groq-hosted LLM prompts to classify supplier churn risk and generate retention plans. It updates each supplier record in Notion and posts a Slack alert only when a supplier is rated High risk. How it works Runs every week on a schedule. Retrieves all supplier records from a Notion database. Calculates behavioral risk features such as PO trend, engagement score, and delivery/financial/contract-risk flags from the Notion fields. Processes suppliers one at a time and sends the features to a Groq LLM to return structured JSON with churn risk level, risk score, confidence, and key drivers. Sends the churn assessment to a second Groq LLM prompt to generate a structured retention plan with priority, recommended actions, suggested owner, and summary. If the supplier’s churn risk is High, posts a formatted alert with drivers and recommended actions to a Slack channel. Updates the supplier’s Notion page with the churn risk, risk score, key drivers, retention plan, and a “Last Evaluated” timestamp, then continues to the next supplier. Setup Connect your Notion credentials and
Review contract risk and rewrite clauses with Groq, Google Drive, Notion, and Slack
Quick overview This workflow watches a Google Drive folder for newly uploaded contract PDFs, extracts key clauses with Groq-hosted LLMs, compares them to standard clauses stored in Notion, generates a structured risk report and clause rewrites, sends a Slack alert for high-risk contracts, and saves the review to Notion. How it works Triggers when a new file is created in a specific Google Drive folder. Downloads the file and extracts text from it (using PDF text extraction when the uploaded file is a PDF). Uses a Groq-hosted LLM to extract key contract clauses (payment terms, penalties, SLA, termination, renewal, liability, and data protection) into structured JSON. Pulls the company’s standard clause library from Notion and compares each extracted vendor clause to the corresponding standard text. Uses a Groq-hosted LLM to generate a structured legal risk report with an overall risk level, executive summary, clause-by-clause risk review, missing protections, and negotiation recommendations. Rewrites medium- and high-risk clauses with a Groq-hosted LLM to produce negotiation-ready alternative wording aligned to the Notion standards. If the overall risk level is High, posts a formatt
Mask PII in hosted chat with OpenAI, Claude, and Saklam Bridge
Quick overview This workflow provides a public hosted chat that routes messages through the Saklam Bridge to mask PII on-premises before calling models like Claude, GPT, or Mistral, then restores the original values in the response. How it works Exposes a public hosted chat interface and receives each user message. Sends the message to an AI agent that uses an OpenAI-compatible chat model endpoint. Routes the model request through the self-hosted Saklam Bridge, which masks PII locally before forwarding the prompt to your chosen LLM provider. Receives the provider’s response back through Saklam Bridge, which unmasks the placeholders to restore the original PII. Returns the final unmasked answer to the hosted chat user. Setup Deploy the Saklam Bridge container in the same network as n8n and configure it with your Saklam license and your LLM provider API key. Create an OpenAI API credential in n8n that points its Base URL to your Saklam Bridge endpoint (for example, http://saklam-bridge:4000/v1) and uses the Bridge master key as the API key. Select that OpenAI credential in the chat model node and set the model name to the provider model you want to use (for example, claude-haiku-4-5,
Send daily brand mention digests to Slack with ScraperAPI and OpenAI
Quick Overview This workflow runs every morning at 8am, searches Google News for configured brand terms using ScraperAPI, stores previously seen article URLs in an n8n Data Table, summarizes the new coverage with OpenAI, and posts a daily brand-mention digest to a Slack channel. How it works Runs every day at 8am on a schedule. Sets the search terms, Google News country and time-period filters, and the target Slack channel. Creates (if needed) and reads an n8n Data Table of previously seen article URLs. Queries Google News via ScraperAPI for each search term and extracts article details from the responses. Deduplicates results against the seen-articles table and the current run, then stores new article URLs back into the Data Table. Groups new articles by brand, asks OpenAI to write a per-brand Slack-formatted summary, and posts the final digest message to Slack. Setup Add ScraperAPI credentials and ensure your ScraperAPI plan supports the Google News SDE endpoint used by the workflow. Add an OpenAI credential that can access the configured chat model (gpt-5-mini) or change the model selection to one available in your account. Add a Slack credential with permission to post messages
Route workflow error incidents to Slack alerts with a Notion incident log
Quick overview This workflow captures n8n workflow execution errors, classifies and deduplicates them, logs incidents to a Notion database, and routes high-severity alerts to a Slack channel, with an optional daily Slack digest of open incidents. How it works Triggers when an n8n workflow execution fails via the built-in Error Trigger. Normalizes the error payload and extracts key metadata like workflow, execution, node, and stack details. Classifies the error into a category, severity, and suggested fix using rule-based text matching. Builds an incident fingerprint and formatted Slack message, then searches a Notion database for an existing incident with the same fingerprint. If a matching Notion incident exists, it updates the page’s last-seen timestamp, severity, suggested fix, and occurrence count and optionally posts a repeated Slack alert based on the minimum severity threshold. If no incident exists, it creates a new Notion incident page and posts a Slack alert only when the severity meets or exceeds the configured threshold. Runs daily on a schedule, fetches unresolved incidents from Notion, and posts a summary digest to the same Slack channel when any open incidents exist.
Re-engage dormant real estate leads with Google Sheets, Gemini and Gmail
Quick Overview This workflow runs daily to find dormant real estate leads in Google Sheets, uses Google Gemini to draft personalized winback emails, sends them via Gmail, updates the lead records, and then posts a run summary digest to Gmail and optionally to Slack. How it works Runs every day at 8am on a schedule. Pulls all lead records from a Google Sheets spreadsheet. Filters to leads that have an email address, are not marked “Do Not Contact,” and have not been contacted in at least 30 days. Processes each dormant lead in turn by prompting Google Gemini to generate a short re-engagement email subject and body based on the lead’s name, property interest, and days since last contact. Sends the generated message to the lead via Gmail and updates the corresponding row in Google Sheets (for example, tracking status and re-engagement attempt count). Aggregates the run results and sends a summary digest to a specified Gmail address and to a Slack channel. Setup Connect credentials for Google Sheets, Gmail, and Google Gemini (PaLM) API. Select the Google Sheets document and sheet name for both the lead fetch and lead update steps, and ensure your sheet includes fields like Email, Statu
Log Airtable worklogs to Tempo with Jira and Slack notifications
Quick overview This workflow runs nightly to pull time entries from Airtable, converts Jira issue keys to issue IDs, logs the time to Tempo via its REST API, archives the processed entries back to Airtable, and sends a confirmation message to a Slack user. How it works Runs on a schedule. Fetches all records from the Airtable “Daily Worklog” table. Looks up each entry’s Jira issue by Issue Key to retrieve the issue ID. Builds a Tempo worklog payload (authorAccountId, issueId, start date/time, description, and time spent calculated from start/end times). Sends each worklog to the Tempo to create the worklog entry. Archives each submitted entry into the Airtable “Worklog History” table and deletes the original record from “Daily Worklog”. Aggregates the processed records and sends a direct message in Slack confirming the upload. Setup Connect Airtable credentials and update the base ID and table IDs for “Daily Worklog” and “Worklog History” to match your Airtable setup. Connect Jira Software Cloud credentials with access to the projects/issues referenced by the Airtable Issue Key field. Connect an HTTP Bearer credential using your Tempo API token, and replace YOUR_TEMPO_AUTHOR_ID in
Review stale Notion docs with Gmail alerts, Slack reports, and OpenAI
Quick overview This workflow runs every Friday to scan a Notion documentation database for pages not edited in 90+ days, marks them as “Needs review,” emails owners of critical stale docs via Gmail, and uses OpenAI to generate a prioritized weekly review plan that it posts to a Slack channel. How it works Runs every Friday at 10:00 on a schedule. Retrieves all pages from a selected Notion database and calculates how many days it has been since each page was last edited, along with its title, URL, owner email, and importance. Filters the list to only documentation pages that have been untouched for 90 days or more. Updates each stale page in Notion by setting its Status to “Needs review.” Sends a Gmail email to the page owner when the stale document is marked as Critical and an owner email is present. Aggregates all stale documents and sends them to OpenAI to draft a short, risk-ranked weekly docs review plan. Posts the generated review plan to a specified Slack channel. Setup Connect credentials for Notion, Gmail, OpenAI (Chat Model), and Slack. Select your target Notion database in the Notion “getAll” step and ensure it contains properties for Owner Email, Importance (Critical/Nor
Track Amazon best seller ranks in Airtable with ScraperAPI and Slack
Quick overview This workflow runs daily at 8am to read an ASIN watchlist from Airtable, fetch each Amazon product’s Best Sellers Rank via ScraperAPI, store rank history back in Airtable, and post a consolidated Slack alert when a product’s rank change exceeds a configured threshold. How it works Runs every morning at 8am on a schedule. Searches Airtable for active watchlist items and processes them one at a time. Fetches each product’s Amazon data from ScraperAPI using the ASIN. Parses the Best Sellers Rank text into a numeric rank, calculates the change versus the previous saved rank, and flags items that exceed the watchlist threshold. Creates a new rank-history record in Airtable and updates the watchlist item with the latest rank and check time. Searches Airtable for today’s flagged rank-history records, builds a single digest message, and posts it to a Slack channel if any alerts exist. Setup Add Airtable credentials and select the Base/Table for both the watchlist search, the rank-history create step, the watchlist update step, and the “today’s alerts” search. Ensure your Airtable schema includes a Watchlist table with fields like active, asin, label, rank_threshold, last_ran
Qualify and route free signups with Twain, Claude, Slack, HubSpot and Gmail
Quick overview This workflow receives free-signup events via webhook, enriches the contact with Twain research (and optional Findymail LinkedIn lookup), uses Anthropic Claude to score ICP fit, then routes outcomes to Slack and, for high-fit leads, to HubSpot and Gmail. How it works Receives a POST webhook request for a new signup and authenticates it via a required header. Normalizes the signup fields (uid, email, name, LinkedIn URL) and deduplicates records across runs to avoid reprocessing the same user. If the signup has no LinkedIn URL but has an email, optionally calls Findymail reverse-email lookup to resolve a LinkedIn profile URL and merges it back into the contact. If the lead has neither a work email nor a LinkedIn URL, posts a “skipped” message to Slack and stops. Sends the contact to the Twain Generate/Research API to create research and add the contact to the specified Twain campaign, and posts a Slack alert if the research request fails. If Twain flags a hard disqualification (persona mismatch or incomplete profile), posts a disqualification message to Slack; otherwise, Anthropic Claude evaluates the research against the defined ICP tiers and returns a structured fit