Back to Blog
BlogArticle
Microsoft 365Power AutomateAutomationWorkflowProductivityLow-Code

Microsoft Power Automate: Complete Guide to Workflow Automation (2025)

Master Microsoft Power Automate with step-by-step tutorials for email workflows, Microsoft 365 integration, business process automation, and productivity boost

S
Sarah Johnson
Content Writer
5 min read
1,043 words

Microsoft Power Automate: Complete Guide to Workflow Automation (2025)

Microsoft Power Automate (formerly Microsoft Flow) is a powerful low-code automation platform that connects your apps, data, and services. This comprehensive guide teaches you how to automate workflows, boost productivity, and streamline business processes.

What is Power Automate?

Power Automate enables you to create automated workflows between apps and services to:

  • ✅ Automate repetitive tasks
  • ✅ Synchronize files and data
  • ✅ Collect data and get notifications
  • ✅ Approve requests automatically
  • ✅ Process documents with AI
  • ✅ Connect 500+ services

Real-World Impact:

Manual Process (Weekly):
- Process 50 email attachments: 2 hours
- Create invoices from forms: 3 hours
- Update multiple spreadsheets: 1.5 hours
- Send approval requests: 1 hour
- Generate reports: 2 hours
Total: 9.5 hours/week = 494 hours/year

With Power Automate:
- Setup time: 12 hours (one-time)
- Weekly runtime: 0 hours (automatic)
- Maintenance: 1 hour/month = 12 hours/year

Annual savings: 470 hours (11.75 work weeks!)
ROI: 3,817% in first year

Table of Contents

  1. Getting Started
  2. Understanding Flow Types
  3. Email Automation
  4. Document Processing
  5. Approval Workflows
  6. Microsoft 365 Integration
  7. SharePoint Automation
  8. Teams Integration
  9. Forms and Data Collection
  10. AI Builder Integration
  11. External Connectors
  12. Advanced Techniques
  13. Best Practices
  14. Real-World Business Scenarios

Getting Started

Accessing Power Automate

Included in Microsoft 365:

✅ Business Basic: Limited flows
✅ Business Standard: Standard flows
✅ Business Premium: Premium flows
✅ E3/E5: Full features

Access:
- Web: flow.microsoft.com
- Mobile: Power Automate app (iOS/Android)
- Desktop: Power Automate Desktop

Power Automate Interface

Main Components:

Navigation Menu:
├── Home: Quick access to common tasks
├── My flows: Your created flows
├── Create: Start new flows
├── Templates: Pre-built flows
├── Connectors: Available services
├── Data: Tables and entities
├── Monitor: Flow analytics
└── Learn: Tutorials and documentation

Flow Designer:
├── Trigger: What starts the flow
├── Actions: Steps to perform
├── Conditions: Decision logic
├── Loops: Repeat actions
└── Variables: Store data

Creating Your First Flow

Step-by-Step: Email Notification Flow:

Step 1: Choose a Template or Start from Blank

1. Go to flow.microsoft.com
2. Click "Create" in left menu
3. Choose "Automated cloud flow"
4. Name: "Send me email when I'm mentioned in Teams"
5. Click "Create"

Step 2: Set Up the Trigger

1. Search for "Teams"
2. Select "When I'm mentioned (Teams)"
3. Sign in to Teams (first time)
4. No configuration needed
5. Click "New step"

Step 3: Add an Action

1. Search for "Send an email"
2. Select "Send an email (V2)" (Office 365 Outlook)
3. Configure:
   - To: [Your email]
   - Subject: "You were mentioned in Teams"
   - Body: Use dynamic content:
     * Mention text
     * Message link
     * Mentioned by
4. Click "Save"

Step 4: Test

1. Click "Test" in top right
2. Select "Manually"
3. Have someone mention you in Teams
4. Flow runs and you receive email
5. Success! ✅

Understanding Flow Components

Triggers (What starts the flow):

⏰ Schedule: Run at specific times
📧 When email received
📝 When file created/modified
📋 When form submitted
🔔 When item created in list
👤 Manual trigger (button)
🌐 HTTP request received

Actions (What the flow does):

📧 Send email
📄 Create file
📊 Add row to Excel
💬 Post to Teams
📋 Create item in SharePoint
🔄 Update record
🗑️ Delete item
🌐 HTTP request

Conditions (Decision logic):

if/else: If condition met, do this; otherwise, do that
switch: Multiple condition branches
do until: Repeat until condition met

Loops:

Apply to each: Perform action for each item
Do until: Repeat until condition is true

Understanding Flow Types

1. Automated Cloud Flows

What: Triggered automatically by an event

Examples:

✅ When email arrives with attachment → Save to OneDrive
✅ When form submitted → Create item in SharePoint
✅ When file added to folder → Send approval request
✅ When mentioned in Teams → Send notification
✅ When calendar event created → Post to Teams channel

Use Cases:

  • Email processing
  • File management
  • Notification systems
  • Data synchronization
  • Event-based automation

2. Instant Flows (Button Flows)

What: Triggered manually by clicking a button

Examples:

🔘 Send daily report
🔘 Log work hours
🔘 Request time off
🔘 Order office supplies
🔘 Report an issue
🔘 Share my location

Use Cases:

  • On-demand reporting
  • Quick data entry
  • Mobile productivity
  • Self-service tasks

3. Scheduled Flows

What: Run automatically on a schedule

Examples:

⏰ Daily at 8 AM: Send sales report
⏰ Every Monday: Create weekly task list
⏰ End of month: Generate financial summary
⏰ Every hour: Sync data between systems
⏰ Every Friday at 5 PM: Archive completed tasks

Use Cases:

  • Regular reports
  • Data backups
  • Cleanup tasks
  • Periodic notifications
  • Scheduled synchronization

4. Desktop Flows (RPA)

What: Automate desktop and web applications

Examples:

🖥️ Data entry into legacy systems
🖥️ Web scraping
🖥️ Desktop application automation
🖥️ File processing
🖥️ Report generation from desktop apps

Use Cases:

  • Legacy system integration
  • Desktop automation
  • Web automation
  • UI testing

5. Business Process Flows

What: Guide users through business processes

Examples:

📋 Lead qualification process
📋 Customer onboarding workflow
📋 Employee onboarding checklist
📋 Incident management process
📋 Sales opportunity stages

Use Cases:

  • Standardized processes
  • User guidance
  • Process compliance
  • Stage-based workflows

