# The Defensible Attrition Rate: Estimating a Competitor's Turnover From Public Profiles

*You can report a competitor's attrition as a single number with a stated confidence range that survives a leadership challenge.*

- Canonical URL: https://www.refolk.ai/guides/defensible-competitor-attrition-rate
- Pillar: Market and talent intelligence
- Format: Playbook
- Published: 2026-08-26
- Last reviewed: 2026-08-26
- Reading time: 17 min
- Keywords: estimate competitor attrition rate, calculate turnover from public profiles, how to measure attrition from linkedin, competitor retention benchmarking, defensible attrition rate methodology

## Key takeaways

- The standard formula is separations during the period divided by average headcount, where average headcount is (start + end) / 2, times 100.
- A public-profile turnover figure is always a lower bound, because the metric depends on people updating their current employer and that update lags the actual departure.
- Turnover sits near 0.10 to 0.15, not the 0.50 worst case, so a sample of about 100 profiles already yields roughly a plus or minus 4 percent margin at a 5 percent true rate.
- Benchmarks diverge because they count different events: LinkedIn all-industry sits at 10.9 percent while BLS JOLTS all-nonfarm ran about 43.6 percent in 2023 by counting every separation.
- Coverage caps precision: a US Python engineer pool of 55,184 in Refolk's index supports a tight estimate, but a US Rust pool of 603 may leave a competitor's team too thin to rate without disclosing coverage.
- WARN filings are the only dated public involuntary signal, but the spread-out loophole hides sub-threshold layoffs, so unmatched departures must be reported as undetermined, never defaulted to voluntary.

When an exec asks "what is their attrition and how does it compare?", they want one number with a range, not a teardown of who left and where they went. This guide is for talent-intelligence analysts, strategy researchers, and operators who need to turn public profile movement into a single defensible turnover rate for a named competitor or one of its teams. It gives you the full method in order: definition, denominator, sampling, bias correction, and a confidence range you can put in front of leadership.

Existing outflow research reads departures as a one-off story. This does something different. It produces a proportion with error bars that a skeptical exec cannot dismiss, because every assumption is written down and every known bias is corrected or disclosed.

## What "attrition rate" actually means, and which denominator to use

Attrition rate is separations during a period divided by average headcount, times 100. The consensus across HR-analytics sources - SHRM, Mercer, and effectively every HRIS platform - is one formula:

**Turnover Rate (%) = (Separations During Period / Average Headcount) x 100**

The word that carries the weight is *average*. Average headcount is (headcount at period start + headcount at period end) / 2. Most teams use the average to smooth the effect of hires and exits that land mid-period. If you divide by start headcount alone on a fast-growing team, you overstate the rate, because the denominator is smaller than the team was for most of the year.

Two more definitional choices matter before you count anything.

- **Window.** Use a twelve-month rolling window. It is the standard smoothing choice for benchmarking, and it neutralizes seasonal hiring spikes.
- **Annualizing.** Do not multiply a monthly rate by 12. Simple multiplication ignores compounding and seasonal spikes. Instead apply the formula across the full 12-month window: total annual separations over average headcount for the year.

> **Rule:** Always show the denominator with the rate
>
> A rate without its denominator is not defensible. "22 percent" means nothing until you state "22 percent of an average headcount of 140, being the mean of 120 at the window start and 160 at the end." Report both endpoints and their sources every time.

The reason to nail the definition first is that the rest of the method is arithmetic on top of it. Get the population, window, and denominator wrong and no amount of sampling rigor saves you.

## Why the public number is a floor, not a point

Any turnover rate built from public profiles is a lower bound, not an exact value. The data is drawn from people updating their current employer on their profile, so the reported rate sits below actual turnover because of the lag between an actual departure and when someone updates their profile. The direction of this error is documented; the magnitude is not.

That asymmetry is the single most important fact in this guide. The update lag can only suppress the count. It can never inflate it. Nobody marks themselves as having left a job they still hold. So the honest deliverable is not a point estimate - it is a lower bound with an interval that is wider on the downside.

No published figure quantifies the average lag or the exact undercount percentage. That is not established publicly, so do not invent one. What you can do instead:

- **Label the figure directional.** State in the note that it is a floor drawn from profile updates.
- **Extend the observation window.** Count departures 6 to 12 months back so slow updaters are captured, then optionally re-scan the same window later to catch late edits.
- **Widen the interval downward.** The true rate is at or above your estimate, not below it.

