5 sections, 27 terms. The vocabulary used across every lens: what each metric measures, how the data actually moves through the pipeline, and the architectural decisions baked into v1.
Metrics & signals
Metrics & signals
What each number on the dashboard measures, and why we picked it.
Share-of-Voice (SoV)
An entity's share of the audio-category keyword universe where they sit in Google's top-10 organic SERP. This is our headline competitive metric. Top-10 share is the headline; top-3 share is the secondary lens because position 1 through 3 captures the vast majority of clicks.
Top-10 / Top-3 keywords
Count of distinct keywords from our 110-keyword universe where a domain ranks in positions 1 to 10 (Top-10) or 1 to 3 (Top-3). 'Beats has 28 top-10 keywords' means Beats ranks somewhere on page 1 of Google for 28 of our tracked terms.
Average position
Mean SERP position across every keyword in the universe where the domain ranks (any position). Lower is better. Domains that don't rank for many keywords can show misleadingly low averages.
Keyword gap
A keyword where a tracked competitor sits in the top-10 and Beats does not. Each gap is one actionable ticket: the term where there's measurable category demand and we're missing.
Volume at stake
Sum of monthly US search volume across all gap keywords. Approximates the size of the audience Beats can't currently reach via organic search.
Position delta (W/W)
Position change for a (keyword × domain) pair since the prior SERP sweep. Position Movers surfaces rows where |Δ| ≥ 3, a fast-moving lane that catches drops and spikes before the weekly SoV chart's resolution does.
Estimated traffic value (ETV)
DataForSEO's estimate of monthly organic clicks a domain receives. Computed from its keyword rankings × per-position click-through rate × keyword volume. Useful as a relative trend; the absolute number is approximate.
Keyword difficulty (KD)
0 to 100 score from DataForSEO estimating how hard it is to rank in the top-10 for a keyword. Higher is harder. Useful for filtering the gap list to terms that are realistically winnable.
CPC (cost per click)
Estimated US Google Ads cost per click for the keyword. Used as a proxy for commercial intent: terms with higher CPC tend to have buyer-stage searchers.
Entities & keywords
Entities & keywords
Who we track and how we slice the keyword universe.
Entity
A brand or product we track. There are 8 entities in v1: Beats (owner) plus Sony, Bose, AirPods, JBL, Sennheiser, Skullcandy, and Jabra (competitors). Stored in dim_entity.
Sibling
An entity that competes with Beats but is also an Apple subsidiary. Right now that means AirPods. Surfaced distinctly in the dashboard (neutral badge, excluded from the traffic chart) per the Phase 0 'Apple-owned context' constraint. We measure competition without framing them as a threat.
Tier (brand / category / conquest)
How we slice the keyword universe. Brand terms include 'beats studio pro' and 'beats by dre'. Category terms include 'wireless headphones' and 'noise cancelling earbuds'. Conquest terms include 'beats vs sony' and 'beats vs airpods'. Different tiers warrant different cadences and interpretation.
Priority (0–100)
Analyst-assigned weight on each keyword. Higher priorities get refreshed more often (daily SERP cron) and surface first in the position movers watchlist.
How the data moves
How the data moves
Pipeline vocabulary, where every number comes from.
DataForSEO
The licensed vendor that backs every data point in this dashboard. SERP organic results, Labs keyword data, traffic estimation: all DataForSEO endpoints. Per the data-fabric clearance registry, this is a T3 vendor-collected source, cleared at app boot.
Live method
Synchronous DataForSEO call. The API blocks until the result is ready. Used for on-demand priority lookups where freshness matters more than throughput. Slightly more expensive per call.
Standard method + webhook
Asynchronous DataForSEO call. The API queues the task and POSTs the result to our webhook receiver (/api/dfs/postback) when ready. Cheaper at scale, used for batch sweeps (full keyword universe, all competitor pairs).
Postback / pingback
Two webhook callback styles DataForSEO supports. Postback POSTs the full result body to our endpoint; pingback fires a short ping that we then exchange for the result via task_get. We use postback to halve the round-trip count.
Append-only
Every ingest writes a NEW row with a captured_at timestamp. Nothing is overwritten or deleted. Lets us reconstruct any historical state by query rather than maintaining a separate snapshot system. The dashboard reads 'latest' via DISTINCT ON views.
Star schema (dim_* / fact_*)
Warehouse pattern. dim_entity, dim_keyword, dim_channel, dim_product, and dim_date hold rarely-changing reference data. fact_serp_rank, fact_competitor_overlap, and fact_traffic_estimate hold the append-only measurements. Joins on dim keys keep queries narrow.
Clearance registry
The data-fabric package tracks every external source with a clearance status (cleared, pending, or blocked) and an owner. The Competitive Observatory calls assertCleared('dataforseo-labs') before every adapter call. If the source isn't cleared, the call fails fast. This is the structural enforcement of the Phase 0 legal-sourcing gate.
Spend & kill criteria
Spend & kill criteria
Cost governance baked into the dashboard.
Spend cap (MTD chip)
Month-to-date DataForSEO spend, color-coded in the page header. Green under $50, amber from $50 to $100, red at $100 or above. The $100 cap is a hard kill criterion from the manifest; sweeps halt automatically when crossed.
Hard kill / soft warn
Two thresholds enforced in code. SOFT_WARN at $50 is just visual amber. HARD_KILL at $100 means sweeps refuse to run. Both are captured as Phase 6 kill criteria in the dossier. Non-negotiable, override sunk cost.
Why v1 looks like this
Why v1 looks like this
The architectural decisions baked into the Decision Gate verdict.
Architecture A (Thin Tiered Aggregator)
What v1 ships. A bronze/silver/gold per-pillar feed with freshness contracts, no scoring or auto-narrative. Picked over B/C in the Decision Gate (score 76, 'Refine' band) for being highest-confidence, lowest-legal-exposure, and the explicit revert target.
Architecture B (Scoring + Velocity Alerts)
Funded follow-on, not built yet. Layered scoring + W/W velocity alerting behind a calibration gate. Conditional on a named owner, sustained data-scientist time, expanded calibration, and licensed sourcing.
Architecture C (I&W Graph)
Trust-weighted I&W graph plus order-of-battle. Killed for this cycle per the Decision Gate (score 34, expected NPV around −$390K). Revisit only after a 2-week lead-time backtest passes AND curation ownership is funded.
Freshness contract
Every dashboard tile shows two timestamps separately: 'last polled' (when the cron ran) and 'last changed' (when the underlying number actually moved). Prevents a green 'fresh' chip being misread as 'true' when the upstream hasn't changed in weeks.
Decisions-changed counter
Per Phase 0 success criterion #1, the real measure of this dashboard is decisions changed (5 or more in 12 weeks), not impressions or session count. A one-click 'this informed a decision' log instruments adoption from pilot day one. Surfaced items alone don't count.