K
Karthik the Marketer
Persona · Campaign ID + Web/Client analytics + Latency
Chapter 1 of 7 · Microsoft Store Discoverability

Meet Karthik,
the Marketer.

Indie dev. Free productivity app, live 6 months. Unlike most devs — he knows what he's doing. Reddit AMA Tuesday, X post Wednesday, r/productivity thread Thursday. Each with its own ?cid= tag. He's doing the work.

Partner Center shows him an install count per campaign — 3–4 hours late. Page views column = "—". Conversions chart doesn't match the table. He has the start of the funnel, a delayed end, and nothing in the middle to interpret either.

App live 6 months
3 channels/week with ?cid=
Page views per cid: "—"
Install latency: 3–4 hr
Karthik · indie dev · running real marketing
feeling: spending without seeing
Karthik's marketing week
Tue 10am
Reddit AMA in r/productivity. ~500 clicks in the first hour. URL: apps.microsoft.com/...?cid=reddit-ama
Tue 11am
Refreshes Partner Center. Installs column: 0. Refreshes again. Still 0.
Tue 2pm
3 hrs later: Installs: 2. Switches to Page views tab. Column header still says "Installs", value still "2". Switches to Conversions. "2" again. 500 Reddit clicks landed somewhere — he has no idea where.
Wed
Posts on X with ?cid=twitter-launch. ~200 clicks.
Thu
r/productivity thread with ms-windows-store:// deep-link. Cleaner attribution — if the Store client is open.
Sat
Reviews the week. Reddit: 2 installs. Twitter: 1. Was Twitter low traffic or low conversion? He can't tell. Cuts Twitter for next week — not because it failed, but because he can't tell if it didn't.

"Page view is missing
in campaignid."

"Page view is missing in campaignid." — Dave Smits, established Microsoft Store dev, 4 June 2026 (one of three concrete gaps he raised)

Three tabs. Same column. Same numbers. The data table never changes — only the chart does. One answer to three different questions.

Add 3–4 hr install latency on top, and his whole week of marketing produces a single ambiguous number, after the moment is already over.

All three tab headers: "Installs"
Web PDP views: 0 captured
Install latency: 3–4 hr
Partner Center · Custom campaign performance · Page views tabThe column header reads "Installs"
Real Microsoft Partner Center Custom campaign performance Page views tab — column header still labeled Installs, same two values 2 and dash as the Installs tab. Only the chart line is different.
DEV VOICE · KARTHIK PERSONA
"I drove 500 clicks to my Store page from Reddit. Partner Center eventually shows 2. Click the Page views tab? Still 2. Click Conversions? Still 2. Same column, same number, three tabs. I'm getting one answer to three different questions."
Synthesised from VoD Pulse free-text + r/microsoftdevs recurring complaints; phrasing aligned with Dave Smits' verbatim "Page view is missing in campaignid."
MS OWN REASONING · INTERNAL EXPLANATION
"Analytics captures only the Store client usage, not web Store usage."
Microsoft Store engineering response when asked why ?cid= click telemetry on apps.microsoft.com isn't surfaced.
THE TWO-LINK PROBLEM
"The link a dev intuitively grabs (the share button on the app's web page) is the wrong link for marketing analytics. The correct link — the ms-windows-store:// deep link — is undocumented in the Partner Center share flow."
A pure DX gap, no engineering cost to fix.

The dashboard that doesn't actually show
what Karthik needs.

Real screenshots of Custom campaign performance in Partner Center today. Two campaigns — focusdropcampaign and spotifyweb-store-button — over 30 days. Click the tabs to see what breaks on each metric.

