The Command Center is now a product you can license. Open the demo

The Command Center

Read where your marketing stands today, not where it stood last month.

Open the Command Center and it pulls from your accounts, shows what it already holds in the first second, and stamps the header with the time the data was pulled. A refresh moves every number whose source publishes live, and what Google publishes late carries its date.

What do I see in the first second?

Last night's numbers, then today's. The page renders a snapshot baked at 12:01am Central before any network call returns, so there is something to read at once. In the same moment it asks our service for the live payload, which a warm service answers from cache in about 100 milliseconds. If that snapshot is older than five minutes, the service starts a pull of your sources in the background and holds the page for up to 1.5 seconds, so a pull that is already nearly done lands on the first paint.

Take a Tuesday at 9am. You open the dashboard and the stamp beside the title reads last night's pull time. Behind it a pull of your CRM, Stripe, GA4, Search Console and Google Ads is running. Pulls take 2 seconds to a little over 3 minutes, set by how many sources you have connected. The page checks every 3 seconds for the new snapshot and, when it lands, swaps the fresh numbers in and puts you back on the view you were reading, at the same scroll position. It waits if you have a panel open or are typing.

Ten people opening at 9am cause one pull, not ten. Pulls are keyed to the age of your numbers, not to who asked, so a second open inside five minutes reads the snapshot the first one produced. The page never waits more than 4 seconds for the live fetch before rendering the snapshot. A slow or cold service costs you a stamp that reads older, never a blank screen.

The Overview screen on the demo company: headline cards, a pipeline funnel, revenue by channel and a workstream grid, the page that loads its snapshot first and pulls live numbers behind it.

What happens when I press Refresh?

A full pull of every connected source, then a reload. Press the button in the top bar and it reads Refreshing. Our service starts the pull and answers at once, because holding one request open across the internet for three minutes is how a working refresh looks broken. The page then asks every 3 seconds whether the snapshot on the server has changed. When it has, the page saves your view and scroll position and reloads into the new numbers.

Every path ends in a reloaded page. A fast pull reloads in seconds. A slow pull reloads when it lands. If the service cannot be reached, or five minutes pass, the page reloads anyway and the stamp in the header says how old what you are reading is. The button has no error state, on purpose. An error message on a client dashboard is a support ticket; a stamp is information.

Hover the stamp and it says one of two things: the numbers were pulled live when you opened the page, or the live refresh was unreachable and you are reading the last saved snapshot. The page reloads at most once per snapshot, so a pull that keeps failing to move the stamp can never put you in a reload loop, and a tab left open through several pulls keeps catching up.

Refresh, every branch
Fast pullreload, stamp is now
Slow pullreload when it lands
Service unreachablereload, stamp says last bake
Five minutes passreload, stamp says how old
Error shownnever

Which numbers move when I refresh?

The ones whose owner publishes live. Your CRM pipeline, Stripe payments, jobs from your booking platform, submissions from your own website forms and email campaign statistics move on every refresh. Google Ads publishes spend, conversions and cost per conversion a few hours behind. GA4 intraday figures lag by hours. Search Console releases each day's queries, impressions, clicks and average positions two to three days later, no matter who asks or how often. Each of these is shown at the newest point its owner has published, with the date on it.

Pick a date range and the view re-reads the source for that window. The analytics, ads and search views can carry a date picker. It sends your start and end dates, and an optional comparison window, to GA4, Google Ads or Search Console, and the answer is cached for five minutes, so clicking between last 30 days and last 90 days and back pays for the read once. While it loads, the old numbers stay on screen, dimmed, under an updating notice, so a stale figure is never read as current. The property being read comes from the mapping our team saved at setup, never from the browser.

Read the ceiling before you buy. Nothing on any instance reads your inbox, your calendar or customer card data. No system of ours logs a phone enquiry on its own; a phone lead counts only if your CRM records it. Keyword positions on the search view are Search Console average positions and nothing else. Answer-engine scores are taken at baseline and re-run as the program moves, so the score on the screen is as of the last run.

Freshness by source
Your CRM, Stripe, your booking platformlive
Website leads, email statslive
Google Adslags hours
GA4 intradaylags hours
Search Console2 to 3 days behind
Answer enginesas of last run

What do I see if your service is unreachable?

Last night's numbers, with a stamp that says so. Every night at 12:01am Central one job rebuilds a static snapshot for every client from one registry and ships it with the page. That snapshot renders in the first instant of every load, and it is what you keep reading if the live service does not answer. The worst case is yesterday, never a blank tile.

The nightly job refuses to ship a broken page. It runs your pulls, checks the syntax of every script, bumps the asset version, deploys, then purges the edge cache so browsers fetch the new page rather than a cached one. A pull that fails hard, or a script that fails its check, stops the deploy and leaves the previous night's page in place. A single source that fails inside a pull keeps its previous value for that section instead of shipping an empty one. Stale beats empty, and both beat broken.

Your lead records never sit in that snapshot. Names, phones and emails are fetched from our service when you open the Leads view, behind the same secret the page uses for everything else, and are never written into a file that ships to the edge. If the lead feed is briefly unreachable, the service reports that the read failed rather than reporting zero leads. The Leads view lists submissions from your own forms newest first, and its last value is served at once while a fresh read runs behind it.

The Command Center Overview on the demo company Meridian: four headline cards for marketing-sourced pipeline, revenue, AI-visibility score and assets published, a pipeline funnel from visitors down to closed won, revenue by channel bars, and a grid of workstreams each marked Running.

What runs while nobody is at a desk?

