Juniper Books · Analysis workspace

Holiday email analysis

Analysis overview

Campaign planning and data-source analyses, in one workspace.

Anomalies

Populate with Juniper Books data

Anomaly[] { id: string, found: string, title: string, summary: string, figures: { source: string, amount: string, detail: string }[], keepInMind: string }

Visualizations

Populate with Juniper Books data

weeklyPlacedOrder: [start: string (YYYY-MM-DD), dollars: string][] and gaWeeklyDollars: string[] (store-analytics revenue by week, ratios only) calendarForecast { definition: string, goalDollars: number, actualMayThroughOctober2026Cents: number, probabilities: { hits: number, draws: number, probability: number, totalCents: { p5: number, p25: number, p50: number, p75: number, p95: number, mean: number } }, coefficients: { id: string, label: string, block: string, priorMeanLog: number, priorMeanFactor: number, priorSd: number, posteriorMeanLog: number, posteriorMeanFactor: number, posteriorSd: number }[], weeks: { start: string, end: string, days: number, regime: string, text: string, scenarioCents: number, posterior: { p5: number, p25: number, p50: number, p75: number, p95: number, mean: number } }[] } placedOrderDailyCents: number[] (integer cents, one calendar day, no gaps) plus placedOrderStart: string (YYYY-MM-DD) and placedOrderEnd: string (YYYY-MM-DD)

Click lift

Populate with Juniper Books data

ListrakMessage[] { list: string, messageType: string (broadcast | triggered), channel: string (Email | SMS), campaign: string, name: string, sendDate: string, spanStart: string (YYYY-MM-DD), spanEnd: string (YYYY-MM-DD), revenueCents: number, sends: number, opens: number, clicks: number, uniqueClicks: number, conversions: number, aovCents: number }

Send plan

Populate with Juniper Books data

PlannedSend[] { date: string (YYYY-MM-DD), name: string, channel: "email", recipients: number, approximate: boolean, low: number | null, high: number | null, status: "sent" | "projected", note: string } ListrakMessage[] { list: string, messageType: string (broadcast | triggered), channel: string (Email | SMS), campaign: string, name: string, sendDate: string, spanStart: string (YYYY-MM-DD), spanEnd: string (YYYY-MM-DD), revenueCents: number, sends: number, opens: number, clicks: number, uniqueClicks: number, conversions: number, aovCents: number } gaDaily: [purchases: number, sessions: number, newUsers: number][] plus gaDailyStart: string (YYYY-MM-DD) and gaDailyEnd: string (YYYY-MM-DD) novemberPriorYearFlowSends: number, decemberPriorYearFlowSends: number

Campaign calendar

0 entries across September–December

Open calendar →

Campaign calendar

Populate with Juniper Books data

Campaign[] { id: string, month: string, date: string (YYYY-MM-DD), name: string, channel: string, audience: string, audience_status: string, audience_evidence: string, personalization: string, offer: string, offer_status: string, offer_evidence: string, flags: string[], recipient_count: number | null, notes: string, source: string, esp?: string }

Report

Populate with Juniper Books data

ListrakMessage[] { list: string, messageType: string (broadcast | triggered), channel: string (Email | SMS), campaign: string, name: string, sendDate: string, spanStart: string (YYYY-MM-DD), spanEnd: string (YYYY-MM-DD), revenueCents: number, sends: number, opens: number, clicks: number, uniqueClicks: number, conversions: number, aovCents: number } gaDaily: [purchases: number, sessions: number, newUsers: number][] plus gaDailyStart: string (YYYY-MM-DD) and gaDailyEnd: string (YYYY-MM-DD) calendarForecast { definition: string, goalDollars: number, actualMayThroughOctober2026Cents: number, probabilities: { hits: number, draws: number, probability: number, totalCents: { p5: number, p25: number, p50: number, p75: number, p95: number, mean: number } }, coefficients: { id: string, label: string, block: string, priorMeanLog: number, priorMeanFactor: number, priorSd: number, posteriorMeanLog: number, posteriorMeanFactor: number, posteriorSd: number }[], weeks: { start: string, end: string, days: number, regime: string, text: string, scenarioCents: number, posterior: { p5: number, p25: number, p50: number, p75: number, p95: number, mean: number } }[] }