7 Data Story Templates for Common Business Datasets
Reusable narrative structures for trends, comparisons, anomalies, distributions, correlations, rankings, and forecasts. Each template with a DataStoryBot API example.
7 Data Story Templates for Common Business Datasets
Every data story follows a structure. Not a formula — structures leave room for the data to surprise you. But there are recurring narrative shapes that fit most business datasets, and knowing them saves you from staring at a spreadsheet wondering where to start.
This article presents seven data story templates, each built around a different analytical pattern. For each one, you'll see the structure, when to use it, and a working DataStoryBot API example that generates the story automatically.
Why Templates Matter
A template is not a fill-in-the-blank exercise. It's a starting lens — a way to frame the question before the analysis runs. When you tell DataStoryBot "look for trends" versus "compare these groups," you get fundamentally different narratives from the same dataset. The template determines the lens.
Most business datasets contain multiple stories. A quarterly sales CSV has a trend story, a comparison story (region vs. region), possibly an anomaly story (that one week where orders dropped 40%), and a distribution story (how order values are spread). The template helps you pull out the right one for your audience.
Template 1: The Trend Story
Structure: Establish baseline → show directional change → quantify the shift → explain what's driving it → state the implication.
When to use it: Any time-series data where the direction of change matters more than individual values. Revenue over time, user growth, error rates, page views.
Steering prompt:
steering = (
"Focus on trends and directional changes over time. "
"Identify the dominant trend, any inflection points where "
"the direction changed, and quantify the rate of change. "
"Compare recent performance to historical baselines."
)
Example output structure:
Monthly active users grew 23% quarter-over-quarter, accelerating from the 14% growth rate in Q3. The inflection point was the week of January 12, when the new onboarding flow launched. Before that date, weekly signups averaged 340. After: 520. The growth is concentrated in the free tier — paid conversions remain flat at 4.2%.
The trend template works because it answers the question every stakeholder asks first: "Is it going up or down?"
Template 2: The Comparison Story
Structure: Define the groups → establish the metric → show the gap → explain why it matters → suggest action.
When to use it: A/B test results, regional performance, product line comparisons, before/after analyses. Any time you're comparing two or more segments.
Steering prompt:
steering = (
"Compare performance across groups or segments. "
"Identify which groups are outperforming or underperforming, "
"quantify the gaps, and look for factors that explain the differences."
)
Example output structure:
The West region outperforms East by 34% in revenue per customer ($127 vs. $95), despite having 18% fewer total customers. The gap is driven entirely by average order value — West customers buy 2.1 items per order vs. 1.4 in the East. Order frequency is nearly identical across regions.
Comparison stories are powerful because they create contrast. A number in isolation means nothing. A number next to another number means everything.
Template 3: The Anomaly Story
Structure: State the anomaly → quantify its deviation → provide the baseline context → assess the impact → suggest investigation paths.
When to use it: When something unexpected happened and you need to explain it. Spikes, drops, outliers, sudden shifts.
Steering prompt:
steering = (
"Focus on anomaly detection. Identify outlier values, "
"unexpected spikes or drops, and any rows or time periods "
"that deviate significantly from normal patterns. "
"Quantify deviations using z-scores or IQR where appropriate."
)
Example output structure:
Error rates spiked 12x on March 15, from a baseline of 2.3 errors/hour to 28 errors/hour. The spike was isolated to Server 7 — no other servers were affected. The timing correlates with a deployment at 13:47 UTC, 13 minutes before the first elevated error reading.
The anomaly template works for incident reports, data quality reviews, and any "what happened?" analysis. For a deeper dive into this pattern, see anomaly detection in CSV data.
Template 4: The Distribution Story
Structure: Describe the shape → identify the center and spread → highlight the tails → explain what the shape means for the business.
When to use it: When the spread of values matters as much as the average. Pricing analysis, response time distributions, customer lifetime value, survey scores.
Steering prompt:
steering = (
"Analyze the distribution of key numeric columns. "
"Describe the shape (normal, skewed, bimodal, long-tail), "
"identify the median, IQR, and notable percentiles. "
"Highlight any clusters or gaps in the distribution."
)
Example output structure:
Order values follow a right-skewed distribution with a long tail. The median order is $42, but the mean is $87 — pulled up by a small group of high-value purchases. The top 5% of orders (above $340) account for 38% of total revenue. There's a clear cluster at the $29 price point, which corresponds to the most popular subscription tier.
Distribution stories reveal what averages hide. "Average order value is $87" sounds healthy. "50% of orders are under $42" tells a different story.
Template 5: The Correlation Story
Structure: Identify the relationship → quantify the strength → show causation caveats → explain the business implication.
When to use it: When you want to understand which variables move together. Marketing spend vs. signups, feature usage vs. retention, support tickets vs. churn.
Steering prompt:
steering = (
"Find correlations between variables. Identify which "
"columns move together, quantify the correlation strength, "
"and note any surprising non-correlations. "
"Be explicit about correlation vs. causation."
)
Example output structure:
Support ticket volume correlates strongly with churn (r=0.73), but the relationship is not linear. Customers who file 1-2 tickets actually churn less than those who file zero — suggesting that engaged customers who get help stay longer. The danger zone is 4+ tickets in a 30-day window, where churn probability jumps from 8% to 31%.
Correlation stories are dangerous because people conflate correlation with causation. The best correlation narratives address this explicitly — which DataStoryBot does when steered correctly. See also correlation discovery in your data.
Template 6: The Ranking Story
Structure: Present the ranking → highlight the top and bottom → quantify the gaps between positions → identify movers (if time-series).
When to use it: Leaderboards, product performance rankings, customer segmentation by value, channel effectiveness comparisons.
Steering prompt:
steering = (
"Rank entities by the primary performance metric. "
"Highlight the top performers and underperformers, "
"quantify the gap between #1 and the median, "
"and identify any ranking changes over time if temporal data is available."
)
Example output structure:
Product SKU-2847 leads revenue with $234K, 3.2x the median product. The top 10 SKUs (out of 847) generate 44% of total revenue. At the bottom, 312 SKUs generated less than $500 each — collectively accounting for just 2.1% of revenue. The biggest mover: SKU-1193 jumped from #45 to #8 after its price reduction on February 1.
Ranking stories work for executive audiences because they answer "what's winning?" and "what should we cut?" in the same breath.
Template 7: The Forecast Story
Structure: State the projection → show the confidence interval → explain the assumptions → identify what could change it.
When to use it: Budget planning, capacity forecasting, growth projections. Any time someone asks "where are we headed?"
Steering prompt:
steering = (
"Project forward based on historical patterns. "
"Identify the trend and growth rate, estimate where "
"key metrics will be in the next period, and flag "
"the confidence level and assumptions behind the projection."
)
Example output structure:
At the current growth rate of 8.3% month-over-month, monthly active users will reach 52,000 by June. This assumes the growth rate holds — which it has for the past 4 months, but seasonal patterns suggest a typical 30-40% deceleration in summer. A conservative estimate puts June MAU at 41,000-52,000. The projection does not account for planned marketing campaigns or product launches.
Forecast stories must be honest about uncertainty. DataStoryBot's narratives include confidence caveats because Code Interpreter computes confidence intervals alongside projections — not just a point estimate.
Using Templates with the DataStoryBot API
The API flow is the same for all seven templates. The template lives in the steering prompt:
import requests
BASE_URL = "https://datastory.bot/api"
# Upload
with open("quarterly_sales.csv", "rb") as f:
upload = requests.post(f"{BASE_URL}/upload", files={"file": f})
container_id = upload.json()["containerId"]
# Analyze with a template-specific steering prompt
stories = requests.post(f"{BASE_URL}/analyze", json={
"containerId": container_id,
"steeringPrompt": (
"Compare performance across regions. Identify which "
"regions outperform or underperform on revenue per customer, "
"quantify the gaps, and look for explanatory factors."
)
})
# Pick a story and refine it
angles = stories.json()
report = requests.post(f"{BASE_URL}/refine", json={
"containerId": container_id,
"selectedStoryTitle": angles[0]["title"]
})
print(report.json()["narrative"])
You can also chain templates. Upload once, then run multiple analyses with different steering prompts to extract different story types from the same dataset. The container lives 20 minutes — plenty of time for seven different lenses on the same data.
Combining Templates
The most compelling data stories combine two or more templates. A trend story that also highlights an anomaly. A comparison story that includes a ranking. A distribution story that reveals a correlation.
DataStoryBot's general analysis (no specific steering) often produces these hybrid stories naturally, because the Code Interpreter identifies the most interesting patterns regardless of category. But when you want a specific narrative shape — for a board presentation, an incident report, or a quarterly review — the steering prompt gives you control.
Start with the template that matches your audience's primary question, then layer in additional perspectives as follow-up analyses.
What to Read Next
For the storytelling fundamentals behind these templates, read what is data storytelling and how to write a data story that people actually read.
To see templates applied to specific anomaly detection use cases, see anomaly detection in CSV data.
Or try it yourself — upload a dataset to the DataStoryBot playground and experiment with different steering prompts to see how the narrative shape changes.
Ready to find your data story?
Upload a CSV and DataStoryBot will uncover the narrative in seconds.
Try DataStoryBot →