Split paid from organic first. Paid social measures like any ad channel: spend ÷ attributed leads (UTM-tagged links, platform conversions) → cost per lead → against break-even. No special social math applies.
Organic social mostly can't be ROI'd honestly at small scale. Its jobs are proof-of-life and staying known, whose shadows show up as branded search, direct traffic, and 'saw you on Instagram' at intake. Measure EFFORT against those shadows: hours in, signals out.
The trap: engagement-rate theater. Likes are the vanity metric wearing its own costume. If a quarter of consistent posting moves no shadow metric and books nothing, reallocate the hours without guilt.