A Sacramento fight promotion that, until January, had no website and no data.
We changed that.
MS Digital Marketing · Cal Poly Pomona
Jarrod Griffin · Juan De La Cruz · Lydia Chen · Bhamini Raghuram Pillai · Christian Gutierrez-Garcia · Karima Ajahiou
Faculty Advisor: Dr. Anthony Kim
RSMT sells nothing on its own site. Tickets → Eventbrite · PPV → Akaizo. A conversion is a click, not a sale.
On 2026-01-20, RSMT went from zero measurement to a live event-level analytics pipeline.
5,779 Tracked sessions since launch · Jan 20 – Jul 30, 2026
4,505 users · 29,376 events (GA4 Data API, cumulative)
Why a pipeline, not just GA4’s dashboards? GA4’s interface can’t model conversion odds against page depth — and it expires raw event tables at ~60 days. The pipeline snapshots the data so findings stay reproducible after the source is gone.
R/ga4_data.R
Of 235 people who clicked through to buy, almost all did it on first contact.
90.6% Converted on the same calendar day as their first touchpoint
78.3% Converted within their first session — no return visit needed
data/raw/ga4_events.parquet · row-level window Feb 27 – Apr 23, 2026 (n = 235 converters) · converters only — directional, not causal
Paid Social bought the most volume at the lowest engagement. Organic Search brought the most intent and got no investment.
Paid Social 2,006 sessions at 8.5% engagement · Organic Search 585 sessions at 69.7%. The size of the gap is the finding.
data/raw/ga4_api_channel_acq.parquet · cumulative Jan 20 – Jun 23, 2026. Unassigned and (other) excluded.
Organic search + owned social — where intent already lives.
Homepage holds ~6s; the event page over a minute — move people between them.
Ticket + PPV click-through — 90.6% same-day; one shot.
Post-fight results page + clips + podcast — feeds Reach.
Engage feeds Reach: results content published after a fight becomes the next event’s organic discovery. A paid impression expires in a day; a results page earns traffic indefinitely.
The one campaign element we took to the client, they reshaped, and we shipped.
We proposed SEO bios for every fighter on the card.
The scale: 40+ fighters per event — hundreds of bios a year to write and keep current, for a very small team.
Client reshaped → we shipped Results-first content from clips they already film, plus the podcast.
Podcast live 2026-06-25, confirmed in GA4 · results page within 48h of Aug 1
Why results content is the target: Search Console shows #1 for RSMT’s own name — but impressions without clicks for “who won” and “how to watch.” /watch/: 793 impressions, 4.0% CTR. Measured, uncaptured demand.
data/raw_refreshed_20260701/gsc_pages.parquet; client decision record (AO4)
ibm6950/week9/window_compare.R; complete days only
One measurement layer live · one element shipped ◐ · five plans staged.
Measurement & analytics stack · Jarrod GA4 + GTM · BigQuery · Looker dashboard · conversion tracking — live since 2026-01-20.
AO4 — Own-the-results organic · Jarrod ◐ partial Podcast live 2026-06-25 · results page within 48h of Aug 1.
| Plan | Owner |
|---|---|
| AO1 Website funnel + CTA | Bhamini |
| AO2 Los Angeles market pilot | Lydia |
| AO3 Owned-social calendar | Christian |
| AO5 Immediate-intent capture (QR → email) | Juan |
| AO6 Engagement-based fighter booking | Karima |
One finding steered where we didn’t build: Instagram is already RSMT’s #1 front door — so we instrumented what works and built into the gaps.
ga4_api_channel_acq.parquet
Two assets the client operates without us — and they outlast every tactic in this deck.
📊 Looker Studio dashboard — live Day-to-day KPIs, self-serve. Before this, “how did the last event do?” meant asking someone. Now it’s a link.
📝 Conversion tracking on both lead forms Fighter Application (/for-fighters/) and Inner Circle newsletter (/contact/). The only two lead paths RSMT has — both now fire tracked events.
/for-fighters/ and /contact/
The blocker was publishing to the website — so we removed that step.
🎙️ Podcast → page Episodes the owner appears on become pages optimized for search and AI answer engines — same tracked redirects, same measurement. Nothing new to film or write.
mail-poller (private) + rsmt/_docs/AI-PIPELINE.md; test records: HANDOFF.md 2026-07-29 · STAGE-3-HANDOFF.md 2026-07-30
Weigh these before you act on the recommendation — they change how much confidence each number deserves.
1 · Measurement floor — no website before 2026-01-20; no pre-project baseline, every “before” is within-project.
2 · Attribution — a conversion is a click, not a confirmed sale; rates are lower bounds on intent.
3 · Small samples — 231–305 sessions per window, 235 converters; intervals stay wide.
4 · Observational — nothing randomised; association and timing, not campaign effect.
5 · Expiring history — BigQuery drops raw tables at ~60 days; row-level modelling covers 2026-02-27 onward.
6 · Zero baselines — four of five elements score attainment, not improvement.
7 · Platform limits — cross-device collapse, incognito undercount, social→Direct mis-assignment.
None of this invalidates the direction — treat precise percentages as directional.
Value would come from executing six marketing objectives.
Bios for 40+ fighters per event couldn’t scale; the highest-intent channel had no investment.
One measurement layer + one element the client could sustain — reshaped by them.
An implementable plan beats a comprehensive one.
Instrument before you campaign — sequence by what the client can sustain.
That dashboard will still be answering questions after every tactic in this deck is stale.
Supporting detail — available for Q&A
A.1 Data Sources · A.2 Technology Stack · A.3 Conversion Definition
A.4 Regression Full Output · A.5 Channel Performance Table · A.6 Page Funnel
A.7 Last-Touch Before Conversion · A.8 Journey Distribution
A.9 All Six Markets · A.10 All Fighter Rankings · A.11 Traffic Sources · A.12 Limitations
| Source | Dataset | Coverage | Key Variables |
|---|---|---|---|
| GA4 (event stream) | ga4_events.parquet |
RSMT 13 launch → Apr 30, 2026 | event_name · page_location · link_url · user_pseudo_id · ga_session_id · device_category · traffic_medium |
| GA4 Data API | ga4_api_channel_acq.parquet |
All-time channel-level aggregates | sessionDefaultChannelGroup · sessions · engagementRate |
| Google BigQuery | Raw streaming export | Full event stream, lossless | Complete GA4 schema, exported via bigrquery R package |
| ACS 2023 Census | 60-min isochrone (6 venues) | Census tract 5-yr estimates | population · median_income · pct_age_18–34 · pct_age_35–54 · census_tracts |
| Instagram (manual) | RSMT 15 promo posts | 12 matchup posts | likes · comments · engagement_score = likes + 2×comments |
Collection context: Google Tag Manager and GA4 went live 2026-01-20 — the earliest event date in the GA4 export, and the project’s hard measurement floor. RSMT had zero analytics infrastructure and no website before this project, so no pre-instrumentation baseline exists. BigQuery streaming export began at site launch and is continuous; row-level event history is retained ~60 days, so behavioural modelling covers 2026-02-27 onward.
Tracking & Ingestion
| Tool | Purpose |
|---|---|
| Google Tag Manager | Event triggers, custom tag deployment |
| Google Analytics 4 | Behavioral event collection |
| Google BigQuery | Cloud warehouse + raw export |
bigrquery (R) |
BigQuery API auth & pull |
Storage & Query
| Tool | Purpose |
|---|---|
Apache Parquet + arrow |
Columnar in-memory format |
DuckDB + DBI |
SQL over Parquet, no server needed |
Analysis & Modeling
| Package | Use |
|---|---|
dplyr |
Data wrangling (lazy eval over Arrow) |
ggplot2 |
Publication-quality charts |
forcats, scales |
Factor ordering, number formatting |
stats::glm() |
Logistic regression (base R) |
Reporting & Output
| Tool | Purpose |
|---|---|
| Quarto | Reproducible documents & slides |
| RevealJS | HTML presentation engine |
| Posit Connect Cloud | Shiny app (AO2 census map) |
| Excel + Tableau | AO6 Instagram engagement scoring |
A session is counted as a conversion when it contains at least one of:
/go/tickets or /go/ppvRSMT redirect slugs. GA4 fires the page_view event before the external redirect fires, capturing the click-through moment. Both ticket and PPV paths are captured.
eventbrite.comLive ticket purchase platform. Tracked via GA4 outbound link event + GTM click trigger on the purchase button element.
akaizosports.livePay-Per-View streaming platform. Same GTM click-tracking mechanism as Eventbrite.
What this captures:
What this does NOT capture:
Key implication: All conversion rates here are lower bounds. True conversion rate is higher. A post-purchase pixel for RSMT 16 would close this gap and enable confirmed-purchase measurement.
Model: glm(conversion_flag ~ session_event_count + page_view_count + device_category + traffic_medium, family = binomial) · McFadden R²: 0.274 · N: 1,433 sessions
| Predictor | Odds Ratio | 95% CI | p-value | |
|---|---|---|---|---|
| (Intercept) | 0.044 | 0.026 – 0.076 | < 0.001 | *** |
| session_event_count | 0.488 | 0.426 – 0.56 | < 0.001 | *** |
| page_view_count | 10.306 | 7.078 – 15.008 | < 0.001 | *** |
| device_categorymobile | 0.778 | 0.48 – 1.26 | 0.3076 | |
| device_categorytablet | 0.000 | 0 – Inf | 0.977 | |
| traffic_mediumorganic | 1.634 | 1.154 – 2.314 | < 0.01 | ** |
| traffic_mediumpaid | 0.270 | 0.166 – 0.439 | < 0.001 | *** |
| traffic_mediumreferral | 0.365 | 0.116 – 1.144 | 0.0838 | |
| traffic_mediumsocial | 1.199 | 0.326 – 4.406 | 0.7845 |
All acquisition channels — sessions, % of total traffic, and engagement rate
| Channel | Sessions | % of Total | Engagement Rate |
|---|---|---|---|
| Paid Social | 2,006 | 52.2% | 8.5% |
| Direct | 1,027 | 26.7% | 54.3% |
| Organic Search | 585 | 15.2% | 69.7% |
| Organic Social | 208 | 5.4% | 61.5% |
| Referral | 17 | 0.4% | 58.8% |
Homepage → Event Page → Ticket Page — full metrics from GA4 Pages & Screens
| Page | Views | Users | Avg. Engagement | Observation |
|---|---|---|---|---|
| Homepage | 1,212 | 841 | ~6 seconds | Highest traffic; most visitors exit without a clear next action |
| Event Page | 175 | — | ~1 min 03 sec | ~10× longer dwell than homepage — users who arrive here read the card |
| Ticket Page | 123 | — | — | Final step before Eventbrite redirect |
| PPV Page | 122 | — | — | Parallel purchase path (Akaizo) |
Homepage first-step navigation (Path Exploration · 1,028 homepage sessions):
| Immediate next page from homepage | Users |
|---|---|
| PPV page | 122 |
| Ticket page | 101 |
| Event page | 78 |
| Exit / bounce | remaining majority |
Page visited immediately before the buy-link click — all categories
| Page Category (last before conversion click) | Conversions | % of Total |
|---|---|---|
| Home Page | 187 | 82.7 |
| Events Page | 20 | 8.8 |
| Dedicated Tickets/PPV Page | 18 | 8.0 |
| Fighter Profile | 1 | 0.4 |
The homepage triggers the most final conversions despite being the page with the shortest dwell time. It functions as a closing page: content pages (fighters, fight card) build intent; the homepage must execute the purchase click. A sticky “Buy Tickets” CTA above the fold converts this already-warm traffic with zero additional friction.
ACS 2023 · 60-minute drive-time isochrone · candidate venue addresses
| Market | Census Tracts | Reachable Pop. | Median HH Income | Age 18–54 (tract mean) | Pop Δ vs Sacramento |
|---|---|---|---|---|---|
| Sacramento (baseline) | 711 | 3,166,025 | $89,844 | 48.3% | — |
| San Jose | 1,124 | 5,014,076 | $147,459 | 50.7% | +58.4% |
| San Francisco | 1,232 | 5,249,936 | $143,095 | 50.1% | +65.8% |
| Riverside | 1,658 | 8,207,709 | $94,760 | 49.5% | +159.2% |
| Los Angeles | 3,085 | 12,960,180 | $91,853 | 51.1% | +309.4% |
| Anaheim | 3,044 | 13,203,228 | $90,893 | 51.3% | +316.9% |
Why Los Angeles over Anaheim (Anaheim is marginally larger by population):
RSMT 15 Instagram promotional posts · Engagement Score = Likes + 2 × Comments
| Rank | Matchup / Post | Likes | Comments | Engagement Score |
|---|---|---|---|---|
| 1 | Taylor vs Tiffer | 428 | 41 | 510 |
| 2 | Houston vs Hall | 420 | 41 | 502 |
| 3 | Phetamphone vs Handy | 288 | 37 | 362 |
| 4 | Sanchez vs Villanueva | 268 | 10 | 288 |
| 5 | Harris vs Sokolova | 246 | 7 | 260 |
| 6 | Jack (solo) | 197 | 30 | 257 |
| 7 | Logan (solo) | 206 | 23 | 252 |
| 8 | Rodriguez vs Sardi | 206 | 14 | 234 |
| 9 | Mayorga vs Licea | 201 | 10 | 221 |
| 10 | Bullie vs Hargrove | 163 | 13 | 189 |
| 11 | Carlos (solo) | 135 | 24 | 183 |
| 12 | Underwood vs Roberts | 113 | 14 | 141 |
Follower context (top 3 by follower count): Carlos — 2,457 followers · Vera Sokolova — 2,450 followers · Darian Houston — 1,559 followers.
Koby Taylor (Taylor vs Tiffer, rank #1, score 510) has far fewer followers than Sokolova (rank #5, score 260) or Carlos (rank #11, score 183) — the two most-followed fighters on the card. Follower count is not a reliable booking predictor — matchup excitement drives engagement.
AO3 — Traffic Source Breakdown (total events)
| Source | Events |
|---|---|
| 1,946 | |
| (direct) | 1,894 |
| ig (Instagram in-app) | 634 |
| bing | 71 |
| yahoo | 40 |
| facebook.com | 30 |
| lm.facebook.com | 30 |
| duckduckgo | 26 |
| l.instagram.com | 19 |
| m.facebook.com | 11 |
| l.facebook.com | 5 |
| ecosia.org | 4 |
| instagram.com | 4 |
| chatgpt.com | 2 |
| linktr.ee | 2 |
Total page views: 2,668 · Unique users: 1,095 · Avg: 2.44 pages/user
AO5 — High-Intent Conversion Timing
90.6% Same-day: converted on the same calendar day as first visit
78.3% Single-session: converted within their first session — no return visit needed
AO5 Method: Converter = session with a ticket/PPV click-through (Eventbrite/Akaizo). First-touch date vs. conversion date, measured among converters (n = 235). Same finding as the Audience Diagnosis slide — the buying window is short.
Implication: Capture high intent at the moment it peaks — direct social and email links to the event page, not the homepage — because buyers rarely return for a second session.
Known limitations:
What RSMT 16 data adds:
Rising Stars Muay Thai | IBM 6950 Final Presentation | Dr. Hossain | Cal Poly Pomona