Email Automation

Save Email Attachments to OneDrive

Common Business Need: Automatically save invoice attachments from vendor emails

Flow Design:

TRIGGER: When a new email arrives (Office 365 Outlook)
↓
CONDITION: Check if subject contains "Invoice"
↓ (Yes)
CONDITION: Check if email has attachments
↓ (Yes)
ACTION: Apply to each attachment
  ├─ Get attachment content
  ├─ Create file in OneDrive
  │  Path: /Invoices/[Year]/[Month]/
  │  File name: [Attachment Name]
  └─ Move email to "Processed" folder
↓
ACTION: Send confirmation email

Step-by-Step Implementation:

Step 1: Create the Trigger

Trigger: When a new email arrives (V3)
- Folder: Inbox
- Include Attachments: Yes
- Subject Filter: Invoice

Step 2: Add Attachment Processing

Action: Apply to each
- Select output: Attachments

Inside loop:
  Action: Create file (OneDrive)
  - Folder path: /Invoices/@{formatDateTime(utcNow(), 'yyyy')}/@{formatDateTime(utcNow(), 'MM')}
  - File name: @{items('Apply_to_each')?['name']}
  - File content: @{items('Apply_to_each')?['contentBytes']}

Step 3: Move Processed Email

Action: Move email (V2)
- Message Id: @{triggerOutputs()?['body/id']}
- Folder: Processed Invoices

Step 4: Send Confirmation

Action: Send an email (V2)
- To: accounting@company.com
- Subject: Invoice Received - @{triggerOutputs()?['body/subject']}
- Body: 
  Invoice saved to OneDrive.
  
  From: @{triggerOutputs()?['body/from']}
  Received: @{triggerOutputs()?['body/receivedDateTime']}
  Attachments: @{length(triggerOutputs()?['body/attachments'])}
  
  View in OneDrive: [Link]

Auto-Respond to Specific Emails

Scenario: Auto-respond to customer support emails during business hours

Flow Design:

TRIGGER: When email arrives in support@company.com
↓
CONDITION: Is it during business hours? (Mon-Fri, 9 AM - 5 PM)
↓ (Yes)
ACTION: Send auto-reply
  - Thank you message
  - Expected response time
  - Ticket number generated
↓
ACTION: Create item in SharePoint (Support Tickets)
↓
ACTION: Post notification to Teams channel

Implementation:

Trigger: When a new email arrives
- Folder: Inbox
- To: support@company.com

Condition: Check business hours
- dayOfWeek(utcNow()) is greater than 0 AND
- dayOfWeek(utcNow()) is less than 6 AND
- hour(convertFromUtc(utcNow(), 'Eastern Standard Time')) is greater than or equal to 9 AND
- hour(convertFromUtc(utcNow(), 'Eastern Standard Time')) is less than 17

If yes:
  Action: Reply to email (V3)
  - Message Id: @{triggerOutputs()?['body/id']}
  - Body:
    Thank you for contacting support!
    
    Your ticket #@{formatDateTime(utcNow(), 'yyyyMMddHHmm')} has been created.
    
    We'll respond within 24 business hours.
    
    Best regards,
    Support Team

Email Digest: Compile and Send

Scenario: Daily digest of important emails

Flow Design:

TRIGGER: Recurrence (Daily at 8 AM)
↓
ACTION: Get emails from last 24 hours
  - Folder: Inbox
  - Filter: Importance eq 'High'
  - Filter: ReceivedDateTime gt @{addDays(utcNow(), -1)}
↓
ACTION: Initialize array variable to store email data
↓
ACTION: Apply to each email
  ├─ Append to array:
  │    Subject, From, Received Time, Preview
  └─ Mark as read
↓
ACTION: Create HTML table from array
↓
ACTION: Send email with digest

Implementation:

Trigger: Recurrence
- Interval: 1
- Frequency: Day
- At these hours: 8
- At these minutes: 0

Action: Get emails (V3)
- Folder: Inbox
- Fetch Only Unread Messages: Yes
- Importance: High
- Top: 50

Action: Initialize variable
- Name: EmailDigest
- Type: Array
- Value: []

Action: Apply to each
- Select output: @{body('Get_emails')?['value']}

Inside loop:
  Action: Append to array variable
  - Name: EmailDigest
  - Value:
    {
      "Subject": "@{items('Apply_to_each')?['subject']}",
      "From": "@{items('Apply_to_each')?['from']?['emailAddress']?['name']}",
      "Time": "@{items('Apply_to_each')?['receivedDateTime']}",
      "Preview": "@{items('Apply_to_each')?['bodyPreview']}"
    }
  
  Action: Mark as read
  - Message Id: @{items('Apply_to_each')?['id']}

Action: Create HTML table
- From: @{variables('EmailDigest')}
- Columns: Automatic

Action: Send an email
- To: [Your email]
- Subject: Daily Email Digest - @{formatDateTime(utcNow(), 'MM/dd/yyyy')}
- Body:
  <h2>Your Daily Email Digest</h2>
  <p>Here are your high-priority emails from the last 24 hours:</p>
  @{body('Create_HTML_table')}
  <p>Total emails: @{length(body('Get_emails')?['value'])}</p>

Smart Email Categorization

Scenario: Automatically categorize and route emails

Flow Design:

TRIGGER: When email arrives
↓
CONDITION: Check subject/body keywords
├─ Contains "invoice" → Move to Invoices folder, add "Invoice" category
├─ Contains "urgent" → Flag, notify manager, move to Priority
├─ Contains "meeting" → Add to calendar, move to Meetings
├─ From specific domains → Move to Partners folder
└─ Default → Stay in inbox

ACTION: Log categorization in SharePoint

Implementation with Switch Statement:

Trigger: When a new email arrives

Action: Initialize variable (EmailCategory)
- Type: String
- Value: "General"

Condition: Check for invoice keywords
- Expression: or(
    contains(toLower(triggerOutputs()?['body/subject']), 'invoice'),
    contains(toLower(triggerOutputs()?['body/bodyPreview']), 'invoice')
  )

If yes: Set EmailCategory to "Invoice"

Switch: Based on EmailCategory

Case: Invoice
  - Move email to: /Invoices
  - Add category: Invoice
  - Forward to: accounting@company.com

Case: Urgent
  - Flag email
  - Send Teams notification
  - Move to: /Priority