**10.9% - LinkedIn all-industry annual turnover, across roughly 500M professionals**

A useful anchor for a quit-proxy or profile-derived figure, and itself a rate the source warns may sit below actual turnover.

> The update lag can only suppress the count, never inflate it, so the honest deliverable is a floor with an asymmetric interval.

## The four exclusions that keep you from overcounting

Four categories of profile movement are not real departures, and the published methodology drops all four. Miss them and you inflate the numerator. The exclusions are internal transfers, contractors, interns and students, and same-day positions.

A person counts as leaving if they provide an end date for a position, but internal job changes within the same company do not count. A member can have multiple genuine departures within a year. Contractors and non-full-time staff are excluded, as are positions that start and end on the same date.

Here is how each one shows up in public data, and what it looks like when the signal lies to you:

| Exclusion | What it proves | How it shows in public data | How it lies |
|---|---|---|---|
| Internal transfer | Not a departure, a role change | New title, same employer entity, continuous dates | A promotion logged as a fresh position looks like an exit and a rehire |
| Contractor or consultant | Not a full-time separation | Title strings: "Contractor", "Consultant", or self-employment | A full-timer who used a contractor title early can be wrongly dropped |
| Intern or student | Not a permanent role | Title strings: "Intern", "Student", seasonal dates | A converted intern who stayed on gets excluded if you only read the first entry |
| Same-day position | A data artifact, not a job | Start date equals end date | Occasionally a real one-day contract, but treat as noise |

The most expensive of these is the internal transfer, because it is the easiest to mistake for a departure and the most common in a growing org. A promotion logged as a new position inflates your leaver count and, if the person appears to have "left and rejoined", can double-count. The check is mechanical: same employer entity plus continuous dates means exclude.

> **Watch out:** An internal move is not an exit
>
> Counting internal transfers as departures is the most common overcount in this method. Before adding anyone to the leaver list, confirm the next role is at a different employer entity. Same entity, continuous dates: drop it.

## The procedure, start to finish

Run these eight steps in order. The whole job is roughly four to six analyst-days for a single team, most of it in sampling. One note on order: sources disagree on whether to compute the rate before or after splitting voluntary from involuntary. Some HR guides compute first; SHRM's method defines the voluntary/involuntary split before counting. I put classification before the rate because it lets you report the split and the total in one pass, but either order is defensible as long as you state which you used.

#### Estimating a competitor's attrition rate

1. **Define the population and metric** - Fix the competitor entity, the team or function, the 12-month window, and whether you count total departures or a quit proxy. Write a one-line definition with the denominator named.
2. **Build the denominator** - Estimate start and end headcount for the population, then average them. Record (start + end) / 2 with the source of each count.
3. **Sample departures** - Collect profiles showing an end date at the entity in-window, then apply the four exclusions. Log an exclusion reason for every profile you drop.
4. **Correct for lag and undercount** - Flag the count as a lower bound and, where possible, re-scan 6 to 12 months later for late updaters. State the undercount assumption in writing.
5. **Classify voluntary vs involuntary** - Cross-reference dated WARN filings and layoff trackers, tag overlaps involuntary, and leave the rest undetermined. Produce three buckets.
6. **Compute rate and confidence range** - Divide separations by average headcount, multiply by 100, and attach a proportion-based interval from your n and coverage. Report rate plus or minus margin.
7. **Benchmark** - Compare against BLS JOLTS, SHRM or Mercer, and function-level figures, matching your event type to the benchmark's. Give a high, average, or low verdict.
8. **Package for challenge** - Document every assumption, both headcount endpoints, and the coverage rate. Deliver a leadership-ready note that names its own limits.

#### The attrition estimate pipeline

1. **Define** - Entity, team, window, metric
2. **Denominate** - Average of start and end headcount
3. **Sample** - In-window end dates, minus the four exclusions
4. **Correct** - Lower-bound flag and lag re-scan
5. **Rate + range** - Proportion interval from n and coverage

*Each stage feeds the next, and the confidence range depends on choices made at every step before it.*

The sampling step is where time goes, because collecting every in-window departure for a named team by hand across public sources is slow and easy to leave incomplete. This is the friction a sourcing tool removes: instead of manually reconstructing a leaver list, you ask for it in plain English and get the movements back with destinations attached.

