Skip to main content

Data Refresh Rates

The dashboard doesn't show real-time data. Most numbers refresh every 4 hours, a handful of reference data refreshes nightly, and a few things you edit yourself update immediately. This page explains the difference so you know when to wait, when to come back tomorrow, and when something's actually wrong.

warning

The dashboard is not real-time. Most data is up to 4 hours old; some reference data is up to a day old. Plan accordingly — especially when comparing dashboard numbers to a fresh PM Sheet or to actions you took five minutes ago.

The three refresh tiers

Every piece of data you see in the dashboard falls into one of three tiers. The tier determines how recent the number is.

TierWhat you seeWhy this cadence
ImmediateBudgets you enter, billing periods you add, cost codes you assignEdits go straight to the source, so the form reflects them right away
Every 4 hoursAll Jobs totals, Job Detail spend, Analytics trends, PO status counts, Action Queue rowsThese come from rollup tables that the system rebuilds every 4 hours
NightlyJob metadata, PM assignments, user directory, cost code catalog, daily reports, equipment inventory, weather conditionsThese sync from upstream sources (Google Sheets, AppSheet) once overnight

The first tier is fast because it's writing to the same place the form reads from. The second tier is the bulk of what you see day-to-day — totals, statuses, and trends are pre-computed every four hours so the dashboard can show them quickly. The third tier covers reference data that rarely changes within a day, so a nightly cadence is enough.

How data flows through the dashboard

🔍 Click diagram to expand

Reading the diagram from left to right: upstream systems (Google Sheets, AppSheet) sync nightly into the warehouse (red). The warehouse then feeds the rollup tables every 4 hours (blue). When you edit something from the dashboard — entering a budget, fixing a cost code — that goes straight to the warehouse without waiting for a refresh (green). The dashboard reads from both the warehouse and the rollups, depending on what it's showing.

Practical implications

The four-hour tier is the source of the most common "where's my data?" questions. Here are the answers, with timing.

"I just entered a budget. Why doesn't Budget vs. Actual show it?"

Budget Entry saves immediately, so the entry form shows your numbers right away. Budget vs. Actual, though, reads from the rollup tables, which refresh every 4 hours. Wait up to four hours and check again.

This two-speed behavior catches every new user. The same form has one tab where your edit appears instantly and another tab where it lags. Both behaviors are correct.

"A new PO landed today. Why doesn't it show on the job?"

PO source data syncs nightly. A PO created during the day appears the next morning. If you're reconciling at 5 PM and don't see today's PO yet, that's expected — check tomorrow.

"I fixed a missing cost code. When does the Action Queue update?"

Within 4 hours. The Action Queue reads rollup tables, so once your fix lands and the next refresh runs, the row drops out of the Missing Cost Codes tab.

"I updated my PM assignment. When does My Jobs catch up?"

Next nightly refresh. Job-to-PM mapping lives on the nightly tier, so changes don't show up until the morning sync runs.

"Live ← BigQuery" doesn't mean real-time

You may have noticed a small Live ← BigQuery label at the bottom of the dashboard. It's easy to misread that as "the data on screen is current to this second." It isn't.

info

"Live" describes the connection, not the data. The label means the dashboard is reading directly from the warehouse without any client-side caching — so what you see is the warehouse's most recent state, not an old cached page. But the warehouse's most recent state is itself up to 4 hours old (for rollups) or up to a day old (for reference data). "Live" connection, not live data.

"Up to 4 hours" — what that actually means

The 4-hour cadence is a scheduled refresh, not a maximum age guarantee. If you check the dashboard right after a refresh runs, the numbers are seconds old. If you check right before the next one, they're nearly four hours old. Either is normal.

In practice, the worst-case staleness is "almost 4 hours" — but the typical staleness is somewhere in between. When the docs say "wait up to 4 hours," that's the actual upper bound, not a fixed wait.

The same goes for the nightly tier: a nightly sync runs overnight, so new upstream data shows up by morning. The exact timing isn't user-configurable and may shift slightly day to day.

When things look stale

Most "this number looks wrong" cases turn out to be refresh lag. But occasionally a refresh genuinely fails, and a widget or page lags much longer than expected.

A rough rule of thumb: if the rest of the dashboard looks current but one widget hasn't moved in more than 6 hours, the refresh for the data that widget depends on may have failed. Wait one more cycle (so up to 4 more hours), and if it still looks stuck, escalate. See Troubleshooting for the escalation steps.