πŸš€ New batches open: Advanced Excel β€’ Power BI β€’ SQL β€’ AI for Analytics β€” Book a free demo

Free Power Automate Tutorial β€” learn flows and expressions in 12 days

Triggers, expressions, loops and error handling - topic by topic, with every flow runnable right here in the page and a real run history to read.

A free, hands-on Power Automate course

Twelve short lessons on the part of Power Automate people actually get stuck on: expressions and flow logic. Every flow on this site runs in your browser and gives you back a real run history - every action, its resolved inputs, its outputs, and whether it was skipped. Nothing to install, no signup, no tenant needed.

Start with Day 1.

Who this is for Anyone in MIS, operations, HR or finance who keeps copying data between a form, a spreadsheet and an email - and anyone preparing for an interview where ?['field'], item() and "why did my scheduled flow run at 2:30pm" come up constantly.

The 12 days

Day 1 β€” What Power Automate is, and your first flow

Power Automate is the thing that does the boring half of your job while you are asleep.…

Day 2 β€” Triggers - what starts a flow

Pick the wrong trigger and you will fight the flow forever. Pick the right one and half the …

Day 3 β€” Variables, Compose and the data types

Two ways to hold a value, and knowing which one to reach for stops a lot of pain.…

Day 4 β€” Expressions - the syntax that trips everyone up

This is the day Power Automate stops being drag-and-drop and starts being a skill.…

Day 5 β€” Conditions and branching

A flow that always does the same thing is a macro. A flow that decides is an automation.…

Day 6 β€” Apply to each - doing it to every row

The moment your trigger hands you a list instead of a single thing, you need this.…

Day 7 β€” Filter array, Select and working without loops

The single biggest performance win in Power Automate: stop looping.…

Day 8 β€” Dates, times and time zones

Power Automate runs on UTC and your users do not. Almost every date bug comes from that one …

Day 9 β€” The shape of real data

Most flows do not fail on logic. They fail because the data was not the shape you assumed.…

Day 10 β€” Error handling and making flows reliable

A flow that works is easy. A flow that tells you when it did not work is the professional on…

Day 11 β€” A real flow, end to end

Everything so far, doing one real job from start to finish.…

Day 12 β€” Practice questions and interview answers

Everything from the first eleven days, as problems. Clear each box and try it before you loo…

How the playground works

Power Automate is a website you drag boxes around in, and a web page cannot be that. But a flow is JSON underneath - the designer’s own "Peek code" option shows you exactly this shape - and the expression language is a real language.

So you write the flow as JSON, press Run, and read the run history. Which is precisely what the real product gives you after a run, and where you will spend most of your debugging time.

There is a second, smaller box for learning one expression at a time: type expressions, one per line, and see what each returns.

What runs for real

Expressions. The engine is written from scratch and covers the functions you use daily: concat, toUpper, toLower, trim, length, replace, substring, indexOf, split, join, startsWith, endsWith; add, sub, mul, div, mod, int, max, min, formatNumber; equals, greater, less, and, or, not, if, empty, coalesce, contains; first, last, skip, take, union, createArray, json, range; and the date family - utcNow, formatDateTime, addDays, addToTime, startOfDay, startOfMonth, convertTimeZone.

Flow structure. Initialize, Set, Increment and Append variables. Compose. Condition with real branching. Switch. Apply to each with item() and items(), including nested loops. Filter array. Select. Scope. Terminate. A mock Send email that shows you the fully resolved message instead of sending it.

It also enforces the rules that catch people: you cannot initialise the same variable twice, ['field'] fails where ?['field'] returns null, and outputs('Some action') tells you which actions actually exist when you get the name wrong.

Not covered The designer itself - dragging cards, picking dynamic content, choosing connectors. Real connections to Outlook, SharePoint, Excel, Forms, Teams or Dataverse: nothing here sends, saves or fetches anything, and the Send email action only shows you what it would have sent. Approvals, premium connectors, Power Apps triggers, child flows, and the admin side - environments, DLP policies, licensing.
Those need a tenant of your own and somebody to walk you through it, and that is the classroom course. The clock here is also frozen at 18 March 2026, 09:30 UTC so that the date examples give the same answer every time.

How to get the most out of it

  1. Type the expression, do not copy it. The typing is where the learning happens, and the error messages here are written to teach rather than to blame.
  2. Change the trigger body. Every flow has its test data right at the top. Blank a field, zero a number, empty a list - that is where real flows break.
  3. Read the Inputs, not just the Outputs. The inputs show what an action was given after every expression was worked out. That is where the bug usually is.
  4. Build expressions a layer at a time, in Compose actions. Writing the whole nested thing and then debugging it is how people lose an afternoon.