A flow that runs without errors but produces the wrong output is often harder to fix than one that fails visibly — because the run history shows green checkmarks everywhere, and you have to figure out where the logic went wrong rather than where it crashed. Here's how to approach it systematically.

Ad placeholder — in-article responsive unit

1. Read the run history inputs and outputs carefully

In Run History, every step shows not just whether it succeeded but what data went in and what came out. Click each step and expand the inputs and outputs — this is where logic errors become visible. Common findings: a dynamic content field pulled the wrong value, a condition evaluated differently than you expected, or an "Apply to Each" loop processed more items than intended.

2. Condition logic evaluating incorrectly

Conditions are the most common source of "it runs but does the wrong thing" behavior. A few specific things to check:

Tip: add a Compose action immediately before a condition and pass the value you're about to evaluate into it. This lets you see exactly what value the condition is actually receiving, rather than what you think it's receiving. Delete the Compose step once you've confirmed the value is correct.

3. Flow triggering more times than expected

If your flow is running multiple times per event, or running when it shouldn't:

4. Wrong data appearing in emails or actions

If the right action runs but with wrong values — the email goes to the right person but contains the wrong information, or the wrong row gets updated:

5. "Apply to Each" running once instead of for all items

If a loop only processes one item when it should process many, check what you're passing into it. The input to "Apply to Each" should be an array — if you're accidentally passing a single item or a string instead of an array, it processes only once. Use a Compose action to inspect the value going into the loop before it runs.

6. Race conditions in concurrent flows

If multiple instances of your flow run at the same time and interfere with each other (updating the same record simultaneously, for example), you may be hitting a concurrency issue. Open the trigger settings and look for the Concurrency Control option — setting the degree of parallelism to 1 forces flows to run sequentially rather than simultaneously, which is slower but eliminates race conditions on shared data.

The bottom line

Logic errors in Power Automate are almost always visible in the run history inputs/outputs — the flow isn't hiding information, it's just presenting it in a way you need to read step-by-step. The Compose action trick (inserting a step to inspect a value before it's used) resolves the majority of "wrong output" problems quickly by confirming exactly what data the flow is actually working with.