← All guides

From spreadsheet to a clear finding

The denominator changes the story.

An HTML report turns spreadsheet data into a readable explanation: the finding, the numbers behind it, and the limits of what they tell you.

Make this with my agent

Bring your notes. Review a draft before sharing.

Explore the method
  1. 01
    Count is not rate.

    Signups rose 60%, while conversion fell from 10% to 8%.

  2. 02
    Show the denominator.

    Eligible visits doubled. Put the count and rate side by side.

  3. 03
    Keep the limits visible.

    The totals do not explain why. Period coverage and data maturity need checking.

THE REAL HTML · FICTIONAL EXAMPLEView on its own

A worked example, not a customer result. September 2026 dates are sample facts.

Now make it about your work

Your data. Your agent. Your explanation.

Bring a checked extract and the question your reader needs answered. Keep the workbook as your calculation source.

Start with three things

  1. An authorized extract, without unnecessary personal data.
  2. Metric definitions, units, periods, and known gaps.
  3. The reader’s question and a comparable baseline.
Make this with my agent

You review the facts and access. Nothing is published without your approval.

The method behind the reportFrom cells to findings you can trace

How do I turn spreadsheet data into a useful HTML report?

Supply a checked data extract with column definitions, units, and the reporting period. Ask an agent to verify calculations before explaining the findings. Build a static HTML report that puts conclusions beside supporting numbers and makes denominators, missing data, and limitations visible.

What to give your agent

  • A permitted spreadsheet or data extract, stripped of unnecessary personal or confidential columns.
  • Definitions for every measure: units, currency, timezone, numerator, denominator, and whether values are totals or rates.
  • The comparison period or baseline, plus any changes in collection methods, coverage, or eligibility.
  • The audience's question and known data-quality issues, including blanks, duplicates, exclusions, and partial periods.
  • For campaign reports: exact conversion event, spend currency, timezone, attribution model and window, date basis, and export time. Note whether recent results may still change; use authorized aggregate data.
  1. Name the question before making charts

    Tell the agent what readers need to understand: whether conversion changed, where work is accumulating, or which category explains a cost increase. Avoid requesting a dashboard of everything. A focused question helps determine which comparisons are relevant and which attractive charts would only add noise.

  2. Check the meaning of the numbers

    Have the agent show calculations and identify missing definitions before writing conclusions. Confirm whether a blank means zero or unknown. Check denominators, date coverage, and duplicate rows. A mathematically correct percentage can still answer the wrong question if the underlying populations differ.

  3. For campaigns, explain what the measurement counts

    Keep platform-attributed conversions separate from verified customers or revenue unless your sources establish the link. Compare matching definitions and attribution settings; disclose differences you cannot reconcile. Recent results may be provisional because conversions and processing can arrive later. Fictional example: an export contains $1,200 spend and 40 attributed trial signups, with no paid-customer or revenue data and possible later conversions. The calculation is $1,200 / 40 = $30 per attributed signup—not $30 customer acquisition cost or proven return. Do not add overlapping platform totals and call them unique customers without a verified deduplication method.

  4. Pair each finding with its evidence

    Use a plain-language heading, the supporting values, and a short explanation of the comparison. Distinguish percentage-point change from relative percentage change. Do not label correlation as causation. If several explanations are possible, state what the data shows and what would require further investigation.

  5. Create the reading view and verify it

    Ask for static HTML with labeled charts or tables, units, the source date, and a method note. Use your saved style if available, with color highlighting the finding rather than decorating every category. Recalculate key figures independently and inspect mobile readability before approving publication.

Keep creating and revising in the agent you already use. Start with a saved artifact style and learn how to update HTML without changing its link.

Use the full promptReady for your agent and your notes

Use the conversation where you already did the work. Only attach material you are allowed to share.

