Marketing Analytics Dashboards with Vizly
Marketing teams want one view that shows whether campaigns are working and where budget should go next. Vizly covers the full set of marketing visuals: campaign trend lines, funnel stages, channel mix, cohort retention, and geo reach.
Campaign performance over time
Track spend, impressions, and conversions for a campaign across its lifetime.
import vizly as vz
vz.set_theme("corporate")
campaign = [
{"week": "W1", "spend": 1200, "impressions": 42000, "conversions": 310},
{"week": "W2", "spend": 1500, "impressions": 51000, "conversions": 380},
{"week": "W3", "spend": 1700, "impressions": 48000, "conversions": 360},
{"week": "W4", "spend": 1900, "impressions": 62000, "conversions": 470},
]
chart = vz.combo(
campaign,
x="week",
bar="spend",
line="conversions",
title="Campaign spend vs conversions",
)
chart.render("campaign.html")
Funnel stages
Show where prospects drop off through the funnel. Vizly's funnel chart maps straight to stage data.
funnel = [
{"stage": "Visits", "count": 12000},
{"stage": "Signups", "count": 3400},
{"stage": "Activated", "count": 1800},
{"stage": "Paid", "count": 640},
]
chart = vz.funnel(funnel, names="stage", values="count", title="Signup funnel")
Channel mix
Break down revenue by acquisition channel with a donut.
channels = [
{"name": "Organic", "value": 3400},
{"name": "Paid", "value": 2100},
{"name": "Social", "value": 1500},
{"name": "Referral", "value": 980},
{"name": "Email", "value": 720},
]
chart = vz.donut(channels, names="name", values="value", title="Revenue by channel")
Cohort retention heatmap
Plot weekly retention by cohort as a heatmap to spot which cohorts stick.
import pandas as pd
cohorts = [
{"cohort": "W1", "week": "W+1", "retention": 62},
{"cohort": "W1", "week": "W+2", "retention": 45},
{"cohort": "W1", "week": "W+3", "retention": 33},
{"cohort": "W2", "week": "W+1", "retention": 58},
{"cohort": "W2", "week": "W+2", "retention": 41},
{"cohort": "W3", "week": "W+1", "retention": 55},
]
df = pd.DataFrame(cohorts)
chart = vz.heatmap(df, x="cohort", y="week", values="retention", title="Cohort retention %")
Geographic campaign reach
Show campaign performance by region on a world map.
regions = [
{"name": "United States", "value": 92},
{"name": "Canada", "value": 54},
{"name": "United Kingdom", "value": 57},
{"name": "Germany", "value": 48},
{"name": "Japan", "value": 66},
]
chart = vz.map(regions, title="Campaign reach")
Full marketing dashboard
Compose the marketing view into one page with a single ECharts load.
import pandas as pd
import vizly as vz
vz.set_theme("corporate")
chart = vz.page(
charts=[
vz.combo(campaign, x="week", bar="spend", line="conversions", title="Campaign performance"),
vz.funnel(funnel, names="stage", values="count", title="Signup funnel"),
vz.donut(channels, names="name", values="value", title="Revenue by channel"),
vz.heatmap(df, x="cohort", y="week", values="retention", title="Cohort retention %"),
],
title="Marketing dashboard",
)
chart.render("marketing.html")
Tips
| Tip | Detail |
|---|---|
| Combo for spend vs results | Use vz.combo with bar= and line= to compare spend against conversions on shared axes. |
| Funnel needs ordered stages | Pass funnel data top-to-bottom so the widest stage renders first. |
| Cohorts are heatmaps | Retention matrices are naturally vz.heatmap data. |
| Geo uses name matching | Map data joins on country names by default. Use name_field= for other name columns. |