How to Send Microsoft Teams Company Notifications Using Webhooks and Power Automate

Last updated: December 3, 2025

Important Note:

This guide walks you through how to use Microsoft Power Automate to send webhook data as notifications in Microsoft Teams.

Real-time notifications are supported in Warm Chat, when using the Warmly Webhook to trigger a Microsoft Teams notification via Power Automate.

Orchestrations are not real-time, and typically take 30–60 minutes to run after the trigger is activated.


1. Access Microsoft Power Automate Premium

Make sure you have access to Power Automate Premium ($15/month as of March 2025 — a free trial is available).

🔗 Power Automate

Sign in, then follow these steps:

  • Click Create in the left-hand menu

    image (1).png
  • Choose Instant cloud flow

    image (3).png
  • Click Skip to start from a blank flow

  • For the trigger, search for "When an HTTP request is received"

    image (4).png
  • For the "Who can trigger the flow" field, set it to Anyone

    image.png

Once you select this trigger, Power Automate will generate a unique webhook URL after saving the flow. This is the URL you’ll paste into your orchestrator webhook sender.


2. (Optional) Define the Expected Schema

In the "When an HTTP request is received" step, click "Use sample payload to generate schema" and paste in the following JSON to define the expected structure:

{
    "industry": "Internet Software & Services",
    "sector": "Information Technology",
    "subIndustry": "Internet Software & Services",
    "description": "Warmly is an autonomous sales orchestration platform that helps businesses convert website visitors into warm leads. It identifies which accounts to prioritize and the stage of the buyer journey, and then orchestrates the most effective next step to ac...",
    "domain": "warmly.ai",
    "emailProvider": false,
    "facebookHandle": null,
    "twitterHandle": "warmlyai",
    "crunchbaseHandle": null,
    "linkedinHandle": "company/warmly",
    "city": "Marina del Rey",
    "country": "United States",
    "countryCode": "US",
    "state": "California",
    "stateCode": "CA",
    "foundedYear": 2017,
    "postalCode": "90292",
    "streetAddress": null,
    "streetName": "Washington Boulevard",
    "streetNumber": "475",
    "legalName": "Warmly Inc",
    "logo": "https://logo.clearbit.com/warmly.ai",
    "employeesRange": "1-10",
    "employeesNumber": 5,
    "fiscalYearEnd": null,
    "annualRevenue": null,
    "estimatedAnnualRevenue": "$0-$1M",
    "marketCap": null,
    "alexaGlobalRank": 355981,
    "alexaUsRank": 71567,
    "utcOffset": -8,
    "timeZone": "America/Los_Angeles",
    "name": "Warmly",
    "parentDomain": null,
    "phone": null,
    "tags": [
        "Software",
        "Publishers",
        "Information",
        "Publishing",
        "Computer Programming",
        "Professional Services",
        "Computers",
        "E-commerce",
        "Technology",
        "Web Services & Apps",
        "Information Technology & Services",
        "Marketing & Advertising",
        "B2B",
        "SAAS",
        "B2C",
        "Mobile"
    ],
    "location": "475 Washington Blvd, Marina Del Rey, CA 90292, USA",
    "tech": [
        "google_tag_manager",
        "hotjar",
        "segment",
        "intercom",
        "sendgrid",
        "cloud_flare",
        "google_apps",
        "google_analytics",
        "piwik",
        "facebook_advertiser",
        "hubspot",
        "sixsense"
    ],
    "techCategories": [
        "tag_management",
        "website_optimization",
        "customer_data_platform",
        "live_chat",
        "email_delivery_service",
        "dns",
        "productivity",
        "analytics",
        "advertising",
        "marketing_automation",
        "account_based_marketing"
    ]
}

This ensures Power Automate can properly parse and use the incoming data.


3. Add Logic to Filter Bad Data

Click New Step → Search for Condition.

image.png

In the first condition field:

  • Click Expression

  • Paste the following:

and(
  not(empty(triggerBody()?['name'])),
  or(
    not(empty(triggerBody()?['city'])),
    not(empty(triggerBody()?['state'])),
    not(empty(triggerBody()?['postalCode']))
  )
)
image.png

This ensures that only valid visitor data triggers a Teams message.

  • In the "is equal to" field, type true

  • If Yes → proceed to the next step to send a message

  • If No → leave the branch empty or log it


4. Send a Microsoft Teams Notification

Under the "Yes" branch, add the step: Post an Adaptive Card to a chat or channel.

Configure the step:

  • Team: Choose the Microsoft Teams workspace

  • Channel: Select the destination channel

    image.png

Paste this Adaptive Card JSON into the message field:

{
  "$schema": "<http://adaptivecards.io/schemas/adaptive-card.json>",
  "type": "AdaptiveCard",
  "version": "1.5",
  "body": [
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "width": "stretch",
          "items": [
            {
              "type": "TextBlock",
              "text": "Someone from @{triggerBody()?['name']} is on your website",
              "weight": "Bolder",
              "size": "Large",
              "wrap": true
            }
          ]
        },
        {
          "type": "Column",
          "width": "auto",
          "items": [
            {
              "type": "Image",
              "url": "@{triggerBody()?['logo']}",
              "size": "Medium",
              "horizontalAlignment": "Right"
            }
          ]
        }
      ]
    },
    {
      "type": "TextBlock",
      "text": "Location: @{triggerBody()?['city']}, @{triggerBody()?['state']}, @{triggerBody()?['postalCode']}",
      "wrap": true
    },
    {
      "type": "TextBlock",
      "text": "First seen visiting: [@{triggerBody()?['Captured URL']}](@{triggerBody()?['Captured URL']})",
      "wrap": true
    },
    {
      "type": "ActionSet",
      "actions": [
        {
          "type": "Action.OpenUrl",
          "title": "View Session",
          "url": "@{triggerBody()?['Session URL']}"
        }
      ]
    },
    {
      "type": "TextBlock",
      "text": "About [@{triggerBody()?['name']}](@{triggerBody()?['domain']})",
      "weight": "Bolder",
      "spacing": "Medium"
    },
    {
      "type": "TextBlock",
      "text": "Company size: @{triggerBody()?['employeesRange']} employees",
      "wrap": true
    },
    {
      "type": "TextBlock",
      "text": "Industry: @{triggerBody()?['industry']}",
      "wrap": true
    }
  ]
}

5. Finalize & Test

Click Save to finalize your Power Automate Flow.

  • Copy the HTTP POST URL generated by the trigger step

  • Paste it into the Orchestrator webhook configuration

  • Click Done, then Publish in the orchestrator platform

    image.png

Your setup is now live! ✅

Every time a valid orchestrator event is triggered, a formatted notification will be posted to your selected Microsoft Teams channel.