play icon for videos
← Academy
SOPACT ACADEMY · AI SKILLS

Build an SROI Value Map, Step by Step

Point Sopact Sense at your cleaned dataset and it drafts the SROI value map — outcome by outcome, with a sourced financial proxy and the conservative adjustments — grading each row by the evidence behind it.

<!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">&#128176;</span> <div class="t"> <div class="n">Investee SROI · SROI Value Map</div> <div class="s">DEMO-07 · Sopact Sense · SROI Investee</div> </div> <span class="pill"><span class="d"></span>Building</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", "Build", "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 value gets assigned.", "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 · Build the value map", "headline": "Every outcome, priced and sourced", "lede": "Each row is graded <strong style=\"color:#15884F\">green</strong>, <strong style=\"color:#C9820A\">amber</strong>, <strong style=\"color:#C63E2B\">red</strong> — proxies without a named source stay unvalued rather than guessed at.", "prompt": "Build an SROI value map for [PROGRAM]: per outcome stakeholder, indicator, quantity, proxy (source), deadweight, attribution, displacement, drop-off, duration, net value. Grade green/amber/red."}, {"eyebrow": "Step 3 · One-fix follow-up", "headline": "Value the amber outcome", "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\">&#128202;</span><div class=\"rt\"><div class=\"n\">Value map columns</div><div class=\"s\">Outcome, indicator, quantity, proxy (source), deadweight, attribution, displacement, drop-off, duration, net value</div></div><span class=\"pillsm gray\">Structure</span></div>", build: "<div class=\"mxwrap\"><div class=\"mxhead\"><div></div><div>Proxy (source)</div><div>Net value</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Stable employment</div><div>$14,200/job ×120 · state wage data<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>$1.4M net</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Improved wellbeing</div><div>proxy TBD<span class=\"mxchip\" style=\"background:#C9820A;color:#fff\">AMBER</span></div><div>not valued</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Reduced debt</div><div>no data<span class=\"mxchip\" style=\"background:#C63E2B;color:#fff\">RED</span></div><div>—</div></div></div>", fix: "<div class=\"mxwrap\"><div class=\"mxhead\"><div></div><div>Proxy (source)</div><div>Net value</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Stable employment</div><div>$14,200/job ×120 · state wage data<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>$1.4M net</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Improved wellbeing</div><div>Benchmarked wellbeing proxy with a conservatism note<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>not valued</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Reduced debt</div><div>no data<span class=\"mxchip\" style=\"background:#C63E2B;color:#fff\">RED</span></div><div>—</div></div></div><div class=\"cnote\" style=\"color:#15884F;margin-left:0\"><span class=\"plus\">+</span><strong>Fix applied:</strong> Assign a benchmarked wellbeing proxy with a conservatism note</div>", reportFlags: "<div class=\"flagrow\" style=\"border-left-color:#C9820A\"><span class=\"flagtag\" style=\"color:#C9820A;background:#FBF0DA\">AMBER</span><div class=\"flagtxt\">Improved wellbeing — outcome is claimed but the proxy is still TBD, so it isn&#x27;t valued yet.</div></div><div class=\"flagrow\" style=\"border-left-color:#C63E2B\"><span class=\"flagtag\" style=\"color:#C63E2B;background:#FCE9E7\">RED</span><div class=\"flagtxt\">Reduced debt — no data exists for this outcome at all.</div></div>", lpTitle: "Missing & incomplete report · shareable link", lpSub: "Decision-first · Sopact branding · Investee SROI · SROI Value Map", summaryBefore: "Grade: 1 green &middot; 1 amber &middot; 1 red. One valued, one TBD, one missing.", summaryAfter: "Grade: 2 green &middot; 0 amber &middot; 1 red. One proxy, conservatively assigned." }; 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: An SROI value map lists, for each outcome and stakeholder, the indicator, the quantity, a financial proxy with its source, and the four adjustments — deadweight, attribution, displacement, and drop-off — to reach a net, conservative value. To build one fast, point Sopact Sense at your cleaned dataset; it drafts the value map and grades each row by evidence — green where the value is sourced, amber where a proxy is still a placeholder, red where there's no data at all. The steps below show how, with copy-paste prompts.

1 · Set up over your data

An SROI is only as honest as the data under it. Work from a clean dataset with persistent contact IDs, and load your Decision Brief first so Sense knows the decision, the audience, and 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 value-map prompt

You don't fill the map by hand — you write the prompt that builds it and grades it. This is the one that lays out every outcome with its proxy and adjustments:

Build an SROI value map for [PROGRAM]: per outcome — stakeholder, indicator, quantity, proxy (source), deadweight, attribution, displacement, drop-off, duration, net value. Grade green / amber / red.

Five elements make it work: the dataset (clean data, not anecdotes); the value map (every outcome, every column); the proxy with a source (never an invented number); being conservative (the adjustments only ever reduce the claim); and the grade (green / amber / red at a glance).

3 · What Sense builds

Sense returns the value map with every row graded — the outcomes valued with a sourced proxy, the ones still on a placeholder, and the ones with no data behind them. 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 | Employment | valued with a sourced wage proxy; amber | Wellbeing | proxy still a placeholder, TBD; red | Debt reduction | no data collected yet

The green row is an outcome valued with a sourced proxy, the amber row rests on a placeholder proxy that still needs a real source, and the red row is an outcome with no indicator collected at all — nothing to value.

4 · Turn a weak link green

The map is worth most when you fix the row holding it back. Take the lowest-graded element and make it measurable 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 debt or financial-stress measure at intake and exit — turning the red row from “no data” into a valued outcome.

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

Never let a proxy be invented. The fastest way SROI loses credibility is a financial proxy with no source. Ask Sense to flag any proxy without a named source — those are the rows a reviewer challenges first.

Be conservative on purpose. Deadweight, attribution, displacement, and drop-off should only ever lower the claim. If an adjustment is missing, the value is overstated — ask Sense which outcomes are missing an adjustment.

Value one outcome at a time. Add the indicator Sense suggests for your reddest row, collect it next cycle, and re-run the map — the net value firms up as the data does.

Tighten the dataset while you're here. Ask Sense which outcomes have too little data to value reliably, and what one question would fix each:

Which outcomes in this value map have too little data to value reliably, and what single question added at intake or exit would let me value each one conservatively?

Frequently asked questions

How do you calculate SROI for a program?

SROI compares the value created to the value invested. You map each outcome to a financial proxy, multiply by the quantity of people who experienced it, then reduce the figure for deadweight (what would have happened anyway), attribution (the share due to others), displacement, and drop-off — to reach a net present value, which you divide by the inputs to get a ratio. The discipline is in the adjustments and the sourced proxies, not the headline number.

What is an SROI value map?

An SROI value map is the working table behind the ratio: one row per outcome and stakeholder, with the indicator, quantity, financial proxy and its source, the four adjustments, the duration, and the resulting net value. It's where an SROI is actually made credible — or where it falls apart.

What is a financial proxy in SROI?

A financial proxy is a money value used to represent an outcome that isn't itself traded — for example, the cost of treatment avoided as a proxy for improved health. A good proxy is drawn from a named, published source and applied conservatively; an invented or unsourced proxy is the most common reason an SROI is rejected.

Ready to try it for yourself?

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

Try in Sopact