Partner Center · Custom campaign performance · Installs30-day window, 9 May → 8 Jun 2026
Microsoft Partner Center Custom campaign performance: Installs tab. Two campaigns listed (focusdropcampaign = 2 installs, spotifyweb-store-button = dash). Single spike in chart on one day.
WHAT'S BROKEN HERE
2 installs in 30 days. One spike, 29 flat days. spotifyweb-store-button shows "—". Karthik can't tell if the campaign failed or if Partner Center isn't measuring it. This tab is the only one correctly labeled.
Partner Center · Custom campaign performance · Page viewsNote the column header still says "Installs"
Microsoft Partner Center Custom campaign performance: Page views tab. Column header reads 'Installs' (wrong - this is the Page views tab). spotifyweb-store-button column shows '-' yet the chart clearly shows it had page views in early June.
WHAT'S BROKEN HERE
Page views tab. Column header reads "Installs." Same column data as Installs tab. Only the chart line changes — the table never relabels. No per-campaign page-view number exists anywhere in the UI.
Partner Center · Custom campaign performance · Conversions"Installs by Page views"
Microsoft Partner Center Custom campaign performance: Conversions tab. focusdropcampaign shows '2'; spotifyweb-store-button shows '-'. A 67-point spike appears on the chart with no labelled data point.
WHAT'S BROKEN HERE
67-point spike on the chart — table column still reads "Installs", value still "2". Same column wearing three different tab hats.

Karthik's funnel today — the dark middle

Step 1 · CLICK
500
Reddit clicks measured on the Reddit side (his own analytics)
Step 2 · PAGE VIEW PER CID
"2"
Page views tab shows the same column ("Installs") with the same value as the Installs tab. Indistinguishable.
Step 3 · INSTALL (3–4 hr late)
2
Eventually visible per cid. Without page views, the rate is uncomputable.

Installs per cid do arrive, just late. What's missing is the denominator — page views per cid. Without it, low-traffic / high-conversion looks identical to high-traffic / low-conversion. Both read "2 installs". He turns one off without knowing which.

Apple gives him attribution in 24 hours.
Google gives him attribution in real time.
We give him two installs out of "—".

Apple App Store
24 hr
Campaign Links
attribution latency · free apps
Google Play
real-time
Install Referrer API
server-pushed · free apps
Microsoft Store
3–4 hr
Custom campaign IDs
undocumented · web PDP not captured
The campaign attribution surface itself
Campaign ID / referrer tracking for free apps
°
Publicly documented (devs can find it)
Web PDP-view telemetry (pre-install funnel)
Latency — can he iterate while the campaign is live
Real-time / near-real-time install attribution
°
Server-push API for events (vs dashboard scraping)

What Google actually shows a real dev today

Google Play Console · Store analysis · Acquisition splitReal production data, Sports category app
Google Play Console showing acquisitions split into Google Play explore (27,158) vs Paid and direct (402,071), with detailed timeline and source-level breakdowns

Per-source acquisitions split cleanly: Google Play explore (organic browse) = 27,158 vs Paid and direct (web/ad-driven) = 402,071. Google distinguishes the source of every install and reports it next-day at worst. Microsoft aggregates everything into one "Custom campaign" widget that reads "2" or "—".

Google Play Console · Promotional content reports176 countries × event × acquisitions / opens / updates
Google Play Console promotional content reports for a BGMS X Rooter event showing 4.35M viewers, 924 converters, 0.02% conversion, broken down across 176 countries

4.35M viewers → 924 converters → 0.02% CR, broken across 176 countries. Google treats every promotional event as a tracked entity with full funnel + geo breakdown. Microsoft Store has no concept of a promotional event. A Reddit AMA Tuesday is just another ?cid= tag — no viewers, no event window, no action split, no geo.

Four moves.
Three of them are documentation.

The capability half-exists. ?cid= works. The web PDP has a URL. The deep-link scheme is implemented. What's missing: docs, telemetry, faster pipeline. Not new product.

Move 1 · ship the docs
Document ?cid= for free apps.
One docs page: URL format, where to find the dashboard, the latency, and the known web-PDP gap. Karthik learned ?cid= exists by accident.
Move 2 · fix the broken UI
Relabel Page views & Conversions columns.
Three tabs share one column labeled "Installs". The chart already changes between tabs — the table just needs to follow. Add web-PDP view capture too.
Move 3 · cut the latency
Near-real-time campaign events.
Apple = 24 hr. Google = real-time push. MS = 3–4 hr in Recent, 1–2 days in Daily. For a 3-hour Reddit AMA, that's no data.
Move 4 · fix the share flow
Two-link problem — surface the right link.
Share flow gives the web URL. The ms-windows-store:// deep link is undocumented. One dropdown — "Web link / Deep link" — ends a 5-year DX gap. Pure UI.

What ships when