I ran this search: `Software engineers who left Stripe in the last 12 months and where they went now` - [see the full result list](https://www.refolk.ai/s/fgp6h686yx).

*Returns an in-window leaver list with current employers, which is the raw numerator before you apply the four exclusions and dedupe.*

I built [Refolk](/) so that the population and the departures come back from one plain-English query across public profiles, which turns the slowest step in this pipeline from days of manual reconstruction into minutes of review.

## Voluntary versus involuntary: what you can and cannot infer

Public profile data cannot show employer intent, so you cannot classify an individual departure as voluntary or involuntary from the profile alone. Professional-network data infers voluntary departures only in aggregate, from people updating their profile with a new employer. That inference does not hold up person by person.

There is exactly one dated public signal for involuntary exits: the WARN Act. The Worker Adjustment and Retraining Notification Act of 1988 requires companies with 100 or more employees to give 60 calendar days' notice of planned closings and mass layoffs, where a mass layoff means 50 or more at a single site. WARN filings are aggregated and standardized by public trackers - one database holds more than 83,000 filings covering 8.9 million-plus workers across all 50 states.

WARN has two documented gaps you must respect:

- **Definition gap.** "Employment loss" excludes discharge for cause, voluntary departure, and retirement, so not every real involuntary exit produces a filing.
- **Spread-out loophole.** Companies can dodge a notice by splitting a layoff into sub-threshold batches - laying off 49 one month and 26 the next. An involuntary wave can leave no dated public trace at all.

> **Watch out:** Absence of a WARN filing is not evidence of voluntary departure
>
> The spread-out loophole means an involuntary layoff can be legally invisible. Never default unmatched departures to voluntary. Tag them undetermined, and say so in the note.

So the classification produces three buckets, not two. Departures overlapping a dated WARN filing or a known layoff event are tagged involuntary. Everything else is undetermined. Do not report a clean voluntary/involuntary split as if the residual were all voluntary, because the loophole systematically hides involuntary exits and your split would understate them.

## Sizing the sample and attaching a confidence range

Attrition is a proportion, so the standard proportion sample-size formula applies, and low turnover rates mean you need fewer profiles than the worst case. The formula is n = p* · q* · (z(α/2) / E)², where q = 1 - p and E is your margin of error.

Statisticians often plan with p* = 0.5 because it is the worst case: it guarantees the margin will not exceed E, but it demands the largest sample. For a 95 percent interval with a 4 percent margin at p = 0.5, n rounds up to 601. But turnover does not sit at 0.50. It sits near 0.10 to 0.15, and the margin shrinks as the proportion moves away from 0.50. That is why real attrition samples are cheaper than the planning number suggests.

| Sample n | Approx margin of error (95%) |
|---|---|
| 100 (at ~5% rate) | ±4% |
| 200 (at ~5% rate) | ±2.75% |
| 601 (at p=0.5) | ±4% |

Read that table carefully: 100 profiles at a 5 percent true rate gives the same margin as 601 profiles at the worst-case 0.5. That is the whole reason this method is feasible for a single team. A pilot of about 100 profiles lands you near plus or minus 4 percent at a 5 percent rate with 95 percent confidence.

One caveat the sources do not resolve: there is no published minimum profile-completeness coverage rate for attrition estimates specifically. That is not established publicly. The defensible substitute is to report your coverage rate - profiles found divided by estimated true headcount - alongside the estimate, and to treat low coverage as a disclosed bias rather than a hidden one.

Coverage is also where the pool size sets a ceiling on precision. A large sourceable population supports tight team estimates; a thin one does not.

| Population | Count in index | Derived ratio |
|---|---|---|
| US Software Engineer, Python | 55,184 | baseline |
| UK Software Engineer, Python | 4,220 | 0.076x US (US = 13.1x UK) |
| US Software Engineer, Rust | 603 | 0.011x US Python |

These counts come from Refolk's index. They make the coverage constraint concrete. In Refolk's index of professional profiles there are 55,184 US software engineers with Python, which supports a tight estimate for a US Python team. But the US Rust pool is 603 - about one ninety-first the size of the Python pool - so a single competitor's Rust team may be a handful of profiles, too thin for a defensible rate unless you disclose the coverage. And with the US Python pool roughly 13.1 times the UK pool, the same competitor's UK team estimate carries a materially wider interval than its US team, purely from denominator thinness.

**601 - Profiles needed for a 95% interval at a 4% margin, worst-case p=0.5**

Because turnover sits near 0.10 to 0.15, you rarely need this many; roughly 100 profiles suffices at a 5% rate.

## How this goes wrong: failure modes and false positives

Most bad attrition numbers fail for one of seven reasons, and each has a mechanical check. This is the section to keep open while you work.

1. **Counting internal transfers as exits.** A promotion logged as a new position inflates departures. Check: same employer entity and continuous dates, exclude.
2. **Denominator drift.** A fast-growing team makes start and end headcount diverge widely, and using only start headcount overstates the rate. Check: always use the average, and disclose both endpoints.
3. **Treating a profile count as ground truth.** The lag undercount makes any public figure a lower bound; reporting it as exact fails a challenge. Check: label it directional and widen the interval downward.
4. **Mislabeling voluntary versus involuntary.** WARN misses spread-out and small-employer layoffs, so absence of a filing does not mean voluntary. Check: leave unmatched departures undetermined, never default to voluntary.
5. **Under-powered team samples.** A 20-person team yields a wide interval, and a single departure swings the rate about 5 points. Check: compute the margin from n before quoting any number.
6. **Benchmark mismatch.** Comparing a quit-proxy rate to BLS JOLTS total separations overstates the gap. Check: match your numerator's event type to the benchmark's.
7. **Coverage bias.** Low profile coverage in non-desk or non-US teams skews the sample toward desk jobs. Check: report the coverage rate and flag the skew.

#### Sample size against coverage

Horizontal axis runs from Low coverage to High coverage. Vertical axis runs from Small sample to Large sample.

| Quadrant | What it means |
| --- | --- |
| Thin and biased | Do not report a rate; describe movement qualitatively |
| Powered but skewed | Report with a loud coverage caveat and disclosed skew |
| Weak and incomplete | Widen the interval heavily; treat as directional only |
| Tight and representative | Report a rate with a narrow interval and named benchmark |

*Where a team estimate sits on these two axes tells you whether to report a rate, a range, or nothing at all.*

The failure that most often survives to the exec room is number six, benchmark mismatch, because it does not look like an error. Your arithmetic is clean, but you compared the wrong things.

## Benchmarking: match the event, then judge

Published benchmarks disagree because they count different events, so anchoring to the wrong one can make an average competitor look alarming. Reconcile before you compare.

| Source | Metric | Value |
|---|---|---|
| LinkedIn Talent | all-industry annual | 10.9% |
| SHRM 2022 | voluntary / involuntary | 23% / 11% |
| SHRM 2025 | median / avg voluntary | 9% / 13% |
| Mercer 2025 | avg voluntary | 13% |

The spread here is not measurement error - it is definitional. LinkedIn's 10.9 percent is a profile-derived, quit-leaning all-industry figure. SHRM's 2022 report put total US turnover at 30 percent, splitting into 23 percent voluntary and 11 percent involuntary. SHRM's 2025 report, across 2,371 organizations, found median voluntary of 9 percent and an average of 13 percent. Mercer's 2025 survey of 2,617 organizations put average voluntary at 13 percent, down from 24.7 percent in 2022.

Then there is BLS JOLTS, which counts every separation - quits, layoffs and discharges, and other separations. Its totals run far higher than any quit-only figure: a derivation from JOLTS put all-nonfarm annual turnover around 43.6 percent in 2023. If you compare your quit-proxy competitor rate to that, you will report a false alarm.

> **Rule:** Match numerator to benchmark
>
> A quit-proxy or profile figure compares to LinkedIn's 10.9 percent or SHRM and Mercer voluntary figures near 9 to 13 percent. A total-separations figure compares to JOLTS. Never cross the streams.

For function-level nuance, the same public methodology reports HR functions among the highest turnover at 14.6 percent and administration among the lowest at 7.8 percent, and small and mid-sized businesses at 12.0 percent, above the overall average. Use the function figure when your population is a single team, because an all-industry average will mislead you about whether a specific engineering or HR team is high.

## Package it so it survives a challenge

Before you send the number, verify it against this list. The goal is to name every limit yourself, so nothing in the room is a surprise.

#### Before you report the rate

- [ ] The denominator is the average of a stated start and end headcount, both with sources.
- [ ] Every leaver on the list has an in-window end date at the correct employer entity.
- [ ] The four exclusions were applied and each drop has a logged reason.
- [ ] The figure is labeled a lower bound, with the profile-lag undercount stated.
- [ ] Departures are in three buckets, with unmatched exits marked undetermined, not voluntary.
- [ ] The margin of error was computed from the actual sample n, not assumed.
- [ ] The coverage rate (profiles found / estimated headcount) is reported alongside the estimate.
- [ ] The benchmark named matches the event type of your numerator.

Then write the note itself. Keep it short and put the caveats where leadership will see them, not in a footnote.

**Leadership-ready attrition note**

```
COMPETITOR ATTRITION ESTIMATE

Population: [entity], [team/function], [12-month window]
Denominator: avg headcount = ([start] + [end]) / 2 = [N]
  Start source: [source]  End source: [source]
Departures counted: [K] (after exclusions: internal transfer, contractor, intern, same-day)
Split: voluntary-proxy [a] / involuntary (WARN-matched) [b] / undetermined [c]

RATE: [K/N x 100]% (LOWER BOUND)
Confidence: +/- [margin]% at 95%, from n=[sample], coverage=[found/est headcount]

CAVEATS (read these first):
- Profile-update lag means the true rate is at or above this figure, not below.
- WARN misses spread-out and sub-threshold layoffs; "undetermined" is not "voluntary".
- Benchmark: [named source, matched event type]. Verdict: [high/avg/low].
```

*Fill each bracket with your own figures; keep the caveat lines verbatim so limits are disclosed up front.*

To keep the estimate current, re-run the sampling step on the same window quarterly. The lag correction improves on its own as slow updaters catch up, so a re-scan 6 to 12 months after the first pass usually raises the count toward the true rate. When you re-run, hold the definition, window, and exclusions fixed so the two estimates are comparable, and note any change in coverage - a rate that moved because coverage changed is not a rate that moved because the competitor's retention changed.

## Frequently asked questions

### What formula do I use to estimate a competitor's attrition rate?

Use the HR-analytics consensus: separations during the period divided by average headcount, times 100. Average headcount is (headcount at period start + headcount at period end) / 2, which smooths hires and exits that happen mid-window. For an annual figure, apply the formula across the full 12 months rather than multiplying a monthly rate by 12, because simple multiplication ignores compounding and seasonal hiring spikes.

### Why is a turnover rate from public profiles always a lower bound?

The data comes from people updating their current employer on their profile, and that update lags the actual departure. The lag can only suppress the count, never inflate it, so any public-profile figure understates true turnover. LinkedIn's own methodology warns that reported rates may sit below actual turnover and should be read directionally. Treat the number as a floor and widen the confidence interval downward.

### How many departure profiles do I need for a usable confidence range?

Fewer than the worst case, because turnover sits near 0.10 to 0.15 rather than 0.50. The worst-case planning value for a 95 percent interval at a 4 percent margin is n = 601 at p = 0.5, but a sample of about 100 profiles already gives roughly plus or minus 4 percent at a 5 percent true rate, and 200 tightens it to about plus or minus 2.75 percent. Compute the margin from your actual n before quoting a number.

### Can I tell voluntary from involuntary attrition using public data?

Not at the individual level, because public profiles cannot show employer intent. The one dated public signal for involuntary exits is a WARN filing, which covers employers of 100 or more giving 60-day notice of a mass layoff. Tag departures overlapping a dated WARN filing or known layoff as involuntary, and leave everything else undetermined. Never default unmatched departures to voluntary, since WARN misses spread-out and sub-threshold layoffs.

### Which benchmark should I compare my estimate against?

Match the benchmark's event type to your numerator. A quit-proxy or profile figure lands near 10 to 13 percent, so compare it to LinkedIn's 10.9 percent all-industry rate or SHRM and Mercer voluntary figures around 9 to 13 percent. Do not compare a quit proxy to BLS JOLTS total separations, which counts quits, layoffs, and other separations and ran about 43.6 percent all-nonfarm in 2023, or an average competitor will look alarming.

---

*From the Refolk guide library. I revise these guides rather than replacing them, so the current version is always at https://www.refolk.ai/guides/defensible-competitor-attrition-rate*
