Why did last quarter's pharma sales numbers change, and was it performance or the data?

Last quarter's pharma sales numbers usually change because the vendor restated them. Syndicated sales data is part actual, part projection, and vendors rerun recent months when better inputs arrive. To tell data from performance, keep each period as you received it, diff the overlap on every refresh, and test the stable tail and the restatement window separately.

Key points

  • Third-party pharma sales data is part actual and part projection, and vendors rerun the projection when better inputs arrive, so a quarter's actuals can change inside a file that loads perfectly.
  • Many syndicated products revise the most recent months on every refresh while older periods stay fixed, so a rule that forbids any change fires constantly and a rule that ignores change misses real breaks.
  • The only way to see a restatement is to keep a snapshot of each period as received and diff the overlapping periods when the next file lands.
  • Split the tests the way the data splits: an exact Aggregate Balance match against the prior delivery on the stable tail, and a Distribution Shift check on the restated months.
  • A restatement often looks like growth, and nobody questions a number moving in the right direction, which is why restatements survive review longer than obvious errors.

You briefed the VP on Q2. A month later the same query returns a different number. Nobody changed the SQL. Nobody touched the warehouse. The vendor changed the past.

In one illustration from our post on the commercial data most likely to be wrong, Q2 net sales read $4.20M as of April 30 and $3.85M as of May 31. Same quarter, different number. The load succeeded both times. Source and target agreed both times. Every deterministic check you run on arrival passed.

Restatement is how syndicated data works

Third-party sales data is part actual, part projection. The vendor backfills gaps with an algorithm, gets better inputs the next month, and reruns it. The data sources reference lists restatement on refresh as the characteristic failure of the IQVIA and ICON/Symphony prescription and prescriber feeds. It is normal behavior, not an error. That is what makes it hard to test.

The pattern has a shape. Many syndicated products revise the most recent months on every refresh while older periods remain fixed. Call the recent months the restatement window and the older months the stable tail. A single rule can’t cover both.

PeriodWhat the vendor doesRule that’s wrongRule that works
Stable tail (older than the window)Nothing. These periods are closed.Ignore changeExact match to the prior delivery (Aggregate Balance)
Restatement window (recent months)Revises values on every refreshForbid changeShape holds even as values move (Distribution Shift)

A rule that forbids change fires every week on the window. A rule that ignores change misses a real break in the tail.

How to tell performance from data

Ask one question of every number that moved: did the history move, or only the newest period?

If only the newest week moved and the overlapping periods match what the vendor sent last time, the change is performance. Brief it.

If the overlapping periods moved too, the data changed underneath you. Now ask where. Movement inside the restatement window is expected, so review it and accept it. Movement in the stable tail is a silent rewrite, and it gets flagged before it reshapes a trend line.

You can only ask if you kept the answer. Keep a snapshot of each period exactly as you received it. When the next file lands, diff the overlapping periods against the snapshot. This is the check most teams skip, because extract-to-load reconciliation assumes last month’s history is still last month’s history. In commercial pharma it often isn’t.

The mix tells you when a mapping broke

Some changes are neither performance nor restatement. A sudden swing in the mix of payer types, specialties, or geographies usually means a mapping regression upstream, not a real market movement. An NDC remapped from one market basket to another is the classic case: one product group’s dispense totals jump, another drops by roughly the same amount, and nothing upstream failed. An Aggregate Balance test flags both groups. Then you warn the brand team instead of fielding the complaint.

Two more traps make restatements harder to see. A unit-of-measure change, units one month and packages the next, makes one product show a 10x jump. And vendors love wide files, with periods spread across columns. Those defeat trend logic. Normalize them to long format in your refined layer and test after the normalization.

What to set up

Split the checks the way the data splits. In DataOps TestGen, run Aggregate Balance against the prior delivery on the stable tail only. Point Distribution Shift, which compares two distributions using Jensen-Shannon divergence, at the restated months. Then put Metric Trend tests on the gold metrics.

Give each result a disposition. Confirm it, dismiss it as a reviewed restatement, or mute the test, so a known issue stops reading as fresh noise. That record is what you show when leadership challenges the forecast and asks whether the history moved under you.

The restatement will still arrive. The difference is whether you find it in a test result or in a business review.

Frequently asked questions

Short answers to the follow-up questions people ask next.

Why does IQVIA or Symphony data change after I already reported it?

Because syndicated sales data is part actual and part projection. The vendor fills gaps with an algorithm, then reruns it when better inputs arrive, so your actuals for a closed quarter quietly change. The file loads cleanly, source and target agree, and every load check passes. Same query, different answer, which is why restatement is on our list of the commercial data most likely to be wrong.

Can a restatement look like sales growth?

Yes, and that is why it survives review. A vendor restates a prior period, or a unit-of-measure change makes one product show a 10x jump, and the dashboard renders it as a strong sales week. Nobody questions a number moving in the right direction, so a restatement lasts longer in front of leadership than an error that pushes the number down.

Why does a 'history should never change' test keep failing?

Because many syndicated products revise the most recent months on every refresh while older periods stay fixed. A rule that forbids any change fires on normal behavior every week, and a rule that ignores change misses real breaks. Test the stable tail and the restatement window separately.

Which TestGen tests catch a silent restatement?

Two, pointed at different periods. Aggregate Balance compares rollups against the prior delivery on the stable tail, the periods older than the vendor's restatement window, where nothing should move. Distribution Shift, which uses Jensen-Shannon divergence, watches the restated months, where individual values change but the shape of the mix should hold. One exact-match rule and one shape rule.

Is a shift in payer or specialty mix a real market change?

Usually not. A sudden change in the mix of payer types, specialties, or geographies usually means a mapping regression upstream rather than market movement. By the time a brand analyst notices, the wrong number has been in three meetings. A distribution test on the mix catches it on the load where it first appears.

Talk to the people who test this data every week

DataKitchen builds and runs commercial data platforms for small and midsize pharma, with the tests in place from day one.