P0 · THIS SPRINT
Ship Move 1 + Move 4.
Docs page for ?cid=. Share-flow dropdown for web vs deep link. Zero engineering.
P1 · 1Q
Fix the broken UI bugs.
Page views column header. Aggregation for "—" campaigns. Chart-total mismatch. Make the current surface work first.
P2 · 2Q
Ship Move 2.
Web PDP view telemetry on apps.microsoft.com. Same slicing as the client. Closes the dark-middle gap.
P3 · 3Q
Ship Move 3.
30-min batch → eventual real-time push. Closes the gap to Apple, then Google.

Measure → iterate → spend more →
a healthier Store.

Karthik's pain isn't measurement — it's discovery, one layer deep. Devs who can't measure off-Store campaigns stop investing. The Store loses both their installs and the external-traffic signal the algorithm needs.

Today's flywheel · spinning backwards

1 · Karthik can't measure
Web PDP dark. Latency too high. ?cid= undocumented.
2 · He stops investing
Cuts Reddit + X next week — not because they failed, but because he can't tell if they didn't.
3 · Less external signal
Store algorithm gets weaker external-traffic signal for his app.
4 · Catalog stagnates
Devs give up. "Just publishing here, marketing on iOS/Android."

If we ship the four moves · flywheel forward

1 · Karthik measures
Web PDP captured. ~30-min latency. ?cid= documented.
2 · He doubles down
Triples Reddit (high CR), iterates X messaging, doubles email. 3× installs next month.
3 · Algorithm gets stronger signal
More external installs → algorithm ranks his listing higher in organic search & browse.
4 · Catalog wakes up
Karthik tells five indie devs. r/microsoftdevs flips from "don't bother" to "actually measurable now".

A new Campaigns page
inside Partner Center.

Today the only campaign signal Karthik can build himself is a ?cid= tag. This prototype turns the single Campaign Conversion tab inside Acquisitions into a full surface — with a URL builder, channel rollup, and per-campaign trends.
Microsoft Partner Center
Home > Insights > Campaigns
Overview
Apps and games
Summary
Acquisitions
Add-on acquisitions
Usage
Health
Reviews
Highlights
Insights
Product page experiments
Campaigns
URL builder
XDP Analytics
Download reports
Downloads hub
Insights | Campaigns Apps and games
DownloadShareNotifications
Last 30 days ▾
Market: All ▾
Campaigns is in preview. Build trackable URLs, attribute installs by channel, and compare campaign performance.Send feedback
FocusDrop Timer
Overview — last 30 days
Active campaigns
View details
Campaign IDs that received any traffic in the last 7 days
5
Page views from campaigns
View details
Unique devices that viewed your PDP via a ?cid= URL
8,100
Installs from campaigns
View details
Installs attributed within the 24-hour campaign window
410
Avg. conversion
View details
Installs ÷ page views across all campaigns
5.1%
Campaign performance
Last updated 2 min ago · vs today's 3–4 hr delay
Campaign nameChannelInstalls
focusdrop-reddit-junReddit214
focusdrop-x-launchX / Twitter98
focusdrop-newsletterEmail62
focusdrop-blog-mayOwned blog22
spotifyweb-store-buttonPartner site14
‹ Previous1Next ›
Campaign performance trends from 2026-05-11 to 2026-06-10 — Installs
1317212529Jun5
More info
Reddit AMA is your highest-converting campaign at 6.9%. X launch drove almost as many page views but converted at 4.0% — messaging tweak opportunity.
Page view coverage by source
CampaignStore on WindowsMicrosoft Store webTotal captured
focusdrop-reddit-jun1,820 (58%)1,300 (42%)3,120
focusdrop-x-launch980 (40%)1,460 (60%)2,440
focusdrop-newsletter720 (61%)460 (39%)1,180
focusdrop-blog-may340 (41%)480 (59%)820
spotifyweb-store-button120 (22%)420 (78%)540
Audience splits roughly evenly across Store-on-Windows and web. Reddit and Email lean in-OS; X and Partner-site lean web. Both surfaces install fine — pick share link type per channel.
Geographical spread
Where campaign-attributed installs are coming from.
Country / regionInstallsShareTop campaign
United States20650%focusdrop-reddit-jun
United Kingdom8220%focusdrop-x-launch
Germany4912%focusdrop-newsletter
India379%focusdrop-reddit-jun
Other markets389%