Skip to main content

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

TipDetail
Combo for spend vs resultsUse vz.combo with bar= and line= to compare spend against conversions on shared axes.
Funnel needs ordered stagesPass funnel data top-to-bottom so the widest stage renders first.
Cohorts are heatmapsRetention matrices are naturally vz.heatmap data.
Geo uses name matchingMap data joins on country names by default. Use name_field= for other name columns.