Case: Meeting
  - Extract meeting details
  - Create calendar event
  - Move to: /Meetings

Default:
  - Stay in Inbox

Document Processing

Convert Email Attachments to PDF

Scenario: Convert Word/Excel attachments to PDF automatically

Flow Design:

TRIGGER: When email arrives with attachment
↓
ACTION: Apply to each attachment
  ↓
  CONDITION: Is file type .docx or .xlsx?
  ↓ (Yes)
  ACTION: Convert file to PDF (OneDrive)
  ↓
  ACTION: Save PDF to SharePoint
  ↓
  ACTION: Send notification with link

Implementation:

Trigger: When a new email arrives
- Include Attachments: Yes

Action: Apply to each
- Select: Attachments

Inside loop:
  Condition: Check file extension
  - Expression: or(
      endsWith(items('Apply_to_each')?['name'], '.docx'),
      endsWith(items('Apply_to_each')?['name'], '.xlsx')
    )
  
  If yes:
    Action: Create file (OneDrive)
    - Folder: /Temp
    - File name: @{items('Apply_to_each')?['name']}
    - File content: @{items('Apply_to_each')?['contentBytes']}
    
    Action: Convert file (OneDrive)
    - File: /Temp/@{items('Apply_to_each')?['name']}
    
    Action: Get file content (OneDrive)
    - File: PDF output from previous step
    
    Action: Create file (SharePoint)
    - Site: Your SharePoint site
    - Folder: /Documents
    - File name: @{replace(items('Apply_to_each')?['name'], split(items('Apply_to_each')?['name'], '.')[1], 'pdf')}
    - File content: @{body('Get_file_content')}
    
    Action: Delete file (OneDrive)
    - File: /Temp/@{items('Apply_to_each')?['name']}

OCR and Text Extraction

Scenario: Extract text from scanned documents using AI Builder

Flow Design:

TRIGGER: When file created in SharePoint folder
↓
CONDITION: Is file an image or PDF?
↓ (Yes)
ACTION: Extract text using AI Builder OCR
↓
ACTION: Create Word document with extracted text
↓
ACTION: Save to processed folder
↓
ACTION: Add metadata to original file

Implementation:

Trigger: When a file is created (SharePoint)
- Site: Your site
- Library: Scanned Documents
- Folder: /Inbox

Condition: Check file type
- Expression: or(
    endsWith(triggerOutputs()?['body/{FilenameWithExtension}'], '.pdf'),
    endsWith(triggerOutputs()?['body/{FilenameWithExtension}'], '.jpg'),
    endsWith(triggerOutputs()?['body/{FilenameWithExtension}'], '.png')
  )

If yes:
  Action: Get file content (SharePoint)
  
  Action: Recognize text in an image or a PDF (AI Builder)
  - Image: @{body('Get_file_content')}
  
  Action: Create file (OneDrive)
  - Folder: /Processed
  - File name: @{replace(triggerOutputs()?['body/{FilenameWithExtension}'], split(triggerOutputs()?['body/{FilenameWithExtension}'], '.')[1], 'txt')}
  - File content: @{outputs('Recognize_text')?['body/text']}
  
  Action: Update file properties (SharePoint)
  - Site: Your site
  - Library: Scanned Documents
  - Id: @{triggerOutputs()?['body/ID']}
  - OCR_Processed: Yes
  - ExtractedText: @{outputs('Recognize_text')?['body/text']}
  - ProcessedDate: @{utcNow()}

Document Approval Workflow

Scenario: Route document for approval

Flow Design:

TRIGGER: When file created in "For Approval" folder
↓
ACTION: Get file metadata
↓
ACTION: Start and wait for approval
  - Approvers: Manager, Department Head
  - Details: File name, author, date
↓
CONDITION: Approved?
├─ (Yes)
│  ├─ Move to "Approved" folder
│  ├─ Update metadata
│  └─ Notify stakeholders
└─ (No)
   ├─ Move to "Rejected" folder
   ├─ Update metadata
   └─ Notify author with feedback

Implementation:

Trigger: When a file is created (SharePoint)
- Site: Your site
- Library: Documents
- Folder: /For Approval

Action: Get file metadata (SharePoint)
- Site: Your site
- Library: Documents
- Id: @{triggerOutputs()?['body/ID']}

Action: Start and wait for an approval
- Approval type: Approve/Reject - First to respond
- Title: Approve document: @{triggerOutputs()?['body/{FilenameWithExtension}']}
- Assigned to: manager@company.com;head@company.com
- Details:
  File: @{triggerOutputs()?['body/{FilenameWithExtension}']}
  Author: @{body('Get_file_metadata')?['Author']?['DisplayName']}
  Created: @{triggerOutputs()?['body/Created']}
  
  Link: @{triggerOutputs()?['body/{Link}']}
- Item link: @{triggerOutputs()?['body/{Link}']}
- Item link description: View Document

Condition: Check approval outcome
- Expression: @{outputs('Start_and_wait_for_an_approval')?['body/outcome']} equals Approve

If yes (Approved):
  Action: Move file (SharePoint)
  - Site: Your site
  - Source File: @{triggerOutputs()?['body/{Identifier}']}
  - Destination Folder: /Approved
  
  Action: Update file properties
  - Approval_Status: Approved
  - Approved_By: @{outputs('Start_and_wait_for_an_approval')?['body/responses'][0]?['responder']?['displayName']}
  - Approved_Date: @{utcNow()}
  
  Action: Send email (notify author)
  - To: @{body('Get_file_metadata')?['Author']?['Email']}
  - Subject: Document Approved - @{triggerOutputs()?['body/{FilenameWithExtension}']}
  - Body: Your document has been approved and moved to the Approved folder.

If no (Rejected):
  Action: Move file (SharePoint)
  - Destination Folder: /Rejected
  
  Action: Update file properties
  - Approval_Status: Rejected
  - Rejected_By: @{outputs('Start_and_wait_for_an_approval')?['body/responses'][0]?['responder']?['displayName']}
  - Rejection_Reason: @{outputs('Start_and_wait_for_an_approval')?['body/responses'][0]?['comments']}
  
  Action: Send email (notify author)
  - Subject: Document Rejected - @{triggerOutputs()?['body/{FilenameWithExtension}']}
  - Body:
    Your document was rejected.
    
    Reason: @{outputs('Start_and_wait_for_an_approval')?['body/responses'][0]?['comments']}
    
    Please revise and resubmit.

