AI Lead Scoring from MLS Data via Webhook

Summary

This workflow automates lead scoring using MLS (Multiple Listing Service) data, combining vector search and a conversational AI agent. It receives lead or property data via a webhook, processes it into embeddings, stores it in a Pinecone vector database, and then uses a Hugging Face chat model to analyze or score the leads. The results are appended to a Google Sheet for easy tracking and further action.

Ideal for real estate professionals, this workflow turns raw MLS data into actionable intelligence, enabling quick identification of high-value leads, property matching, or automated responses.

Node-by-Node Breakdown

  • Webhook (No auth) — Listens for incoming HTTP POST requests at path /lead_scoring_with_mls_data. This is the trigger that starts the workflow whenever new data is sent.
  • Splitter (No auth) — A Character Text Splitter that breaks incoming text into chunks of 400 characters with 40-character overlap. This ensures long MLS descriptions are properly segmented for embedding.
  • Embeddings (API Key auth) — Generates vector embeddings using OpenAI's default model. Requires an OpenAI API key configured in n8n credentials.
  • Insert (API Key auth) — Inserts the generated embeddings into a Pinecone index named lead_scoring_with_mls_data. This creates a searchable vector store of MLS data.
  • Query (API Key auth) — Queries the same Pinecone index to retrieve relevant documents. This node shares credentials with the Insert node and is used by the tool.
  • Tool (API Key auth) — A Vector Store Tool that wraps the Pinecone query node, making it available to the AI agent as a callable function.
  • Memory (No auth) — Buffer Window Memory that stores recent conversation context, allowing the agent to maintain state across interactions.
  • Chat (API Key auth) — Hugging Face Chat Model (e.g., Llama, Mistral) used as the language model for the agent. Requires a Hugging Face API key.
  • Agent (No auth) — An AI Agent that orchestrates the chat model, the vector store tool, and memory. It processes incoming data (from the webhook), decides when to query the vector store, and generates a response (e.g., a lead score).
  • Sheet (OAuth2) — Google Sheets node that appends the agent's output to a sheet named "Log" in the document identified by SHEET_ID. You must replace SHEET_ID with your actual Google Sheet ID and configure OAuth2 credentials for Google Sheets.

Setup Instructions

  1. Webhook: No setup required; the webhook URL will be generated when you activate the workflow in n8n.
  2. OpenAI: Create an account at platform.openai.com and generate an API key. Add this as a credential in n8n (OpenAI type).
  3. Pinecone: Sign up at pinecone.io, create an index named lead_scoring_with_mls_data (dimensions matching OpenAI embeddings, e.g., 1536). Obtain your API key and environment. Add as a Pinecone credential in n8n.
  4. Hugging Face: Create an account at huggingface.co and generate an access token. Add as a credential in n8n (Hugging Face type).
  5. Google Sheets: Enable the Google Sheets API in your Google Cloud project, create OAuth2 credentials (Desktop app type), and add them in n8n. Replace the placeholder SHEET_ID in the Sheet node with the actual ID of your Google Sheet.
  6. Activate the workflow and send a POST request to the webhook URL with your MLS data (e.g., JSON with property details).

Use Cases & Variations

  • Real Estate Lead Scoring: Incoming MLS leads are automatically analyzed and scored based on criteria like price, location, or features. The agent can output a score (0–100) and store it in Google Sheets.
  • Property Matching: Instead of scoring, the agent can find similar properties from the vector store and recommend them.
  • Multi-step Analysis: Add more tools (e.g., a calculator or CRM lookup) to enrich the agent's capabilities.
  • Different Trigger: Replace the webhook with a schedule or event-driven trigger (e.g., new email or form submission).
  • Alternative Vector DB: Swap Pinecone for Qdrant, Weaviate, or Supabase by changing the vector store type.
  • Model Choice: Use OpenAI's chat model instead of Hugging Face by swapping the Chat node.
11 nodeswebhook triggerSales
Sticky NoteWebhookText Splitter Character Text SplitterEmbeddings Open AIVector Store PineconeTool Vector StoreMemory Buffer WindowLm Chat Hf

Workflow JSON

