Five systems that disagree. One number you can defend. PerformHub reconciles your till, your shift reports, your online store, your ad platforms and what your stores type in — then tells you the action worth taking today.
Live on 13 stores, one online store and a separate Riyadh market — EGP and SAR, never mixed.
Most of the work is not charting. It is making systems that disagree agree — and being explicit when they can't. Every argument about a figure traces back to which source it came from, so PerformHub fixes the order of authority once and applies it everywhere.
Point of sale, live within minutes. The only place a receipt timestamp exists — so every sales-by-hour figure comes from here and nowhere else.
Authority · live & repairOne row per store per day, filed at close. The official end of day — but it lags one to two days, duplicates rows, and sometimes never sends a day at all.
Authority · closed dayMoney comes from the platform's own analytics, never from our copy of the orders — rebuilding it from raw orders was 28% wrong on cash-on-delivery voids.
Authority · online moneyThree networks in one table — a row per date, campaign, ad set, ad and creative. Platform-attributed revenue is the ROAS basis; matched web revenue reconciles it.
Authority · spend & ROASFoot flow by hour, camera reports, supply pipeline, branch costs. An approved camera count overrides what the store typed — and the original is kept.
Authority · foot flowLive sales straight from receipts, refreshed every five minutes, measured against the same day last week up to the same time of day. Below: a real deployment — thirteen Egyptian stores, eight months on record.
Four September days and sixteen April days were never filed. The repair job found them and recovered 8.2M EGP the business had simply not counted.
Every module is controlled per action — view, create, edit, delete, export, AI, manage — and per branch. A freelancer can file a content brief and never read anyone else's.
The Action Center collects what every other module already recommends, scores it on impact, urgency, confidence and ease, deduplicates it, tracks it from open to done — and then measures whether it worked by comparing store sales before and after.
Eligibility and protection scoring per style, depth curves capped at break-even, branch and size control, dry-run pricing with full revert.
Finds genuine last pieces — and, more usefully, the false ones that should be consolidated across stores rather than discounted.
A day-by-day integer simulation per store: opening balance, pipeline arrivals, forecast demand. Committed and indicative variants.
Ask in Arabic or English. For stock, hourly sales, online money and Riyadh it may not write its own query — it must use a validated path. Each rule exists because it was once answered wrong.
Twenty-two scheduled jobs, each in a stated timezone. If a sync misses its minute it catches up, retries, and keeps re-checking until yesterday actually appears — because the reports database routinely does not have yesterday at 02:00.
No year-on-year yet. Daily history starts February 2026. Every seasonality claim is labelled unavailable until the data exists — not estimated.
Attribute tagging is sparse. Across 48,845 items only 12.1% carry a gender and 10.8% a season. Untagged items show as “unknown” and are never guessed.
Cost is on 100% of items. Which is why margin is solid even where attributes are not.
A negative hour is real. It means returns exceeded sales that hour. It is shown, not hidden.
One field is quarantined. The stores' manual running total is demonstrably wrong — cash-only figures, shift resets, negative hours — so it can never be used as a sales number anywhere.
Historical stock is estimated. Only the current snapshot is stored, and that is stated wherever it appears.
Riyadh is not a fourteenth branch. It is a separate market with its own tables, its own currency and its own permissions — never converted, never added into an Egyptian total, and no Egyptian label ever appears on a Saudi page.
A walkthrough takes thirty minutes and uses your own systems, not a demo dataset.