FlowParse
Feature 11 August 2026 15 min read

Location rollup

Adding eleven sites together is arithmetic and takes a second. Making them comparable is the part that takes judgement — because one reports net of refunds, one counts staff meals as sales, and two of them close their week on different days.

FlowParse
flowparse.io

Adding up is the easy half

Every multi-site operator has a spreadsheet with a row per site and a total at the bottom. The total is arithmetically correct. Whether it means anything depends entirely on whether the rows above it are the same kind of thing.

Usually they are not, and usually nobody knows. Sites arrive at different times, are set up by different people, run equipment bought in different years, and inherit conventions from whoever was managing them at the time. None of that is visible in a column of numbers.

So a league table gets produced, site seven is bottom, and somebody drives out to site seven. What they find, often enough, is that site seven reports net of refunds while everyone else reports gross — and has been three percent lower than reality for two years.

Rollup is the step that stops that happening. Not the addition, which is trivial, but the work of establishing that the things being added mean the same thing.

FlowParse
flowparse.io

Not the same as tagging rows by site

These get confused constantly, and the difference decides whether your reporting works, so it is worth being blunt about it.

TaggingRollup
AnswersWhich site does this row belong to?Can these two sites' figures be compared?
Works onOne row at a timeOne site's whole reporting convention
Fails asA row on the wrong siteA league table that is quietly wrong
Fixed byCorrecting the labelRecording what the site means by a word
Visible when wrongFairly quicklySometimes never

Tagging answers which site a row belongs to. Rollup answers whether two sites can be compared at all. You can have flawless tagging — every row on the right site, no exceptions — and still produce a ranking that is wrong, because the rows were never the same kind of measurement.

The last line of the table is why rollup gets neglected. A mis-tagged row shows up: a total looks odd, someone checks, it gets fixed. A definition mismatch produces numbers that are plausible, stable and consistently wrong — the hardest kind of error to notice, because nothing about it looks like an error.

If what you need is the label on the row, that is dimension tagging, and it covers sites alongside projects, funds and matters. This page is about the layer above it.

Four words that mean different things at different sites

Sales

Gross or net of refunds? Including or excluding delivery platform orders? With or without service charge? Four defensible answers, and a site will have picked one without anyone asking.

Covers, or transactions

One site counts tickets, another counts people, a third counts each split bill separately. Any per-head figure built on top inherits the difference silently.

Week

A trading week that ends Sunday and one that ends Monday will never line up, and a four-week month for one site is five weeks for another.

Staff and waste

Meals given to staff, comped items and waste may or may not pass through the till as sales. Whether they do changes both the sales figure and any margin computed from it.

None of these are mistakes. Each site made a reasonable choice in isolation, and in isolation each choice is fine. The damage only appears when the choices are compared, which is exactly what a rollup does.

The practical remedy is not to force uniformity — that is a project nobody finishes. It is to record the definition against the site, once, so it travels with every figure that site produces and stops being rediscovered every quarter.

FlowParse
flowparse.io

What can be read from the documents

The figures themselves — takings, transaction counts, tender split, refunds — however each site's report happens to lay them out.

The period the report covers, where it states one, including the odd sites whose week runs Tuesday to Monday.

The tax split as printed, kept separate rather than collapsed into a single total.

Whether a column exists at all: a site whose report has no refund line is telling you something about its definition.

The source file and page for every row, so a figure can be traced back years later.

The fourth is the useful one and the least obvious. A structural absence is evidence — if ten sites report refunds and one never does, that is a question worth asking, and it is answerable without leaving your desk.

What cannot be read, ever

What a site means by its own words. A report saying 'total' does not say whether that total is net of refunds.

Whether staff meals passed through the till. The report shows what was rung up, not what the policy was.

Which sites are genuinely comparable in trading terms — a motorway unit and a high street unit are different businesses with the same signage.

Why a site changed its reporting convention in March. Something happened; the document does not say what.