Approval Workflows

Multi-Stage Approval Process

Scenario: Purchase order approval (Department → Finance → Executive)

Flow Design:

TRIGGER: When item created in "Purchase Requests" list
↓
CONDITION: Check amount
├─ < $1,000: Department Manager only
├─ $1,000-$10,000: Department + Finance
└─ > $10,000: Department + Finance + Executive
↓
ACTION: Start approval (Stage 1: Department Manager)
↓
CONDITION: Approved?
└─ (Yes) → Continue to next stage
└─ (No) → Reject and notify
↓
ACTION: Start approval (Stage 2: Finance)
↓
CONDITION: Approved?
└─ (Yes) → Continue to next stage (if needed)
└─ (No) → Reject and notify
↓
ACTION: Start approval (Stage 3: Executive, if > $10k)
↓
FINAL ACTION: Update request status and notify

Implementation:

Trigger: When an item is created (SharePoint)
- Site: Your site
- List: Purchase Requests

Action: Initialize variable (ApprovalLevel)
- Type: Integer
- Value: 
  @{if(less(triggerOutputs()?['body/Amount'], 1000), 1,
      if(less(triggerOutputs()?['body/Amount'], 10000), 2, 3))}

// Stage 1: Department Manager
Action: Start and wait for an approval
- Approval type: Approve/Reject - First to respond
- Title: Purchase Request #@{triggerOutputs()?['body/ID']} - Department Approval
- Assigned to: @{triggerOutputs()?['body/DepartmentManager']?['Email']}
- Details:
  Requester: @{triggerOutputs()?['body/Requester']?['DisplayName']}
  Amount: $@{triggerOutputs()?['body/Amount']}
  Description: @{triggerOutputs()?['body/Description']}
  Justification: @{triggerOutputs()?['body/Justification']}

Condition: Department approval result
- @{outputs('Start_and_wait_for_an_approval')?['body/outcome']} equals Approve

If no: 
  - Update item status to "Rejected - Department"
  - Send rejection notification
  - Terminate flow

If yes and ApprovalLevel >= 2:
  // Stage 2: Finance
  Action: Start and wait for an approval
  - Title: Purchase Request #@{triggerOutputs()?['body/ID']} - Finance Approval
  - Assigned to: finance@company.com
  
  Condition: Finance approval result
  If no: Reject and terminate
  
  If yes and ApprovalLevel >= 3:
    // Stage 3: Executive
    Action: Start and wait for an approval
    - Title: Purchase Request #@{triggerOutputs()?['body/ID']} - Executive Approval
    - Assigned to: cfo@company.com

Final Action: Update item
- Approval_Status: Approved
- Approved_Date: @{utcNow()}
- Approval_Chain: All approver names

Action: Send confirmation email
- To: @{triggerOutputs()?['body/Requester']?['Email']}
- Subject: Purchase Request Approved
- Body: Your purchase request has been fully approved. Proceed with purchase.

Parallel Approval

Scenario: Document requires approval from multiple stakeholders simultaneously

Flow Design:

TRIGGER: When file uploaded to "Legal Review" folder
↓
ACTION: Start parallel approvals
  ├─ Legal team
  ├─ Compliance team
  └─ Privacy team
↓
ACTION: Wait for all responses
↓
CONDITION: All approved?
├─ (Yes) → Move to approved folder, publish
└─ (No) → Move to revision folder, notify author

Implementation:

Trigger: When a file is created (SharePoint)
- Folder: /Legal Review

Action: Start and wait for an approval
- Approval type: Approve/Reject - Everyone must approve
- Title: Legal Review Required - @{triggerOutputs()?['body/{FilenameWithExtension}']}
- Assigned to: legal@company.com;compliance@company.com;privacy@company.com
- Details:
  Document: @{triggerOutputs()?['body/{FilenameWithExtension}']}
  Author: @{triggerOutputs()?['body/Author']?['DisplayName']}
  
  Please review for legal, compliance, and privacy concerns.
  
  View: @{triggerOutputs()?['body/{Link}']}

Condition: All approved?
- @{outputs('Start_and_wait_for_an_approval')?['body/outcome']} equals Approve

If yes:
  Action: Move file
  - Destination: /Published
  
  Action: Send email
  - To: @{triggerOutputs()?['body/Author']?['Email']}
  - Subject: Document Approved - @{triggerOutputs()?['body/{FilenameWithExtension}']}
  - Body:
    All teams have approved your document:
    
    ✅ Legal: @{outputs('Start_and_wait_for_an_approval')?['body/responses'][0]?['responder']?['displayName']}
    ✅ Compliance: @{outputs('Start_and_wait_for_an_approval')?['body/responses'][1]?['responder']?['displayName']}
    ✅ Privacy: @{outputs('Start_and_wait_for_an_approval')?['body/responses'][2]?['responder']?['displayName']}
    
    Your document is now published.

If no:
  Action: Move file
  - Destination: /Revisions Needed
  
  Action: Create consolidate feedback document
  - Compile all comments from reviewers
  
  Action: Send email with feedback

Microsoft 365 Integration

Excel Automation

Scenario: Auto-populate Excel from form submissions

Flow Design:

TRIGGER: When Microsoft Form is submitted
↓
ACTION: Get form response details
↓
ACTION: Add row to Excel table
  - Map each form field to Excel column
↓
ACTION: Apply formatting to new row
↓
ACTION: Calculate totals/formulas
↓
ACTION: Send confirmation email with row number

Implementation:

Trigger: When a new response is submitted (Microsoft Forms)
- Form Id: Your form

Action: Get response details
- Form Id: Your form
- Response Id: @{triggerOutputs()?['body/resourceData']?['responseId']}

Action: Add a row into a table (Excel)
- Location: OneDrive
- Document Library: OneDrive
- File: /Forms/Responses.xlsx
- Table: Table1
- Row values:
  {
    "Timestamp": "@{utcNow()}",
    "Name": "@{body('Get_response_details')?['r1234567890abc_Name']}",
    "Email": "@{body('Get_response_details')?['r1234567890abc_Email']}",
    "Department": "@{body('Get_response_details')?['r1234567890abc_Department']}",
    "RequestType": "@{body('Get_response_details')?['r1234567890abc_RequestType']}",
    "Status": "Pending"
  }

