Know where your marketing stands today, not where it stood last month.
Open TruLata and it pulls from your accounts. You read last night's numbers in the first second, today's when the pull lands, and the header says the time the data was pulled.

How fresh is what I see when I open it?
Last night's numbers in the first second, today's as soon as the pull lands. The page renders a snapshot baked at 12:01am Central before any network call returns. It asks our service for the live payload in the same moment; a warm service answers from cache in about 100 milliseconds. If that snapshot is older than five minutes, opening the page queues a pull, and the fresh numbers land as one automatic reload.
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. When it lands, the fresh numbers swap in and you are back on the same view 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 waits at most 4 seconds for the live fetch before rendering the snapshot. A slow or cold service costs you a stamp that reads older, and the page is full either way.
The first second
- SnapshotLast night's numbers render
- Live payloadFrom a warm cache
- Background pullYour CRM, Stripe, GA4, Search Console and Ads
- CheckFor the new snapshot
- SwapSame view, same scroll position
Can I get a fresh pull right now?
Yes. Press Refresh in the top bar and every connected source is pulled again, then the page reloads. The button reads Refreshing while our service starts the pull and answers at once, because a request held open for three minutes looks broken. The page then asks every 3 seconds whether the snapshot on the server has changed, and when it has, 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 is out of reach, or five minutes pass, the page reloads anyway and the header stamp says how old the data 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 failing pull leaves you on one stable page.
Every branch ends in a reload
- Fast pull
- Slow pull
- Service unreachable
- Five minutes pass
- A stamp that says how old the data is
An error message on a client dashboard is a support ticket; a stamp is information.
Which numbers are live?
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, however often it is asked. Each 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. On the analytics, ads and search views that carry the picker, it sends your start and end dates, with an optional comparison window, to GA4, Google Ads or Search Console and caches the answer for five minutes, so clicking between 30 and 90 days and back pays for the read once. Every window ends yesterday, because today is partial in all three sources and a half day at the right edge reads as a collapse. While it loads, the old numbers stay on screen, dimmed, under an updating notice. If the source is out of reach, the view says it is unavailable right now, and the header stamp still dates what you read. The property being read comes from the mapping our team saved at setup and confirmed with you.
Read the ceiling before you buy. Your inbox and calendar stay outside the read today, and customer card data is never read. A phone lead counts where your CRM records it, and where you run a call-tracking platform with an API it is connected during setup. Keyword positions on the search view are Search Console's own average positions, dated by Google. Answer-engine scores are taken at baseline and re-run as the program moves, so the score on screen is as of the last run.

What do I see if your service is down?
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 first on every load, and it is what you keep reading while the live service is out of reach. The worst case is yesterday, with the date on it.
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. 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.
The Leads view reads your submissions when you open it, behind the same login, newest first. Test entries from our own team are filtered out before you see the list. When the lead sheet read fails, the service says the read failed, so a zero on the screen is always a real zero.
- Run the pullsEvery client, from one registry, at 12:01am Central
- Check every scriptA syntax failure stops the deploy
- Bump and deployA new asset version ships with the page
- Purge the edgeSo browsers fetch the new page

Stale beats empty, and both beat broken.
What runs while nobody is at a desk?
The reads run on a schedule whether anyone is at a desk. On the Outbound engine, 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 your site's tags, 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 closes the gap between what landed and what was counted: the leads in the sheet are set against the conversions GA4 and Google Ads recorded. A broken tag reports zero rather than an error, so the platform keeps reading healthy while the count is dead. A dead tag, a blind ad account or a stalled campaign shows the next day rather than at the end of the quarter, so a budget decision is made on what your own forms recorded.
Changes stay within limits. Budget and bid changes in your ad accounts are made within the limits set for your engagement and land in your account's own change history. On the Outbound engine, 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. The engine's writes to your ad accounts and your site go through their APIs and land in each account's own change history.
The reads run on a schedule. The page itself pulls when you open it.
How do I know a number is real?
Click it. A headline card opens to its value now, its change and the window it covers, and rows say where each number comes from: sessions on your site from GA4, keywords from Search Console with their average position, recent payments live from Stripe. A view shows what to connect until its data arrives, and the Jobs view shows a coming-soon card until its data can be trusted. Export downloads what the open view shows as a CSV, read from the screen, so live numbers export exactly as displayed.
The demo is the one place you will see illustrative numbers, and it says so. demo.trulata.com runs the same engine code every client runs, on a fictional company, with your name and email to open it. Its numbers are fixed, so the Refresh button lives on your instance rather than the demo.
It connects with access you grant during setup. Every Google connection is a grant you can revoke in your own console; we never ask for an account password. Our team connects your CRM, Stripe, your booking platform, your email platform and your website forms from the inside, so the connection is our work and your side is the grant. Your dashboard is served from Cloudflare's edge at your own trulata.com address behind our sign-in gate; a small function at the edge holds the secret and forwards to our service, so the secret stays at the edge. Each seat signs in with a single-use magic link from login.trulata.com, and a removed seat stops working within 30 seconds.
Run three checks 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 at the top bar: on your instance it carries the Refresh button, which the demo leaves out because its numbers are fixed. After setup, hover the stamp on your own instance and read whether the numbers were pulled when you opened the page.

How fresh each layer is.
| What | Where it comes from | How fresh |
|---|---|---|
| Baked snapshot | Nightly job, 12:01am Central | The last successful bake; always present |
| Live payload | Our service, cached | Served at once; re-pulled in the background past 5 minutes |
| Forced refresh | Every connected source | 2 seconds to a little over 3 minutes |
| Your CRM, Stripe, your booking platform, leads, email | Their APIs, direct | Live |
| Google Ads, GA4 | Google APIs | Hours behind, set by Google |
| Search Console | Google API | 2 to 3 days behind, set by Google |
| Answer engines | ChatGPT, Gemini, Claude and Grok, each via its own API | As of the last scoring run |
The time beside the page title is the time your data was pulled, and hovering it says whether those numbers came live or from the last saved snapshot.
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 end in a reload rather than 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. You see the same page at 3am as at 9am.
Can a number on the screen be made up?
Every number on your instance is pulled from a connected source. A view appears as its source is connected, and the Jobs view shows a coming-soon card until its data can be trusted. Illustrative numbers live 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, ends every window yesterday because today is partial, and caches the answer for five minutes.
Do I need to install anything?
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 your name and email in front of it. Pricing is three published tiers.
Open the live demo See pricing
New here? See what TruLata is. Prefer to write? Send us the one thing you want to know.
Start here: AI marketing platform · AI marketing software · all-in-one marketing platform · marketing automation software · marketing software for small business.
- 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
- Seen in AI answersHow often ChatGPT, Gemini, Claude and Grok name you, measured
- Every send loggedProspect emails leave from a review-first queue, and every send is logged.

