truefold
The semantic layer

One set of definitions. Everything answers from it.

Every number here comes from a definition someone wrote down: the formula, what it leaves out, how it can be broken down, and the questions it won't answer. Chat, dashboards and the morning briefing all read from the same set.

What's in it

Eighty-eight metrics, each one written by hand.

Each definition sets out the formula, the rows it excludes, which dimensions it will break down by, and where it stops. The library ships complete, which is why there's nothing to set up on day one. Rename anything to your team's language, or change a definition that doesn't match how you run the business.

  • Efficiency: MER, MER net of refunds, MER after promo cost, cost per new customer
  • Profitability: gross, contribution and product margin, plus every P&L line as a share of net sales
  • Growth mix: new-customer revenue share, repeat rate, days to second order, AOV new vs returning
  • Media diagnostics: CPM, CPC, link CTR, and the share of spend capped by budget rather than rank
  • Leakage: unrecovered checkouts, cart recovery rate, revenue behind variants about to stock out
  • Coverage: how much of a figure was measured rather than assumed
In practice

Ask for MER and you get 6.00×. Ask for MER After Promo, which counts the discounts you gave away as spend, and you get 5.05×. Same store, same period. Both are in the library because both are real. Which one you quote is a choice.

Metric library88 metrics
  • MER After Promo
    Efficiency · Counts discounts as spend
  • nCAC
    Efficiency · New customers from Shopify, not a pixel
  • Contribution Margin Pct
    Profitability · After goods, shipping, fees, ads
  • Attribution Coverage
    Coverage · Read beside any channel split
  • Costed Revenue Share
    Coverage · How much has a real cost behind it
Definitions are version-controlled. A metric quietly changed in a settings screen is how two people end up presenting different numbers for the same thing.
The path a question takes

The AI picks a metric. It doesn't write the maths.

Ask a question and the model works from the library. It sees what each metric means and what it accepts, then picks one. The formula behind that name is already written, and the query around it is built in code.

What that rules out
  • It can't invent a name.

    A name matches one definition or the request stops. Close matches get suggested, never substituted.

  • The formula is fixed.

    What varies is the date range, the filter and the breakdown.

  • It doesn't do the arithmetic.

    Percentage changes and period comparisons are calculated in code.

  • No prior period, no percentage.

    If there's nothing to compare against you get told that, instead of a number.

The date question

Each answer states which date column it used. Orders placed on the 28th and orders created on the 28th aren't always the same orders, and a report that picks one silently is a report you can't reconcile.

The model's job is to understand the question. The rest is code.

The boundary

Every query passes the same boundary.

Some questions no metric covers. Then Truefold writes a query, and it goes through the same checks as everything else, whether it came from a stored definition or was written a second ago.

What the checks enforce
  • Read-only. One statement, and it can only read.
  • Approved tables only. Nothing outside the model, including a same-named table in another dataset or project.
  • Personal fields can't reach output. An email can be counted, grouped by, or joined on. It can't be returned. Not through a subquery, a renamed column, or a whole-row export.
  • No guessing by repetition. Identifiers are limited to a few uses, so nobody can rebuild a customer list one yes-or-no question at a time.
  • Cost is checked first, so a runaway query is stopped before it scans.

When the checks can't read a query, it gets refused rather than run.

In practice

Ask for a customer list and Truefold refuses, then offers what it can answer instead: how many customers, how they group, what they bought.

Coverage

How much of this number was measured?

A profit figure built on costs you never uploaded isn't wrong. It's your default rates with a currency symbol on them. Truefold measures that gap and reports it alongside the number.

How it works
  • Coverage travels with every answer: the figure, the floor it was checked against, and whether it's a share of orders or of revenue. Two different questions, and answers get compared.
  • Below the floor it refuses. You don't get a number with a warning underneath.
  • A gap in the past doesn't sink the present. Cost data usually improves over time, so an older comparison window is often less complete than the one you asked about. The current figure stands and the comparison is declined by name.
  • Broken-down rows keep their labels. A channel below the floor keeps its name and loses its number, so the gap stays visible.
  • Coverage is weighted, not averaged. Three orders at 100% and six thousand at 2% averages out to 51%. The weighted figure is 2%, and it refuses.
