Skip to main content

Materials

A material is a data surface you can query — one row per observation, with a defined set of columns. QAL is built around a fixed set of materials, chosen so that the grain of each one maps to a natural human question about a website.

The fastest way to understand a material is to look at the sample table on its page. Humans read sample rows faster than column lists.

In this section

  • allpv — one row per page view. Start here when the question is about traffic, sessions, referrers, or page popularity.
  • click_event — one row per recorded click. Use for click-through rates, rage clicks, element-level interest.
  • gsc — Google Search Console data. Use for search queries, impressions, and organic CTR.
  • goal_N — conversion / goal events configured per site. Use when the question is about conversion rates.
  • page_version — page version metadata. Use when slicing by content changes or A/B.

The authoritative column list for every material lives in ai/materials.yaml. The pages here are friendly previews; the YAML is the source of truth.

Each material in the YAML also carries a supports_all: true | false flag declaring whether it accepts tracking_id: "all" (the cross-site aggregate). Roughly: traffic-shaped materials (allpv, click_event, datalayer_event, events.{name}) are true; per-site analytical materials (gsc, goal_N, page_version, ga4_*) are false. See the /guide reference for how to read the flag at runtime. Since: 2026-04-29

About the sample tables

Every material page includes a small, hand-crafted sample table with realistic rows. The tables intentionally show only three ID columnspage_id, session_id, pv_id — because those are the keys you most often want to JOIN on. Real materials carry additional IDs (event_id, page_version_id, …); those are documented in the YAML spec but omitted from the sample tables to keep the shape of the data visible at a glance.