How to Tell a Seasonal Dip From a Real Decline
Two Controls That Settle It, and the Comparison That Never Does
Short answer
Compare the same period a year earlier, and compare against your tracked competitor set over the same weeks. A dip present in both your data and theirs is the season. A dip present only in yours is yours, and that is the version worth acting on.
1. How do I tell a seasonal dip from a real decline?
Use two controls at once: the same period one year earlier, and your tracked competitor set over the same weeks. Season shows up in both. A decline you caused shows up only in your own series.
- Seasonality
- A repeating pattern tied to the calendar rather than to performance, so that the same rise or fall appears in the same weeks each year across an entire market.
| Comparison | What it controls for | When it misleads |
|---|---|---|
| This month against last month | Nothing seasonal at all | Almost always. It is the default comparison in every reporting tool and the least informative one available |
| This month against the same month last year | The annual calendar: holidays, buying cycles, quiet weeks | When something structural changed in between, such as a pivot, a channel launch or a platform change |
| Your numbers against your tracked set, same weeks | Everything shared: season, platform behaviour, category attention | When the set is too small, or when one large competitor dominates the aggregate |
| Rolling twelve months against the previous twelve | Season completely, because every month is included exactly once | When you need to spot a recent turn, since a rolling year takes months to react |
The competitor-set control is the one most teams have and never use. It answers the question directly rather than by inference: if three of your four tracked competitors dropped in the same weeks you did, the cause is outside all four companies.
2. How much history do I need before calling something seasonal?
Two complete cycles. One cycle tells you a dip happened in those weeks, which is a hypothesis. Only a repeat separates a season from a decline that happened to begin in that month.
This is worth being strict about, because a single observed dip is exactly what a new structural problem also looks like. Calling August seasonal after one August is a decision to stop investigating, and it is the most expensive kind of cheap conclusion.
What each amount of history actually supports:
- Less than one cycle: nothing seasonal can be claimed. Use the competitor-set control instead, which needs no history at all.
- One cycle: a hypothesis worth recording, along with the size of the dip and the weeks it covered, so next year is a test rather than a memory.
- Two cycles: a usable seasonal expectation. You can now say whether this year dip is bigger than last year, which is the question that matters.
- Three or more cycles: an expected range rather than a single expected value, which is what lets you distinguish a deep season from a decline inside a season.
Record the hypothesis in writing when you first see the dip. Teams that rely on memory reliably remember the dips that repeated and forget the ones that did not, which manufactures seasonality out of ordinary noise.
3. What do I do if I do not have a year of history?
Use your competitor set as the control. A dip that appears across most of the set in the same weeks has a shared cause, and no historical data is required to see that.
| Account | Q2 likes per post | Q3 likes per post | Change |
|---|---|---|---|
| Us | 210 | 150 | Down 29% |
| Competitor A | 480 | 350 | Down 27% |
| Competitor B | 150 | 104 | Down 31% |
| Competitor C | 320 | 300 | Down 6% |
Read that table twice. On the first reading our own 29 percent drop is the story and it would occupy a whole review meeting. On the second reading it is context, and the only genuinely new information on the screen is that one competitor avoided the fall. Those two readings produce completely different quarters of work.
4. How large does a drop have to be before it means anything?
Large enough that the count behind it could not produce the change on its own. In the Oppira Benchmark for June 2026, tracked advertisers ran 9.37 Meta ads and 3.12 Google ads per month, so a two-ad drop is ordinary variation.
9.37ads/month
Typical monthly Meta ad count for a tracked advertiser
Oppira Benchmark, unweighted mean across 75 tracked advertisers, as of June 30, 2026.
3.12ads/month
Typical monthly Google ad count for a tracked advertiser
Oppira Benchmark, unweighted mean across 78 tracked advertisers, as of June 30, 2026.
| Month | Active ads | Reading if the month is read alone |
|---|---|---|
| January | 4 | Baseline |
| February | 2 | Paid activity has halved |
| March | 5 | A 150 percent surge in paid |
| April | 3 | A 40 percent pullback |
| May | 4 | Recovery underway |
| June | 3 | Declining again |
The rule that follows is simple: print the count next to any percentage change, and refuse to interpret a percentage whose base is under about ten. This applies to ad counts, review counts, comment counts and anything else public data delivers in single or low double digits, which is most of it.
5. What gets mistaken for seasonality?
Calendar artefacts and coincidences. Month length, day-of-week composition, a single outlier sitting in the base period, and any change made in the same weeks all produce dips that look annual and are not.
Five things to rule out before accepting a seasonal explanation:
- Month length. February has roughly ten percent fewer days than January, so any monthly total falls by about ten percent for no reason at all. Use per-day or per-post figures for monthly comparisons.
- Day-of-week composition. A month containing five Mondays and four Fridays is not comparable to one with the reverse, and the effect is largest for accounts whose posting is concentrated on particular days.
- A single outlier in the base period. One post that went unusually well last year turns this year into a decline. Check whether the base period contains an outlier before treating the drop as real.
- A coincident change of your own. A site migration, a positioning change or a channel launch in the same weeks makes the season and the change inseparable, so record the date of every change you make.
- Campaign timing drift. A campaign that ran in the last week of a quarter one year and the first week of the next the following year moves a large number across a boundary without anything changing.
These are unglamorous and they explain a large share of the dips that get escalated. Working through the list takes about twenty minutes and it is the cheapest analysis available, because it needs no new data.
6. When should I conclude the decline is real, and act?
When three conditions hold together: the direction persists across three consecutive periods, your series diverges from your tracked set, and you can name a mechanism. Two of the three is a reason to investigate, not to act.
Four steps, in this order, before changing anything expensive.
- Confirm the direction across three periods. One period is noise, two is a possible turn, three in the same direction is a trend. Use the shortest period where your counts are large enough to read, which for most small teams is a month rather than a week.
- Check divergence from the tracked set. Compute the same metric for every account in your frozen set over the same weeks. If they all moved together, the cause sits outside your company and the response is different from a fix.
- Name a mechanism you can point at. A real decline has a cause you can describe: cadence fell, a channel changed, a competitor started outspending you, a message stopped landing. A decline with no nameable mechanism usually turns out to be a measurement change.Check the metric definition and the collection log before believing any unexplained decline.
- Write the expected recovery before you act. State what the metric should do by when if your response works. Without that sentence the next quarter has no way to tell whether the fix worked or the season simply ended.
Oppira keeps a dated history for every tracked competitor and for every field it collects, which is what makes the set control computable in the first place: a comparison against the same weeks requires that somebody recorded those weeks.
Key Takeaways
Two controls, not one
The same period last year controls for the calendar. Your tracked competitor set over the same weeks controls for everything shared. Agreement between them is strong evidence.
Month-on-month answers nothing
It is the default comparison in every reporting tool and it controls for nothing seasonal, which is why it produces an emergency roughly every quarter.
The set control needs no history
If three of four tracked competitors fell in the same weeks you did, the cause is outside all four companies, and that reading needs no year of data.
Two cycles before claiming a season
One dip is a hypothesis and looks identical to a new structural problem. Write the hypothesis down so next year is a test rather than a memory.
Percentages on small counts manufacture drama
Tracked advertisers averaged 3.12 Google ads per month, so a two-ad move reads as a 50 percent collapse and means nothing.
Rule out the calendar artefacts first
Month length, day-of-week composition and an outlier in the base period explain a large share of escalated dips, and cost twenty minutes to check.
Frequently Asked Questions
Explore More
Related analyses, benchmarks, and industry insights
Related Guides
Glossary Terms
Turn reading into a reaction
Oppira watches your competitors, keeps your playbook current, and drafts the response. Start free and see your market clearly by tomorrow.