play icon for videos
← Academy
SOPACT ACADEMY · AI SKILLS

Estimate Deadweight and Attribution in SROI

Point Sopact Sense at your dataset and it estimates the deadweight and attribution behind each outcome — as a percentage with its basis and confidence — so the adjustments everyone fudges are evidenced, not guessed.

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> @keyframes pulseDot{0%,100%{opacity:1}50%{opacity:.35}} *{box-sizing:border-box} body{margin:0;font-family:'Hanken Grotesk',-apple-system,BlinkMacSystemFont,sans-serif;background:#EEF2F9;padding:26px;display:flex;justify-content:center} .card{width:600px;max-width:100%;background:#FFFFFF;border:1px solid #E3E9F4;border-radius:20px;box-shadow:0 26px 64px -32px rgba(15,30,70,.34),0 2px 4px rgba(15,30,70,.05);overflow:hidden} .hdr{display:flex;align-items:center;gap:11px;padding:16px 20px;border-bottom:1px solid #EEF1F7;background:#F5F8FE} .hdr .ic{display:inline-flex;width:30px;height:30px;align-items:center;justify-content:center;border:2px solid #155DFC;border-radius:50%;color:#155DFC;font-size:15px;font-weight:800;flex-shrink:0} .hdr .t{min-width:0} .hdr .t .n{font-weight:800;font-size:14.5px;color:#0F172A;letter-spacing:-.2px} .hdr .t .s{font-size:12px;color:#64748B} .hdr .pill{margin-left:auto;display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:700;color:#155DFC;background:#E6EEFF;padding:5px 10px;border-radius:20px;white-space:nowrap} .hdr .pill .d{width:6px;height:6px;border-radius:50%;background:#155DFC;animation:pulseDot 2s infinite} .tabs{display:flex;gap:0;padding:12px 16px 0;background:#F5F8FE} .tab{flex:1;display:flex;flex-direction:column;align-items:center;gap:5px;cursor:pointer;font-family:inherit;font-size:11.5px;font-weight:700;color:#64748B;background:transparent;border:none;border-bottom:2px solid transparent;padding:8px 4px 10px} .tab.on{font-weight:800;color:#155DFC;border-bottom-color:#155DFC} .tab .num{display:inline-flex;width:20px;height:20px;align-items:center;justify-content:center;border-radius:50%;font-size:11px;font-weight:800;color:#64748B;background:#EEF1F7} .tab.on .num{color:#fff;background:#155DFC} .divider{height:1px;background:#EEF1F7} .body{padding:20px} .eyebrow{font-size:10.5px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:#155DFC;margin-bottom:5px} .eyebrow.g{color:#15884F} .headline{font-family:'Inter',Georgia,serif;font-size:18.5px;font-weight:600;line-height:1.25;color:#0F172A;margin-bottom:12px} .lede{font-size:12.5px;line-height:1.55;color:#475569;margin:0 0 14px} .rows{display:flex;flex-direction:column;gap:8px;margin-bottom:14px} .row{display:flex;align-items:center;gap:11px;background:#F5F8FE;border:1px solid #EEF1F7;border-radius:11px;padding:11px 13px} .row .emoji{font-size:17px} .row .rt{flex:1;min-width:0} .row .rt .n{font-size:13px;font-weight:700;color:#0F172A} .row .rt .s{font-size:12px;color:#64748B} .pillsm{font-size:11px;font-weight:800;color:#155DFC;background:#E6EEFF;padding:4px 9px;border-radius:6px;flex-shrink:0} .pillsm.gray{font-weight:700;color:#64748B;background:#EEF1F7} /* chain / timeline */ .chainwrap{position:relative;padding-left:26px} .chainline{position:absolute;left:8px;top:8px;bottom:8px;width:2px;background:#E3E9F4} .cnode{position:relative;margin-bottom:14px} .cdot{position:absolute;left:-26px;top:4px;width:16px;height:16px;border-radius:50%;background:#fff;border:3px solid #94A3B8} .clabel{font-size:9.5px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;color:#64748B;margin-bottom:4px} .cbox{background:#F5F8FE;border:1px solid #EEF1F7;border-radius:11px;padding:10px 12px;font-size:12px;line-height:1.5;color:#334155} .cbox.graded{display:flex;align-items:flex-start;gap:9px;border-left-width:3px;border-left-style:solid} .cnote{margin:0 0 14px 4px;font-size:11px;line-height:1.5} .cnote .plus{display:inline-flex;width:16px;height:16px;align-items:center;justify-content:center;background:#155DFC;color:#fff;border-radius:4px;font-size:10px;font-weight:800;flex-shrink:0;margin-right:6px} .csummary{display:flex;align-items:center;gap:12px;background:#0A1B3D;border-radius:13px;padding:11px 15px;margin-top:4px} .csummary .t{flex:1;font-size:11.5px;color:#CBD8F5} .csummary .t b{color:#F1F5FF} /* matrix */ .mxwrap{border:1px solid #EEF1F7;border-radius:12px;overflow:hidden;margin-bottom:10px} .mxhead{display:grid;grid-template-columns:118px 1fr 1fr;background:#F5F8FE;border-bottom:1px solid #EEF1F7} .mxhead div{font-size:9px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;color:#64748B;padding:7px 9px} .mxrow{display:grid;grid-template-columns:118px 1fr 1fr;border-bottom:1px solid #EEF1F7} .mxrow:last-child{border-bottom:none} .mxrow>div{padding:9px;font-size:11.5px;line-height:1.4;color:#334155;display:flex;align-items:center;flex-wrap:wrap;gap:5px} .mxrow .mxlabel{font-weight:700;color:#0F172A;background:#FAFBFE} .mxchip{font-size:9px;font-weight:800;letter-spacing:.3px;text-transform:uppercase;padding:3px 6px;border-radius:5px;white-space:nowrap} .promptwrap{padding:0 20px 18px} .promptlbl{font-size:10px;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:#94A3B8;margin-bottom:7px} .prompt{display:flex;align-items:flex-start;gap:9px;font-family:ui-monospace,'SF Mono',Menlo,monospace;font-size:11px;line-height:1.5;color:#1E293B;background:#F5F8FE;border:1px solid #EEF1F7;border-left:3px solid #155DFC;border-radius:9px;padding:11px 12px} .prompt .car{color:#155DFC;font-weight:800;flex-shrink:0} .flagrow{display:flex;align-items:flex-start;gap:10px;background:#F5F8FE;border:1px solid #EEF1F7;border-radius:11px;padding:10px 12px;border-left-width:3px;border-left-style:solid;margin-bottom:8px} .flagtag{font-size:9.5px;font-weight:800;letter-spacing:.4px;text-transform:uppercase;padding:4px 8px;border-radius:5px;white-space:nowrap;flex-shrink:0} .flagtxt{font-size:12px;line-height:1.45;color:#334155} .lp{display:flex;align-items:center;gap:12px;background:#0A1B3D;border-radius:13px;padding:14px 16px;margin-top:6px} .lp .ic{display:inline-flex;width:34px;height:34px;align-items:center;justify-content:center;background:#14295C;border:1px solid #26407A;border-radius:9px;color:#7FA8FF;font-size:16px;flex-shrink:0} .lp .rt{flex:1;min-width:0} .lp .rt .n{font-size:13px;font-weight:800;color:#F1F5FF} .lp .rt .s{font-size:11.5px;color:#9DB2D9} .lp .open{font-size:11px;font-weight:800;color:#0A1B3D;background:#7FA8FF;padding:6px 11px;border-radius:7px;white-space:nowrap} </style> </head> <body> <div class="card"> <div class="hdr"> <span class="ic">&#9878;</span> <div class="t"> <div class="n">Investee SROI · Deadweight &amp; Attribution</div> <div class="s">DEMO-07 · Sopact Sense · SROI Investee</div> </div> <span class="pill"><span class="d"></span>Estimating</span> </div> <div class="tabs" id="tabs"></div> <div class="divider"></div> <div class="body" id="body"></div> <div class="promptwrap"> <div class="promptlbl">The prompt behind this step</div> <div class="prompt"><span class="car">&gt;</span><span id="promptTxt"></span></div> </div> </div> <script> (function(){ var TABS = ["Setup", "Estimate", "Fix", "Report"]; var CONTENT = [{"eyebrow": "Step 1 · Load the dataset", "headline": "The input is your Decision Brief, nothing else", "lede": "Clean data with persistent contact IDs, loaded before any adjustment gets estimated.", "prompt": "You are the Sopact Sense Assistant working over the [DEMO] dataset (clean data + persistent contact IDs). Load my Decision Brief (decision, audience, outcomes, indicators, evidence standard) first, then wait for my task."}, {"eyebrow": "Step 2 · Estimate the adjustments", "headline": "Deadweight, attribution, displacement — named and sourced", "lede": "Each factor is graded <strong style=\"color:#15884F\">green</strong>, <strong style=\"color:#C9820A\">amber</strong>, <strong style=\"color:#C63E2B\">red</strong> — unevidenced numbers get marked, not smoothed into the total.", "prompt": "For outcome [OUTCOME], estimate deadweight and attribution from [EVIDENCE]; state each as a % with basis + confidence. Grade green/amber/red."}, {"eyebrow": "Step 3 · One-fix follow-up", "headline": "Strengthen the estimate", "lede": "The lowest-graded element gets one realistic fix — the single edit that moves it toward green.", "prompt": "Take the lowest-graded element above and fix it using only what the program could realistically measure. Show the before → after grade and the single indicator/edit that moves it to green."}, {"eyebrow": "Step 4 · Missing & incomplete report", "headline": "Every gap becomes one named ask", "lede": "Every amber or red item becomes one named ask — the report leads with the decision it informs.", "prompt": "Create a 'missing & incomplete' report from this analysis in Sopact branding [or paste your website URL / brand guideline to apply your own]. List every element graded amber or red, what is missing, and the one input that fixes each. Lead with the decision this report informs."}]; var BODIES = { setup: "<div class=\"row\"><span class=\"emoji\">&#128202;</span><div class=\"rt\"><div class=\"n\">SROI Investee dataset</div><div class=\"s\">DEMO-07 · clean data + persistent contact IDs</div></div><span class=\"pillsm\">Loaded</span></div><div class=\"row\"><span class=\"emoji\">&#128203;</span><div class=\"rt\"><div class=\"n\">Decision Brief</div><div class=\"s\">Decision, audience, outcomes, indicators, evidence standard</div></div><span class=\"pillsm gray\">Structure</span></div><div class=\"row\"><span class=\"emoji\">&#9878;</span><div class=\"rt\"><div class=\"n\">Adjustment factors</div><div class=\"s\">Deadweight, attribution, displacement — each with basis + confidence</div></div><span class=\"pillsm gray\">Structure</span></div>", build: "<div class=\"mxwrap\"><div class=\"mxhead\"><div></div><div>Estimate</div><div>Basis / confidence</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Attribution</div><div>68%<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>stakeholder survey, n=300 · high</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Deadweight</div><div>22%<span class=\"mxchip\" style=\"background:#C9820A;color:#fff\">AMBER</span></div><div>self-report only · medium</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Displacement</div><div>—<span class=\"mxchip\" style=\"background:#C63E2B;color:#fff\">RED</span></div><div>not assessed</div></div></div>", fix: "<div class=\"mxwrap\"><div class=\"mxhead\"><div></div><div>Estimate</div><div>Basis / confidence</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Attribution</div><div>68%<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>stakeholder survey, n=300 · high</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Deadweight</div><div>22%<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>Comparison-group benchmark added to raise confidence</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Displacement</div><div>—<span class=\"mxchip\" style=\"background:#C63E2B;color:#fff\">RED</span></div><div>not assessed</div></div></div><div class=\"cnote\" style=\"color:#15884F;margin-left:0\"><span class=\"plus\">+</span><strong>Fix applied:</strong> Add a comparison-group benchmark to raise confidence</div>", reportFlags: "<div class=\"flagrow\" style=\"border-left-color:#C9820A\"><span class=\"flagtag\" style=\"color:#C9820A;background:#FBF0DA\">AMBER</span><div class=\"flagtxt\">Deadweight — 22% estimate rests on self-report only, medium confidence.</div></div><div class=\"flagrow\" style=\"border-left-color:#C63E2B\"><span class=\"flagtag\" style=\"color:#C63E2B;background:#FCE9E7\">RED</span><div class=\"flagtxt\">Displacement — not assessed at all.</div></div>", lpTitle: "Missing & incomplete report · shareable link", lpSub: "Decision-first · Sopact branding · Investee SROI · Deadweight & Attribution", summaryBefore: "Grade: 1 green &middot; 1 amber &middot; 1 red. One self-report, one unassessed.", summaryAfter: "Grade: 2 green &middot; 0 amber &middot; 1 red. One benchmark raised confidence." }; var phase = 1; var tabsEl = document.getElementById('tabs'); var bodyEl = document.getElementById('body'); var promptEl = document.getElementById('promptTxt'); function renderTabs(){ tabsEl.innerHTML = ''; TABS.forEach(function(label, i){ var b = document.createElement('button'); b.type = 'button'; b.className = 'tab' + (i === phase ? ' on' : ''); b.innerHTML = '<span class="num">' + (i+1) + '</span><span>' + label + '</span>'; b.addEventListener('click', function(){ phase = i; render(); }); tabsEl.appendChild(b); }); } function renderBody(){ var c = CONTENT[phase]; var eyebrowClass = (phase===2) ? 'eyebrow g' : 'eyebrow'; var out = '<div class="' + eyebrowClass + '">' + c.eyebrow + '</div><div class="headline">' + c.headline + '</div><p class="lede">' + c.lede + '</p>'; if (phase === 0) { out += '<div class="rows">' + BODIES.setup + '</div>'; } else if (phase === 1) { out += BODIES.build; out += '<div class="csummary"><div class="t"><b>' + BODIES.summaryBefore + '</b></div></div>'; } else if (phase === 2) { out += BODIES.fix; out += '<div class="csummary"><div class="t"><b>' + BODIES.summaryAfter + '</b></div></div>'; } else { out += BODIES.reportFlags; out += '<div class="lp"><span class="ic">&#128196;</span><div class="rt"><div class="n">' + BODIES.lpTitle + '</div><div class="s">' + BODIES.lpSub + '</div></div><span class="open">Open &rarr;</span></div>'; } bodyEl.innerHTML = out; promptEl.textContent = c.prompt; } function render(){ renderTabs(); renderBody(); } render(); })(); </script> </body> </html>

In short: Deadweight is the share of an outcome that would have happened anyway; attribution is the share due to other people or programs; displacement is value moved rather than created. These are the SROI numbers most often guessed — and where an honest analysis gets humble. To estimate them defensibly, point Sopact Sense at your dataset and ask for each adjustment as a percentage with its basis and confidence; it grades each by evidence — green where it's drawn from your data, amber where it's self-report only, red where it isn't assessed at all.

1 · Set up over your data

These adjustments are only as defensible as the evidence behind them. Work from a clean dataset with persistent contact IDs and load your Decision Brief so Sense knows the evidence standard:

You are the Sopact Sense Assistant working over the [DEMO] dataset (clean data + persistent contact IDs). Load my Decision Brief (decision, audience, outcomes, indicators, evidence standard) first, then wait for my task.

2 · Write the adjustment prompt

Ask for each adjustment as a number with its reasoning — not a round figure pulled from the air:

For outcome [OUTCOME], estimate deadweight and attribution from [EVIDENCE]; state each as a % with basis + confidence. Grade green / amber / red.

Five elements make it defensible: the dataset (the evidence, not a guess); the adjustments (deadweight, attribution, and — don't forget — displacement); the basis and confidence (where each number comes from and how sure you are); marking the unevidenced (any figure with no support is flagged); and the grade (green / amber / red at a glance).

3 · What Sense estimates

Sense returns each adjustment as a percentage with its basis, graded by how well the evidence supports it. The demo runs on the SROI Investee dataset, engineered to grade one green, one amber, one red:

Run on the SROI Investee dataset (DEMO 07) already loaded in Sopact Sense.

GRADE: green | Attribution | drawn from a survey question, with a stated basis; amber | Deadweight | estimated from self-report only; red | Displacement | not assessed at all

The green adjustment is drawn from a survey question with a clear basis, the amber adjustment rests on self-report alone, and the red one — displacement — hasn't been assessed, which quietly overstates the net value.

4 · Turn a weak link green

The estimate is worth most when you firm up the shakiest adjustment. Take the lowest-graded one and strengthen it with one realistic change:

Take the lowest-graded element above and fix it using only what the program could realistically measure. Show the before → after grade and the single indicator/edit that moves it to green.

For the investee, that's adding a short displacement question — did the outcome come at the expense of value elsewhere — turning an unassessed red into a stated, conservative figure.

5 · Make the report and share it

Generate a decision-first report in your own brand, then a shareable link:

Create a 'missing & incomplete' report from this analysis in Sopact branding [or paste your website URL / brand guideline to apply your own]. List every element graded amber or red, what is missing, and the one input that fixes each. Lead with the decision this report informs.
Create a shareable link for this report and open it in a new tab.

Tricks, tips, and troubleshooting

A missing adjustment overstates the claim. Every adjustment you skip makes the SROI look bigger than it is. Ask Sense which adjustments are unassessed — those are the silent inflators of the ratio.

Triangulate self-report. Deadweight and attribution drawn only from “would this have happened anyway?” self-report are weak. Ask Sense whether a comparison group or a published benchmark could corroborate the figure.

State confidence, not just a number. A defensible adjustment carries a confidence level. Ask Sense to attach low / medium / high confidence to each, so a reviewer knows which figures to trust.

Tighten the dataset while you're here. Ask Sense what one question would let you evidence the weakest adjustment:

Which adjustment in this analysis is least evidenced, and what single survey question would let me estimate it with a stated basis instead of a guess?

Frequently asked questions

What is deadweight in SROI and how do you estimate it?

Deadweight is the proportion of an outcome that would have happened without the program. You estimate it by asking participants what would have happened anyway, comparing to a similar group that didn't take part, or using a published benchmark — then express it as a percentage that reduces the gross outcome. Self-report alone is weak; triangulating with a comparison group or benchmark is what makes the figure credible.

What is attribution in SROI?

Attribution is the share of an outcome that's due to other organizations or factors rather than your program. If three services contributed to someone getting a job, you don't claim 100% of that value. Like deadweight, it's stated as a percentage that reduces the claim, ideally evidenced from a survey question or stakeholder input rather than assumed.

What's the difference between deadweight, attribution, and displacement?

Deadweight is what would have happened anyway; attribution is the part caused by others; displacement is value that moved rather than was created (for example, one person getting a job another would otherwise have had). All three are conservative adjustments that lower the gross value — and leaving any of them out overstates the SROI.

Ready to try it for yourself?

Open Sopact Sense, paste your program description, and put it to work.

Try in Sopact