The refusal, word for word
“Net Profit REFUSED: 31% coverage, under the 50% minimum. A number here would be fiction, not an approximation — load the missing cost data first.”
Coverage as its own number

Some metrics measure the model rather than the business: how much revenue carries a tag that resolves to a channel, how many conversions the platforms claim per order Shopify credits, how much of the cost base has a real figure behind it. They sit next to the metrics they qualify.

The auditor

It tells you when it couldn't look.

Data goes wrong quietly. A sync stalls, a platform renames a column, a campaign launches with a tag nobody mapped, and the chart still draws, slightly wrong, for a week.

What it checks
  • Freshness, per source against its own schedule, measured from the last successful sync rather than the last attempt.
  • Comparability. Two sources can both be on time and still leave a ratio dividing today by yesterday.
  • Schema drift. Columns and tables appearing, disappearing, changing type.
  • Movement, judged against a metric's own history rather than a round number someone picked.
When it can't check

It says so by name, with the date the data stops. A day it couldn't judge is never counted as a day that was fine, and a stalled sync never switches off the checks that would have caught it.

Before an alert can fire

A new check is replayed against your own history, and you pick its threshold from a list showing how often each one would actually have fired. If none of them fires at a sensible rate, it won't recommend one.

Severity

Severity comes from the size of the miss. Three hours late and nine days dark aren't the same problem, and a queue that rates them the same is a queue people stop reading.

Data handling

Four sources, read-only, thirteen months deep.

Sign in to Shopify, Meta Ads and Google Ads, paste a Klaviyo key. Thirteen months of history backfills into a warehouse used by your organisation and nobody else. Truefold reads; it never writes back. Nothing in your store, your ad accounts or your flows changes because you connected it.

  • Shopify (standard + Plus): orders, line items, customers, products, variants, refunds
  • Meta Ads: campaigns, ad sets, ads, daily spend and delivery
  • Google Ads: campaigns, ad groups, daily stats, budget-constraint signals
  • Klaviyo: events, profiles, campaigns, flows
Personal data

Customer names, emails, phone numbers and addresses are dropped on the way in and never written. Each customer becomes a hashed reference instead: enough to see that someone bought twice, or to follow a cohort's lifetime value, not enough to identify anyone. Separately, the query checks block personal fields from reaching an answer at all. Both would have to fail.

The constraint

Four sources is what makes the rest work. The shape of the data is known ahead of time, so the model arrives already built. If most of your spend sits in TikTok, Amazon or wholesale, this isn't the right tool for you yet.

We don't train AI on your business data.

Sources · what we pull
  • S
    Shopify
    Orders · Lines · Customers · Products · Refunds
    Read-only
  • M
    Meta Ads
    Campaigns · Ad sets · Ads · Daily spend
    Read-only
  • G
    Google Ads
    Campaigns · Ad groups · Daily stats
    Read-only
  • K
    Klaviyo
    Events · Profiles · Campaigns · Flows
    Read-only
13-month backfill on every source · incremental refresh after that
Personal data is minimised on the way in — addresses are dropped before write.
  • Read-only on every source.

    Truefold pulls; it never writes. Nothing in your store, your ad accounts or your flows changes because you connected us.

  • Isolated, and minimised on the way in.

    One BigQuery dataset per organisation, used by nobody else. Customer names, email addresses, phone numbers and shipping addresses are dropped before anything is written.

  • The definitions are yours to adjust.

    Rename metrics to your team's language, correct anything that doesn't match how you run the business. Version-controlled, with a name against every change. We don't train AI on your business data.

See it against your own numbers.

Beta access is going out to Shopify brands a few at a time. Tell us what you're running and we'll walk you through what it finds.