JEFF SHULL / PORTFOLIO
CASE STUDY 01
A1 MARKETING OPERATIONS / GROWTH ANALYSIS · REPEAT

Turning scattered campaign exports into a single source of truth for media buying

A Google Sheets dashboard that unified paid and influencer campaign data across every game title, region, and channel — and changed how Repeat.gg spent its marketing budget.

"This might be the best Google Sheet I've ever seen" - Senior Data Analyst on the PlayStation Esports team.

ROLEMarketing Operations
TOOLSSheets · IMPORTRANGE · QUERY
DATA SOURCESThird Party Dashboards + Internal Database
Marketing Campaigns — Dashboard
Marketing Campaigns Dashboard
Live filter panel — segments every chart by campaign, creator, tactic, game title, region, language, and objective (CPA / CPE / CPUE) automatically.

The problem

Repeat ran marketing across a growing catalog of game titles — paid Google Ads, Social ads, YouTube integrations, dedicated creator content, Twitch streams, Discord, TikTok — with reporting being done mostly adhoc and individually per channel.

There was no single view of what was actually working. Budget decisions were made channel by channel, campaign by campaign, without a way to compare creators or channels across regions or languages, as one example.

Google Ads YT Integration YT Dedicated Twitch Stream TikTok Discord FB Group Post

What I built

I built a central database tab that pulled every export in automatically via IMPORTRANGE, then layered nested QUERY formulas on top — filtered by a live date range and dropdown segments — to aggregate spend, signups, entries, and monthly active uniques into CPA, CPE, and CPUE on demand.

No pivot tables. The entire dashboard — top campaigns, top creators, spend trend lines — runs off QUERY output, which meant every chart stayed live the moment a new export landed in the database tab.

=QUERY(DataCombined!$A$1:$X,"
SELECT N,SUM(D),SUM(E),SUM(F),SUM(G),SUM(K),Sum(D)/SUM(E),Sum(D)/SUM(F),Sum(D)/SUM(G)
WHERE A IS NOT NULL AND N >= date '"&text($D$7,"yyyy-mm-dd")&"' AND N <= date '"&text($D$8,"yyyy-mm-dd")&"'
AND R = TRUE AND S = TRUE AND T = TRUE AND U = TRUE AND V = TRUE AND W = TRUE AND X = TRUE
GROUP BY N
ORDER BY N DESC
LABEL SUM(D) 'Spend', SUM(E) 'Signups',SUM(F) 'Entries',SUM(G) 'Monthly Active Uniques',SUM(K) 'Views',SUM(D)/SUM(E) 'CPA',Sum(D)/SUM(F) 'CPE',Sum(D)/SUM(G) 'CPUE'")
)
Influencers — Database tab
Influencers Database tab
=IMPORTRANGE(...) pulls the raw influencer export straight into the database tab — one formula instead of a manual copy-paste every reporting cycle.

What the data showed

Once every channel lived in one place, three distinct patterns (among others) became visible that hadn't been before.

CPA

Micro-influencers outperformed macro

Creators with smaller, more dedicated audiences consistently posted better CPAs than larger-reach influencers — shifting how partnerships got prioritized.

TIMING

Spend followed the player

Google Ads spiked during peak gaming hours and around high-visibility campaigns. We then tailored our "always on" marketing spend to match those windows instead of running flat.

GEO × TITLE

Region audience trends were revealed

Certain titles outperformed in certain countries. Influencer targeting shifted to match creator location with the games actually resonating there.

B1 IMPACT
Turned campaign optimization from a reactive, export-by-export scramble into a repeatable read on where every dollar was actually working — across channel, creator tier, region, and title.

Skills demonstrated

IMPORTRANGE Nested QUERY Multi-source data aggregation Dynamic filtering Cross-channel analysis CPA / CPE / CPUE modeling Budget allocation strategy Influencer targeting
Jeff Shull
Martinez, CA