The reads run on a schedule whether anyone is at a desk. Prospects are sourced weekly to your target profile. The ads change watch reads your Google Ads change history every morning at 7:05 Eastern and reads the account's user list directly, because a change to who can see the account is not logged as a change event. The lead watch runs at 7:20 Eastern on an instance whose forms feed the lead sheet, with five checks across the sheet, GA4 and Google Ads. The fallback snapshot bakes at 12:01am Central. The page itself pulls when you open it.

The lead watch exists because of one gap. On one instance a tag change silently stopped every conversion for six weeks. Google Ads reported zero. 21 real leads landed on the forms in the same period, and the owner, reading the ad platform, paused the campaign that carried every counted lead and cut its budget 90 percent. The watch now compares the leads in the sheet with what GA4 and Google Ads report every morning, so that gap shows up the next day rather than six weeks on.

Changes wait for a person. Budget and bid changes in your ad accounts are made by a person, never by a scheduled job. Prospect emails leave from a review-first queue; a person releases them, or the queue releases on the schedule set for the engagement, and every send is logged with the draft, the mailbox and the time. Named priority accounts are always reviewed by a person. From the screen you can set a lead outcome, request a website change, or request a content, keyword, category or targeting change. Each request goes to the team, logged. None writes to Ads, your CRM, your site or your Business Profile directly.

Runs on a schedule
Prospect sourcingweekly
Ads change watch7:05am ET daily
Lead watch7:20am ET daily
Fallback bake12:01am Central
Budget and bidsa person

How do I know a number is real, not a placeholder?

Click it. Every card opens to its value now, its change, the window it covers and a note naming the source in plain words: sessions on your site from GA4, keywords from Search Console with their average position, recent payments live from Stripe. A view appears only when its source is connected. A source we cannot read is left off the screen rather than filled with a sample figure. Export downloads what the open view shows as a CSV, read from the screen itself, so live numbers export exactly as displayed.

The demo is the one place you will see invented numbers, and it says so. demo.trulata.com runs the same engine code every client runs, on a fictional company with illustrative figures, and there is no form to fill. It has no live sources behind it, so the Refresh button is not shown there; on your instance it is. Your instance shows your accounts or it shows nothing.

It connects from the inside, with access you grant during setup. Every Google connection is a manager invitation you can revoke in your own console; we hold no passwords. Our team connects your CRM, Stripe, your booking platform, your email platform and your website forms the same way. There is no wizard and nothing to install. Your dashboard is a static site at your own trulata.com address behind Cloudflare Access; a small function at the edge holds the secret and forwards to our service, so the browser never talks to the service directly. Each seat signs in with a single-use magic link from login.trulata.com, and a removed seat stops working within 30 seconds. Setup takes two to four weeks and is not billed.

Check three things in the demo. Click a headline card and confirm the panel shows the value, the change and the window. Press Export on the Overview and open the file. Look for the Refresh button in the top bar and note that it is absent, because nothing live sits behind the demo. Then, after setup, hover the stamp on your own instance and read whether what you are looking at was pulled when you opened the page.

The Leads view: a table of inbound requests newest first with received time, name, contact, interest and company, a search box, interest and company filters, and a Live badge.
The spec

How fresh each layer is.

WhatWhere it comes fromHow fresh
Baked snapshotNightly job, 12:01am CentralNever older than one night; always present
Live payloadOur service, cachedServed at once; re-pulled in the background past 5 minutes
Forced refreshEvery connected source2 seconds to a little over 3 minutes
Your CRM, Stripe, your booking platform, leads, emailTheir APIs, directLive
Google Ads, GA4Google APIsHours behind, set by Google
Search ConsoleGoogle API2 to 3 days behind, set by Google
Answer enginesChatGPT, Gemini, Claude and Grok, each via its own APIAs of the last scoring run
Said in the header

Every dashboard carries the time its data was pulled beside the page title, and hovering it says whether those numbers came live or from the last saved snapshot.

FAQ

Questions, answered.

Is the dashboard real time?

Parts of it. Your CRM, Stripe, your booking platform, website leads and email statistics are live. Google Ads and GA4 lag by hours and Search Console by two to three days, and each is shown at the newest point its owner has published.

Why does the Refresh button never show an error?

Because an error on a client dashboard is a support ticket and a stamp is information. Every path through the button ends in a reloaded page whose header says how old the data is.

What if I open it at 3am?

You get last night's snapshot at once, and a live pull starts in the background if the cache is older than five minutes. The time of day changes nothing about what you see.

Can a number on the screen be made up?

No. A source we cannot read is left off the screen rather than filled with a sample figure. The only invented numbers anywhere are in the public demo, which says it is fictional.

How often does the fallback snapshot rebuild?

Every night at 12:01am Central, for every client, from one registry. If a pull fails, the previous page stays up rather than an empty one shipping.

Can I pick my own date range?

Yes, where your instance carries the picker on the analytics, ads and search views. It re-reads GA4, Google Ads or Search Console for the window you choose, with an optional comparison window, and caches the answer for five minutes.

Do I need to install anything?

No. It is a web page behind your own login. Open it on any device and it pulls.

See it running
before you decide.

The demo is the real product on a fictional company, with no form in front of it. Pricing is three published tiers. Setup on your own accounts takes two to four weeks.

Open the live demo See pricing

New here? See what the Command Center is. Prefer to write? Send us the one thing you want to know.

  • Refreshed when you open itLive data on page load, never a monthly PDF
  • Counted from your own formsLeads recorded server-side, compared daily with Ads and GA4
  • Four answer engines, measuredChatGPT, Gemini, Claude and Grok, with a published denominator
  • A review-first queue on every sendEvery draft waits in a review-first queue and every send is logged.