← Blog
Industry·1 June 2026·5 min read

A marketing campaign calendar with a cumulative-spend S-curve

A grid of coloured cells tells you what's on in July. It doesn't tell you whether you've front-loaded half the budget into a launch that isn't ready, or left three-quarters of the spend stacked into the final fortnight. Here's how to lay a campaign out as a channel-by-channel Gantt and drop a cumulative-spend curve underneath — so pacing reads off one page.

Most marketing calendars are spreadsheets. A tab per quarter, a column per week, a fill colour per channel. They're fine for "is anything happening on the 14th" — and useless for the question that actually decides whether a campaign lands: are we spending in the right shape? A spreadsheet calendar has no idea what a pound costs or when it lands. The board tools everyone's migrated to are prettier, but they're the same story — cards on a timeline with no notion of a time-phased budget curve.

The thing a planner would draw — a Gantt with the money accumulating underneath — is exactly what neither of those can produce. So let's build one, from a spreadsheet you already have, in the browser.

Q3 campaign calendar · channel swimlanes · built in Sketchedule JulAugSepOctNovDec Activity % ▸ Paid media Search & social ads 70 Retargeting burst 20 ▸ Content Hero article + video 40 Email nurture series 15 ▸ Events Trade-show stand 10 ▸ PR Press & analyst push 5 Launch · 1 Sep creative freeze · mid-Jul
Fig 1. The campaign as a Gantt in Sketchedule: each channel — Paid, Content, Events, PR — is a swimlane band with its activities indented beneath and a grey summary bar spanning them. The amber star is the launch milestone; the dashed red line is a creative-freeze gate. This is the calendar the spend curve sits under.

Why a spreadsheet can't show pacing

The problem isn't that spreadsheets are unsophisticated — it's that a calendar grid has no time axis, only cells. Two campaigns that spend the same £400k over the same quarter look identical in a grid of coloured weeks, even when one dribbles evenly and the other detonates 60% of it in the last three weeks. Pacing is a shape, and a shape needs a real timescale and a running total. A cell can't carry either.

Board-style work-OS tools solve the wrong half. They give you the timeline back — cards slide along dates, dependencies draw arrows — but there's still nowhere for money to live over time. You can tag a card with a budget field; you cannot plot the cumulative spend those cards imply. The curve simply has nowhere to go. That gap is the whole reason this article exists.

The one picture a marketing lead actually wants: the campaign bars on top, the cumulative-spend curve directly underneath on the same months. Front-loaded, back-loaded or steady reads in half a second — no mental arithmetic across a grid of weekly cells.

Build it from your spreadsheet in six steps

You almost certainly have the raw material already: a plan with a channel, a start, an end and a budget per line. That's all Sketchedule needs. Everything below happens in the browser — nothing is uploaded.

  1. Import or paste the plan. Bring your campaign in from Excel or CSV — or literally copy the rows and paste them. Map the columns once: activity name, channel, start, finish, budget. Sketchedule turns each row into a dated activity on a timescale.
  2. Group into swimlanes per channel. Set the channel column as the outline level and each channel — Paid, Content, Events, PR — becomes a swimlane band with its activities indented beneath and an automatic summary bar spanning them. Shade each lane so a channel reads at a glance (Fig 1).
  3. Drop in the milestones. Add the moments that matter as milestones — a launch star, a creative-freeze gate (a curtain across the frozen window), a go-live, a wrap. Conditional symbology lets a milestone change shape or colour off a status column, so "at risk" stands out on its own.
  4. Add a spend ValueSet. Point a ValueSet at the budget column. It spreads each activity's spend across that activity's duration — so a £150k paid burst running six weeks lands as spend-per-week across those six weeks, not a lump on day one.
  5. Plot the cumulative S-curve. Add a Datagraph that accumulates the ValueSet into a running total and Sketchedule draws the S-curve under the Gantt, on the same month axis. Its slope is the pacing: gentle where spend is light, steep where it stacks up (Fig 2).
  6. Present and share. Ship it as a landscape PDF or PowerPoint, drop the picture into a deck as PNG/SVG, or send a read-only link that rebuilds the whole thing — Gantt, milestones and curve — in the recipient's browser. What prints matches what's on screen.
Cumulative campaign spend · the pacing curve £0£100k£200k£300k£400k JulAugSepOctNovDec launch · 1 Sep gentle pre-launch build steepest after launch tail flattens as burst ends
Fig 2. The cumulative-spend S-curve the Datagraph draws under the Gantt. Read the slope, not the number: a gentle pre-launch build, the steepest climb right after the 1 Sep launch, then a flattening tail. A pacing problem — say, most of the budget crammed into November — would show as a nearly-flat line that suddenly rockets vertical. You'd catch it here months before finance did.

Reading the curve like a planner

The value of the S-curve is that spend problems become geometry. Three shapes tell you three stories, and none of them survive contact with a spreadsheet grid.

Line the curve up against the launch marker and the freeze gate and you're reading a campaign the way a project controller reads a build: is the effort landing where the calendar says it should? A grid of coloured weeks can never answer that. A curve answers it in a glance.

Two pacings, same £400k · well-placed vs. back-loaded £0£200k£400k JulAugSepOctNovDec launch spend placed around launch back-loaded into December
Fig 3. Same budget, two pacings. The solid blue curve puts its money to work around the launch; the dashed amber one sits flat for a quarter then hockey-sticks into December. Both spend £400k — but only one is timed. In a coloured-cell calendar these two plans are indistinguishable; on a curve they're obviously different campaigns.
The payoff: the curve is driven by the same activities as the Gantt. Push the launch two weeks, extend the retargeting burst, or trim a channel's budget, and the spend curve and the swimlanes move together — no second spreadsheet to re-key, no chart to rebuild by hand.

Present it, then share it

Once the picture holds together, getting it in front of people is the easy part. For a board or budget review, export a landscape PDF or PowerPoint — header, footer and logo branded, print matching screen exactly. For a working review with the wider team, send a read-only share link: the entire campaign — bars, milestones, curve and all — travels inside the link, encrypted, and rebuilds in the recipient's browser. Nothing is uploaded to a server, and there's nothing to install at the other end. A stakeholder clicks, sees the live picture, and can't accidentally edit it.

That's the difference between a calendar you screenshot into a slide every week and a view that just refreshes. The plan stays in one place, the money stays attached to it, and the pacing story is always current.

Where the plan lives. Sketchedule is the presentation front-end. If your campaign is scheduled in a project tool or a media-planning system, keep it there as the source of truth and refresh the picture from it — Sketchedule draws the board-ready calendar and the spend curve on top, it doesn't try to replace the planning engine underneath.

Key takeaways

Pace your next campaign on one page

Open Sketchedule in a browser — free, no install, nothing uploaded. Paste your campaign plan and watch the spend curve build under it.

← BlogAll articles

Primavera and P6 are trademarks of Oracle Corporation; Microsoft Project is a trademark of Microsoft Corporation. Sketchedule is an independent product and is not affiliated with, endorsed by or sponsored by Oracle or Microsoft. Figures are illustrative, drawn in Sketchedule; the numbers shown are worked examples for explanation.