The floor area, the opening hours or the headcount. All of them are needed for a fair comparison and none of them are on a sales report.

This list exists because these are precisely the fields software is tempted to guess at. A guessed definition is worse than a blank one: it looks settled, so nobody checks it, and it propagates into every comparison downstream.

When the weeks do not line up

Period alignment sounds like a technicality and produces some of the largest phantom differences in multi-site reporting.

A site whose trading week ends on Sunday and one whose week ends on Monday are offset by a day permanently. In a normal month that is a small distortion. In a month containing a bank holiday, or a month where one site gets five Saturdays and the other four, it is enormous — and it points at the wrong site.

Two rules keep this manageable. Keep both the site's own period and a common calendar period on every row, so you can report either way deliberately. And when comparing sites, count the trading days — a site with twenty-six trading days is not outperforming one with twenty-four, it is open longer.

The trading-day count is the single cheapest normalisation available and the one most often skipped. It converts a meaningless ranking into a nearly fair one for the cost of one extra column.

The size problem

A site turning over four hundred thousand a year will always beat one turning over one hundred and eighty thousand on absolute takings. Ranking them that way tells you which is bigger, which you already knew.

What makes a comparison useful is a denominator, and the choice of denominator is a real decision rather than a technical one.

Per whatGood at showingBlind to
Per trading dayWhether opening hours explain the gapEverything about size
Per transactionWhether people are spending differentlyHow many people came
Per staffed hourWhether the site is efficiently runDemand it cannot control
Per square metreWhether the space is workingTrade that never depended on space
Against its own last yearReal movement, stripped of everything structuralHow it stands against its peers

The last row is the one that survives the most scrutiny, and it is the least popular because it produces no league table. A site compared against its own previous year carries its own size, its own location and its own trading pattern with it — every structural difference cancels.

Note that only the first two denominators come out of the documents. Staffed hours, floor area and headcount live in other systems, and rollup carries them if you supply them rather than inventing them.

FlowParse
flowparse.io

New sites, closed sites and refits

A site that opened on the nineteenth traded for nine days of that month. Averaged into a monthly table it appears catastrophic; excluded entirely it makes the group total wrong.

Neither is right, and the answer is not clever maths — it is a flag. A partial period marked as partial can be shown, excluded from rankings, or annualised, all deliberately. A partial period silently averaged is a wrong number that looks like a right one.

The same applies to a site closed for a two-week refit, one that lost a fortnight to a flood, and one that traded reduced hours while the road outside was dug up. All of them will sit at the bottom of an unadjusted table, and all of them are misleading.

This matters more than it sounds because these sites attract management attention. An operations lead looking at a ranked list acts on the bottom of it — so anything that puts a site there for a structural reason costs a visit, a conversation and some goodwill.

Currency, price bands and other honest asymmetries

Operators with sites in more than one country hit an extra layer: the figures arrive in different currencies, and converting them makes the comparison depend on an exchange rate that has nothing to do with either site's performance.

Two conventions help. Keep the original currency amount alongside the converted one, always — a converted figure with no original behind it cannot be checked against the site's own report. And when comparing movement rather than level, compare in local currency, because a site that grew eight percent locally did that regardless of what the rate did.

A subtler version affects single-currency operators too. Sites in different areas often run different price bands for the same product, which means a per-transaction comparison is partly measuring the price list rather than the site.

There is no clean fix for that, and pretending otherwise would be dishonest. What helps is knowing it: a site on a lower price band will show a lower average transaction and a possibly higher transaction count, and reading that as underperformance is a mistake the numbers will not warn you about.

What normalisation is worth, in one table

Four sites, one month, invented figures. The left column is what a takings ranking says; the right is what survives normalisation.

SiteReportedAdjustmentComparable
A96,400None needed96,400
B88,100Reports net of refunds91,300
C92,700Includes staff meals89,900
D74,200Closed 6 days for refit≈ 92,800 pro rata