Get the ready-to-copy creation request →
Using my supplied spreadsheet data and definitions, create a report answering [audience question] for [period]. First check units, denominators, missing values, duplicate records, and comparability with the baseline. Show the key calculations for my review. Do not invent missing values or treat blanks as zero without evidence. For campaign data, preserve the exact conversion event, currency, attribution model and window, date basis, timezone, and export time. Ask for missing settings that affect the comparison. Separate platform-attributed results from deduplicated customers, booked revenue, and measured incremental impact. Do not sum overlapping platform counts as unique people. Mark provisional periods and do not invent lag adjustments, return, or causal lift. Lead with a small number of findings, each paired with supporting values and an appropriate labeled chart or table. Distinguish percentage points from relative changes and observations from causal explanations. Include the source date, exclusions, and a concise method note. Produce static HTML in my saved artifact style if available, without scripts, forms, or implied live refresh. Show me the draft and ask me to verify the figures, sensitive data, and recipient access. Do not publish or change access without separate explicit approval. For website analytics, preserve timezone, metric and key-event definitions, complete comparison periods, filters and export time. Label processing delays and incomplete periods. Do not infer customers from events or claim a trend from unequal or unreconciled periods. For budget variance communication, use approved figures on matching period, currency and accounting basis. State the sign convention and verify actual-minus-budget and its denominator. Keep supplied drivers separate from an unreconciled remainder; do not invent causes, recommend accounting treatment or provide financial advice.
Check before you shareAccuracy, clarity, and permission
  • Have key totals, rates, and differences been independently recalculated from the supplied data?
  • Do charts and tables display the correct units, periods, denominators, and meaningful axis labels?
  • Are partial periods, excluded rows, missing values, and differences in coverage disclosed?
  • Does the published view omit personal data and avoid promising live updates or unsupported causal conclusions?
  • For campaigns, are attribution settings and data maturity visible, with attributed events separate from unique customers and causal impact?

When HTML fits

Use an HTML report when people need to understand findings without navigating cells, tabs, and formulas. Keep the workbook or approved extract as the calculation source and make the report a dated reading view.

When another format fits better

Keep a spreadsheet for editable models, input scenarios, and recalculation. This static workflow does not supply interactive filters, live data connections, or a replacement for the underlying analysis.

What we started withThe same facts, as an email

Fictional project email

Two-period signup review — more signups, lower conversion

Team,

The fictional extract has 1,000 eligible visits and 100 completed signups in Period A, versus 2,000 eligible visits and 160 signups in Period B. The definitions match across periods. The original headline, “Signups increased 60%,” is arithmetically correct: 60 more signups divided by the original 100. Eligible visits increased by 1,000, or 100%.

The signup rate fell from 100 / 1,000 = 10% to 160 / 2,000 = 8%. That is a decrease of 2 percentage points, or a 20% relative decline from A’s 10% rate. The larger visit count coincided with more total signups, while a smaller share converted. This does not establish why the rate changed, statistical significance, or better business performance.

Calendar dates, durations, timezone, export time and finality status are not supplied. Equal duration and data maturity are unverified. The exact eligibility rules, exclusions, missing values, duplicate handling and segment mix are not documented. These are visits and signup events, not established unique people, paid customers or revenue. No experiment, attribution model, spend or customer reconciliation is supplied.

Suggested investigation, not an approved intervention: confirm period coverage and measurement quality, then obtain comparable segment data. No cause, owner or deadline has been established. This fictional report was prepared September 20, 2026, not exported on that date. Keep the workbook as the calculation source; the report is a static reading view without live refresh.

Inspect the HTMLOne self-contained file

The example is sanitized and isolated from this site. No scripts, forms, or live data.

