Why your monday.com dashboard numbers are wrong (mirror columns)

Mirror columns look like normal columns and behave nothing like them. Where they break reporting, and what to do instead.

By Ahmed Essam5 min read

If you have ever built a dashboard in monday.com, been shown a total, and had a nagging feeling it was wrong, this is probably why.

Mirror columns are the single most common cause of quietly incorrect reporting in monday.com. Not loudly incorrect, which you would catch. Quietly incorrect, which you present in a management meeting.

What a mirror column actually is

When you link two boards with a Connect boards column, you can then add a Mirror column that displays a value from the linked item. Deal board shows the client’s account manager, which actually lives on the Accounts board.

It looks like a column. It sits in the row like a column. It is not a column. It is a live view of data that lives somewhere else, and that distinction is the source of every problem below.

Where it breaks

1. Aggregation in group headers and dashboards

This is the big one. Numeric mirror columns often will not sum the way a native Numbers column does. Depending on the widget and the mirror’s depth, you get a blank, a partial total, or a total that silently excludes items where the link is missing.

The failure mode that catches people: items with no linked item are skipped, not counted as zero. So a pipeline total that should be 400,000 across 20 deals shows 340,000 because three deals were never connected to an account. Nothing errors. The number is just wrong, and it is wrong in the direction of looking plausible.

2. Filtering and board views

Filtering by a mirror column is limited compared to a real column, and in some view types it is not available at all. You will design a view around a filter and then discover you cannot build it.

3. Automations cannot reliably trigger on them

An automation that says “when this column changes” generally will not fire when the source value behind a mirror changes. The mirror updates visually; the automation does not see an event.

This one is genuinely dangerous, because during testing you change the value on the source board, see the mirror update, and assume the chain works. It does not. Your automation never ran.

4. Mirrors of mirrors

If board A mirrors from B, and B mirrors from C, then A’s view of C’s data is fragile. Sometimes it resolves, sometimes it shows empty. Never build a second level of mirroring. If you find you need to, your board structure is wrong, not your mirror configuration.

5. Exports and the API

Mirror values behave differently from native columns when exported or read via the API. If you are building anything on top of the API, treat mirror columns as unreliable and read the source board directly instead.

What to do instead

Option 1: duplicate the value with an automation. Keep a real, native column on the board and have an automation write the value into it when the link is set or the source changes. You now own the data, so it sums, filters, exports and triggers like any other column.

The tradeoff is that it can drift if an automation fails. Accept that, and check it occasionally. A number that is right 99% of the time and can be audited beats a live view that is wrong in a way you cannot see.

Option 2: report from the board where the data lives. If you need to total deal values by account manager, and account manager lives on Accounts, build that widget on the Accounts board with a mirror of the deal count, or better, restructure so the reporting dimension lives on the deal itself.

This is usually the right answer, and it usually means adding one plain Dropdown or People column to the deals board that duplicates a small amount of information. Duplication in a reporting dimension is not a sin. Wrong totals are.

Option 3: use mirrors only for human reading. This is my actual rule:

Mirror columns are for a person to glance at. They are never an input to a number, a filter or an automation.

Used that way they are genuinely useful. Show the client’s phone number on the deal so nobody has to click through. Just never point a dashboard at it.

How to check whether you have this problem right now

Pick your most-quoted dashboard number. Then:

  1. Note the figure the widget shows.
  2. Open the underlying board, select all items, and read the total monday.com shows at the bottom of the native column.
  3. Filter for items where the Connect column is empty and count them.

If step 1 and step 2 disagree, step 3 usually explains the gap. I have run this check on client accounts and found discrepancies over 20% on pipeline value, in boards that had been used for reporting for a year.

The structural lesson

Mirror columns are a symptom. If a board needs a lot of them, the information is in the wrong place.

Before adding the fourth mirror to a board, ask which board is the one people actually work in day to day. That board should own the fields people report on, even if it means a small amount of duplication. Reporting is a first-class requirement, not something you bolt on after the structure is fixed.

If you are setting up a CRM from scratch, the structure I use keeps the reporting fields on the deal itself for exactly this reason.

One useful monday.com idea, every week

Short, practical, drawn from live client work. No fluff, no pitch, unsubscribe whenever you want.

Related reading

Stuck on the thing this article describes?

One call, no pitch. Usually that is enough to know whether it needs a fix or a rebuild.

Request pricing

Tell me what you are trying to solve and I will come back with a scope and a number. Usually within a working day.

Only used to answer you. No list, no sharing.

Or email ahmed@processminds.co