
Search Content
Search this site
191 results found with an empty search
- PowerApps911 Has a Bigger Family
POWERAPPS911 · A TMC GLOBAL COMPANY Same team, same Power Platform expertise, a much bigger family behind us. Here is what is changing, and everything that is not. TL;DR PowerApps911 is now part of TMC Global, a unified family that brings together PowerApps911, Technology Management Concepts (TMC), and The TM Group (TMG). We are still the same Power Platform team you know for consulting, mentoring, projects, training, and real-world expertise. What is new is how far we can take you beyond the Power Platform, with a larger team supporting Dynamics 365, Business Central, Microsoft 365, Azure, data, and AI, all through the partner you already trust. In This Article → What TMC Global means for PowerApps911 customers → Why Power Platform is still at the center of what we do → What you can now access beyond PowerApps911 → Where this leaves you and us → Quick answers about what is changing If you have been around PowerApps911 for a while, you know what we are about: helping people actually get things done with the Microsoft Power Platform. Sometimes that means teaching you to build it yourself. Sometimes it means working alongside you when you are stuck. And sometimes it means building the whole thing for you. That is not changing. What is changing is the size of the team behind us and how far we can now go with you. Earlier this year, PowerApps911 joined Technology Management Concepts, bringing our Power Platform and AI expertise into a larger Microsoft organization. Today, we are introducing the unified brand for that growing family: TMC Global. TMC Global brings together PowerApps911, TMC, and The TM Group under one connected organization, combining decades of Microsoft experience across business applications, cloud, data, AI, and the Power Platform. We are now PowerApps911, a TMC Global company, and everything you love about us is still right here. What Does TMC Global Mean for PowerApps911 Customers? For most of you, the first thing to know is simple: PowerApps911 is not going anywhere. You will still find the training, mentoring, projects, and Power Platform consulting you come to us for. You will still work with the experts you know across Power Apps, Power Automate, Power BI, Power Pages, Copilot Studio, Dataverse, Fabric, and the rest of the stack we live in every day. But now, when your needs reach beyond the Power Platform, the conversation does not have to end there. Maybe the app you are building needs to connect more deeply with Dynamics 365. Perhaps you have outgrown your current ERP and need to look at Business Central. Maybe your organization is trying to make sense of Microsoft 365 licensing, Azure, or its broader AI strategy. Those needs used to mean bringing another partner into the room. Now they are part of the same one. So what does that bigger team actually bring to the table? Real depth, earned over decades. TMC has spent nearly forty years on Dynamics ERP and CRM, with more than 3,000 implementations and a 98% client retention rate. The TM Group adds serious migration muscle, the kind that moves organizations off aging systems onto the modern Microsoft stack without breaking what already works. Put that next to our Power Platform, Copilot, and AI expertise, and you have coverage across just about every layer of a Microsoft environment you are likely to touch. It also opens doors you could not reach through a Power Platform practice alone, like AI at the Core, TMC’s approach to building AI readiness into a solution from the first design decision instead of bolting it on at the end. "I have spent almost forty years building toward one idea: a partner you can bring your entire Microsoft world to, and never outgrow. TMC Global is that idea, finally whole. PowerApps911 is a big part of why it works, because they have always believed what we believe, that the best partner makes you smarter, not more dependent." — Jennifer Harris, Founder and CEO, TMC Global One partner. Every product. No gaps. Power Platform Is Still Our Thing We should probably make this part especially clear. Joining a larger Microsoft organization does not turn PowerApps911 into a generalist. Our team stays focused on the thing that made PowerApps911 what it is: helping people build better solutions and become better makers. We have trained more than 15,000 students worldwide and worked one-on-one with hundreds of organizations. Our education runs through Power Platform University, a world-class program with students across six continents, alongside live and on-demand training, mentoring, quick consulting, and full solution builds. Here is something we are quietly proud of. Microsoft itself brings us in to help train its own people on its own products. When the company that builds the platform trusts you to teach it, that is not a credential you pick up by accident, and it is not going anywhere. That expertise does not get diluted by TMC Global. It gets connected to more expertise around it. Your Power App Doesn’t Live on an Island This is where we get especially excited about what comes next. The solutions we help you build rarely live by themselves. A Power App connects to Dataverse, automates a process through Power Automate, pulls data from another business system, and eventually becomes part of a much larger technology strategy. As those solutions grow, so do the questions. How does this connect to our ERP? What about our CRM? Where should our data live? How do we govern all of it? Where does Copilot fit? Do we have the right Microsoft licensing? Those are bigger questions than any single practice can answer alone. Through TMC Global, PowerApps911 customers now have access to deep expertise across Dynamics 365, Business Central, Microsoft 365, Azure, data, and AI, right alongside the Power Platform capabilities you already know us for. Take Microsoft licensing, one of the quietest places organizations lose money. As a TMC Global company, we can now handle your Microsoft 365, Dynamics, and Azure licensing directly, as your trusted Microsoft partner. That means the people who understand your solutions are the same people right-sizing what you pay for, trimming the licenses you are not using, and giving you a single source of truth for everything Microsoft, instead of piecing it together from a stack of renewal emails. Less time, less spend, one place to go. You do not have to outgrow PowerApps911 when your technology needs are outgrowing the Power Platform. Now we are growing with you. The Microsoft Partner You’ll Never Outgrow PowerApps911 has always been about meeting people where they are. If you want to learn, we will teach you. If you want help building, we will build with you. If you want us to take the project and run with it, we can do that too. TMC Global takes that same philosophy and extends it across the whole Microsoft ecosystem. For our customers and community, that means you can still come to PowerApps911 for exactly what you have always expected from us, with a much larger team standing behind us the moment you need something more. We are still PowerApps911. We just have a lot more people to call when things get complicated. And honestly, we think that (in Shane’s words) “It is pretty awesome”. Welcome to TMC Global. The Microsoft partner you’ll never outgrow. Common Questions, Answered Is the PowerApps911 name going away? No. PowerApps911 continues as a TMC Global company, serving customers with the same Power Platform consulting, mentoring, and training you know us for. Will I still work with the PowerApps911 team? Yes. Your existing relationships with the PowerApps911 team stay exactly as they are. Is Power Platform University changing? No. Power Platform University keeps running, with the same teaching-first approach and the same instructors. The only difference is the depth of expertise now standing behind it. Can I still buy PowerApps911 training and mentoring? Yes. We continue to offer live and self-paced training, Power Platform University, mentoring, and consulting. What new services can I access? Through the broader TMC Global organization, you can now tap expertise across Dynamics 365, Business Central, Microsoft 365, Azure, data, AI, and licensing. Can TMC Global help with our Microsoft licensing? Yes. As a TMC Global company, we can now manage and optimize your Microsoft 365, Dynamics, and Azure licensing directly, which often means real savings and one trusted source for everything Microsoft. Who should I contact if I need help? Keep reaching out to your existing PowerApps911 contacts. If your needs extend into another part of the Microsoft ecosystem, we will connect you with the right experts inside TMC Global. Have questions about what this means for you? PowerApps911 is still here, and we’re still the same team you know. If you’re curious about the bigger TMC Global family, or you want to talk through your next Microsoft project, we’d love to hear from you.
- What Is Copilot Cowork and Why Does GA Matter?
Copilot Cowork is Officially Generally Available: What You Need to Know And honestly? We're excited! We love us some Cowork. We've been using Cowork daily since it first appeared in the Frontier program. It has quietly transformed how we work. Not because it gives better answers than chat, but because it actually does the work. That's always been the magic of Cowork. Traditional AI chat is great at helping us think through problems. Cowork excels at taking a goal and executing a series of steps to achieve it. Instead of asking AI for advice, we’re increasingly asking AI to complete tasks and deliver finished results. Microsoft describes it as handling long-running, multi-step work, and that aligns perfectly with our real-world experiences. More of a visual learner? We have a complete video walkthrough with demos of what's new here: What is new with Copilot Cowork. What Changed When Cowork Moved from Frontier to GA? Frontier was Microsoft's way of saying, "This is the future, but we're still figuring some things out." The technology was evolving quickly. The user experience was changing rapidly. And the licensing story was still being developed. GA marks Microsoft planting a flag in the ground. Cowork is now a real product with a solid licensing model, governance controls, and a clear path forward. How Much Does Copilot Cowork Cost? The biggest surprise for many will be that Cowork is no longer simply "included." You now need a Microsoft 365 Copilot license, and Cowork usage consumes Copilot Credits. That's a tougher answer than many of us were hoping for, but it isn't surprising. Long-running agentic tasks consume a lot of tokens, call many services, and can run for extended periods. Someone has to pay for that compute. And there is significant value generated from all that compute. The good news is Microsoft is providing organizations with controls around usage, spending limits, and administration. Cowork is off by default, and admins can decide who gets access and how much can be consumed. We poked around for a bit, and the policies look pretty good and flexible. We need to explore more, though. Do we wish it was an all-you-can-eat buffet? Absolutely. Do we understand why it isn't? Also, yes. Microsoft's own testing indicates Cowork can execute similar work at roughly 30 to 40% lower cost than comparable Claude Cowork with M365 scenarios, which helps soften the impact a bit. What New Features Did Copilot Cowork GA Introduce? GA is bringing some genuinely interesting updates: More model choices, including GPT 5.5, with Microsoft's upcoming Cowork 1 model arriving soon. Model flexibility continues to be one of the strongest reasons to build on Microsoft's AI platform. (This is our big bet on why Microsoft wins in the end.) Improved plugin and skill management, making it easier to extend what Cowork can do. Browser Use, allowing Cowork to interact with websites through a local Edge browser. (Still waiting for this one to light up in our tenant.) A refined user experience that is rolling out across tenants. (Also not showing up for us quite yet but shows up for our coworkers—very rude!) Is Copilot Cowork Worth the Cost? At the end of the day, we would have loved for Cowork to be unlimited. But if the tradeoff is getting a sustainable platform that Microsoft can continue investing heavily in, then the pricing model is reasonable. More importantly, the product is genuinely good. We use it. We like it. We rely on it. Now that it's GA, we expect a lot more organizations to start taking it seriously. If you're trying to figure out licensing, governance, adoption, training, or how Cowork fits into your broader Microsoft AI strategy, we're here to help. We spend a lot of time helping organizations make sense of Copilot, Cowork, Copilot Studio, and the rapidly growing Microsoft AI ecosystem. Just click the Contact button. Now excuse us while we keep trying to get Browser Use to show up in our tenant. 😁 Key Takeaways Copilot Cowork is now Generally Available, having graduated from Microsoft's Frontier preview program. Cowork is built for long-running, multi-step agentic tasks—it completes work and returns a result, rather than just offering advice. A Microsoft 365 Copilot license is required, and usage is metered through Copilot Credits. Cowork is off by default; admins control access and can set spending limits at the organizational level. Microsoft's own testing shows Cowork completes similar tasks at roughly 30–40% lower cost than comparable Claude Cowork scenarios. GA introduces additional model choices (including GPT 5.5), improved skill management, Browser Use via Edge, and a refreshed UI. Organizations building a Microsoft AI strategy should plan for Cowork alongside Copilot Studio and Microsoft 365 Copilot. If you have any questions or need assistance with Copilot Cowork, just click the button below and let us know how we can assist. FAQ Q: What is Copilot Cowork? A: Copilot Cowork is Microsoft's agentic AI assistant designed to handle long-running, multi-step tasks. Rather than answering questions, it executes a series of steps to complete a goal and returns a finished result. Q: Is Copilot Cowork included in Microsoft 365? A: No. Cowork requires a Microsoft 365 Copilot license, and usage consumes Copilot Credits. It is not included in base Microsoft 365 plans. Q: What is the difference between Microsoft Copilot chat and Copilot Cowork? A: Copilot chat helps you think through problems and provides answers. Cowork takes a goal, runs a multi-step process autonomously, and brings back a completed result. Q: What are Copilot Credits and how do they work? A: Copilot Credits are the consumption-based currency that powers Cowork tasks. More complex, longer-running tasks consume more credits. Organizations can set spending limits through the admin center. Q: Can IT admins control who uses Copilot Cowork? A: Yes. Cowork is off by default, and Microsoft 365 admins can control which users have access and how many Copilot Credits can be consumed through policies. Q: What new features came with the Copilot Cowork GA release? A: The GA release added model options including GPT 5.5, an upcoming Cowork 1 model, improved plugin and skill management, Browser Use (Cowork interacting with websites through Edge), and a refined user experience. Q: What is Browser Use in Copilot Cowork? A: Browser Use lets Cowork interact with websites directly through a local Edge browser, enabling tasks that require navigating or interacting with web-based content. Q: How does Copilot Cowork pricing compare to other AI tools? A: Microsoft's own testing indicates Cowork completes similar work at roughly 30 to 40% lower cost than comparable Claude Cowork scenarios.
- Getting Started with Power Apps MCP Server for Canvas Apps
Are you looking to get started with the awesome new Power Apps MCP Server for Canvas apps but don’t have a clue how to install everything? If so, you’re in the right place! Below, we’ll provide clear instructions for those of us who aren’t ninjas when it comes to all this VS Code stuff. We’ll walk you through step-by-step on how to install everything—VS Code, all the random weird things, and how to test it all. I’ve done this process a dozen times to simplify the instructions you’ve come to expect. Keep in mind that the more unique configurations your PC has, the more your journey may vary. Every machine I’ve worked on has had slight differences. But don’t worry; you’ll get through this! Also, remember that while the Power Apps Canvas MCP is free, you’ll need a GitHub Copilot license to use it in this scenario. You can also use the MCP server with Claude Code, Codex, or a dozen other services. But one way or another, you’ll need an LLM coding companion to utilize this. These instructions focus on what you need to set up to use the MCP server on Windows via VS Code and GitHub Copilot. There are other ways to use this MCP, but this guide is just about the essentials to get rolling with your Canvas Apps. Enjoy! PS - For a visual guide, check out the video walkthrough of these instructions here: Install and Configure Power Apps MCP. Install VS Code via Download Go to this site and download Visual Studio Code (VS Code): Download Visual Studio Code - Mac, Linux, Windows. For most people, the defaults will work well. So, just follow the good old Next, Next, Finish method. Open VS Code from the Start menu if it isn't already open. Click on Use AI Features. Click Continue with GitHub to authenticate. Sign in or create an account (remember, you’ll need a paid account for this). Click the button to Authorize VS Code. Now, click on the icon in the bottom right corner to confirm you have GitHub Copilot running. Close VS Code for now; we’ll be back later. Install NodeJS Visit the Node.js website: Node.js — Download Node.js®. Download the Windows Installer MSI and run it. Again, use the Next, Next, Finish method. There are many questions and optional components, but I didn’t need them for this to work. Install Git for Windows Go to this website: Git for Windows. Click the big Download button and run it. Use the Next, Next, Finish method. Honestly, I have no clue what most of those settings are, but the defaults worked, so I went with them. 😊 Feel free to adjust anything; it’s your computer after all. Install .NET 10 SDK Visit the .NET download page: Download .NET 10.0 (Linux, macOS, and Windows) | .NET. Download the Windows SDK and run it. Click Install. There’s nothing to choose, but it can be a slow install. Install PowerShell 7 Go to this website: https://aka.ms/PSWindows. Click the Get PowerShell 7 button. Click Install PowerShell on Windows. Download the MSI Package and run it. You guessed it—click Next, Next, Finish. Install GitHub Copilot CLI Open VS Code. From the toolbar, click Terminal > New Terminal. At the prompt, type: `Copilot`. Install GitHub Copilot CLI when prompted. Choose Yes when asked if you trust the folder (assuming you do). Type `/login` at the prompt. Choose your account type. Press the Enter key; this opens a browser. Walk through the authorization steps. Switch back to VS Code. Finally, Install the Power Apps MCP Still in the Terminal, type: ``` /plugin marketplace add microsoft/power-platform-skills ``` After you see Added Successfully, type: ``` /plugin install canvas-apps@power-platform-skills ``` Type Exit to close Copilot. Type Copilot to open it back up. Test Your Hard Work Open a browser and go to make.PowerApps.com to create a blank canvas app. Save it. Navigate to Settings > Enable Coauthoring. This will automatically save and refresh the app. Refresh the browser again to make Coauthoring happier. Copy the URL for your App. Return to VS Code. Still in Copilot, in the Terminal, type: ``` Configure Canvas MCP ``` Choose Configure Globally when prompted. Paste your canvas app URL when asked. 10. Type Exit to close Copilot. 11. Type Copilot to open it back up. 12. Type Create a Green welcome screen with a blue button. 13. After a while, if you see a green screen in your Power Apps canvas app with a blue button, then you have SUCCESS! Microsoft’s Documentation If you want their official info on installing and such, it’s here: Microsoft Documentation. Also, their GitHub repository for this MCP server is here: GitHub Repository. While you may not need it, sometimes the official documentation is good to check out. Next Steps Now you’re ready to start playing with GitHub Copilot! You can use it to create apps, edit apps, audit apps, and probably more. While creating apps, especially with data sources (even SharePoint), is interesting, the real value lies in review. Having the agent look for bugs and make recommendations in your existing apps is invaluable. A second set of eyes can’t be overappreciated. If you want to see the Power Apps Canvas MCP server in action for creating and auditing apps, check out this video: Build Canvas Apps in VS Code with AI (NEW Power Apps Tool). If you’re looking for help with what you should and shouldn’t be doing with AI and Power Apps, we’re here to assist. Just hit the Contact button and let us know. We’re happy to help with anything from a quick call to taking on your full project.
- The AI Expense Receipt App: How a Simple Power App Kills Expense Report Busywork
TL;DR: Turning in travel receipts is the kind of small, annoying task that quietly eats hours and annoys your accounting team. This post walks through a simple Power Apps solution that lets you snap a photo of a receipt, uses an AI prompt to pull out the vendor, date, amount, and category, and then sends accounting one clean, organized email per trip. Nobody has ever ended a business trip excited to do their expense report. You get home with a wad of crumpled receipts in a laptop bag, a Chick-fil-A napkin with a total on it, and a very patient person in accounting who is going to email you three times before you deal with it. That is exactly the pain that led to this app. After joining TMC Global and getting a corporate credit card, receipts suddenly became a real requirement. So on the flight out to see Microsoft, the fix got built: a small, focused Power App that captures receipts on the phone, uses AI to read them, and hands accounting exactly what they need. In this post you will learn what the app actually does, how AI takes the data entry out of it, why keeping a human in the loop matters, and how a tiny internal app like this can pay for itself almost immediately. If you would rather watch the full walkthrough, check out the video here: https://youtu.be/rHBWxmqXnFg What problem does this AI Expense Report app actually solve? The real problem is not "I cannot store a receipt." Phones already do that. The problem is everything around it: Receipts pile up loose in a bag, an inbox, and a camera roll, and some of them never make it back. Someone has to type the vendor, date, amount, and category into a form or a spreadsheet, usually days later. Accounting gets a dump of files named IMG_4821.jpg and has to guess which Uber ride goes with which charge. The whole thing gets delayed, which delays reimbursement, closing the books, and everyone is a little grumpy. This app attacks the friction at the exact moment the friction happens: when you are standing there holding the receipt. Capture it right then, let AI read it, and move on with your day. How does the app work from the user side? The whole experience is three screens, and it is deliberately simple. The flow looks like this: 1. Create the trip Before (or during) a trip, you add a trip with a name and a date. That is the container everything else attaches to, so a receipt is never floating without context. When you come back to the app later, trips are sorted by date, because the oldest unsubmitted trip is usually the one accounting is asking about. 2. Snap the receipt When you get a receipt, you open the app and add a picture. On a phone that means the camera opens right there at the table, so the receipt is captured before it has a chance to get lost. You can also pick a photo you already took if you are catching up later. 3. Let AI read it Press scan and an AI prompt reads the receipt image and pulls out the four things that matter: the vendor, the date, the total amount, and a category. No typing. The fields come back filled in and ready to review. 4. Review, tag, and save The extracted values are added to the correct input fields. The fields are editable so if while you are checking the details, you need to make any changes, you just click the field and type. Nothing wrong? Then just hit Save. That is the entire per-receipt effort: a photo, a glance, a tap. 5. Send the whole trip to accounting in one click When the trip is done, one button generates a single email to accounting with a clean table of every receipt on that trip, plus all the receipt images attached and automatically named so each attachment lines up with the row it belongs to. No more "which Uber receipt is this one?" emails. Just one message that contains everything they need. Why use AI for reading the receipts instead of typing them in? Because reading a receipt is exactly the kind of boring, structured, high-volume task AI is genuinely good at, and it is exactly the kind of task humans are bad at doing consistently. The app uses an AI prompt that looks at the receipt photo and returns the fields in a consistent, structured format every time. That consistency is the point. It means the data flows straight into the app and into the email without anyone massaging it. The prompt is also written to be honest about uncertainty. If it cannot confidently read a text field, it says so instead of inventing something, and if it cannot confidently read the amount, it does not guess a number. An AI that admits it is unsure is far more useful than one that confidently makes something up on a document your finance team is going to rely on. Does the AI cost a fortune to run? It does not, and that is a lesson worth stealing. Pulling four fields off a receipt is a basic task, so a small, inexpensive model handles it perfectly well. Swapping in a top-tier premium model for the same job produced essentially the same answer, took roughly four times longer, and cost around 100 times more in credits. The takeaway: pick the smallest, cheapest model that does the job consistently. Save the expensive models for the problems that actually need them. On a task you run dozens of times per trip, that decision is the difference between a solution that scales and one your finance team quietly kills. Should AI be trusted to submit expenses on its own? No, and the app is built on purpose so that it is not. Every field the AI extracts lands in an editable input, not a locked label. Before you save, you get a two second sanity check: does nine dollars for that Chick-fil-A run sound right? Yes? Move on. If the receipt was smudged, faded, or covered in some barbecue sauce, you fix it right there. That is the human in the loop principle, and it matters most in exactly this scenario. When those numbers get to accounting, you are the one who is accountable, not the AI. Good AI solutions do not remove the human from decisions that carry responsibility. They remove the typing. What is the business case for an app this small? It is tempting to look at a three-screen receipt app and think it is too small to matter. Do the math the other way. Say handling receipts manually costs you 30 minutes per trip in typing, hunting for files, and back and forth with accounting. Ten trips a year is five hours. Multiply that across a team of travelers and it becomes real money, plus faster closes, cleaner records, and fewer awkward reminders from finance. The bigger win is behavioral. The app makes the right thing the easy thing. Because capturing a receipt takes seconds and happens at the table, receipts stop going missing, which is where most expense pain actually comes from. Where else does this pattern apply? Snap a photo, let AI extract structured data, keep a human review step, then push a clean summary to whoever needs it. That pattern shows up everywhere: Field service technicians capturing parts, serial numbers, or equipment nameplates Warehouse teams pulling data off packing slips and delivery paperwork Sales teams capturing business cards and event badges into the CRM Facilities teams logging inspection forms and safety checklists Accounts payable processing vendor invoices that show up as PDFs and photos If your team currently retypes something a camera and AI could read, this pattern probably fits. Why should you build apps for yourself, not just for other people? Here is the part that gets skipped. Most makers build apps for other departments and never turn that skill on their own daily annoyances. This app is not glamorous. It has no edit screen and no fancy reporting, because those were not needed. It was built to solve one specific irritation for one specific person, and it does that perfectly. That is a completely legitimate reason to build something. The best internal apps are usually small, ugly, and used every single week. Look at your own workflow, find the thing you grumble about every month, and build the two screen version of the fix. You will use it more than anything else you have made. And, if everyone shows up jealous, then you could enhance this app. If Accounting shows up and asks I could add all kinds of quick updates that takes this from a Shane only app to the entire company. That is the life of a Power Apps app, quick iterations to be exactly what your business needs. Frequently asked questions What does the AI receipt scanning app do? It is a Power Apps solution that lets you photograph a travel receipt with your phone, uses an AI prompt to automatically extract the vendor, date, total amount, and expense category from the image, stores the receipt against a specific trip, and then generates a single email to accounting containing a summary table of all receipts for that trip with the images attached and clearly named. Can AI accurately read receipts from a photo? Yes, for standard printed receipts it is very reliable, because extracting a few structured fields from a document is a well established AI task. Accuracy still depends on image quality, so a faded, torn, or stained receipt can produce a wrong value. That is why the app presents every extracted field as an editable input for a quick human review before saving. Also, it doesn't have to be printed. I have done tested on hand written receipts with great results also. Do you need an expensive AI model to extract receipt data? No. A small, low-cost model handles receipt extraction accurately. In testing, a premium high-end model returned essentially the same result while taking about four times longer and consuming roughly 100 times more credits. Always choose the smallest model that does the job consistently and reserve premium models for genuinely complex reasoning tasks. Why keep a human review step if AI does the extraction? Because accountability stays with the person submitting the expense. AI removes the data entry, not the responsibility. A quick human glance at the extracted amount and vendor catches the rare misread before it reaches finance, and it costs about two seconds per receipt. Does the app work on a phone? Yes, and the phone is where it matters most. The picture control behaves differently on mobile than on a desktop: on a phone it offers to open the camera and take a new photo, so you can capture a receipt the moment you get it instead of dealing with a pile of paper days later. Can I get a copy of this app? Yes. The app was packaged as a solution, and subscribers to any PowerApps911 training plan at training.powerapps911.com get access to the YouTube library, which includes this app plus a long list of other downloadable apps built on the channel over the years. Key takeaways Expense reporting pain is not about storing receipts, it is about the data entry, the naming, and the back and forth with accounting, which is exactly what this app removes. An AI prompt reads the receipt photo and extracts the vendor, date, total, and category automatically, so the maker never types receipt data again. Capturing the receipt on your phone at the moment you get it is what actually stops receipts from going missing. One button sends accounting a single email per trip with a summary table and clearly named attachments, so nobody has to match images to line items. Choose the smallest AI model that does the job consistently: a premium model produced the same receipt result for roughly 100 times the cost. Keep a human in the loop on anything you are accountable for by leaving AI-extracted values in editable fields for a quick review. The photo, extract, review, send pattern transfers directly to invoices, packing slips, inspection forms, business cards, and equipment tags. Small internal apps that fix your own daily annoyances are often the highest value apps you will ever build. Ready to put AI to work on your own busywork? If you want help building solutions like this or taking your Power Platform skills to the next level, the team at PowerApps911 can help. We do consulting, coaching, and training for organizations that want to stop doing things the slow way. Reach out and let us build something awesome together. Just click that Contact button and tell us how we can help.
- Send meeting Notes and Invites using Power Apps and Power Automate
Every week as part of Power Platform University I have to do follow-up after our live sessions. I send notes on what we covered, links to recordings, and information about the next meeting. To create a better student experience, I wanted to also include an Outlook Calendar Invite with a link to the Teams meeting. This way there would be no confusion or reasons to miss. The challenge is each student needs their own invite. So not 1 invite with 50 people but 50 invites with 1 person. 🤯 Power Apps app for Input So I decided to use Power Apps and Power Automate to solve my challenge. Power Apps for me to provide all of the inputs like date and time, mentor recipients, and then the HTML body for the invites. Easy peazy for Power Apps Canvas Apps. Two challenges with the App. 1 - Saving the previous week's Message to SharePoint so each week I pick up where I left off. 2 - Setting the DefaultSelectedItems for the Combobox of mentors. I ended up making up a new technique for this. Both challenges and how to overcome them are detailed in the video. Power Automate cloud flow the work The Power Automate cloud flow was a bit trickier. The list of University students is only available via an API to ThinkIfIc, the 3rd party provider of our training platform. So the first thing the flow has to do is get the current students from the API. Then we use Parse JSON action to turn the JSON into dynamic content we can use in the flow. In this section we also talked about inputs that could be Null and how to avoid them crashing your flow. Now because the Table of students includes internal and external people, I wanted to filter out the PowerApps911 email addresses. I did this with a Filter Array action. Now we have the table of the people we want to send to we use Apply to each action to loop through the results. This allows us to create one invite per student and send it to them. Here you can see we used the inputs passed in from Power Apps and a hard coded Teams online meeting link. Perfect. Finally, we send an email with the meeting details to the internal mentors just so they know the invites went out. Boom! This App and Flow saves me about an hour a week of work and makes for a better experience for the students. If you want the gritty details of how we built the flow and app then check out this video. Meeting Follow Ups and Invites with Power Apps and Automate
- Mastering API Calls in Power Apps: A Comprehensive Guide
APIs can seem daunting at first, especially for those new to Power Apps. But don't worry! The core concept is straightforward. An API returns data in a structured format called JSON. The Power Platform equips you with the tools to fetch that data and transform it into something usable. This guide will walk you through every step using a free public API, ensuring you can follow along without any setup, accounts, or authentication. In this walkthrough, we will learn how to call a real public API from Power Apps using a Power Automate flow. We'll parse the JSON response with the ParseJSON function in Power Apps, handle various data types (text, numbers, images, and nested arrays), reshape the data into a clean Power Apps collection, and finally make the call dynamic with query parameters and a dropdown. No authentication is required for the example API used in this post, so anyone with a Power Apps premium license can recreate the demo end-to-end. Prefer the video walkthrough? Watch the full tutorial here: https://youtu.be/pwZoUsuLBMQ Why Do APIs Seem Challenging? An API can be as simple as a URL that returns text. Most public APIs return data in JSON, which is plain text wrapped in curly brackets and square brackets. The reason APIs feel hard is that the first time you look at a raw response, you are staring at a wall of unformatted text with no obvious starting point. Once you understand the two simple shapes JSON uses—records and tables—the format becomes readable and usable. If you have ever written a record in Power Apps using curly brackets (for example, { Name: "Shane", Role: "CAIO" }), you have already used the same syntax JSON employs. The only new piece is square brackets, which represent a table of those records. What is the Easiest Free API for Practicing in Power Apps? DummyJSON (*https://dummyjson.com) is a free, no-authentication public API that returns realistic test data for products, users, recipes, and more. It is ideal for learning Power Apps and Power Automate API techniques without risk.* DummyJSON is the recommended sandbox for this tutorial because every endpoint returns predictable JSON, and no signup or API key is required. The walkthrough below uses the recipes endpoint at https://dummyjson.com/recipes, which returns 30 recipes by default. Each recipe includes a name, image, rating, cuisine, a tags array, and other relevant fields. How Do You Preview an API Response Without Writing Any Code? You can easily preview an API response by pasting the API URL directly into a web browser. For any GET request, the browser will display the raw JSON response on screen. This is the fastest way to confirm that the API works, see the field names, and understand the response shape before building anything in Power Automate. This same trick works for SharePoint REST and Microsoft Graph endpoints when you are signed in. How Do You Read API Documentation Efficiently? Every API has documentation, and every set of documentation answers the same three questions: which URL to call, which method to use (GET or POST), and which parameters are supported. If the documentation is dense or written for a different programming language, paste it into Copilot, ChatGPT, or another AI assistant and ask for a Power Platform-friendly explanation. That is a legitimate and effective shortcut. How Do You Call a REST API from Power Apps? Power Apps cannot call REST APIs directly. You must build a Power Automate flow that uses the HTTP action to call the API, then return the response to Power Apps. Licensing note: the HTTP action in Power Automate is a premium connector. Custom connectors are also premium. Any solution that calls an external API from Power Apps therefore requires premium Power Apps or premium Power Automate licensing for every user who runs the app. Steps to Create the Flow In your Power App, click the ellipses menu, then Power Automate, then Add flow, then Create new flow, and finally Create from blank. Name the flow clearly, for example, "Video Recipes," so you can find it later. Click New step, search for HTTP, and select the HTTP action (the one labeled Premium). How Do You Configure the HTTP Action? The HTTP action requires three pieces of information: a method, a URI, and (optionally) headers, queries, or a body. For the recipes example, the configuration is straightforward: Method: GET (used to retrieve data from an API). URI: https://dummyjson.com/recipes Headers, Queries, Body: leave empty. The Dummy JSON recipes endpoint requires no additional parameters. Two HTTP methods cover most Power Platform API scenarios: GET retrieves data, and POST sends data. The API documentation always specifies which method to use for each endpoint. How Do You Return JSON from Power Automate to Power Apps? Add a "Respond to a Power App or flow" action at the end of the flow, create a Text output, and set its value to the Body of the HTTP action. The "Respond to a Power App or flow" action is what makes the flow callable from Power Apps and allows the flow to return data. To pass the JSON response back, click "Add an output," choose Text, name the output "myJSON," and set its value to the Body output of the HTTP action. (Click "See more" if the Body field is not visible immediately.) This approach passes the entire raw JSON response back to Power Apps as a single string. While JSON parsing could be done inside the flow, parsing inside Power Apps is the focus of this tutorial because it is more flexible and gives you the full original response to work with. How Do You Call the Flow from Power Apps? Add a button to the Power Apps screen and set its OnSelect property to call the flow and capture the result in a variable. After saving the flow, Power Apps will automatically register it. Add a new screen, drop a button onto the screen, and set the button's OnSelect property to the formula below. This formula calls the flow and stores the JSON response in a variable named varMyJSON. To inspect the response, add a label, set its Text property to varMyJSON, and set the Overflow property to Scroll. Pressing the button (Alt-click in design mode) will populate the label with the full raw JSON response. How Do You Read JSON? Records vs. Tables In JSON, curly brackets { } enclose a record (a single row with named fields), and square brackets [ ] enclose a table (a list of records). Understanding this two-shape model is the most important step in working with API data in Power Apps. The recipes response from Dummy JSON is shaped like this: the outer container is a record with a field called "recipes," and that field holds a table of recipe records. Every recipe record contains its own fields: name, image, rating, cuisine, a tags array, and much more. When a JSON field has square brackets immediately after its colon, that field is itself an array. The "tags" field on each recipe is one such nested table. So let's translate what you see above: { } on lines 1 and 14. Those outer wrappers indicate that this response is a record. "recipes":[ ] on lines 2 and 13. That indicates your main record has a field named recipes, and the data inside of it is in an array. {} on lines 3 and 7. That is the first record in the recipes table. {} on lines 8 and 12 is the second record in the recipes table. "name" and "image" are two text fields in that image. "tags" is an array in that record. It is a single-column table, the column name is Value, and it contains three records: "Italian," "Vegetarian," and "Main Course." How Do You Use ParseJSON in Power Apps? ParseJSON is a Power Apps function that converts a JSON string into an untyped object. To use the result in a control, navigate to the field you want and wrap it in a type function such as Table(), Text(), Value(), or Boolean(). Add a Gallery to the screen. The Gallery requires a table for its Items property. Because the recipe table lives inside the JSON response, the Items formula must parse the JSON, navigate to the recipes field, and explicitly cast the result as a table: Each part of the formula has a specific purpose. ParseJSON(varMyJSON) converts the raw JSON string into a navigable untyped object. The .recipes drills into the field that holds the recipe list. The Table() wrapper tells Power Apps the result should be treated as a table so the Gallery accepts it. After applying the formula, the Gallery rows render, but the field dropdown shows generic "value" entries. The reason is that ParseJSON returns untyped data—Power Apps does not yet know whether each field is text, a number, or something else. The next section covers how to apply types correctly. How Do You Handle Different JSON Data Types? Wrap each ThisItem.Value reference in the appropriate type function: Text() for strings, Value() for numbers, and Table() with Concat() for nested arrays. Image controls require Text() explicitly. Plain Text Fields In a Gallery template, a label can display a JSON text field directly. The recommended formula uses Text() to make the type explicit and avoid runtime surprises: JSON field names are case-sensitive. In the Dummy JSON recipes response, the field is "name" with a lowercase n. Writing "Name" with a capital N will return blank. Numbers Numbers in JSON are not surrounded by double quotes. That is how you can tell them apart from text fields. The recipe rating field, for example, is returned as 4.6 with no quotes. To use the value in calculations or numeric controls, wrap it in the Value function: Why Does the Image Control Fail with Untyped Data? The Image control in Power Apps does not infer types from untyped data the way a Label does. Setting the Image property directly to ThisItem.Value.image returns an error because the control cannot interpret an untyped object as a URL. The fix is to wrap the reference in Text(), which forces the value into a string: Nested Arrays such as Tags When a JSON field contains square brackets, like the recipe tags field, which holds an array of strings like ["Pizza", "Italian"], then the field is itself a table. To display the array as a comma-separated string in a label, wrap the reference in Table() and pass it through Concat(): The same pattern works for any JSON array: ingredients, instructions, or any other field that returns multiple values per record. How Do You Convert API Data into a Reusable Power Apps Collection? Use ClearCollect with ForAll to walk the parsed table once, casting each field to its correct type, and store the result as a typed collection. Bind controls to the collection instead of the raw ParseJSON result. Repeating ParseJSON and ThisItem.Value.fieldname formulas across every control adds maintenance overhead and makes the app harder to read. The recommended pattern is to parse the JSON once when the data arrives, build a clean collection, and then reference that collection everywhere else. Add a button and set its OnSelect property to the formula below. This formula calls ForAll on the parsed table, aliases each row as "JUNK," and produces a record with three properly typed fields per row. The collection colRecipes now behaves like any other Power Apps collection. Setting a Gallery Items property to colRecipes allows fields to be referenced as ThisItem.Name, ThisItem.Image, and ThisItem.Rating, with no further parsing required. How Do You Make an API Call Dynamic with Query Parameters? Append parameters to the API URL using one ? for the first parameter and & for every subsequent parameter. To drive parameters from Power Apps, add inputs to the flow and reference them in the URI using triggerBody() expressions. Most public APIs support query parameters that filter, sort, or paginate the response. Dummy JSON supports five common parameters that appear in many APIs: limit: maximum number of records to return. skip: number of records to skip from the start, used for paging. select: comma-separated list of fields to include in the response. sortBy and order: field name and direction (asc or desc) for sorting. q: keyword search across the dataset. How Are URL Parameters Joined Together? The first parameter in a URL is preceded by a single question mark. Every parameter after the first is joined with an ampersand. A URL with three parameters looks like the example below. Common mistake: pasting a second example URL directly into the URI field, which produces two question marks. Only one question mark is allowed per URL. After that, every additional parameter must use an ampersand. How Do You Pass a Parameter from Power Apps into the Flow? To accept input from Power Apps, edit the flow, click the trigger ("PowerApps (V2)" or "Respond to a PowerApp" depending on configuration), and add a Text input named "MyTag." Inside the HTTP action, reference the input in the URI using a triggerBody() expression so the value is substituted at runtime. After saving the flow, the Power Apps formula must pass the new value when calling the flow. The Run function accepts inputs in the order they were declared. How Do You Drive the API Call from a Dropdown? To let users pick a value instead of typing one, use the API itself to populate a Power Apps Dropdown. Dummy JSON exposes an endpoint that returns the full list of available recipe tags as a JSON array. Open that URL in a browser, copy the array including the square brackets, and paste it directly into the Items property of a Dropdown control. Power Apps interprets a square-bracketed list as a one-column table named Value automatically. Then update the button OnSelect to pass the dropdown selection to the flow: The result is a fully dynamic, user-driven API call: the user picks a tag, the flow builds the URL, and the gallery refreshes with matching recipes. Common Power Apps API Mistakes to Avoid Case sensitivity: JSON field names must match exactly. The field "name" is not the same as "Name." Untyped data in strict controls: always wrap values with Text(), Value(), Boolean(), or Table() before binding to controls that require a known type. Image controls: always wrap the source URL in Text(). The Image control will not infer the type from untyped data. Nested arrays: wrap with Table() and use Concat() to display them as text in a label. Premium licensing: the HTTP connector requires premium licensing for every user of the app. Plan licensing before building. Question marks in URLs: one ? per URL, maximum. Every parameter after the first must use &. Frequently Asked Questions Can Power Apps Call a REST API Directly? No. Power Apps cannot call external REST APIs directly. The supported pattern is to build a Power Automate flow that uses the HTTP action to call the API, then return the response to Power Apps using the "Respond to a Power App or flow" action. Custom connectors are an alternative, but they also require premium licensing. Do You Need a Premium License to Call an API from Power Apps? Yes. The HTTP action in Power Automate and custom connectors are both premium connectors. Every user who runs an app that calls an external API requires a premium Power Apps or premium Power Automate license. What Does the ParseJSON Function Return in Power Apps? ParseJSON returns an untyped object that can be navigated using dot notation. The function does not assign data types to the values it returns, so each value must be wrapped in a type function like Text(), Value(), Boolean(), DateValue(), or Table() before being used in a control or formula that requires a specific type. Why Does My Image Control Show an Error When I Bind It to ParseJSON Data? The Image control does not infer types from untyped data the way a Label does. Wrapping the reference in Text() (for example, Text(ThisItem.Value.image)) forces the value to a string and resolves the error. Conclusion Calling an API from Power Apps comes down to a five-step pattern: build a Power Automate flow with the HTTP action, return the JSON to Power Apps, parse the JSON with ParseJSON, cast the values with type functions, and reshape the result into a typed collection for clean reuse. Once the pattern is in place, the same approach works for almost every public or internal REST API. The next two topics worth learning are authentication (API keys, OAuth, and bearer tokens) and writing data back to APIs using POST requests. Both build directly on the foundation in this tutorial. Need a Hand? If you want help building solutions like this or you want to take your Power Platform skills to the next level, the team at PowerApps911 has your back. We offer everything from quick 30-minute consulting sessions to long-term partnerships building enterprise apps. Click the Contact button on this page to start a conversation.
- 6 Real Ways I Used Microsoft Copilot and Cowork This Week (Real Work, No Canned Demos)
TL;DR: Forget the perfect demos. Here are six real tasks I knocked out this week with Microsoft Copilot and Copilot Cowork. Replying to meeting emails from my real calendar, turning 74 survey responses into boss-ready talking points, tracking down a lost slide deck, dropping a screenshot of my kids’ soccer schedule straight onto my calendar, learning a brand-new feature that had no docs, and co-authoring a statement of work, plus the one habit (validate everything) that keeps it all safe. Most AI demos are a little too perfect, aren’t they? Clean data, an idealistic scenario, and everything works on the first click. That’s not what real work feels like and sure as heck isn't how my day goes. So this time I’m doing the opposite, no staged demos, just 6 actual things I did for myself this week with Microsoft Copilot and Copilot Cowork, and the productivity I got out of each. You’ll get the exact prompts I used, where these tools genuinely shine, where they still trip up, and the simple guardrail I put on every single one. Some are big team wins, some are small personal time-savers but all of them are things you can copy tomorrow. Prefer to watch the full walkthrough? Check out the video here: https://youtu.be/AnqsiqKs8sw Reply to this email with the times I am actually available to meet This is the one my whole team got most excited about, and it probably has the widest impact. I get a lot of emails from people who want to meet, and most of them (customers, folks outside the company) don’t have access to my calendar. Bookings tools exist, but I like a reply that feels a bit more personal. So in Outlook I hit Reply, clicked the Copilot icon, and give it a prompt like: “Help me reply to this email by checking my calendar and listing the times I’m available next Friday. In the response, include the time zone.” Copilot opens M365 Copilot, reads my actual calendar, and drafts a reply with real open times. Awesome! The gotcha: the magic words are “check my calendar.” Once I started including that part of the prompt, it stopped guessing and it’s been 100% accurate on my availability since. One boundary I hit: I couldn’t get it to reliably pull a second person’s calendar into the same reply. I tried “check my calendar and a coworker’s calendar” on an email that involved both of us, and it never quite nailed the other person’s availability. And even now, I still validate the times before I send. For the first ten or so replies I checked every one. It’s earned my trust, but I keep verifying. Since I found this, I am using it multiple times a day. 😎 Turns out lots of people like to meet with me. How do you turn a pile of survey results into talking points for your boss? As we work to get our arms around how AI is being used across the company, I built a survey in Microsoft Forms and collected 74 responses so far. What tools people are excited about, where AI is helping on client projects, and where they want to learn more. The moment I shared it, our CEO asked for some talking points tied to the survey for an event she was speaking at. She needed them fast. Reading all 74 responses one by one (which I did) is overwhelming when someone needs an answer right now. So I downloaded the responses as an Excel file, opened Copilot in Excel, and prompted something like: “My boss needs me to review these survey results and give her the key themes, specific quotes of where AI is helping us win, any key stats, and other helpful info she can use in a presentation she’s giving.” Boom! It surfaced themes, pull quotes, and statistics even including a standout where one team said AI was saving them about 50% on part of their work. Seriously, it did way better than what my analysis was "They are using AI well". 🤣 Here’s the important part: I did not copy, paste, and send. I went in and curated the strongest quotes and the most useful stats, and I still crunched the deeper numbers myself. Copilot didn’t do the thinking for me; it got me the pull quotes and the quick look in minutes so I could hand my boss exactly what she needed. I added the human touch, knowing the stuff she likes and doesn't, the discernment is often overlooked. Can you use Copilot as a smart search tool to find your files? This is the least flashy one and the one a lot of people use themost. I was prepping a few slides for a Dynamics user group event and wanted a single image off one specific slide. Problem: I couldn’t find the deck. So I asked Copilot: “I’ve done a session where I talk about sprinkling AI into Power Apps and Power Automate to get started. I don’t remember if I have a PowerPoint deck for that. Can you look for me?” What makes this better than regular search: it doesn’t just match on the title or the file’s metadata, it looks inside the slides. It pointed me straight to the most likely deck and listed a few other candidates too. Not bad. If “just using AI for search” is where you start, don’t let anyone talk you out of it. It’s a fantastic on-ramp, and even years in, I still reach for it constantly. Nobody enjoys playing hiding go seek with their data, let Copilot do that. How do you turn a screenshot into calendar events with Cowork? My favorite, even if not exactly work. 🤫 This one crosses over into Copilot Cowork, and it’s a perfect example of killing tedious work. My kids’ fall soccer schedule dropped, and I wanted every game on my calendar. In past years I added them one game at a time. This year I took a screenshot with the dates, times, and locations and handed it to Cowork with a rambling-but-detailed prompt: put every game on my calendar, mark them busy, start at the earliest time listed, end two hours after the last time listed, set the subject to Away or Home plus the opponent’s name, and drop both game times in the body (the first is JV, the second is varsity). A couple of minutes later, done. Then I asked it to add another family member as an invitee across all of their calendars, and it worked through every one. Their time was blocked too. What did that cost? If you’re curious, type /cost in Cowork and it tells you. Mine used 283 credits. Which is about $2.83 at the pay-as-you-go rate to save me 15 to 20 minutes of manual entry. Easy trade. And yes, I validated every event afterward. Trust, but verify. The work tie-in is real, too: I travel a lot and work late, and I’m not going to schedule over my kids’ games. Having those blocks on my calendar helps everyone make better decisions when booking my time. AKA back off people! How do you learn a brand-new AI feature when there’s no documentation? Cowork just started supporting triggers and there are no docs yet. So instead of hunting around, I asked the tool itself: “I understand you now support triggers. When someone messages me in Teams, for example can you give me a list of the different triggers you support?” It told me it could trigger on email, on Teams messages, and even on a webhook. Then I asked it to explain how the webhook trigger works, and it broke that down for me. A couple of minutes and I was up to speed. The bigger lesson: use AI to learn AI. Stuck building a skill? Ask it, “How do I build a skill. What should that look like?” About to set up an AI prompt in Power Apps? Ask it what to do. Don’t be afraid to have the tool teach you how to use the tool. How do you co-author a statement of work and beat the blank-screen problem? I’m part of a statement of work where I own the AI enablement piece. I am in chagre of delivering AI training for the whole company and for their power users, and keeping them in the loop on what’s happening in the AI space with the tools they use. The trouble: sales and delivery drafted “Shane’s section” with way too much detail, committing me to things I didn’t want to be committed to, and making this slacker work too hard. 🤣 I tried to just rewrite their version, but it was structured in a way my brain couldn’t untangle. So I took their text over to Copilot, gave it a big run-on paragraph of everything I didn’t like about it, then a second paragraph describing how I’d shape it, and told it to keep their context so it morphed what was already in the SOW instead of starting from scratch. About fifteen to thirty seconds later, I had a new AI enablement section. No image for this one, SOWs seem dicey to share. Then the part that matters: I didn’t just ship what it wrote. I massaged it into my own voice. I even dumbed some of it down so it sounded like me and not an AI. That’s co-authoring, not outsourcing. The real win is that it got me off the blank screen and into a structure I could actually sculpt. (I went deeper on this idea of AI slop vs. AI dribble vs. AI boost in last week’s video, if you’re fighting the blank-page problem with content.) Frequently asked questions What’s the one prompt trick that makes Copilot’s calendar replies accurate? Tell it to “check my calendar.” Without that instruction, Copilot may suggest meeting times without reading your real availability. Adding it forces Copilot to pull your actual open slots and it’s worth including your time zone in the prompt as well. Can Microsoft Copilot check someone else’s calendar in the same reply? In my testing, not reliably. Even with access to a coworker’s calendar, Copilot handled my own calendar perfectly but wouldn’t consistently pull a second person’s availability into one reply. Verify anything that depends on more than one calendar. How much does a task in Copilot Cowork cost, and how do I check? Type /cost in Cowork and it shows the credits used for what you just did. What triggers does Copilot Cowork support? Based on what Cowork told me directly, it can trigger on email, on Teams messages, and on a webhook. Because these features are changing quickly, the best move is to ask Cowork for the current list rather than relying on a static answer. Should I just copy and paste whatever Copilot writes? No. Every single time, I rewrite the output by picking the best quotes, cutting overcommitments, or putting it in my own voice. AI gets you a strong first draft fast; you’re the one who makes it correct and makes it sound like you. Key takeaways Add “check my calendar” to any Copilot email-reply prompt so it uses your real availability instead of inventing times and include your time zone. Copilot can turn dozens of survey responses into themes, pull quotes, and stats in seconds, but you should always curate before sharing. Copilot search looks inside file content, like slide text, which makes it far better than title-only search for finding a lost deck. Copilot Cowork can read a screenshot and create calendar events from it. When a feature has no documentation, ask the AI tool to explain its own capabilities. That’s how I learned Cowork’s email, Teams, and webhook triggers. Beat the blank-screen problem on documents like SOWs by having AI reshape existing text, then rewrite the draft in your own voice. But, be sure to co-author, don’t copy-paste. Always validate AI output. Trust, but verify. Need help making sense of the AI story? If figuring out your AI story feels like a lot right now, you’re not alone. I’m having this exact conversation every week with CTOs, VPs of IT, and AI leaders, helping them make sense of the Microsoft side of AI. If you’d like help with your AI enablement the team at PowerApps911 can help. Reach out by clicking the Contact button and let’s figure it out together.
- Power Apps EDate and EOMonth: How to Handle Recurring and End-of-Month Dates
TL;DR: This post shows you how to use the EDate and EOMonth functions in Power Apps to work with recurring dates and end-of-month dates. You will learn how EDATE keeps the same day each month (and correctly rolls January 30 down to February 28), how EOMONTH gives you the last day of any month, and how Sequence and AddColumns let you list out a run of dates without guessing how many days are in each month. If you have ever tried to schedule something that repeats on the 30th or the 31st, you already know where this goes sideways. A subscription starts on January 30, and the next payment is supposed to land a month later. But February does not have a 30th. So what date do you use, and how do you get Power Apps to figure it out for you without a pile of if-statements? Two functions handle this cleanly: EDate and EOMonth. They work just like their Excel counterparts, and they take almost all of the date math off your plate. In this post you will see what each one does, when to reach for it, and a couple of supporting tricks (Sequence and AddColumns) that make them easy to test. If you would rather watch the full walkthrough, check out the video here: Power Apps Date Functions: EDate and EOMonth What problem do EDate and EOMonth solve in Power Apps? Both functions handle month math without forcing you to count days. The old approach was to take a date and add a number of days to it with DateAdd. That works fine until you hit the end of the month, because months do not all have the same number of days. Is it 28? 30? 31? You end up writing logic just to answer that question, and it is easy to get wrong. EDate answers “what is this same day, N months from now?” and it is smart about short months. EOMonth answers “what is the last day of the month, N months from now?” You give each one a starting date and a number of months, and it does the rest. What is the Sequence function in Power Apps? Sequence gives you a table of numbers, which is exactly what you need when you want to list out a series of dates. The first argument is how many numbers you want, and the optional second argument is where to start counting. Sequence(12) // a table with a Value column: 1, 2, 3 ... 12 Sequence(12, 0) // starts at 0 instead: 0, 1, 2 ... 11 Starting at 0 is handy when you want the first row to be “this month” (add zero months) and each row after that to step forward one month. The column that Sequence produces is named Value, and you will reference it in the next step. How do you build a list of dates with AddColumns? AddColumns is a data-shaping function that adds a new column to a table. You wrap it around your Sequence table and use it to calculate a date for each number. Point a gallery at that table, and you get one row per month. AddColumns( Sequence(12, 0), MyDate, EOMonth(Today(), Value) ) Then in the gallery, the label simply shows ThisItem.MyDate. Because Value walks from 0 up to 11, you get this month plus the eleven months that follow. How do you get the last day of the month with EOMonth? EOMonth always returns the last day of the month, no matter how many days that month has. You give it a date to read the month from, and a number of months to move. Zero means the current month. EOMonth( Today(), 0 ) Starting from July, that gives you July 31, then August 31, September 30, October 31, and so on. Run it far enough forward to hit February and it returns February 28, because it already knows February is short. That is the whole point: you never have to tell it how many days a month has. How do you keep the same date every month with EDate? EDate returns the same day of the month, N months out, and gracefully handles days that do not exist in shorter months. This is the one you want for recurring schedules that are anchored to a specific day. AddColumns( Sequence(12, 0), MyDate, EDate(Date(2026,1,30), Value) ) Start on January 30, 2026 and step forward, and you get January 30, then February 28 (because there is no February 30), then March 30, April 30, and so on. The value you pass is just the number of months to add, and it can even be negative if you want to look at previous months. This is the pattern for subscription deliveries, contract renewals, and payment dates that got set to an awkward day like the 29th, 30th, or 31st. EDate keeps them on the right day every month and quietly fixes the months where that day does not exist. Should you use Date or DateValue in Power Apps? Use Date when you have the year, month, and day as numbers. Use DateValue when you have the date as text. Both return a real date object; they just take different inputs. Date(2026, 1, 30) // three numbers: year, month, day DateValue("1/30/2026") // a text string that reads as a date If your date is coming in as a string, which happens a lot, DateValue is the natural fit. If you are hand-building a date from numeric values, Date is cleaner. Mixing these up is a common source of “why is this formula not working” moments, so it is worth knowing which one your input calls for. Why not just use DateAdd for this? DateAdd is great for adding a fixed number of days, but it is the wrong tool for month-end math. You can force it to work, for example DateAdd(Date(2026,1,31), 1, Months) will hand you February 28, but the moment you try to add days instead of months you are back to guessing whether the month has 28, 30, or 31 days. EDATE and EOMONTH remove the guessing entirely, which is why they are the cleaner choice. Frequently asked questions What does EDate do in Power Apps? EDate returns the same day of the month a set number of months before or after a start date. If that exact day does not exist in the target month, it moves to the last valid day, so January 30 plus one month becomes February 28. What does EOMonth do in Power Apps? EOMonth returns the last day of the month a set number of months from a start date. Pass 0 for the current month, 1 for next month, and so on. It automatically accounts for months with 28, 30, or 31 days. How do I list the next 12 months of dates in Power Apps? Use Sequence to generate the numbers 0 through 11, then wrap it in AddColumns and calculate a date for each number with EDATE or EOMONTH. Bind a gallery to that table to display one row per month. What is the difference between Date and DateValue in Power Apps? Date takes separate numeric values for year, month, and day, such as Date(2026, 1, 30). DateValue takes a single text string, such as DateValue("1/30/2026"). Use DateValue when your date arrives as text and Date when you have the numbers. Do EDate and EOMonth work the same as in Excel? Yes. Both functions behave the same way they do in Excel, including how they handle end-of-month rollover, so if you know the Excel versions you already know these. How do I handle subscriptions that start on the 31st? Use EDate anchored to the start date and add the number of months you need. EDATE keeps the recurrence on the 31st for months that have one and rolls it back to the last valid day for months that do not. Key takeaways • EDate returns the same day of the month N months out and rolls January 30 down to February 28 when the target day does not exist. • EOMonth returns the last day of the month N months out and automatically knows whether that month has 28, 30, or 31 days. • Sequence(12, 0) produces the numbers 0 through 11, a clean way to represent “this month plus the next eleven.” • AddColumns turns that list of numbers into a list of dates you can bind a gallery to. • Use Date for numeric year, month, and day values and DateValue when your date comes in as text. • Reach for EDate and EOMonth instead of adding a raw number of days with DateAdd, which forces you to guess each month’s length. Need a hand with Dates in Power Apps? If you want help building recurring schedules, subscription logic, or anything else in the Power Platform, the team at PowerApps911 can help. Reach out to us by clicking the Contact button and let us build something awesome together.
- Power Apps App and Host Objects Explained: How to Detect Device, OS, and Screen Info
TL;DR: The App and Host objects in Power Apps let you read details about the device your app is running on and what the app is doing. This post explains what each object exposes, including OS type, browser, session, screen size, and theme colors, and shows you when to use them for troubleshooting and responsive design. Nothing earth shattering, just more core skills you need to have. A question came up in class recently that you have probably hit yourself: how do you make your app behave differently when someone is on an iPhone versus a PC? Maybe you want to open Apple Maps on iOS but send everyone else to a Google Maps link. The answer is the App and Host objects, two built in pieces of Power Apps that quietly hold a ton of useful information about the device, the session, and the app itself. In this post you will learn what the Host and App objects in Power Apps give you, how to read those values, and the real-world reasons you would reach for them. Most of the time it is either troubleshooting a user issue or making a responsive decision on the fly. If you would rather watch the full walkthrough, check out the video here: https://youtu.be/e20InQtbHxo What is the Host object in Power Apps? The Host object gives you information about the environment your app is running in, returned as simple text strings you can read or compare. To use it, you just type Host. in a property and pick what you want. That is genuinely as complicated as it gets. Here is what the Host object exposes: Host.BrowserUserAgent returns the browser user agent string. Host.OSType tells you the operating system, such as Windows, iOS, Android, or Linux. Host.SessionID gives you the current session identifier. Host.TenantID returns your tenant identifier. Host.AppVersion reports the host version the app is running on. Host.OfflineEnabled tells you whether offline is enabled. How do you use the Host object for troubleshooting and device decisions? There are two everyday uses. The first is troubleshooting. You can add a small button that pops up this information so a user can screenshot it and send it to you. Instead of asking someone whether they are on a phone or a laptop and getting a "I do not know", you can see their device, OS, and version information for yourself. The second is making decisions. Because the values come back as text, you can compare them and branch your logic. A real example from class last week: a student needed to open Apple Maps when a user was on iOS instead of sending them to the usual Maps link. The fix was to read the OS type or the browser user agent and decide from there. To see this in action, watch the walkthrough. What about the App.Host object and Host Info? (Two things to ignore) Two lookalikes trip people up, and for the basic scenario you can ignore both. There is an App.Host object in the tree on the left. It showed up fairly recently, but it has no usable properties. It is likely facilitating something behind the scenes, so for now there is nothing you can do with it. There is also HostInfo, used with ShowHostInfo. That one only applies when you have enabled offline, so it is tied to the offline data story and not to grabbing basic device information quickly. What is the App object in Power Apps? The App object holds information and settings about the app itself rather than the device. You access it the same way, by typing App. and choosing a property. One small quirk: the first time you type App. it sometimes does not show the properties, so back out and type it a second time and they appear. That looks like a bug, but it is harmless. The property you will probably use most is App.ActiveScreen, which is the screen the user is currently on. A common pattern is App.ActiveScreen.Name, which a lot of people drop into a header component, so the current screen name always shows at the top of the app. The App object also exposes things like the Theme and whether the app is in a printing state. How do you use App width and height for responsive design? App.Width and App.Height give you the current actual width and height of the app. That is useful in responsive scenarios when you want to know what the user is doing right now. For example, to tell whether the screen is currently horizontal or vertical, you just ask whether height is greater than width or the other way around. App.MinScreenWidth and App.MinScreenHeight are different. Those are the prespecified responsive size breakpoints you have designed, the points where your layout is meant to shift. If you build on size breakpoints, those are the values tied to that responsive story. How do you access theme colors with the App object? You can reach your app theme through the App object too. App.Theme.Colors lets you pull a specific theme color, such as Darker60 or Lighter10, and apply it to a control. Copy that value into a control's Fill and you get the matching theme color, which keeps your app consistent without hardcoding hex values. What settings live on the App object? Select the App object in the tree on the left and you will find a set of app wide settings worth knowing about, even if you do not touch them often: ConfirmExit and its message, so you can force a yes I really meant to close prompt on mobile. Named Formulas, a feature that adds real performance improvements to your apps. OnError, your global error handling entry point. OnStart, functionality that fires before the app loads, plus where you set start screen, theme, and the responsive size breakpoints. OnMessage, a newer one that is likely related to messages or notifications sent to the app, though it is worth confirming in the docs before you rely on it. You do not need to memorize every one. The useful habit is to jump in here periodically and remind yourself what is available so you reach for the right tool when a need comes up. What is the difference between the App and Host objects in Power Apps? The Host object gives you information about the environment and device, such as OS type, browser user agent, session ID, and host version. The App object gives you information and settings about the app itself, such as the active screen, current width and height, and theme colors. How do I detect whether a Power Apps user is on iPhone or Android? Use Host.OSType, which returns values like iOS, Android, Windows, or Linux. Because it comes back as text, you can compare it and branch your logic, for example opening Apple Maps on iOS and a Google Maps link everywhere else. How do I check if a Power Apps screen is in portrait or landscape? Compare App.Height and App.Width. If height is greater than width the screen is vertical, and if width is greater than height it is horizontal. These return the current actual dimensions, so they update as the screen changes. What is the difference between App.Width and App.MinScreenWidth? App.Width is the current actual width of the app at runtime. App.MinScreenWidth is a prespecified responsive breakpoint you design, used to decide when your layout should shift. Why does the App.Host object have no properties? The App.Host object appeared in the tree fairly recently and currently exposes no usable properties. It is likely supporting something behind the scenes, so for now you can safely ignore it. How do I use my Power Apps theme colors in a formula? Use App.Theme.Colors followed by the color name, such as Darker60 or Lighter10, and apply it to a control property like Fill. This keeps your colors consistent with the app theme without hardcoding hex values. Key takeaways The Host object returns environment details as text, including OSType, BrowserUserAgent, SessionID, TenantID, AppVersion, and OfflineEnabled. The App object exposes app level information such as ActiveScreen, current Width and Height, theme colors, and app wide settings. Host values are commonly used for troubleshooting and for conditional logic like opening Apple Maps on iOS versus a Google Maps link elsewhere. App.Width and App.Height tell you the current screen size, while App.MinScreenWidth and App.MinScreenHeight are your designed responsive breakpoints. App.ActiveScreen.Name is a popular way to show the current screen name in a header component. Ignore the App.Host object and Host Info for basic scenarios, since App.Host has no usable properties and Host Info only applies to offline enabled apps. A practical way to make a Power Apps screen look good is to build the structure yourself, then iterate with an AI tool to polish the design. Need a hand with Power Platform? If you want help building solutions like this or taking your Power Platform skills further, the team at PowerApps911 can help. Click the Contact Us button and tell us how we can help! Thanks for reading.
- Microsoft Scout Explained: What Microsoft's First Autopilot Agent Is and What It Can Do
TLDR - Microsoft Scout is the first of Microsoft's new Autopilots: a personal AI agent that runs on your Windows 11 PC, can see local files, browse the web, and write and run code to finish tasks on its own, all inside security boundaries you and your admins control. It runs on GitHub Copilot Business or Enterprise credits rather than your Microsoft 365 Copilot license and getting it running today requires a Frontier organization and an Intune policy. Microsoft used its Build announcements to introduce something that changes how you think about AI assistants. It is called Microsoft Scout, and it is the first of what Microsoft is calling Autopilots. If you have been using Copilot chat and Cowork and wondering what comes next, this is it: an agent that can run on its own, see your local files, launch a browser, and write and run code to finish a job for you. This article covers what Scout is, what it can do today, how it gets billed, and the setup you need before you can try it, so you can decide where it fits next to the tools you already use. Want to see Scout in action? Watch the full walkthrough here: Hands-on with Microsoft Scout. What is Microsoft Scout? Microsoft Scout is the first example of Microsoft's new Autopilots. The easiest way to understand it is to line it up against the tools you already know. Copilot chat is a quick, one-to-one conversation. Ask a question, get an answer, move on. Cowork takes a recipe or standard operating procedure and runs a task on your behalf. It does the work for you, but on demand. You tell it to go, and it goes. Autopilots, with Scout being the first, are agents that run and do things for you without you having to sit there and interact. That is the leap. Scout is built on top of an OpenClaw agent platform, the same kind of technology that had people earlier this year automating everything on their own machines. Some of those experiments went great, and some deleted files or wiped-out accounts because there were no guardrails. What makes Microsoft Scout different is that you get that same autonomy inside the security boundaries provided by Microsoft. You can make sure it is not allowed to delete all your files or touch your bank accounts, and as you will see in the setup section, that security layer is a core part of the product. What can Microsoft Scout do? Scout's real difference is that it reaches beyond the cloud and onto your machine. Copilot and Cowork live in the cloud and will not run code for you or modify anything your desktop. Scout will. Here is what that looks like in practice, with brief examples from a real session. Read your local files. Scout can look through the folders on your PC. Ask it to see your downloads folder and it will. Run PowerShell to act on those files. In one example it found leftover installer files, then cleared 31 of them and freed 4.4 GB, after asking permission first. You never have to know what PowerShell is, just another tool Scout uses to accomplish your goals. Browse the web with a real browser. Scout opens a browser to reach sites and pages, and it will not handle your usernames and passwords, so signed-in sites have limits. Write and run code to solve a problem. When a browser login blocked it from grabbing a YouTube transcript, Scout installed an open-source tool, wrote and ran Python, and kept trying different approaches until it pulled the transcript and saved it to a working folder. Tenacity! Save repeatable work as a skill. Once it figures out a task, you can have Scout turn the steps into a reusable skill so next time is faster and uses fewer credits. Take on a personality. You can choose from a default professional tone, a sarcastic teenager, or an enthusiastic intern, which makes day-to-day use more fun. Now I can have the fun of my mouthy teenagers while at work. 🤣 The key idea across all of this: Scout asks permission before sensitive actions, and you can allow each step just for that session or deny it. You stay in control while it does the work. These examples are quick to summarize but more fun to watch. If you want to see Scout clean up a drive and write its own Python live, the full walkthrough is here. How is Scout different from Agent Builder and Copilot Studio? When you hear the word agent, your mind might jump to Agent Builder or Copilot Studio, but those do a different job. Agent Builder is for chatbot-style agents that chat with a little configuration. Copilot Studio is where you build both conversational and autonomous agents with tools and MCP servers, the kind of enterprise-grade, department-level solution you stand up for a whole team or organization. Scout is not that. Scout is a personal assistant, an agent running just to do things for you. In the broader agent progression, it lands in the no-code bucket alongside Copilot for SharePoint, Agent Builder, and Cowork, even though it can run its own code under the hood. Above that sit Copilot Studio and Agent Flows for enterprise solutions, and above those is full code. Scout is interesting precisely because it lives in the no-code world while still being able to run code, which the other no-code options cannot do. Chat vs Cowork vs Scout: what's the difference? If you already use Copilot Cowork, Scout can feel familiar at first. The easiest way to understand where it fits is to line it up against the two tools you already know. The real difference is not what each one knows, it is how much it does on its own. Copilot Chat is reactive. It is a quick, one-to-one conversation. You ask a question, you get an answer, and you move on. Nothing happens until you type again. Cowork works on demand. You hand it a recipe or standard operating procedure and it runs the whole task on your behalf. You say go, it goes, and then it stops. Scout is autonomous. It is a personal agent that runs and does things for you without you sitting there to drive it. Through automations and heartbeats, it can work in the background on a schedule or a trigger, and unlike Chat and Cowork it can reach your local files, launch a browser, and write and run code, all inside guardrails you control. Think of it as an autonomy ladder. Chat answers, Cowork delivers a task, and Scout runs on its own. That last step, an agent that keeps working while you do something else, is what makes Scout a real shift rather than just another chat window. What are automations and heartbeats? Scout can work in the background two ways, and they are easy to mix up. Automations feel like a Power Automate flow. You tell Scout to run a prompt on a schedule or when a condition is met, such as every hour, once a week, or when a certain file changes. For example: every day at 4:00, check for new videos and generate the summary content that goes with them. You can then run multiple steps. Heartbeats run a prompt on a recurring pulse, such as every 30 minutes, every two hours, during work hours, or always. A common example is triaging your inbox each hour to flag urgent messages from your boss. Running just the same prompt each time. Both can run quietly while you do other things, which is the whole point of an agent. Just be deliberate about frequency. You are paying for usage, so a heartbeat every 15 minutes around the clock burns credits fast. When you set up an automation, also review its permissions and only grant what it needs. If an automation never needs the file system or the ability to run code, do not give it those rights. What tools, skills, and MCP servers can Scout use? Scout ships with built-in skills for Word, PowerPoint, Excel, Loop, and building websites and HTML. You can add your own skills too, since a skill is just a pre-packaged recipe written in markdown. You can even ask Scout to write a skill for you so you do not have to spell out every step again. You can also connect MCP servers, which is how you expand what Scout can reach. One of the things that boxes in Cowork and Copilot is that they are sealed off. With MCP servers you can give Scout access to other tools and data, for example a Dataverse MCP to pull in Dataverse and Dynamics data, or Power Apps MCPs. If you do not know what MCP servers are yet, that is fine. You will get there. Which model and settings should you use? Scout lets you pick the model behind each chat, and the choice affects both quality and cost. The default when you first turn it on can be one of the most expensive options, so match the model to the job. Deep, hard thinking may justify a premium model, while cleaning up a hard drive runs fine on a cheaper, lighter one. You can set a default model in settings so it is always your preferred choice. A few other settings matter. Memory lets Scout learn about you over time. Your default working location is where Scout has the most permissions, and asking it to work outside that location triggers more permission prompts, so set it to the workspace you actually want. Finally, Scout has a prevent sleep setting that needs to be on, because automations and heartbeats only fire while Scout is running. How is Microsoft Scout billed? This is important and easy to miss. When you install Scout you connect it to your GitHub Copilot, and it uses your GitHub Copilot credits to do its job. Scout is not included in your Microsoft 365 Copilot licensing. As of today you need a Microsoft 365 account plus a GitHub Copilot Business or Enterprise account with credits available. The more Scout does, the more credits it uses, so cost scales directly with usage. This is all frontier and new, so Microsoft may change how it works, but that is the model right now. What do you need to set up Microsoft Scout? Installing Scout itself is next, next, finish. The challenge is everything that has to be in place first, and this is the part that keeps most people from trying it today. On the user side you need Windows 11, a Microsoft 365 account, permission to install the app, and a GitHub Copilot Business or Enterprise license, since that license is where the consumption comes from. The admin side is where the work piles up. Your organization must be a Frontier organization. Then an admin configures a Microsoft Scout Intune policy on the target devices, which means setting up Intune, creating a policy, adding the user, and getting the PC to accept it. After that you complete a Microsoft form acknowledging that Scout can process data outside the Microsoft safety bubble, because if GitHub Copilot is configured to use external models, Scout will use them too. None of this is trivial, so if you want to try Scout, engage your IT team early. If you have any questions or need assistance with Microsoft Scout, just click the button below and let us know how we can assist. Frequently Asked Questions What is Microsoft Scout? Microsoft Scout is the first of Microsoft's Autopilots, a personal AI agent that runs on your Windows 11 PC and can complete tasks on its own. Unlike Copilot chat, which is quick question and answer, and Cowork, which runs recipes on demand, Scout is built to run in the background and act for you within security boundaries you and your admins control. How much does Microsoft Scout cost? Scout runs on your GitHub Copilot Business or Enterprise credits, not your Microsoft 365 Copilot license. There is no flat cost. The more Scout runs, the more credits it consumes, so cost scales with how much you use it. What do you need to run Microsoft Scout? You need Windows 11, a Microsoft 365 account, permission to install the app, and a GitHub Copilot Business or Enterprise license. Your organization must be a Frontier organization, and an admin must configure a Microsoft Scout Intune policy and a data acknowledgment before it will run. Is Microsoft Scout safe to use? Scout asks permission before sensitive actions, and you can allow or deny each one. Admins set boundaries through Intune, and you can restrict what automations are allowed to do, such as blocking file system or code access, so it only ever has the permissions it needs. What is the difference between automations and heartbeats? Automations run a prompt on a schedule or when a condition like a file change is met. Heartbeats run a prompt on a recurring pulse, such as every 30 minutes or during work hours. Both consume credits, so set them on a cadence that matches what you need and can afford. Key Takeaways Microsoft Scout is the first of Microsoft's Autopilots, a personal agent that runs tasks on its own rather than only on demand. Scout can read local files, run PowerShell, browse the web, and write and run code, which Copilot chat and Cowork cannot do. Every sensitive action requires your permission, and admins set the security boundaries through an Intune policy. Scout runs on GitHub Copilot Business or Enterprise credits, not Microsoft 365 Copilot licensing, so usage has a direct cost. Automations run on schedules or triggers, while heartbeats run a prompt on a recurring pulse, and both consume credits. You can extend Scout with built-in skills, your own skills, and MCP servers such as Dataverse or Power Apps. Setup today requires Windows 11, Microsoft 365, a Frontier organization, and an Intune policy, so involve IT early. Let's Build Something Awesome Together If you want help getting Scout set up, or you are trying to keep up with all this AI and make your business more productive, the team at PowerApps911 can help. We offer consulting and training, including our Microsoft Power Platform and AI University. Reach out by clicking the Contact Us button and let us know how we can help.
- How to Auto-Sort Email Attachments with Power Automate and AI
Do you, or someone you know, get buried in emails full of attachments that all need to go somewhere different? One file is a purchase order, the next is an invoice, the one after that is a resume, and somewhere in the pile is a photo somebody swore was important. If your day involves constantly triaging emails and dragging files into the right folders, this one is for you. In this guide you will learn how to use a Power Automate cloud flow, a couple of AI prompts, SharePoint, and even Copilot to automatically sort attachments for you. The flow figures out what each file is, drops it into the right SharePoint folder, and pulls the important details into the file properties. The whole idea is to sprinkle a little AI into a process you are probably already running, so you get better results with a lot less manual work. I will also show you a second way to do the same thing using Copilot in SharePoint, so you can decide which approach fits your situation best. Prefer to watch instead of read? Check out the full walkthrough here: https://youtu.be/BgEeOe5NMSI TL;DR: A Power Automate flow watches your inbox, loops through each email attachment, uses an AI prompt to label it as an invoice, purchase order, resume, or other, saves it to the matching SharePoint folder, and pulls the key details into the file properties. You can also do the data extraction with no flow at all using Copilot autofill columns in SharePoint (an M365 Copilot license is required). The Setup: One Messy Email, Four Attachments Here is the scenario. I asked my coworker to send me a few things: a purchase order, a resume, some invoices, and a cute picture for good measure. What I really wanted was for everything to land in the right place automatically. What I got instead was a single email with everything but the kitchen sink crammed into it, attachments and all. That is actually perfect, because it is exactly the kind of mess this flow is built to clean up. When that email lands, all four files need to be sorted, saved, and have their key data pulled out. Let us look at how the flow handles it. What Does This Power Automate Flow Actually Do? Before we get into the details, here is the big picture of what the flow does each time that email arrives: The email trigger kicks off the flow. It grabs the attachments and loops through each one. An AI prompt looks at each file and categorizes it as a resume, purchase order, invoice, or other. The file is saved to a SharePoint folder that matches its category. Based on that same category, a specialized prompt extracts the important details and writes them to the file properties. With four attachments, the loop runs four times. If only one file came in, it would run once. Simple as that. Step 1: Trigger the Flow When an Email Arrives The flow starts with the When a new email arrives trigger. This is where you decide what counts as a file worth sorting. You can scope it to a specific mailbox, a specific sender, only emails that have attachments, or only mail that lands in a certain folder. There are a lot of options here, so configure it to match how the mail actually shows up for you. A common real-world pattern is a shared or generic mailbox. Customers will set up something like invoices@yourcompany.com, and the flow fires every time something lands there. That keeps the automation tightly focused on the mail you actually want to process. Step 2: Get and Loop Through the Attachments Next, add a Get attachments action. Here is the key thing to understand: attachments come back as a table, not as a single file. That is why we have to loop. For each item in that table, we add a Get attachment action that pulls the actual file content using the message and the attachment ID for the item we are currently on. This is the part that lets one email with four files turn into four trips through the rest of the flow. Pro Tip: Loops like this can be confusing but they are necessary, so if you are building your flow and it wants to loop, ask why it wants to loop instead of trying to get rid of it. Step 3: Use an AI Prompt to Categorize Each File This is the first bit of sprinkling some AI, and honestly it is the part that does the heavy lifting. We add a Run a prompt action and pass in the file. The instructions are short and direct: analyze this file and choose one of the following categories: resume, purchase order, invoice, or other. Here is the nice thing about a large language model. I did not have to explain what a purchase order or an invoice actually is. It already understands the difference. If you have unusual documents, you absolutely can give it more specific rules, like 'if the file contains these fields, treat it as this category.' But for most everyday documents, a generic prompt works great. Make It Return JSON, Not Text At the bottom of the prompt I ask it to respond with the category plus the file content, formatted as JSON, with exactly two fields: my category and my contents. Then on the right side of the action, I switch the output from the default Text to JSON. This matters more than it sounds. When the output is JSON, you can work with each piece as its own object later in the flow. So you can grab the category to decide where to save the file, and grab the contents to feed the next prompt. A lot of the time in Power Automate, JSON output is what you want. Step 4: Save the File to a Dynamic SharePoint Folder Now that we know what the file is, we save it with a Create file action in SharePoint. The trick is in the folder path. Instead of hard-coding one location, I set it to something like Shared Documents/AI Prompt Router/ and then add the category as dynamic content on the end. So when the prompt returns 'invoice,' the file lands in the invoice folder. When it returns 'resume,' it lands in the resume folder. When you write a file to a SharePoint or OneDrive path that does not exist yet, it gets created for you. The first time I ran this, the invoice folder was not there. The flow made it and dropped the file in. No setup required. For the file name I use the name from Get attachment, and for the content I use the file bytes from that same action. That is all it takes to put each file exactly where it belongs. Step 5: Switch Based on the Category With the file saved, we use a Switch action to decide what to do next. Think of a Switch as a clean way of saying 'if it is this, do that.' We point it at the category and set up a case for each value: one for invoice, one for resume, one for purchase order, and one for other. Inside each case we run a second, specialized prompt against the file content we captured earlier. This is where having that JSON output pays off, because we can feed the 'my contents' value straight into the next prompt. Each case has its own prompt tuned for that document type, and once again I set the output to JSON so I can use the results in the next step. Step 6: Update the File Properties The last piece in each case is an Update file properties action. We already created the file and uploaded it, so now we write the extracted details into its SharePoint columns. What you capture depends on the document: Invoices: name, amount, invoice number, and invoice date. Purchase orders: name and amount. Resumes: a short description and the person's name. Other: nothing. We just let those files sit in the folder. Your mileage will vary, and that is the point. You can capture whatever metadata matters to your business. The big takeaway is that a couple of small prompts can help you understand your content and pull out the pieces you care about, automatically. Why Not Just Use One Big Prompt? Good question, and one I asked myself. I could have written a single prompt that says 'figure out the category, and if it is an invoice do this, if it is a resume do that.' But that prompt would have gotten big, and the instructions could start to conflict with each other. It also tends to use more credits to run. Splitting it into one prompt to identify the document and a separate, specialized prompt to process it just felt cleaner when I was building it. I am not going to call it a best practice. I would genuinely encourage you to test it both ways and see which uses fewer credits and gives you better results. The point is to understand the tools and the tradeoffs, then pick what fits. Can SharePoint Extract the Data Without a Flow? (Copilot Autofill Columns) Here is the bonus method I promised. Everything above uses AI credits in the flow to extract data. But what if SharePoint could do the extraction for you the moment a file lands? That is exactly what Copilot in SharePoint autofill columns do. Over on a SharePoint site with M365 Copilot set up, I have an invoice library. Drop a file in, wait a few seconds, and the columns fill themselves in: invoice amount, date, name or number, and vendor name. You will see a little sparkle icon next to each value, which tells you Copilot generated it. How to Set It Up In the library, I used the Copilot 'ask a question' option and typed something like: This document library has invoices. Create autofill columns to extract vendor name, invoice number, invoice date, and invoice amount. Copilot reviews the content, confirms it can find that information, and defines the new columns for you. It even writes the column-level prompts itself. For example, the invoice amount column ended up with instructions to extract the total amount due and return it as a number without currency symbols, returning 0 if it is missing. I did not type any of that. One requirement to know up front: you need an M365 Copilot license to set this up. But once it is configured, anyone who drops a file in that library gets the columns filled automatically. No flow steps, no extra credits for the extraction. This is very interesting. Which Approach Should You Use? So how do you choose? Maybe you don't? What if you combine them? Imagine the flow from the first half simply sorts each file into the right library, and each of those libraries already has autofill columns set up. You would not need the second layer of prompts in the flow at all. The data extraction would just happen on its own. Two techniques, working together. Keep It Tight: Models and Credits Whichever path you choose, a couple of habits will save you money. First, do not overdo the prompts. I have seen people write ten pages of instructions. They work, but all of that has to be ingested and processed, and it burns more credits. Keep prompts as tight as you can while still getting good results. Second, pick the smallest model that does the job. I used Sonnet 4.6 here because it is a strong choice today, but for simple categorization a lighter model like GPT-4.1 mini would likely work fine and cut credit use considerably. Save the big reasoning models for when you actually need them. Key Takeaways If you remember nothing else, remember these: Attachments come into Power Automate as a table, so you have to loop through them. One AI prompt to categorize, then a specialized prompt per type, is cleaner and cheaper than one giant prompt. Set your prompt output to JSON so you can reuse the category and contents later in the flow. Write files to a dynamic SharePoint folder path. If the folder does not exist, SharePoint creates it for you. Copilot in SharPoint Autofill columns can extract data automatically with no flow steps and no extra credits, if you have an M365 Copilot license this is interesting. Use the smallest model that gets good results, and keep prompts tight, to control credit usage. Frequently Asked Questions Do I need a Copilot license for this? Not for the Power Automate version. The flow uses AI prompt actions that run on AI Builder or Copilot credits, so no Copilot license is required there. You only need an M365 Copilot license for the second method, the Copilot autofill columns in SharePoint. Why output JSON instead of plain text? JSON gives you structured fields you can reference individually later in the flow. With JSON you can grab the category to decide where to save the file, and grab the extracted contents to feed the next prompt. Plain text would force you to parse it yourself. Will this work with a shared or generic mailbox? Yes, and that is one of the most common real-world setups. You point the trigger at the shared mailbox, like invoices@yourcompany.com, and the flow runs every time a message with attachments lands there. Why not use one big prompt to do everything at once? You can, but a single prompt that both categorizes and extracts tends to get long, its instructions can start to conflict, and it usually costs more credits to run. Splitting it into a categorize prompt plus a specialized extraction prompt keeps each one focused. Test both ways and compare results and credit usage for your own documents. Do I have to create the SharePoint folders first? No. When the cloud flow writes a file to a folder path that does not exist yet, SharePoint creates the folder automatically. The first run will build the invoice, resume, purchase order, and other folders for you. Which AI model should I choose? Use the smallest model that gives you good results. A strong general model like Sonnet 4.6 works well, but for simple categorization a lighter model such as GPT-4.1 mini may do the job for far fewer credits. Save the heavy reasoning models for tasks that genuinely need them. Wrapping Up That is the whole thing. You took a messy email full of mixed attachments and turned it into neatly sorted SharePoint folders with the key details extracted into file properties, all automatically. You saw how to do it with AI prompts inside a Power Automate flow, and how to do it with Copilot autofill columns in SharePoint. None of this is a giant rebuild. It is not an agent or a pile of new infrastructure. It is a flow you might already have for moving files around, made smarter by sprinkling in a little AI. That is the mindset I want you to walk away with: look for the small places where AI can do the boring work for you. Need a Hand? If you want help building solutions like this, or you are looking for more ways to get Copilot working across your business, the team at PowerApps911 can help. We do Power Platform consulting and training every day, and with our friends at TMC we can even tie this kind of automation into your Dynamics 365 Business Central or wider ERP. Reach out and let us build something great together.
- PowerApps911 Joins Technology Management Concepts (TMC)
We’re excited to officially share some big news with the Power Platform and Microsoft community: PowerApps911 has joined Technology Management Concepts (TMC). Joining TMC allows us to deliver the full Microsoft Business Applications picture in a deeper, more seamless way, so we can better support both what organizations need today and what’s coming next. That means expanded access to a wide range of Microsoft products and services, including: Dynamics 365 Business Central Dynamics CRM Power Apps Power Automate Power BI Copilot Copilot Studio Power Pages SharePoint Dataverse Fabric Azure Data and AI solutions And yes, now we can even help with licensing. Could there be a better scenario than our straightforward approach to helping organizations navigate licensing? 😄 Continuing the Same Practical Approach Most importantly, we are here to support organizations wherever they are on their journey. If you are unsure which Microsoft tools solve your problem, we aim to continue being a trusted advisor by taking the time to understand your business, your organization, and your goals and then recommending the right solution. What’s not changing is the part people already trust. You’ll continue working with the same PowerApps911 team and receiving the same practical, real-world approach. We remain committed to helping organizations learn, build, and succeed, not just at go-live, but as needs evolve. What This Means Going Forward For our training community, this means continued expansion across the Microsoft platform, including plans to grow into the Dynamics space while continuing to add new offerings around Power Platform and Microsoft AI. For consulting clients, it means greater depth and scale. Simply put, we’ll be able to say yes a whole lot more when people ask: “Can you help with XYZ?” Looking Ahead Our focus is on a smooth, thoughtful transition and continuing to earn trust every step of the way. We’re incredibly excited about what this means for the future and look forward to continuing to help organizations build solutions with Microsoft technologies that make a real impact. Thank you to everyone who has supported PowerApps911 over the years. We’re just getting started. If you have any questions or need assistance, just click the button below and let us know how we can assist.