Action: Send an email
- To: @{body('Get_response_details')?['r1234567890abc_Email']}
- Subject: Form Submission Confirmed
- Body:
  Thank you for your submission!
  
  Your request has been logged as row #@{body('Add_a_row_into_a_table')?['index']}.
  
  Status: Pending
  We'll process your request within 24 hours.

Calendar Integration

Scenario: Create calendar events from SharePoint list

Flow Design:

TRIGGER: When item created in "Events" list
↓
ACTION: Get item details
↓
ACTION: Create calendar event
  - Title, date, time, location from list
  - Add attendees
  - Include Teams meeting link
↓
ACTION: Update list item with calendar event link
↓
ACTION: Send invitation to attendees

Implementation:

Trigger: When an item is created (SharePoint)
- List: Events

Action: Create event (V4) (Office 365 Outlook)
- Calendar Id: Calendar
- Subject: @{triggerOutputs()?['body/Title']}
- Start time: @{triggerOutputs()?['body/EventStartDate']}
- End time: @{triggerOutputs()?['body/EventEndDate']}
- Time zone: Eastern Standard Time
- Location: @{triggerOutputs()?['body/Location']}
- Required attendees: @{triggerOutputs()?['body/Attendees']}
- Body:
  @{triggerOutputs()?['body/Description']}
  
  Event Details:
  - Organizer: @{triggerOutputs()?['body/Organizer']?['DisplayName']}
  - Category: @{triggerOutputs()?['body/EventCategory']}
- Is online meeting: Yes
- Show as: Busy

Action: Update item (SharePoint)
- Id: @{triggerOutputs()?['body/ID']}
- Calendar_Link: @{body('Create_event_(V4)')?['webLink']}
- Teams_Meeting_Link: @{body('Create_event_(V4)')?['onlineMeetingUrl']}
- Status: Calendar Event Created

Action: Send email to organizer
- To: @{triggerOutputs()?['body/Organizer']?['Email']}
- Subject: Calendar Event Created - @{triggerOutputs()?['body/Title']}
- Body:
  Your event has been added to the calendar.
  
  View in calendar: @{body('Create_event_(V4)')?['webLink']}
  Teams meeting: @{body('Create_event_(V4)')?['onlineMeetingUrl']}

Planner Task Automation

Scenario: Create Planner tasks from emails

Flow Design:

TRIGGER: When email arrives with [TASK] in subject
↓
ACTION: Parse email content
↓
ACTION: Create task in Planner
  - Title from subject
  - Description from body
  - Due date from email content
  - Assign to mentioned users
↓
ACTION: Move email to "Processed" folder
↓
ACTION: Reply to sender with task link

Implementation:

Trigger: When a new email arrives
- Subject Filter: [TASK]

Action: Create a task (Planner)
- Group Id: Your Microsoft 365 Group
- Plan Id: Your Plan
- Title: @{replace(triggerOutputs()?['body/subject'], '[TASK]', '')}
- Bucket Id: Inbox bucket
- Due Date: @{addDays(utcNow(), 7)} // Default 7 days
- Assignments: 
  // Parse from email body or default assignee
- Description: 
  Created from email
  
  From: @{triggerOutputs()?['body/from']}
  Received: @{triggerOutputs()?['body/receivedDateTime']}
  
  ---
  
  @{triggerOutputs()?['body/bodyPreview']}

Action: Reply to email
- Message Id: @{triggerOutputs()?['body/id']}
- Comment:
  Task created in Planner: @{body('Create_a_task')?['title']}
  
  Due: @{body('Create_a_task')?['dueDateTime']}
  
  View task: @{body('Create_a_task')?['@odata.id']}

Action: Move email
- Folder: Tasks/Processed

SharePoint Automation

Automated Document Library Management

Scenario: Organize files automatically based on metadata

Flow Design:

TRIGGER: When file uploaded to SharePoint
↓
ACTION: Get file metadata
↓
ACTION: Determine category based on:
  - File name keywords
  - File type
  - Size
  - Upload date
↓
ACTION: Move to appropriate folder
↓
ACTION: Set metadata columns
↓
ACTION: Apply retention policy
↓
ACTION: Notify document owner

Implementation:

Trigger: When a file is created (SharePoint)
- Site: Your site
- Library: Documents
- Folder: /Inbox

Action: Get file metadata
- Id: @{triggerOutputs()?['body/ID']}

Action: Get file properties
- Id: @{triggerOutputs()?['body/ID']}

// Determine category
Action: Initialize variable (Category)
- Type: String
- Value: 
  @{if(
    contains(toLower(triggerOutputs()?['body/{FilenameWithExtension}']), 'invoice'),
    'Finance',
    if(
      contains(toLower(triggerOutputs()?['body/{FilenameWithExtension}']), 'contract'),
      'Legal',
      if(
        contains(toLower(triggerOutputs()?['body/{FilenameWithExtension}']), 'hr'),
        'HR',
        'General'
      )
    )
  )}

// Determine destination folder
Action: Initialize variable (DestinationFolder)
- Type: String
- Value: 
  /Categories/@{variables('Category')}/@{formatDateTime(utcNow(), 'yyyy')}/@{formatDateTime(utcNow(), 'MM')}

// Create folder structure if needed
Action: Send HTTP request to SharePoint
- Method: POST
- Uri: _api/web/folders
- Body: {
    "__metadata": { "type": "SP.Folder" },
    "ServerRelativeUrl": "@{variables('DestinationFolder')}"
  }

// Move file
Action: Move file
- Source File: @{triggerOutputs()?['body/{Identifier}']}
- Destination Folder: @{variables('DestinationFolder')}

// Update metadata
Action: Update file properties
- Id: @{triggerOutputs()?['body/ID']}
- Category: @{variables('Category')}
- Auto_Organized: Yes
- Organization_Date: @{utcNow()}
- Original_Uploader: @{triggerOutputs()?['body/Author']?['DisplayName']}

// Set retention
Action: Set content approval status
// Apply retention labels based on category

// Notify uploader
Action: Send email
- To: @{triggerOutputs()?['body/Author']?['Email']}
- Subject: File Organized - @{triggerOutputs()?['body/{FilenameWithExtension}']}
- Body:
  Your file has been automatically organized.
  
  Category: @{variables('Category')}
  New location: @{variables('DestinationFolder')}
  
  View file: @{body('Move_file')?['{Link}']}

Content Approval Workflow

Scenario: Multi-level content approval for publishing

Flow Design:

TRIGGER: When file marked "Ready for Review"
↓
ACTION: Start approval (Content Editor)
↓
CONDITION: Approved?
└─ (Yes) → Start approval (Content Manager)
   ↓
   CONDITION: Approved?
   └─ (Yes) → Publish to public folder
      ↓
      ACTION: Convert to PDF
      ↓
      ACTION: Upload to public site
      ↓
      ACTION: Update metadata
      ↓
      ACTION: Notify all stakeholders

List Item Automation

Scenario: Auto-assign tasks based on workload

Flow Design:

TRIGGER: When item created in "Tasks" list
↓
ACTION: Get all team members from "Team" list
↓
ACTION: For each team member:
  └─ Get their current task count
↓
ACTION: Find team member with lowest task count
↓
ACTION: Assign task to that person
↓
ACTION: Send notification
↓
ACTION: Create calendar reminder

Teams Integration

Automated Channel Notifications

Scenario: Post updates to Teams channel automatically

Flow Design:

TRIGGER: Various (form submission, file upload, etc.)
↓
ACTION: Format adaptive card message
↓
ACTION: Post to Teams channel
  - Include relevant details
  - Add action buttons
  - Link to source
↓
ACTION: @mention relevant people

Implementation with Adaptive Card:

Trigger: When an item is created (SharePoint)
- List: Project Updates

Action: Post adaptive card in a chat or channel (Teams)
- Post as: Flow bot
- Post in: Channel
- Team: Your Team
- Channel: General
- Adaptive Card:
{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.4",
  "body": [
    {
      "type": "TextBlock",
      "text": "New Project Update",
      "weight": "Bolder",
      "size": "Large",
      "color": "Accent"
    },
    {
      "type": "FactSet",
      "facts": [
        {
          "title": "Project:",
          "value": "@{triggerOutputs()?['body/ProjectName']}"
        },
        {
          "title": "Status:",
          "value": "@{triggerOutputs()?['body/Status']}"
        },
        {
          "title": "Posted by:",
          "value": "@{triggerOutputs()?['body/Author']?['DisplayName']}"
        },
        {
          "title": "Date:",
          "value": "@{formatDateTime(utcNow(), 'MM/dd/yyyy')}"
        }
      ]
    },
    {
      "type": "TextBlock",
      "text": "@{triggerOutputs()?['body/UpdateDescription']}",
      "wrap": true
    }
  ],
  "actions": [
    {
      "type": "Action.OpenUrl",
      "title": "View Details",
      "url": "@{triggerOutputs()?['body/{Link}']}"
    }
  ]
}

Teams Meeting Automation

Scenario: Schedule Teams meetings from form submissions

Flow Design:

TRIGGER: When form submitted (Meeting Request)
↓
ACTION: Get attendees and details
↓
ACTION: Check calendar availability
↓
ACTION: Create Teams meeting
↓
ACTION: Send invitations
↓
ACTION: Post to Teams channel
↓
ACTION: Update tracking list

Approval via Teams

Scenario: Request approvals through Teams

Flow Design:

TRIGGER: When expense submitted
↓
ACTION: Post adaptive card to manager in Teams
  - Shows expense details
  - Approve/Reject buttons
↓
CONDITION: Manager response
├─ Approved → Process payment, update records
└─ Rejected → Notify employee, log reason

Forms and Data Collection

Microsoft Forms to SharePoint

Complete Form Processing System:

TRIGGER: When Microsoft Form submitted
↓
ACTION: Get response details
↓
ACTION: Create item in SharePoint list
  - Map all form fields
  - Add metadata
  - Generate unique ID
↓
ACTION: Validate data
↓
CONDITION: Validation passed?
├─ Yes → Continue processing
└─ No → Flag for review, notify admin
↓
ACTION: Trigger downstream workflows
  - Approval if needed
  - Assignment if task
  - Integration if data sync
↓
ACTION: Send confirmation email
↓
ACTION: Post to Teams (if applicable)

Survey Result Analysis

Scenario: Analyze survey responses and generate reports

Flow Design:

TRIGGER: Scheduled (Daily)
↓
ACTION: Get all survey responses from last 24 hours
↓
ACTION: Calculate statistics
  - Average ratings
  - Response count
  - Sentiment analysis
↓
ACTION: Update Excel dashboard
↓
ACTION: Generate charts
↓
ACTION: Email summary to stakeholders

AI Builder Integration

Form Processing with AI

Scenario: Extract data from invoices automatically

Flow Design:

TRIGGER: When invoice PDF uploaded
↓
ACTION: Process document with AI Builder
  - Extract vendor name
  - Extract invoice number
  - Extract date
  - Extract amount
  - Extract line items
↓
ACTION: Create record in ERP system
↓
ACTION: Route for approval if amount > threshold
↓
ACTION: File in appropriate folder

Implementation:

Trigger: When a file is created (SharePoint)
- Folder: /Invoices/Inbox

Action: Recognize text (AI Builder)
- Document: @{triggerOutputs()?['body/{FilenameWithExtension}']}

Action: Process and store form (AI Builder)
- Document: @{triggerOutputs()?['body/{FilenameWithExtension}']}
- Form type: Invoice (custom model)

Action: Parse JSON
- Content: @{body('Process_and_store_form')?['fields']}

Action: Add row to Excel (ERP)
- Vendor: @{body('Parse_JSON')?['VendorName']?['value']}
- Invoice Number: @{body('Parse_JSON')?['InvoiceNumber']?['value']}
- Date: @{body('Parse_JSON')?['InvoiceDate']?['value']}
- Amount: @{body('Parse_JSON')?['Amount']?['value']}
- Status: Pending Approval

Condition: Amount > $1000?
If yes:
  - Start approval workflow
If no:
  - Auto-approve and process

Action: Move file
- Destination: /Invoices/Processed/@{formatDateTime(utcNow(), 'yyyy-MM')}

Sentiment Analysis

Scenario: Analyze customer feedback sentiment

Flow Design:

TRIGGER: When customer feedback submitted
↓
ACTION: Analyze text with AI Builder
  - Sentiment (positive/negative/neutral)
  - Key phrases
  - Language detection
↓
CONDITION: Negative sentiment?
├─ Yes → Flag for immediate review
│   └─ Notify customer service manager
└─ No → Route to standard processing
↓
ACTION: Log in feedback database
↓
ACTION: Update customer record

External Connectors

Salesforce Integration:

Scenario: Sync Dynamics 365 to Salesforce

Trigger: When account created in Dynamics
↓
Action: Create account in Salesforce
↓
Action: Set up two-way sync for updates

Slack Notifications:

Scenario: Alert team in Slack when deal closes

Trigger: When opportunity status = "Won"
↓
Action: Post to Slack channel
  - Deal details
  - Celebrate with emoji
  - Tag account owner

Trello Integration:

Scenario: Create Trello card from email

Trigger: When email with [TASK] received
↓
Action: Create Trello card
  - Board: Projects
  - List: To Do
  - Due date from email

Twitter Integration:

Scenario: Monitor brand mentions

Trigger: When tweet contains "@YourBrand"
↓
Action: Log in SharePoint
↓
Condition: Negative sentiment?
  - Alert social media team
  - Escalate if needed

Custom Connectors

Create Custom API Connector:

1. Go to flow.microsoft.com
2. Data → Custom connectors
3. Create from scratch
4. Define:
   - General info (name, description, icon)
   - Security (API key, OAuth 2.0)
   - Definition (actions, triggers, parameters)
   - Test (validate connection)
5. Use in flows like built-in connectors

Advanced Techniques

Error Handling

Configure Run After Settings:

Action: Try operation (e.g., create file)

Configure run after for next action:
- ☐ is successful
- ☑ has failed
- ☐ is skipped
- ☑ has timed out

Action: Send error notification
- To: admin@company.com
- Subject: Flow Error - @{workflow()?['name']}
- Body:
  Error Details:
  Action: @{actions('Try_operation')?['name']}
  Status: @{actions('Try_operation')?['status']}
  Error: @{actions('Try_operation')?['error']?['message']}
  
  Flow: @{workflow()?['name']}
  Run: @{workflow()?['run']?['name']}

Action: Log error to SharePoint
- List: Error Log
- Error details, timestamp, flow name

Scope for Try-Catch:

Scope: Try
├─ Action 1
├─ Action 2
└─ Action 3

Configure run after:
Scope: Catch (runs if Try fails)
├─ Send error notification
├─ Log error
└─ Clean up resources

Scope: Finally (always runs)
└─ Update status

Using Variables and Arrays

Complex Data Manipulation:

Action: Initialize variable (EmployeeData)
- Type: Array
- Value: []

Action: Apply to each (employee list)
  Inside loop:
    Condition: Filter criteria
    If yes:
      Action: Append to array
      - Name: EmployeeData
      - Value: {
          "Name": "@{items('Apply_to_each')?['Name']}",
          "Dept": "@{items('Apply_to_each')?['Department']}",
          "Salary": @{items('Apply_to_each')?['Salary']}
        }

Action: Filter array
- From: @{variables('EmployeeData')}
- Condition: Salary > 50000

Action: Select (transform array)
- From: @{body('Filter_array')}
- Map:
  {
    "EmployeeName": "@{item()?['Name']}",
    "Department": "@{item()?['Dept']}",
    "AnnualSalary": "$@{item()?['Salary']}"
  }

Action: Create HTML table
- From: @{body('Select')}

Parallel Processing

Process Multiple Items Simultaneously:

Action: Get items (SharePoint)
- List: Orders
- Filter: Status eq 'New'

Action: Initialize variable (ProcessedCount)
- Type: Integer
- Value: 0

Scope: Process orders in parallel
  Set concurrency: On
  Degree of parallelism: 5
  
  Action: Apply to each
  - Items: @{body('Get_items')?['value']}
  
  Inside loop (runs 5 at a time):
    - Process order
    - Update inventory
    - Send confirmation
    - Increment ProcessedCount

Action: Send summary
- Processed @{variables('ProcessedCount')} orders

Child Flows

Modular Flow Design:

Parent Flow:
Trigger: When opportunity created
↓
Action: Call child flow - "Validate Lead"
- Input: Lead data
- Output: Validation result
↓
Condition: Valid?
├─ Yes → Call child flow - "Create Account"
│   └─ Call child flow - "Send Welcome Email"
└─ No → Call child flow - "Request More Info"

Benefits:
✅ Reusability
✅ Easier maintenance
✅ Better organization
✅ Simplified testing

Best Practices

Naming Conventions

✅ GOOD:
- "Process Invoice Approvals"
- "Send Daily Sales Report"
- "Sync Customers to CRM"

❌ BAD:
- "Flow1"
- "test"
- "My Flow"

Actions:
✅ "Get customer data from SharePoint"
✅ "Send approval to manager"
✅ "Create invoice record in Excel"

❌ "Get items"
❌ "Send an email"
❌ "Create file"

Performance Optimization

✅ DO:
- Use "Top" parameter to limit results
- Filter at source (OData queries)
- Use "Do until" with proper exit conditions
- Set concurrency for parallel processing
- Use child flows for reusable logic
- Minimize API calls

❌ DON'T:
- Get all items then filter in flow
- Use infinite loops
- Process items sequentially when parallel possible
- Repeat same API calls
- Create overly complex single flows

Security Best Practices

✅ Secure Connections:
- Use managed identities
- Store credentials in Azure Key Vault
- Use service accounts, not personal
- Implement least privilege access
- Regular audit of permissions

✅ Data Protection:
- Encrypt sensitive data
- Mask PII in logs
- Use secure parameters
- Implement data retention policies
- Comply with regulations (GDPR, HIPAA)

✅ Error Handling:
- Never expose sensitive data in errors
- Log errors securely
- Implement proper try-catch
- Alert on critical failures

Testing Strategy

Development Process:
1. Build in test environment
2. Use sample/mock data
3. Test all branches (if/else)
4. Test error scenarios
5. Performance test with volume
6. User acceptance testing
7. Deploy to production
8. Monitor for issues

Testing Checklist:
□ Happy path works
□ Error handling works
□ Edge cases handled
□ Performance acceptable
□ Security validated
□ Documentation complete

Real-World Business Scenarios

Scenario 1: Employee Onboarding Automation

Complete Onboarding Workflow:

TRIGGER: When new employee added to HR system
↓
PARALLEL BRANCH 1: IT Setup
├─ Create Office 365 account
├─ Assign licenses
├─ Add to security groups
├─ Create email signature
├─ Send credentials securely
└─ Order equipment

PARALLEL BRANCH 2: Documentation
├─ Generate offer letter
├─ Create employee folder in SharePoint
├─ Upload onboarding documents
├─ Set up document signing (DocuSign)
└─ Track completion

