Semantic Layer
Your marketing data model documented as machine-readable concept files — a marketing semantic layer for teams pointing an LLM or agent at BigQuery.
We author the metadata; you bring the model. Every metric, dimension and mart gets a curated, AI-ready definition your tools read before they write SQL.
What you get — and what we don't sell
This deserves to be said before anything else, because “AI-ready” usually hides a platform pitch. Here it doesn't.
You get files.
A directory of markdown concept files with YAML frontmatter — plain text, versioned wherever you keep code, portable to any tool that reads text.
We don't sell an LLM.
No model, no tokens, no chat UI. Bring the model your stack already runs — Gemini, Claude, GPT or anything else.
It's metadata, not a query engine.
Nothing here executes SQL. Your agent writes the query; your warehouse runs it.
Nothing is auto-generated.
Concepts are authored and reviewed by people who know your data. The curation is the product.
Nothing leaves your project.
The layer is authored with read-only access to your warehouse, and the finished files live in your repo or bucket — under your accounts, not ours. Walk away with the directory any time.
Your LLM guesses at your schema
Point a model at an undocumented warehouse and it does what it always does with missing context: it fills the gap. Invented joins, half-right column names, a metric defined three different ways in three answers. The definitions that would fix it exist — in dashboards, in people's heads — just not anywhere a model can read.
How it works: marts in, concept files out
The layer is built once, versioned like code, and updated as your data model evolves.
- 01
Inventory
Marts, columns, grain and definitions are collected from your warehouse — and from the people who own them.
- 02
Author
Each metric, dimension and mart becomes one markdown concept file. Written by humans, never inferred.
- 03
Cross-link
Concepts reference each other explicitly: sessions link to channel grouping, channel grouping to its source table.
- 04
Publish
The result is a plain directory of OKF files in your repo or bucket — no registry, no runtime.
- 05
Load
Your LLM or agent reads the files as context before writing a line of BigQuery SQL.
The format: Google's Open Knowledge Format (OKF)
OKF is an open specification Google published in June 2026. A
knowledge base is a directory of markdown files — one concept
per file — with YAML frontmatter on top. The format is
deliberately minimal: one required field (type), a handful of optional ones (title, description, resource, tags, timestamp), and relationships expressed as explicit markdown links, not
embeddings. If you can read a file, you can read your semantic
layer; if you can clone a repo, you can ship it.
Why this beats a schema dump
INFORMATION_SCHEMA tells a model which columns exist; it says nothing about which table is the source of truth, what grain a mart is at, or how “sessions” is actually defined. A curated concept file carries the definition, the caveats and the explicit links between ideas — the context a model cannot infer, because it was never written down anywhere.
A concept file, a question, and the SQL it produced
The output is text you can read. On the left, one concept file from the layer. On the right, what happens when an LLM that has read it answers a question.
---
type: metric
title: Sessions by channel
description: Daily sessions split by default channel grouping.
resource: bq://your-project.marts.mart_sessions_daily
tags: [ga4, acquisition]
---
Sessions are counted from GA4 session_start events and
aggregated daily per channel. Paid and organic follow the
default channel grouping — the exact rules live in
[channel_grouping](./channel_grouping.md). Illustration. One concept per file: the YAML tells an agent what this is and where it lives; the body carries the human definition and its explicit links.
Which channel drove the most sessions last week?
SELECT
channel_grouping,
SUM(sessions) AS sessions
FROM `your-project.marts.mart_sessions_daily`
WHERE session_date >=
DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
GROUP BY channel_grouping
ORDER BY sessions DESC; Illustration. The SQL is representative — the point is where its table and column names came from: the concept file, not a guess.
Related marts & sources
Every mart the layer documents is a mart your team — and your AI — can query with confidence. These are typical starting points.
Marts
- mart_sessions_daily sessions by channel and market
- mart_gsc_queries Search Console clicks and impressions
- mart_ads_spend_daily spend and clicks by campaign
- mart_revenue_by_channel revenue and orders by channel
Representative selection — the final list depends on your stack. Source pages are linked above; detailed model pages are on the way.
Give your AI the context it's been missing.
Free discovery call · Leave with a concept inventory to start from