[{"content":"The Problem You\u0026rsquo;ve built a beautiful canvas app backed by Dataverse. Your users can filter, sort, and search records perfectly.\nThen someone asks:\n\u0026ldquo;Can I export what I see to Excel?\u0026rdquo;\nUnlike Model-Driven Apps, canvas apps don\u0026rsquo;t have a built-in Export to Excel button. You need to build this yourself.\nIn this guide, we\u0026rsquo;ll walk through 5 different methods — each with step-by-step instructions, honest pros, and honest cons.\nBefore We Start Every method in this guide assumes:\nYour data lives in Dataverse tables Your gallery already has filters and sorting applied Your gallery\u0026rsquo;s Items property looks something like this: SortByColumns( Filter( Accounts, Status = drpStatus.Selected.Value, StartsWith(Name, txtSearch.Text) ), \u0026#34;revenue\u0026#34;, If(SortDescending, SortOrder.Descending, SortOrder.Ascending) ) Let\u0026rsquo;s dive in! 🚀\nMethod 1: Collection → Power Automate Loop → Excel This is the most common approach you\u0026rsquo;ll find online. Collect your filtered records, send them as JSON, and use Power Automate to write each row into an Excel table.\nStep 1: Collect the Filtered Records Add an Export button to your screen. Set its OnSelect to:\nClearCollect( colExportData, ForAll( Gallery1.AllItems, { AccountName: ThisRecord.Name, Revenue: ThisRecord.Revenue, Status: ThisRecord.Status, City: ThisRecord.Address1_City } ) ); Why ForAll? It captures exactly what the user sees and flattens lookups/choices into simple text values.\nStep 2: Convert to JSON Add this after the ClearCollect:\nSet(varJSONExport, JSON(colExportData, JSONFormat.IndentFour)); Step 3: Create the Power Automate Flow Go to Power Automate → Create → Instant cloud flow Set the trigger to PowerApps (V2) Add an input of type Text called ExportJSON Add a Parse JSON action Content: triggerBody()['text'] Schema: Generate from a sample JSON array of your columns Add an Apply to each loop over the parsed JSON body Inside the loop add Excel Online (Business) → Add a row into a table Point to a pre-created Excel file in SharePoint Map each column to the parsed JSON fields Add a Respond to a PowerApp or flow action returning the file URL Step 4: Call the Flow from Power Apps Set(varFileURL, ExportToExcelFlow.Run(varJSONExport)); Launch(varFileURL); Notify(\u0026#34;Export complete!\u0026#34;, NotificationType.Success); Step 5: Pre-Create the Excel Template Go to your SharePoint document library Create a blank .xlsx file Add a Table with headers matching your columns — Account Name, Revenue, Status, City Save the file — the flow will append rows to this table Pros ✅ Exports exactly what the user sees ✅ Full control over which columns are exported ✅ Works with complex filter logic ✅ User-triggered and intuitive Cons ❌ Apply to each is painfully slow for 500+ rows ❌ JSON payload from Power Apps has a ~2 MB limit ❌ Requires a Power Automate license ❌ Excel template must be pre-created with correct headers Method 2: JSON + Office Script (No Loops) This method eliminates the slow loop from Method 1. Instead of writing row-by-row, an Office Script writes all rows at once.\nStep 1: Collect and Convert to JSON Same as Method 1 Steps 1 and 2:\nClearCollect( colExportData, ForAll( Gallery1.AllItems, { AccountName: ThisRecord.Name, Revenue: ThisRecord.Revenue, Status: ThisRecord.Status } ) ); Set(varJSON, JSON(colExportData, JSONFormat.IndentFour)); Step 2: Create the Office Script In Excel Online, go to Automate → New Script and paste:\nfunction main(workbook: ExcelScript.Workbook, jsonData: string) { let data: Array\u0026lt;{ AccountName: string; Revenue: number; Status: string; }\u0026gt; = JSON.parse(jsonData); let sheet = workbook.getActiveWorksheet(); // Clear previous data sheet.getUsedRange()?.clear(); // Write headers let headers = [\u0026#34;Account Name\u0026#34;, \u0026#34;Revenue\u0026#34;, \u0026#34;Status\u0026#34;]; sheet.getRangeByIndexes(0, 0, 1, headers.length) .setValues([headers]); // Write ALL rows at once let rows = data.map((item) =\u0026gt; [ item.AccountName, item.Revenue, item.Status ]); if (rows.length \u0026gt; 0) { sheet.getRangeByIndexes(1, 0, rows.length, headers.length) .setValues(rows); } // Format as table let range = sheet.getRangeByIndexes( 0, 0, rows.length + 1, headers.length ); sheet.addTable(range, true); } Save the script.\nStep 3: Build the Power Automate Flow Trigger: PowerApps (V2) → Input: ExportJSON (Text) Add a Run script action (Excel Online Business) Location: Your SharePoint site Document Library: Select the library File: Select your Excel workbook Script: Select the script you created ScriptParameters/jsonData: triggerBody()['text'] Add a Respond to a PowerApp or flow action returning the file URL Step 4: Call the Flow Set(varFileURL, ExportViaOfficeScript.Run(varJSON)); Launch(varFileURL); Pros ✅ Much faster than Method 1 — all rows written at once ✅ Clean Excel output with formatted table ✅ Can handle 2,000–5,000 rows comfortably ✅ No slow Apply to each loops Cons ❌ Requires Office Scripts (needs Microsoft 365 Business Standard or higher) ❌ Still subject to the ~2 MB JSON payload limit ❌ Office Scripts not available in all tenants (GCC, etc.) ❌ Slightly more complex setup Method 3: Pass Filter Criteria → Power Automate Queries Dataverse Instead of sending data to the flow, you send filter criteria. Power Automate queries Dataverse directly, completely bypassing the 2,000-row delegation limit.\nStep 1: Capture the User\u0026rsquo;s Filter Selections // On drpStatus.OnChange Set(varFilterStatus, drpStatus.Selected.Value); // On sort toggle Set(varSortColumn, \u0026#34;revenue\u0026#34;); Set(varSortOrder, \u0026#34;desc\u0026#34;); Step 2: Create the Power Automate Flow Trigger: PowerApps (V2) with these inputs:\nFilterStatus (Text) SortColumn (Text) SortOrder (Text) SearchText (Text) Add a List rows action (Dataverse):\nTable: Accounts Filter rows: statuscode eq \u0026#39;@{triggerBody()[\u0026#39;text_1\u0026#39;]}\u0026#39; and startswith(name, \u0026#39;@{triggerBody()[\u0026#39;text_4\u0026#39;]}\u0026#39;) Sort by: @{triggerBody()[\u0026#39;text_2\u0026#39;]} @{triggerBody()[\u0026#39;text_3\u0026#39;]} Row count: 5000 Add a Create CSV table action (Data Operations):\nFrom: value output of the List rows action Columns: Custom — map only the columns you need Add a Create file action (SharePoint):\nFile Name: Export_@{utcNow()}.csv File Content: Output of Create CSV table (Optional) Add a Convert file action (OneDrive for Business):\nConvert the .csv to .xlsx if needed Add a Respond to a PowerApp or flow action → Return the file URL\nStep 3: Call the Flow from Power Apps Set( varExportLink, ExportFromDataverse.Run( varFilterStatus, varSortColumn, varSortOrder, txtSearch.Text ) ); Launch(varExportLink); Notify(\u0026#34;Your export is ready!\u0026#34;, NotificationType.Success); Pros ✅ No delegation limits — Power Automate queries Dataverse server-side ✅ Can handle tens of thousands of rows ✅ No large payloads sent from Power Apps ✅ Fast execution Cons ❌ Must rebuild filter logic as OData — can drift from app logic ❌ Complex filters (nested OR/AND) are harder in OData ❌ Sorting on lookup fields is tricky ❌ User waits 15–60 seconds for the flow to complete Method 4: Launch a Dataverse View URL If your Dataverse table has saved views that match common filter combinations, you can skip Power Automate entirely and launch the built-in export.\nStep 1: Create a Saved View in Dataverse Go to make.powerapps.com Navigate to Tables → Open your table Click Views → + New view Add the columns you want Apply your filters Save the view Copy the View ID from the URL Step 2: Construct the Export URL Dataverse supports a direct export URL pattern:\nhttps://{org}.crm.dynamics.com/_grid/print/export_to_excel.aspx?entity={table_logical_name}\u0026amp;viewid={view_guid}\u0026amp;viewtype=1039 Step 3: Add a Launch Button in Power Apps Launch( \u0026#34;https://yourorg.crm.dynamics.com/\u0026#34; \u0026amp; \u0026#34;_grid/print/export_to_excel.aspx?\u0026#34; \u0026amp; \u0026#34;entity=account\u0026amp;\u0026#34; \u0026amp; \u0026#34;viewid=%7bYOUR-VIEW-GUID%7d\u0026amp;\u0026#34; \u0026amp; \u0026#34;viewtype=1039\u0026#34;, {}, LaunchTarget.New ) Step 4: (Optional) Switch Views Dynamically If you pre-create multiple views for common filter states:\nLaunch( \u0026#34;https://yourorg.crm.dynamics.com/\u0026#34; \u0026amp; \u0026#34;_grid/print/export_to_excel.aspx?\u0026#34; \u0026amp; \u0026#34;entity=account\u0026amp;viewid=\u0026#34; \u0026amp; If( drpStatus.Selected.Value = \u0026#34;Active\u0026#34;, \u0026#34;%7bACTIVE-VIEW-GUID%7d\u0026#34;, \u0026#34;%7bINACTIVE-VIEW-GUID%7d\u0026#34; ) \u0026amp; \u0026#34;\u0026amp;viewtype=1039\u0026#34;, {}, LaunchTarget.New ) Pros ✅ Zero Power Automate needed — no premium license required ✅ Very simple to implement ✅ Handles large datasets natively ✅ Produces a proper .xlsx file Cons ❌ Filters are static — tied to pre-created views ❌ Not \u0026ldquo;what you see is what you export\u0026rdquo; ❌ User needs Dataverse/Dynamics license with view access ❌ URL format can break with platform updates ❌ Limited to the views you pre-create Method 5: CSV via Concat() + Power Automate File Save This is the lightest-weight method. Build the entire CSV string in Power Apps using Concat(), then send it to a dead-simple flow that saves it as a file.\nStep 1: Build the CSV String On your Export button\u0026rsquo;s OnSelect:\nSet( varCSV, \u0026#34;Account Name,Revenue,Status,City\u0026#34; \u0026amp; Char(13) \u0026amp; Char(10) \u0026amp; Concat( SortByColumns( Filter( Accounts, Status = drpStatus.Selected.Value, StartsWith(Name, txtSearch.Text) ), \u0026#34;revenue\u0026#34;, If( SortDescending, SortOrder.Descending, SortOrder.Ascending ) ), \u0026#34;\u0026#34;\u0026#34;\u0026#34; \u0026amp; Name \u0026amp; \u0026#34;\u0026#34;\u0026#34;\u0026#34; \u0026amp; \u0026#34;,\u0026#34; \u0026amp; Text(Revenue) \u0026amp; \u0026#34;,\u0026#34; \u0026amp; \u0026#34;\u0026#34;\u0026#34;\u0026#34; \u0026amp; Text(Status) \u0026amp; \u0026#34;\u0026#34;\u0026#34;\u0026#34; \u0026amp; \u0026#34;,\u0026#34; \u0026amp; \u0026#34;\u0026#34;\u0026#34;\u0026#34; \u0026amp; Address1_City \u0026amp; \u0026#34;\u0026#34;\u0026#34;\u0026#34;, Char(13) \u0026amp; Char(10) ) ); Important: Wrap text values in escaped double quotes (\u0026quot;\u0026quot;\u0026quot;\u0026quot;) to handle commas inside field values.\nStep 2: Create a Simple Flow Trigger: PowerApps (V2) → Input: CSVContent (Text) Add a Create file action (SharePoint): Folder Path: /Shared Documents/Exports File Name: Export_@{utcNow()}.csv File Content: triggerBody()['text'] (Optional) Add a Convert file action (OneDrive): Convert .csv → .xlsx Add a Respond to a PowerApp or flow action → Return the file URL Step 3: Call the Flow and Open the File Set(varFileLink, SaveCSVFlow.Run(varCSV)); Launch(varFileLink); Notify(\u0026#34;Export complete!\u0026#34;, NotificationType.Success); Pros ✅ Simplest flow — no loops, no scripts, no parsing ✅ Exports exactly what the user sees ✅ Fast for small-to-medium datasets ✅ Low licensing requirements Cons ❌ Concat() is subject to delegation limits (max 2,000 rows) ❌ CSV string limited to ~2 MB ❌ Must handle special characters manually ❌ Produces .csv, not native .xlsx (without conversion step) ❌ Complex column types need manual formatting Comparison Table Criteria Method 1\nCollection + Loop Method 2\nJSON + Office Script Method 3\nOData in Flow Method 4\nLaunch View URL Method 5\nCSV Concat Approach Collect filtered records → Send JSON → Flow loops and writes each row to Excel Collect filtered records → Send JSON → Office Script writes all rows at once Send filter criteria → Flow queries Dataverse → Creates CSV/Excel Launch a pre-built Dataverse view export URL directly Build CSV string with Concat() → Flow saves as file Max Rows ~2,000 ~5,000 100,000+ Unlimited ~2,000 Speed 🐢 Slow\n(row-by-row loop) 🐇 Fast\n(bulk write) 🐇 Fast\n(server-side query) ⚡ Instant\n(native platform export) 🐇 Fast\n(single string, no loop) Matches User's Filters ✅ Exact match ✅ Exact match ⚠️ Must rebuild as OData ❌ Static views only ✅ Exact match Complexity 🟡 Medium 🔴 High 🟠 Medium-High 🟢 Low 🟢 Low Delegation Safe ❌ No\n(client-side limit) ❌ No\n(client-side limit) ✅ Yes\n(server-side query) ✅ Yes\n(platform handles it) ❌ No\n(client-side limit) Output Format .xlsx .xlsx .csv / .xlsx .xlsx .csv Licensing Needed Power Automate + Dataverse connector Power Automate + Office Scripts (M365 Business Std+) Power Automate + Dataverse connector Dataverse / Dynamics 365 license only Power Automate (standard connectors) Payload Limit ~2 MB JSON from app ~2 MB JSON from app No payload — only filter params sent No payload — URL only ~2 MB CSV string from app Best For Small datasets, beginners getting started Medium datasets needing polished .xlsx output Large datasets (10K+ rows) Quick wins with minimal effort Simple exports with minimal flow complexity --- Which Method Should You Use? Here\u0026rsquo;s a quick decision guide:\nSmall dataset + exact filters? → Method 5 (CSV Concat) for simplicity Need .xlsx with nice formatting? → Method 2 (Office Scripts) Large dataset (10K+ rows)? → Method 3 (OData in Flow) Minimal effort, no Power Automate? → Method 4 (Launch View URL) Getting started / most tutorials follow this? → Method 1 (Collection + Loop) Delegation Warning For Methods 1, 2, and 5, always remember:\nSet your delegation limit to the max (2,000) under Settings → General → Data row limit If your filtered data might exceed 2,000 rows, use Method 3 Show a warning to your users: If( CountRows(colExportData) \u0026gt;= 2000, Notify( \u0026#34;Warning: Only the first 2,000 records are included.\u0026#34;, NotificationType.Warning ) ) Found this helpful? Share it with your Power Platform community! 🚀\n","permalink":"https://thelowcodebuilder.com/posts/export-powerapps-canvas-to-excel/","summary":"\u003ch2 id=\"the-problem\"\u003eThe Problem\u003c/h2\u003e\n\u003cp\u003eYou\u0026rsquo;ve built a beautiful canvas app backed by \u003cstrong\u003eDataverse\u003c/strong\u003e. Your users can filter, sort, and search records perfectly.\u003c/p\u003e\n\u003cp\u003eThen someone asks:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u0026ldquo;Can I export what I see to Excel?\u0026rdquo;\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eUnlike Model-Driven Apps, canvas apps \u003cstrong\u003edon\u0026rsquo;t have a built-in Export to Excel button\u003c/strong\u003e. You need to build this yourself.\u003c/p\u003e\n\u003cp\u003eIn this guide, we\u0026rsquo;ll walk through \u003cstrong\u003e5 different methods\u003c/strong\u003e — each with step-by-step instructions, honest pros, and honest cons.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"before-we-start\"\u003eBefore We Start\u003c/h2\u003e\n\u003cp\u003eEvery method in this guide assumes:\u003c/p\u003e","title":"Exporting Records from Power Apps Canvas to Excel: The Complete Guide"},{"content":"Introduction If you\u0026rsquo;ve been anywhere near the Microsoft ecosystem lately, you\u0026rsquo;ve probably heard the buzz around Copilot in Power BI. But most of the conversation stops at \u0026ldquo;AI can build dashboards now!\u0026rdquo; without ever getting into what that actually looks like in practice.\nSo let\u0026rsquo;s fix that.\nIn this post, I\u0026rsquo;ll break down what Copilot in Power BI genuinely does, walk through a real-world example, and — just as importantly — be honest about where it still falls short.\nWhat Copilot in Power BI Actually Does Before we get into examples, it\u0026rsquo;s worth understanding what\u0026rsquo;s under the hood. Copilot in Power BI isn\u0026rsquo;t one single feature. It\u0026rsquo;s a collection of AI-assisted capabilities woven into different parts of the development workflow.\nHere\u0026rsquo;s what it currently brings to the table:\n📝 Generate Reports from Plain English Prompts You can describe the report you want in natural language and Copilot will attempt to build a starting layout — selecting visuals, fields, and basic formatting based on your dataset and your description.\n📐 Auto-Create DAX Measures Instead of writing DAX from scratch, you can describe the calculation you need and Copilot will generate the measure code. For developers who are newer to DAX, this alone can be a significant time-saver.\n💡 Summarize Insights from Data Copilot can scan your report visuals and generate a written narrative summary of what the data is showing — useful for executive summaries or report descriptions that usually take extra manual effort.\n📄 Generate Report Descriptions When publishing reports, Copilot can automatically write descriptions for pages and visuals, which helps with documentation and makes reports more accessible to non-technical stakeholders.\nTaken together, these features are designed to compress the time between raw data and usable insight. Now let\u0026rsquo;s see what that looks like in the real world.\nA Real Example: Building a Sales Dashboard with Copilot Here\u0026rsquo;s a scenario that closely mirrors how many analysts are starting to use this tool day-to-day.\nThe Dataset A standard sales dataset containing:\nOrder dates Product names and categories Sales revenue and units sold Regional data (country, city) Customer segments Nothing exotic — the kind of data most business analysts deal with regularly.\nThe Prompt After connecting the dataset in Power BI Desktop, Copilot was given the following prompt:\n\u0026ldquo;Create a sales dashboard showing monthly revenue trends, top-performing products, and a regional breakdown of sales.\u0026rdquo;\nClean, specific, and structured — which, as you\u0026rsquo;ll see, matters a lot.\nThe Output Within seconds, Copilot generated a report page that included:\n✅ A line chart showing monthly revenue over time ✅ A bar chart ranking the top 10 products by revenue ✅ A map visual plotting sales by region ✅ A card visual showing total revenue as a headline KPI ✅ Basic slicer filters for date range and product category For a first draft? Genuinely impressive. The visual selection was logical, the layout was clean, and the field mapping was mostly correct.\nWhat Still Needed Manual Fixing Here\u0026rsquo;s where it gets honest. The output wasn\u0026rsquo;t production-ready. Here\u0026rsquo;s what required manual intervention:\nDAX measure accuracy — The \u0026ldquo;Monthly Revenue\u0026rdquo; measure wasn\u0026rsquo;t using the right time intelligence function for proper month-over-month comparisons Visual formatting — Colors, fonts, and branding were completely default and needed customization Filter context — One of the slicers wasn\u0026rsquo;t properly connected to all visuals on the page Labelling — Axis labels and chart titles were generic and needed to be rewritten for clarity Missing KPIs — Copilot didn\u0026rsquo;t include a units-sold metric or a revenue-vs-target comparison (things a human analyst would naturally think to add) The honest framing here: Copilot got you to 60-70% of a working dashboard in minutes. The remaining 30-40% still required domain knowledge, judgment, and manual refinement. That\u0026rsquo;s not a criticism — that\u0026rsquo;s a genuinely useful starting point that changes how long dashboard development takes.\nBuilding credibility means talking about what doesn\u0026rsquo;t work just as much as what does. Here are the three limitations that matter most in practice.\n1. Complex DAX is Still Risky Territory Copilot handles straightforward measures reasonably well — sums, averages, basic time intelligence. But the moment you need something like rolling 12-month averages, dynamic segmentation logic, or CALCULATE with multiple filter conditions, the generated code needs careful review. In some cases, it\u0026rsquo;s subtly wrong in ways that won\u0026rsquo;t throw an error but will silently misrepresent your data.\nThe rule: Always validate AI-generated DAX against expected outputs before publishing.\n2. It Needs a Clean, Well-Structured Data Model Copilot is only as smart as the model it\u0026rsquo;s working with. If your tables aren\u0026rsquo;t properly related, your date table isn\u0026rsquo;t marked as a date table, or your column naming is inconsistent — Copilot will struggle. Garbage in, garbage out still applies.\nThe rule: Invest in your data model before relying on Copilot to generate anything meaningful.\n3. Human Validation Is Non-Negotiable This might be the most important point. Copilot doesn\u0026rsquo;t understand your business context. It doesn\u0026rsquo;t know that your \u0026ldquo;revenue\u0026rdquo; column excludes refunds, or that your regional hierarchy has a quirk from a legacy system migration. It doesn\u0026rsquo;t know what your stakeholders actually care about.\nAI can accelerate the build process significantly. But the thinking — the judgment about what to show, what to emphasize, and what story the data is telling — still requires a human in the loop.\nSo, Is Copilot in Power BI Worth Using? Yes — if you use it as an accelerator, not a replacement.\nThe developers and analysts getting the most value out of it are those who treat Copilot as a very capable first-draft generator. They use it to eliminate the blank-canvas problem, speed up boilerplate work, and quickly test layout ideas — then apply their expertise to refine, validate, and polish the output.\nFor teams managing high volumes of reports, or analysts who are strong in data but less confident in DAX, the productivity gains are real.\nThe risk comes when people assume the output is accurate and complete without checking. That\u0026rsquo;s true of any AI tool, but it\u0026rsquo;s especially important when dashboards are informing business decisions.\nKey Takeaways ✅ Copilot in Power BI can generate reports, DAX measures, and insight summaries from plain English prompts ✅ In practice, it typically gets you 60-70% of the way to a finished dashboard very quickly ✅ The remaining work — validation, context, formatting, business logic — still requires human expertise ✅ A clean, well-structured data model is a prerequisite for getting good results ✅ Use it as an accelerator, not a replacement for analytical thinking Have you used Copilot in Power BI yet? I\u0026rsquo;d be interested to hear what\u0026rsquo;s working — and what isn\u0026rsquo;t — in your experience. Drop a comment below.\n","permalink":"https://thelowcodebuilder.com/posts/copilot-power-bi-dashboard-development/","summary":"\u003ch2 id=\"introduction\"\u003eIntroduction\u003c/h2\u003e\n\u003cp\u003eIf you\u0026rsquo;ve been anywhere near the Microsoft ecosystem lately, you\u0026rsquo;ve probably heard the buzz around Copilot in Power BI. But most of the conversation stops at \u0026ldquo;AI can build dashboards now!\u0026rdquo; without ever getting into what that actually looks like in practice.\u003c/p\u003e\n\u003cp\u003eSo let\u0026rsquo;s fix that.\u003c/p\u003e\n\u003cp\u003eIn this post, I\u0026rsquo;ll break down what Copilot in Power BI genuinely does, walk through a real-world example, and — just as importantly — be honest about where it still falls short.\u003c/p\u003e","title":"How Copilot in Power BI is Changing Dashboard Development"},{"content":"Building Two-Way SMS Automation Using the Sinch Connector in Power Automate Two-way SMS is one of the fastest ways to reduce support friction: customers text you, your systems react instantly, and you can still track delivery outcomes for compliance and troubleshooting.\nThis post walks through a practical automation using recent Sinch SMS Connector updates:\nTrigger: When receiving a delivery receipt Action: Get message status Trigger: Receive SMS (for inbound messages) We’ll build two flows (Power Automate supports one trigger per flow):\nInbound SMS → Create CRM Ticket → Auto-reply Delivery Receipt → Get Message Status → Update CRM Ticket What you’ll build (high level) Customer sends SMS → Power Automate receives inbound message → Flow creates ticket in CRM → Flow sends automated reply → Delivery receipt updates ticket\nPrerequisites A Sinch account with an SMS-enabled number (or short code/long code depending on region) Access to Power Automate A CRM or ticketing system (examples: Dynamics 365, Zendesk, Salesforce, HubSpot)\nIf you don’t have one, you can use Dataverse, SharePoint list, or a simple Excel table as a “ticket store.” Flow 1: Inbound SMS → Create Ticket → Auto-Reply Step 1 — Create a new cloud flow with the Receive SMS trigger Go to Power Automate → Create Choose Automated cloud flow Name it: Inbound SMS → Create Ticket → Reply Select trigger: Sinch SMS — Receive SMS (wording may appear as “When an SMS is received” / “Receive SMS”) Step 2 — Configure trigger details (phone number, endpoint, keywords if applicable) In the trigger, configure:\nThe Sinch number (or service configuration) you want to receive messages on Any filtering options available (keywords, sender, etc.) Typical fields you’ll see from inbound SMS:\nFrom (sender phone) To (your Sinch number) Body (message text) MessageId / InboundMessageId (varies by connector) Step 3 — Create a ticket in your CRM Add a CRM action such as:\nCreate record Create ticket Create case Create issue Map fields like:\nTitle/Subject: SMS from {From} Description: Body Contact/Phone: From Channel: SMS External Message ID: store the inbound ID if available Step 4 — Send an automated SMS reply via Sinch Add the Sinch action: Send SMS (or equivalent).\nSuggested reply template:\n“Thanks! We’ve received your message and created ticket #{TicketNumber}. Reply with more details anytime.”\nIf your CRM returns a ticket ID/number, insert it into the SMS body.\nStep 5 — Store correlation data (recommended) To make delivery receipts easy to match back to tickets, store:\nThe outbound SMS Message ID returned by Sinch (from the Send SMS step) The CRM Ticket ID Where to store it:\nIn the CRM ticket itself (custom fields), or In a small table (Dataverse/SharePoint) keyed by OutboundMessageId Step 6 — Test Flow 1 end-to-end Save the flow Text your Sinch number from your phone Confirm: A ticket is created You receive the auto-reply Flow 2: Delivery Receipt → Get Message Status → Update Ticket Delivery receipts (DLRs) let you answer: “Did the SMS actually deliver? When? Why not?”\nStep 1 — Create a new cloud flow with When receiving a delivery receipt Create → Automated cloud flow Name it: Delivery Receipt → Update Ticket Trigger: Sinch SMS — When receiving a delivery receipt Step 2 — Parse the delivery receipt (Message ID, status, timestamp) The delivery receipt typically includes:\nMessageId (links to your outbound message) Status (delivered/failed/queued/etc.) StatusDetail or error codes (when failed) Timestamps Step 3 — Add action: Get message status Add the Sinch action Get message status and pass the MessageId from the delivery receipt.\nWhy this helps:\nDelivery receipts can be brief; Get message status can provide richer or latest state details (depending on region/product configuration). Step 4 — Find the related CRM ticket (using stored OutboundMessageId) You now need to map MessageId → Ticket.\nCommon approach:\nSearch CRM records where OutboundMessageId == MessageId Or look up in your correlation table (Dataverse/SharePoint) Then update the ticket:\nSMS Delivery Status = delivered/failed Delivered At = timestamp Failure Reason (if any) Step 5 — Add optional notifications (Teams/Email) for failures For example, if status is failed, notify a support channel:\nPost a message in Teams:\n“SMS delivery failed for ticket #123. Reason: {StatusDetail}” Step 6 — Test Flow 2 Send a new inbound SMS (Flow 1 will reply) Wait for the delivery receipt to trigger Flow 2 Confirm the CRM ticket is updated with delivery status Example automation (as described) Customer sends SMS Flow creates ticket in CRM Sends automated reply Delivery receipt updates ticket status (delivered/failed) Tips, gotchas, and best practices Use correlation IDs: Always store the outbound MessageId on the ticket so delivery receipts can update the right record. Handle duplicates: Some systems can emit multiple receipt updates (e.g., queued → sent → delivered). Update the ticket with the latest status + timestamps. Normalize phone numbers: Store From in E.164 format if possible to avoid mismatches. Rate limits and retries: If your CRM throttles, add retry policy and/or queue updates in Dataverse. Conclusion With the Receive SMS trigger, When receiving a delivery receipt trigger, and Get message status action, you can build a robust two-way SMS support channel in Power Automate—fully automated, trackable, and easy to extend.\n","permalink":"https://thelowcodebuilder.com/posts/two-way-sms-automation-sinch-power-automate/","summary":"\u003ch1 id=\"building-two-way-sms-automation-using-the-sinch-connector-in-power-automate\"\u003eBuilding Two-Way SMS Automation Using the Sinch Connector in Power Automate\u003c/h1\u003e\n\u003cp\u003eTwo-way SMS is one of the fastest ways to reduce support friction: customers text you, your systems react instantly, and you can still track delivery outcomes for compliance and troubleshooting.\u003c/p\u003e\n\u003cp\u003eThis post walks through a practical automation using recent \u003cstrong\u003eSinch SMS Connector\u003c/strong\u003e updates:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eTrigger:\u003c/strong\u003e \u003cem\u003eWhen receiving a delivery receipt\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAction:\u003c/strong\u003e \u003cem\u003eGet message status\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTrigger:\u003c/strong\u003e \u003cem\u003eReceive SMS\u003c/em\u003e (for inbound messages)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe’ll build \u003cstrong\u003etwo flows\u003c/strong\u003e (Power Automate supports \u003cstrong\u003eone trigger per flow\u003c/strong\u003e):\u003c/p\u003e","title":"Building Two-Way SMS Automation Using the Sinch Connector in Power Automate"},{"content":"What is Power Apps? Power Apps is a low-code platform by Microsoft that allows anyone to build professional business applications without writing traditional code.\nIt is part of the Microsoft Power Platform which includes:\nPower Apps - Build apps Power Automate - Automate workflows Power BI - Analyze data Power Pages - Build websites Copilot Studio - Build AI chatbots Why Learn Power Apps? No coding experience needed - Perfect for beginners High demand - Companies need Power Platform developers Free to start - Developer plan is completely free Microsoft ecosystem - Integrates with Teams, SharePoint, Excel Prerequisites Before we start, you need:\nA Microsoft 365 account Power Apps Developer Plan (free!) Sign up at: https://powerapps.microsoft.com/developerplan/ Step 1: Open Power Apps Go to https://make.powerapps.com Sign in with your Microsoft account You\u0026rsquo;ll see the Power Apps home screen Step 2: Create Your First App Click + Create in the left menu Select Canvas app from blank Give it a name: \u0026ldquo;My First App\u0026rdquo; Choose Tablet or Phone layout Click Create Step 3: Add Your First Screen Elements Click + Insert in the top menu Add a Text Label Change the text to \u0026ldquo;Hello, Power Apps!\u0026rdquo; Add a Button Set the button\u0026rsquo;s OnSelect property to: Notify(\u0026ldquo;Welcome to Power Apps!\u0026rdquo;, NotificationType.Success)\nStep 4: Preview Your App Click the Play button (▶️) in the top right Click your button You should see a success notification! Conclusion Congratulations! 🎉 You\u0026rsquo;ve just built your first Power App!\nIn the next tutorial, we\u0026rsquo;ll build a complete Employee Directory App with real data.\nWhat\u0026rsquo;s Next? Power Apps Formulas Cheat Sheet Building Your First Model-Driven App Connect Power Apps to SharePoint Found this helpful? Share it with someone learning Power Platform!\n","permalink":"https://thelowcodebuilder.com/posts/getting-started-with-power-apps/","summary":"\u003ch2 id=\"what-is-power-apps\"\u003eWhat is Power Apps?\u003c/h2\u003e\n\u003cp\u003ePower Apps is a \u003cstrong\u003elow-code platform\u003c/strong\u003e by Microsoft that allows\nanyone to build professional business applications without\nwriting traditional code.\u003c/p\u003e\n\u003cp\u003eIt is part of the \u003cstrong\u003eMicrosoft Power Platform\u003c/strong\u003e which includes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cimg src=\"/images/icons/power-apps.svg\" alt=\"power-apps\" height=\"20\" style=\"display:inline;vertical-align:middle;margin:0 2px;\"\u003e \u003cstrong\u003ePower Apps\u003c/strong\u003e - Build apps\u003c/li\u003e\n\u003cli\u003e\u003cimg src=\"/images/icons/power-automate.svg\" alt=\"power-automate\" height=\"20\" style=\"display:inline;vertical-align:middle;margin:0 2px;\"\u003e \u003cstrong\u003ePower Automate\u003c/strong\u003e - Automate workflows\u003c/li\u003e\n\u003cli\u003e\u003cimg src=\"/images/icons/power-bi.svg\" alt=\"power-bi\" height=\"20\" style=\"display:inline;vertical-align:middle;margin:0 2px;\"\u003e \u003cstrong\u003ePower BI\u003c/strong\u003e - Analyze data\u003c/li\u003e\n\u003cli\u003e\u003cimg src=\"/images/icons/power-pages.svg\" alt=\"power-pages\" height=\"20\" style=\"display:inline;vertical-align:middle;margin:0 2px;\"\u003e \u003cstrong\u003ePower Pages\u003c/strong\u003e - Build websites\u003c/li\u003e\n\u003cli\u003e\u003cimg src=\"/images/icons/copilot-studio.svg\" alt=\"copilot-studio\" height=\"20\" style=\"display:inline;vertical-align:middle;margin:0 2px;\"\u003e \u003cstrong\u003eCopilot Studio\u003c/strong\u003e - Build AI chatbots\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"why-learn-power-apps\"\u003eWhy Learn Power Apps?\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eNo coding experience needed\u003c/strong\u003e - Perfect for beginners\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHigh demand\u003c/strong\u003e - Companies need Power Platform developers\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFree to start\u003c/strong\u003e - Developer plan is completely free\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMicrosoft ecosystem\u003c/strong\u003e - Integrates with Teams, SharePoint, Excel\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"prerequisites\"\u003ePrerequisites\u003c/h2\u003e\n\u003cp\u003eBefore we start, you need:\u003c/p\u003e","title":"Getting Started with Power Apps: A Complete Beginner's Guide"},{"content":"","permalink":"https://thelowcodebuilder.com/about/","summary":"About Kunal Kumar","title":"About"}]