On reported takings the order is A, C, B, D and site D looks like a serious problem. After normalisation the four sites are within seven percent of each other and D is second.

Note what each adjustment did. Site B was understating against its peers by reporting net — a site penalised by its own accuracy. Site C was overstating by including something that is not a sale. And D's apparent collapse was six days of closure.

None of the three underlying facts is unusual, none is anybody's fault, and all three were invisible in the reported column. The ranking that would have been circulated was wrong about every position except first.

One caution on the last row: pro-rating a refit month is a convenience, not a truth. A site reopening after works does not trade at its old rate immediately, so the figure is indicative rather than comparable — which is why the honest treatment is to flag it and leave it out of the ranking rather than to scale it and rank it anyway.

FlowParse
flowparse.io

Definitions drift, and nobody announces it

Establishing what each site means is not a one-off exercise, and treating it as one is how a rollup slowly becomes wrong again after being made right.

Conventions change for entirely mundane reasons. A till system update relabels a category. A new manager starts ringing staff meals through a different button. A site joins a delivery platform and its total silently gains a component. A rate change alters how tax appears on the report.

None of these come with an announcement, because from the site's point of view nothing happened — they are still producing the same report they always produced.

What catches it

A structural check rather than a value check. Did this site's report gain or lose a column? Did a field that was always populated go empty? Did the ratio between two fields step rather than drift?

Those questions are answerable automatically and they are the only reliable early warning, because a definition change usually shows up as a modest, plausible movement in the value — exactly the kind nobody investigates.

The habit that makes this work is dating the definition. “Site C reports gross, confirmed March 2026” carries information that “Site C reports gross” does not: it tells the next person how much to trust it.

What you get back

One row per site per period

Same columns for every site, however different the source documents looked.

Both periods on every row

The site's own trading period and the common calendar period, so either is available deliberately.

Partial periods flagged

Openings, closures and refits marked rather than averaged into nonsense.

Definitions carried along

What each site means by its own words, recorded once and travelling with its figures.

FlowParse
flowparse.io

How a rollup loses trust, and never gets it back

Worth naming, because it is the usual ending for multi-site reporting and it happens in a predictable sequence.

A report is produced. A site manager disputes their number. They turn out to be right — the figure included something it should not have. The figure is corrected.

From that point on, every site manager treats every number as provisional. The report still gets produced, but it is no longer used to decide anything; it is used to start arguments, which is a much lower-value activity.

The defence is not accuracy — everyone makes mistakes — it is traceability. If a disputed figure can be opened up to the site's own report, on the page it came from, in under a minute, the dispute ends in a fact rather than in a compromise.

That is why the source file and page ride on every row. It looks like an audit nicety. It is actually the thing that determines whether anyone believes the report a year from now.

What this will not do

It will not standardise your sites

Different equipment and different conventions stay different. Rollup accommodates them; it does not fix them, and a tool claiming to would be claiming to change your estate.

It will not allocate head office costs

Splitting shared overhead across locations is a policy decision, not a reading problem. That question lives on the cost centre spend report.

It will not tell you why a site is behind

It removes the structural reasons so that what is left is worth investigating. The investigation still involves going there.

It will not invent a definition

Where a site's meaning is unknown, it stays marked unknown. A guessed definition is worse than a blank, because a blank gets asked about.

The first rollup

Take one completed period and every site's report for it. Read them all into one table. Then, before computing anything, do the boring exercise: for each site, write down what its report means by “sales”.

For most operators that takes an afternoon of asking, and it is the highest-value afternoon in this whole cluster. It is also the one everybody skips, because it produces no output — just four or five notes that turn out to explain years of confusing comparisons.

Then add the two cheap normalisations: trading days, and each site against its own previous year. If a site is still an outlier after those, you have found something real.

The routine around this is in how to compare performance across locations, and the takings-versus-bank half is on multi-site sales reconciliation.

Frequently asked questions

One period, every site

Read them into one table, then write down what each site means by sales. That second step is the one that changes your reporting.

Keep reading