Microsoft Power Automate (formerly Microsoft Flow) is a cloud-based automation platform that connects your Office 365 apps — Outlook, SharePoint, Teams, Excel Online — and over 400 third-party services. This guide focuses on 10 practical, real-world workflows you can build today, even without any coding experience.
In this article
- What Makes Power Automate Different from VBA or Macros?
- Basic Level: 5 Simple Flows to Build Today
- 1. Email-to-SharePoint: Save Attachments Automatically
- 2. Daily Excel Report from SharePoint List
- 3. Teams Notification on SharePoint List Update
- 4. Approval Workflow: Purchase Request
- 5. Mobile Button: Log My Work Hours
- Intermediate Level: Advanced Data Processing Flows
- 6. Process Form Responses to Excel and Teams
- 7. Sync SharePoint List to Excel Table Daily
- Expert Level: Error Handling and Parallel Flows
- 8. Robust Flow with Error Handling
- 9. Parallel Branches for Speed
- 10. Scheduled Data Quality Check
- Continue learning
What Makes Power Automate Different from VBA or Macros?
| Feature | Power Automate | VBA/Macros |
|---|---|---|
| Cloud-based | Yes — runs 24/7 without your PC | No — requires Excel to be open |
| Cross-app automation | Yes — Outlook + SharePoint + Teams | Limited to Office apps |
| Mobile triggers | Yes — button flows on phone | No |
| Scheduling | Yes — built-in scheduler | Requires Windows Task Scheduler |
| Office Scripts integration | Yes — run scripts on Excel Online | Separate from VBA |
Basic Level: 5 Simple Flows to Build Today
1. Email-to-SharePoint: Save Attachments Automatically
Trigger: When a new email arrives with an attachment
Action: Save attachment to a SharePoint folder
Use case: Never manually download and file invoice PDFs, payslips, or reports again.
Flow setup:
Trigger: Office 365 Outlook → When a new email arrives (V3)
Filter: Has attachments = Yes
Filter: From = [email protected] (optional)
Action 1: Apply to each (Attachments list)
Action: SharePoint → Create file
Site: https://yourcompany.sharepoint.com/sites/Finance
Folder: /Invoices/2024
File name: @{triggerOutputs()?['body/from']} - @{formatDateTime(utcNow(),'yyyy-MM-dd')} @{items('Apply_to_each')?['Name']}
File content: @{items('Apply_to_each')?['ContentBytes']}
2. Daily Excel Report from SharePoint List
Trigger: Scheduled (every weekday at 8:00 AM)
Action: Read SharePoint list → Update Excel → Email summary
Use case: Automated morning report without anyone touching Excel.
Trigger: Recurrence → Every 1 Day at 08:00 (Mon-Fri)
Action 1: SharePoint → Get items
List: "Sales Pipeline"
Filter: Status eq 'Open'
Action 2: Excel Online (Business) → Run script
File: /Reports/DailySales.xlsx
Script: "UpdateDashboard"
Parameters: { "data": @{body('Get_items')?['value']} }
Action 3: Office 365 Outlook → Send email
To: [email protected]
Subject: Daily Sales Report - @{formatDateTime(utcNow(),'dd MMM yyyy')}
Body: @{body('Run_script')?['result']?['summary']}
3. Teams Notification on SharePoint List Update
Trigger: SharePoint → When an item is modified
Site: Your SharePoint site
List: "Project Tracker"
Condition: If Status is equal to "Completed"
Action: Microsoft Teams → Post a message in a chat or channel
Team: Project Team
Channel: Updates
Message: ✅ Task completed by @{triggerOutputs()?['body/Editor/DisplayName']}:
**@{triggerOutputs()?['body/Title']}**
Due date was: @{formatDateTime(triggerOutputs()?['body/DueDate'],'dd MMM yyyy')}
4. Approval Workflow: Purchase Request
This flow sends an approval request and updates a SharePoint list automatically based on the response.
Trigger: SharePoint → When an item is created (Purchase Requests list)
Action 1: Approvals → Start and wait for an approval
Approval type: Approve/Reject - First to respond
Title: Purchase Request: @{triggerOutputs()?['body/Title']}
Assigned to: [email protected]
Details: Amount: ₹@{triggerOutputs()?['body/Amount']}
Requested by: @{triggerOutputs()?['body/Author/DisplayName']}
Condition: If Outcome equals "Approve"
Yes branch: SharePoint → Update item → Status = "Approved"
Outlook → Send email to requester "Approved!"
No branch: SharePoint → Update item → Status = "Rejected"
Outlook → Send email to requester "Rejected"
5. Mobile Button: Log My Work Hours
Create a button in the Power Automate mobile app that logs your current time to an Excel sheet with one tap.
Trigger: Manually trigger a flow (Button)
Input: Text → "Task worked on"
Action: Excel Online → Add a row into a table
File: OneDrive → WorkLog.xlsx
Table: TimeLog
Row:
Date: @{formatDateTime(utcNow(), 'yyyy-MM-dd')}
Time: @{formatDateTime(utcNow(), 'HH:mm')}
Task: @{triggerBody()?['text']}
Day: @{dayOfWeek(utcNow())}
Intermediate Level: Advanced Data Processing Flows
6. Process Form Responses to Excel and Teams
Trigger: Microsoft Forms → When a new response is submitted
Form: Customer Feedback Form
Action 1: Microsoft Forms → Get response details
Action 2: Excel Online → Add a row
File: Feedback_Tracker.xlsx
Row: Date, Name, Rating, Comments, Email from form response
Action 3: Condition: If Rating less than 3
Yes: Teams → Post urgent notification to Support channel
Outlook → Send alert to customer success team
7. Sync SharePoint List to Excel Table Daily
Trigger: Recurrence → Every day at 06:00 AM
Action 1: Excel Online → Run script "ClearTable"
Clears all rows from previous day
Action 2: SharePoint → Get ALL items (use Do Until + pagination)
List: "Customer Orders"
Set page size to 500 to get all items
Action 3: Apply to each (SharePoint items)
Excel Online → Add a row into table "Orders"
Result: Excel always has fresh data from SharePoint each morning
Expert Level: Error Handling and Parallel Flows
8. Robust Flow with Error Handling
// Add "Configure Run After" on each action to handle failures:
Main action: HTTP → Call external API
Run after: Previous step succeeded
Error handler: Send email notification
Configure Run After: Check "has failed", "has timed out", "has been skipped"
To: [email protected]
Subject: Flow Error - @{workflow()?['name']}
Body: Error details: @{body('HTTP')?['error']?['message']}
Flow run: @{workflow()?['run']?['id']}
Time: @{utcNow()}
// Always include a "Terminate" action at the end
Terminate: Status = "Succeeded" (or "Failed" in error branch)
9. Parallel Branches for Speed
When you need to do multiple independent tasks, use parallel branches to run them simultaneously and cut execution time.
Trigger: When new order received
Parallel Branch 1: Send confirmation email to customer
Parallel Branch 2: Update inventory in SharePoint
Parallel Branch 3: Post to Teams #orders channel
Parallel Branch 4: Log to Excel order tracker
After all branches complete:
Action: SharePoint → Update order status to "Processing"
// All 4 actions run simultaneously - no waiting for each to finish
// Cuts flow runtime from 20s (sequential) to 5s (parallel)
10. Scheduled Data Quality Check
Trigger: Recurrence → Every Monday at 09:00 AM
Action 1: SharePoint → Get items where "Last Updated" < 7 days ago
Action 2: Filter array → Items where Status = "Open" AND AssignedTo is empty
Condition: If filtered array length is greater than 0
Yes:
Apply to each filtered item:
Approvals → Send reminder email to item creator
Log to Teams: "⚠️ @{items()?['Title']} has no assignee for 7 days"
Excel → Add row to Audit_Log.xlsx with count and date
No: Teams → Post "✅ All items have assignees. Data quality OK."
Pro Tips for Production Flows:
- Always rename your actions (not “Get items 2”) — makes debugging much easier
- Use environment variables for URLs and email addresses — avoids hardcoding
- Set “Concurrency Control” on Apply to each when processing large lists to avoid throttling
- Use “Compose” actions to build complex expressions once and reference them multiple times
- Premium connectors (HTTP, SQL, Dataverse) require a Power Automate Premium license (~₹1,500/month)
Stuck on a step? Ask a question and the AI answers using this article.