PARALLEL BRANCH 3: Team Integration
├─ Add to Teams channels
├─ Add to distribution lists
├─ Create Planner onboarding tasks
├─ Assign mentor
└─ Schedule orientation meetings

PARALLEL BRANCH 4: Notifications
├─ Email HR
├─ Email manager
├─ Email IT
├─ Post to company Teams
└─ Update employee dashboard

FINAL: 30-day check-in reminder

Scenario 2: Invoice Processing System

End-to-End Invoice Automation:

TRIGGER: Invoice email received
↓
ACTION: Save attachment to SharePoint
↓
ACTION: Extract data with AI Builder
  - Vendor, amount, date, items
↓
ACTION: Validate against PO system
↓
CONDITION: Matches PO?
├─ Yes → Auto-route for approval
│   ↓
│   Condition: Amount < $1,000?
│   ├─ Yes → Auto-approve
│   └─ No → Manager approval required
│       ↓
│       Approval received?
│       ├─ Yes → Create payment in ERP
│       └─ No → Return to vendor
└─ No → Flag for manual review
    └─ Assign to procurement team

FINAL:
- Update accounting system
- Pay vendor
- Archive invoice
- Send confirmation

Scenario 3: Customer Support Ticketing

Automated Support System:

TRIGGER: Email to support@company.com
↓
ACTION: Create ticket in SharePoint
  - Generate ticket #
  - Parse email for details
  - Extract attachments
↓
ACTION: Categorize using AI
  - Technical, billing, sales, other
↓
ACTION: Assign based on category & workload
  - Get team members
  - Check current ticket count
  - Assign to least busy person
↓
ACTION: Send auto-reply to customer
  - Ticket number
  - Expected response time
  - SLA deadline
↓
ACTION: Create Planner task for assigned person
↓
ACTION: Post to Teams channel
↓
SCHEDULED: Check SLA
  - If approaching deadline → Escalate
  - If past deadline → Manager notification

Scenario 4: Sales Lead Management

Lead Nurturing Automation:

TRIGGER: New lead from website form
↓
ACTION: Create lead in CRM
↓
ACTION: Score lead based on:
  - Company size
  - Industry
  - Budget
  - Timeline
↓
CONDITION: Lead score > 80 (Hot lead)
├─ Yes → Immediate assignment
│   ├─ Assign to senior sales rep
│   ├─ Send instant alert
│   ├─ Schedule call within 1 hour
│   └─ Add to priority pipeline
└─ No → Nurture campaign
    ├─ Add to email sequence
    ├─ Assign to inside sales
    ├─ Schedule follow-up in 3 days
    └─ Add to standard pipeline

SCHEDULED: Follow-up automation
- Day 1: Welcome email
- Day 3: Product info
- Day 7: Case study
- Day 14: Demo offer
- Day 30: Special offer

TRACKING:
- Log all interactions
- Update lead score
- Alert on engagement

Scenario 5: Content Publishing Workflow

Multi-Stage Publishing:

TRIGGER: Author marks content "Ready for Review"
↓
STAGE 1: Editorial Review
- Assign to editor
- Check for quality
- Suggest edits
- Approve/Reject
↓
STAGE 2: Legal/Compliance Review
- Check for compliance issues
- Verify claims
- Review disclosures
- Approve/Reject
↓
STAGE 3: Final Approval
- Director review
- Final sign-off
↓
STAGE 4: Publishing
- Convert to web format
- Optimize images
- Generate metadata
- Upload to CMS
- Schedule publication
↓
STAGE 5: Promotion
- Post to social media
- Send newsletter
- Update website
- Notify stakeholders
↓
ANALYTICS:
- Track views
- Monitor engagement
- Report metrics

Conclusion

Power Automate transforms how businesses operate by automating repetitive tasks and connecting disparate systems. With the knowledge from this guide, you can:

Eliminate manual work - Save hundreds of hours annually ✅ Reduce errors - Automated processes are consistent ✅ Improve productivity - Focus on high-value work ✅ Scale operations - Handle more with same resources ✅ Enhance collaboration - Seamless tool integration ✅ Gain insights - Better tracking and reporting

Getting Started Checklist

Week 1: Learn the Basics

□ Sign up for Power Automate
□ Complete Microsoft Learn tutorials
□ Create your first flow from template
□ Understand triggers and actions
□ Test with safe scenarios

Week 2-3: Build Simple Automations

□ Automate 1-2 personal tasks
□ Email notifications
□ File management
□ Calendar automation
□ Share with team for feedback

Week 4-8: Business Automation

□ Identify repetitive business processes
□ Map workflows
□ Build and test automations
□ Deploy to production
□ Monitor and optimize

Ongoing: Advanced Topics

□ Explore AI Builder
□ Custom connectors
□ Complex workflows
□ Desktop flows (RPA)
□ Process mining

Resources

Official Microsoft Resources:

Power Automate Plans:

Free: Included with Office 365
- Standard connectors
- Runs per month limit
- Good for personal use

Per User Plan ($15/user/month):
- Premium connectors
- Unlimited runs
- RPA (attended)
- Business scenarios

Per Flow Plan ($100/flow/month):
- Unlimited users
- Premium features
- High-volume scenarios
- Enterprise automation

Next Steps

  1. Start Small: Automate one repetitive task this week
  2. Document: Keep track of time saved
  3. Expand: Identify more automation opportunities
  4. Share: Help colleagues automate their work
  5. Measure: Track ROI and business impact

Related Articles:

Need Help? Power Automate consulting services:


Last Updated: October 25, 2025

Was this article helpful?

Your feedback helps us improve our content.

Join the conversation

24 reactions

Share your thoughts, ask questions, or discuss this article with other readers.

Comments are coming soon. In the meantime, email us at hello@pupam.com with your thoughts.
S

Sarah Johnson

Passionate about email automation and helping teams work more efficiently. Follow me for more insights on productivity and modern communication tools.

Stay updated with our latest articles

Join thousands of readers who get our best content delivered directly to their inbox every week.

No spam. Unsubscribe anytime.

Ready to transform your email workflow?

Join thousands of teams already using Pupam to streamline their communications.

Get Started Free
Đăng ký mua Tên miền, Tên miền, Cho thuê Hosting, Máy chủ, VPS, Email chuyên nghiệp, Chữ ký số Mắt Bão - CA