{
  "name": "Mortgage Rate Alert",
  "nodes": [
    {
      "parameters": {
        "content": "## Mortgage Rate Alert",
        "height": 520,
        "width": 1100
      },
      "id": "e7f69fa7-a800-43bc-b113-061d37523f4d",
      "name": "Sticky",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -500,
        -250
      ]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "mortgage_rate_alert"
      },
      "id": "3b8e8fe5-3986-44f2-9306-790e2ae3119f",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [
        -300,
        0
      ]
    },
    {
      "parameters": {
        "chunkSize": 400,
        "chunkOverlap": 40
      },
      "id": "dc561d99-0499-4c81-a7e5-e59ced66a2d5",
      "name": "Splitter",
      "type": "@n8n/n8n-nodes-langchain.textSplitterCharacterTextSplitter",
      "typeVersion": 1,
      "position": [
        -100,
        0
      ]
    },
    {
      "parameters": {
        "model": "default"
      },
// ... truncated (copy to see full JSON)

How to Import This Workflow

  1. 1Copy the workflow JSON above using the Copy Workflow JSON button.
  2. 2Open your n8n instance and go to Workflows.
  3. 3Click Import from JSON and paste the copied workflow.

Don't have an n8n instance? Start your free trial at n8nautomation.cloud

Related Templates

Lead Capture to Notion CRM with Alerts in Slack

Overview This workflow instantly captures leads from any web form (Webflow, Tally, WordPress, custom HTML, etc.) and creates a new entry in your Notion CRM database while simultaneously sending a formatted alert to a Slack sales channel. It eliminates manual data entry and ensures your sales team can respond to leads within seconds of submission — no Zapier subscription required. How It Works The workflow is triggered by an incoming HTTP POST request (the webhook), then processes the lead data through two sequential actions: first creating a Notion database page, then posting a Slack message. The webhook responds immediately with a 200 status so the form never hangs or times out. Node-by-Node Breakdown Lead Webhook (No auth) — Listens for incoming POST requests at the path . Accepts both JSON and form-encoded payloads. When activated, n8n provides a unique production URL that you point your form's action attribute or integration to. The node responds automatically with HTTP 200 after all downstream nodes complete. Add to Notion CRM (OAuth2) — Creates a new database page in your specified Notion database. Configured parameters: - : The Notion database ID (must be replaced with your actual database ID) - : Set dynamically to (the lead's name from the webhook payload) - : Maps the lead's email to the "Email" property and sets a "Status" select property to "New" - Requires sharing your Notion database with the n8n integration Alert Sales Channel (OAuth2) — Posts a formatted Slack message to a specified channel. Configured parameters: - : The Slack channel ID (must be replaced with your actual channel) - : A dynamic message template using expressions: - Uses Slack's markdown formatting for bold text and blockquotes Setup Instructions Prerequisites An n8n instance (self-hosted or cloud) A Notion account with a Leads database (must contain at least Name, Email, and Status properties) A Slack workspace where you can create/choose a channel for lead alerts A web form or service that can send POST requests (Webflow, Tally, WordPress, Framer, custom HTML form, etc.) Step-by-Step Activate the workflow in n8n and copy the production webhook URL from the Lead Webhook node (it will look like ) Configure your form to send a POST request to that URL with fields: , , and (JSON or form-encoded both work) Connect Notion: - Create an integration at https://www.notion.so/my-integrations - Share your Leads database with that integration - In n8n, create a Notion credential (OAuth2) and select your database - Replace with your actual database ID Connect Slack: - Create a Slack app with and scopes - Install the app to your workspace - In n8n, create a Slack credential (OAuth2) - Replace with your actual channel ID (e.g., ) Test: Submit a test lead through your form and verify it appears in Notion and Slack Use Cases & Adaptations Primary Use Cases Marketing teams: Capture leads from landing pages, webinar registrations, or content downloads Sales teams: Get instant notifications when high-value prospects submit inquiries Startups: Build a lightweight CRM without expensive tools Variations to Try Add email automation: Insert a Gmail or SendGrid node after Notion to send an auto-reply to the lead Enrich lead data: Add an HTTP Request node to look up company info via Clearbit or Hunter.io Score leads: Use an n8n Code node to assign lead scores based on message content or source Multi-channel capture: Create additional webhook nodes for different forms, each routing to the same Notion database Error handling: Build a separate Error Trigger workflow that posts to Slack when any node fails Required Replacements Before running, you must replace these placeholder values: → Your Notion database ID → Your Slack channel ID

6 nodes

AI-Powered Competitor Price RAG Pipeline with Logging