<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>More signups. A smaller share converted. · Spreadsheet report</title><style>
*{box-sizing:border-box}body{margin:0;background:#f6f2e9;color:#252a28;font:16px/1.55 system-ui,sans-serif}main{max-width:1080px;margin:auto;padding:clamp(22px,5vw,56px)}h1,h2,h3,p{margin:0}h1{font:500 clamp(36px,6vw,68px)/1.04 Georgia,serif;letter-spacing:-.04em;max-width:760px;margin:20px 0}h2{font:500 clamp(26px,3.8vw,36px)/1.16 Georgia,serif;letter-spacing:-.02em}h3{font-size:16px}p{margin-top:12px}.eyebrow{font-size:11px;font-weight:750;letter-spacing:.12em;text-transform:uppercase}.muted{color:#555c57}.intro{font-size:18px;max-width:650px}.kicker{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;border-bottom:1px solid #b9b9ab;padding-bottom:16px}.paired{display:grid;grid-template-columns:1fr 1fr;gap:0;margin-top:30px;border:1px solid #b9b9ab}.panel{padding:24px;min-width:0}.panel+.panel{border-left:1px solid #b9b9ab}.delta{font:500 clamp(44px,7vw,72px)/1 Georgia,serif;letter-spacing:-.04em;margin:12px 0}.delta small{font:600 14px/1.4 system-ui,sans-serif;letter-spacing:0;display:block;margin-top:10px}.volume{background:#e6ebe1}.rate{background:#efe2d4}.row{margin-top:18px}.bar-label{display:flex;justify-content:space-between;gap:10px;font-size:13px;margin-bottom:6px}.track{height:12px;background:#ffffffa8}.bar{height:12px;background:#355342}.rate .bar{background:#8b4930}.a-count{width:50%}.b-count{width:80%}.a-rate{width:100%}.b-rate{width:80%}.scale{font-size:12px;color:#555c57}.finding{padding:20px 0;border-bottom:1px solid #b9b9ab;font-size:18px}.section{margin-top:34px}.section-head{display:flex;gap:16px;align-items:baseline;margin-bottom:18px}.number{color:#855037;font-size:12px;font-weight:750}.table-wrap{margin-top:20px}table{border-collapse:collapse;width:100%;font-size:14px;font-variant-numeric:tabular-nums}caption{text-align:left;font-size:12px;color:#555c57;margin-bottom:10px}th,td{text-align:right;padding:12px 7px;border-bottom:1px solid #cccbbd}th:first-child,td:first-child{text-align:left;padding-left:0}thead th{font-size:11px;font-weight:650}tbody th{font-weight:650}.formulas{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:20px}.formulas p{font-size:14px}.caution{border-left:3px solid #8b4930;padding-left:20px;margin-top:32px}.limits{display:grid;grid-template-columns:1fr 1fr;gap:20px 26px;margin-top:20px}.limits p{font-size:14px;margin-top:6px}.next{background:#252f29;color:#fff;padding:24px;margin-top:32px}.next p{color:#e0e7df}.next h2{margin-top:10px}footer{border-top:1px solid #b9b9ab;padding-top:20px;margin-top:32px;font-size:12px;color:#555c57}footer p{margin-top:6px}@media(max-width:560px){.paired,.formulas,.limits{grid-template-columns:1fr}.panel+.panel{border-left:0;border-top:1px solid #b9b9ab}.panel{padding:22px}.delta{font-size:52px}.section-head{gap:10px}th,td{padding:10px 4px}table{font-size:13px}.next{padding:22px}}@media print{body{background:white}.panel,.caution,.next,table{break-inside:avoid}main{max-width:none;padding:24px}.next{background:#f0f1ed;color:#252a28}.next p{color:#252a28}}
</style></head><body><main>
<header><div class="kicker"><span class="eyebrow">The denominator report</span><span class="eyebrow">Fictional data · Static snapshot</span></div><h1>More signups.<br>A smaller share converted.</h1><p class="intro">Both statements are true. The count grew, but the conversion rate fell in the supplied two-period dataset.</p></header>
<section class="paired" aria-label="Count and rate comparison">
<article class="panel volume"><p class="eyebrow">Signup volume · A → B</p><p class="delta">+60%<small>60 more completed signups</small></p><div class="row"><div class="bar-label"><span>Period A</span><strong>100 signups</strong></div><div class="track" aria-hidden="true"><div class="bar a-count"></div></div></div><div class="row"><div class="bar-label"><span>Period B</span><strong>160 signups</strong></div><div class="track" aria-hidden="true"><div class="bar b-count"></div></div></div><p class="scale">Bar scale: 0–200 completed signups</p></article>
<article class="panel rate"><p class="eyebrow">Signup conversion · A → B</p><p class="delta">10% → 8%<small>Down 2 percentage points</small></p><div class="row"><div class="bar-label"><span>Period A</span><strong>10%</strong></div><div class="track" aria-hidden="true"><div class="bar a-rate"></div></div></div><div class="row"><div class="bar-label"><span>Period B</span><strong>8%</strong></div><div class="track" aria-hidden="true"><div class="bar b-rate"></div></div></div><p class="scale">Bar scale: 0–10% of eligible visits</p></article>
</section>
<p class="finding">Eligible visits doubled, from <strong>1,000 to 2,000</strong>. More signups does not, by itself, mean better conversion.</p>
<section class="section"><div class="section-head"><span class="number">01 /</span><h2>Keep the denominator in view.</h2></div><div class="table-wrap"><p class="scale" id="data-note">Supplied aggregate counts; rates calculated from those counts.</p><table aria-describedby="data-note"><thead><tr><th>Period</th><th>Eligible<br>visits</th><th>Completed<br>signups</th><th>Signup<br>rate</th></tr></thead><tbody><tr><th>A</th><td>1,000</td><td>100</td><td>10%</td></tr><tr><th>B</th><td>2,000</td><td>160</td><td>8%</td></tr></tbody></table></div><div class="formulas"><div><h3>Count change</h3><p>(160 − 100) / 100 = <strong>+60%</strong><br>The change is relative to A’s 100 signups.</p></div><div><h3>Rate change</h3><p>100 / 1,000 = 10%; 160 / 2,000 = 8%.<br>8% − 10% = <strong>−2 percentage points</strong>.<br>(8% − 10%) / 10% = <strong>−20%</strong> relative change.</p></div></div></section>
<aside class="caution"><h2>The arithmetic is clear. The cause isn’t.</h2><p>The larger visit count coincided with more signups, while a smaller share converted. These totals alone do not establish why, statistical significance, or better business performance.</p></aside>
<section class="section"><div class="section-head"><span class="number">02 /</span><h2>What the extract doesn’t tell us.</h2></div><div class="limits"><div><h3>Period coverage</h3><p>Calendar dates, durations and timezone are not supplied. Equal duration is unverified; this is not an established time trend.</p></div><div><h3>Data maturity</h3><p>Export time and processing/finality status are not supplied. Neither period is confirmed final.</p></div><div><h3>Exclusions &amp; definitions</h3><p>The definitions match across A and B. Exact eligibility rules, exclusions, missing values and duplicate handling are not documented.</p></div><div><h3>Unit of measurement</h3><p>Visits and signup events—not established unique people, paid customers or revenue. Segment mix and causal evidence are absent.</p></div></div></section>
<section class="next"><p class="eyebrow">Suggested investigation · Not an approved intervention</p><h2>Check comparability. Then ask what changed.</h2><p>Confirm period coverage and measurement quality. Obtain comparable segment data to investigate the rate difference. No cause, owner or deadline has been established.</p></section>
<footer><p>Source: the guide’s fictional two-period signup dataset. Preparation date: September 20, 2026; data export date unknown.</p><p>Fictional worked example by share/artifacts. Figures and preparation date are invented for demonstration. Keep the workbook as the calculation source. No live data or automatic updates.</p></footer>
</main></body></html>
The original worked calculationThe same dataset, step by step

More signups, but a lower conversion rate

An illustrative two-period dataset uses the same definition of eligible visits and completed signups in both periods. The figures below are invented to demonstrate the calculation.

The original notes

Period A: 1,000 eligible visits and 100 signups. Period B: 2,000 eligible visits and 160 signups. A headline says 'Signups increased 60%.'

Volume

Signups rose from 100 to 160: an increase of 60 signups, or 60%.

Rate

Signup conversion fell from 100 / 1,000 = 10% to 160 / 2,000 = 8%.

Difference

The rate decreased by 2 percentage points, which is a 20% relative decline from the original 10% rate.

Interpretation

The larger visit count coincided with more total signups, while a smaller share of eligible visits converted.

Open question

The totals alone do not establish why the rate changed. Comparable segment data would help investigate it.

Show the denominator alongside the headline. Volume and rate can move in different directions without either number being wrong.

Questions, adaptations & sourcesGo deeper when you need to

Can I use this for a marketing campaign report?

Yes. Supply authorized campaign exports and their measurement definitions. Ask your agent to explain spend, outcomes, comparisons, and limitations for the intended reader. Keep analytics tools as the measurement source and use the HTML page as a dated explanation—not a live dashboard or campaign-control tool.

Should I publish the whole spreadsheet as a table?

Only if readers need every row and the data is safe to share. A focused report usually benefits from selected evidence and an explanation. Keep detailed data separately when it is large, sensitive, or intended for further analysis.

What if the agent finds a surprising trend?

Check the calculation and data coverage first. Then test whether a changed denominator, segment mix, or incomplete period could explain it. Present a verified observation as an observation; do not turn an interesting pattern into an unsupported explanation.

Will the HTML report update when my spreadsheet changes?

Not automatically in this static workflow. Give the agent the new approved data, review the revised report, and update the published page. Display the data's effective date so recipients know which snapshot they are reading.

A website analytics report

Compare complete periods with matching definitions. Identify the export time, timezone, filters and processing status. A key-event count is not automatically a count of people, new customers or revenue.

Fictional inputs: Fictional export: the last complete week has 1,000 sessions and 40 key events. The current week has 300 sessions and 8 key events, but includes only two days and is still processing. The timezone and event definition have not been supplied; no customer reconciliation exists.

A clearer result: Report the completed week's counts with the missing definitions flagged. Show the current period as a partial provisional snapshot, not a decline. Do not describe 40 events as 40 customers or compare the two unequal periods as a trend.

A budget variance explanation

Explain approved arithmetic and supplied drivers, not accounting treatment or financial advice. Define whether a positive number means actual minus budget and keep expense overruns distinct from favorable revenue movements.

Fictional inputs: Fictional approved September expense figures in USD on the same stated basis: budget $10,000, actual $11,200. A supplied supplier-cost explanation accounts for $800 of the difference. The remaining difference has not been reconciled. No cause or accounting adjustment is supplied for it.

A clearer result: Actual minus budget is +$1,200, or 12% above the expense budget. The supplied driver explains $800; $400 remains unresolved. Label it an expense overrun under this sign convention. Do not invent inflation, timing effects or an adjustment to make the explanation balance.

Further reading