Overview This workflow implements a Retrieval-Augmented Generation (RAG) pipeline for processing and analyzing competitor pricing data. It is triggered via a webhook (e.g., by an external scraper), splits incoming text into chunks, generates embeddings using OpenAI, stores them in a Supabase vector store, and then allows an Anthropic-powered AI agent to query that context. Results are appended to a Google Sheet for record-keeping, and any errors trigger a Slack alert to a designated channel. This setup is ideal for teams that need to automate the ingestion of structured or unstructured competitor data, enable natural language queries against that data, and maintain an audit log—all without manual intervention. Node-by-Node Breakdown Sticky Note — A visual note in the editor (not executed). Webhook Trigger (No auth) — Listens for incoming POST requests at the path . This is the entry point; an external service (e.g., a custom scraper) should send data here. Text Splitter (No auth) — Splits the incoming text into chunks of 400 characters with 40 character overlap. This ensures the embeddings are meaningful and context windows are manageable. Embeddings (API Key auth — OpenAI) — Uses the model to convert each text chunk into a vector embedding. Requires an OpenAI API key. Supabase Insert (API Key auth — Supabase) — Inserts the generated embeddings into the Supabase vector store under the index . This stores the data for future retrieval. Supabase Query (API Key auth — Supabase) — Queries the same Supabase vector index to retrieve relevant chunks based on a question or input from the agent. Vector Tool (No auth) — Wraps the Supabase query as a tool that the AI agent can call to fetch contextual data. Window Memory (No auth) — Provides conversational memory (buffer window) so the agent can maintain context across multiple interactions. Chat Model (API Key auth — Anthropic) — The language model that powers the AI agent. Uses Anthropic’s Claude model (selected via credentials). Requires an Anthropic API key. RAG Agent (No auth) — The core AI agent that receives the incoming data, uses the vector tool to retrieve relevant context, and generates a response using the chat model. The system message is set to "You are an assistant for Competitor Price Scraper". Append Sheet (OAuth2 — Google Sheets) — Appends the agent’s response (from the node) to a Google Sheet named . You must specify the Google Sheet ID and sheet name in the node parameters. Slack Alert (OAuth2 — Slack) — Triggered only on error from the RAG Agent. Sends a message to the channel with the error details. Setup Instructions Accounts & Credentials – You will need: - An OpenAI account (for embeddings). Create an API key and add it in n8n as an OpenAI credential. - An Anthropic account (for the chat model). Create an API key and add it as an Anthropic credential. - A Supabase project. Enable the pgvector extension, create a table for embeddings, and get the Supabase URL + anon/public API key. Add these as a Supabase credential in n8n. - A Google Cloud project with the Sheets API enabled. Generate OAuth2 credentials (or use a service account) and add them as a Google Sheets OAuth2 credential in n8n. - A Slack workspace. Create a Slack app with chat:write permission and install it to your workspace. Add the bot token as a Slack OAuth2 credential in n8n. Configure the Webhook – The webhook path is . You can change this as needed. Expose this endpoint (e.g., via n8n’s public URL or a tunnel) so your scraper can POST data to it. Set the Google Sheet ID and sheet name – In the Append Sheet node, replace with the actual ID of your Google Sheet and ensure the sheet is named (or update the parameter). Adjust Slack Channel – In the Slack Alert node, set the channel name (default ) to one that exists in your Slack workspace. Test the workflow – Send a sample POST request with some competitor price text to the webhook URL. Check the Google Sheet for logged responses and test error handling by sending malformed data. Use Cases & Variations Competitive Intelligence – Automate the ingestion of price lists, product descriptions, or news articles from competitors. Use the AI agent to answer questions like “Which competitor has the lowest price on product X?”. Document Q&A – Adapt this pipeline for any document type (PDFs, support tickets, internal memos). Replace the webhook with a file trigger and use the same RAG flow. Multi-Source Ingestion – Add an HTTP Request node before the Text Splitter to fetch data from an API or RSS feed instead of relying on a webhook. Custom Output – Instead of a Google Sheet, send the agent’s response via email, SMS, or directly into a CRM. Scheduled Runs – Swap the Webhook Trigger for a Schedule Trigger to run the ingestion on a regular basis (e.g., daily).

12 nodes

Extract Google Maps Business Leads via Dumpling AI to Google Sheets

Overview This workflow automates the extraction of business listings from Google Maps using Dumpling AI's search-maps API and logs the results into a structured Google Sheet. It's ideal for lead generation, market research, or competitive analysis — allowing you to quickly gather data like business names, ratings, addresses, phone numbers, websites, and booking links without manual browsing. Workflow Steps Trigger: Manual Test Run (Manual Trigger) — Starts the workflow on demand for testing. No authentication required. Search Google Maps via Dumpling AI (HTTP Request) — Sends a POST request to with a JSON body containing the search query (e.g., ) and language. Authentication uses Header Auth — you must provide a Dumpling AI API key as a header (configured in n8n credentials). The response returns an array of places with details like title, rating, address, phone, website, price level, and booking links. Split Places List for Processing (Split Out) — Splits the array from the HTTP response into individual items so each place can be processed separately. No authentication needed. Save Results to Google Sheet (Place Info) (Google Sheets) — Appends each place's data (name, address, rating, price level, type, website, phone, position, booking link) to a specified sheet in a Google Sheets document. Uses OAuth2 authentication (Google account). The sheet name is set to "Google Maps" and the document ID points to a spreadsheet named "Places". Setup Instructions Dumpling AI Account: Sign up at dumplingai.com and obtain an API key. In n8n, create a new Header Auth credential with the key name (e.g., ) and value . Google Sheets: Create a Google Sheet (or use the one referenced in the workflow). In n8n, create a Google Sheets OAuth2 credential by connecting your Google account. Ensure the sheet has a tab named "Google Maps" (or update the sheet name in the node). Customize Query: Edit the of the HTTP Request node to change the search query (e.g., ) or language. Run: Click "Execute Workflow" to test. The first run will prompt you to authorize Google Sheets access. Use Cases & Variations Lead Generation: Replace the query with industry-specific terms (e.g., "dentists in Los Angeles") to build a targeted prospect list. Competitor Analysis: Search for competitors in a niche and analyze their ratings, price levels, and online presence. Real Estate / Local Business Research: Extract data for multiple locations by chaining queries or using a loop. Automation: Replace the Manual Trigger with a Schedule Trigger to run daily/weekly, and add a Set node to dynamically pass queries from a spreadsheet or webhook. Enrichment: Add nodes to clean data, send notifications (Slack/Email), or integrate with a CRM like HubSpot.

5 nodes

Ready to automate with n8n?

Get affordable managed n8n hosting with 24/7 support.