Ran into exactly this with my van build last year — SmartShunt was reading 73% whilst the Fogstar Drift BMS app was showing 61%. Took me a while to figure out what was going on.
Short answer: trust neither blindly, but lean on the BMS for cell-level accuracy and the SmartShunt for overall capacity tracking — once it's properly calibrated.
The SmartShunt's SOC is coulomb-counting based, so it drifts over time if your tail current and charged voltage thresholds aren't set correctly in VictronConnect. Most people leave these at defaults and wonder why it goes wrong. Make sure your "charged voltage" is set to around 0.2V below your actual absorption voltage, and tail current at roughly 4% of your battery's capacity in Ah.
The BMS reads actual cell voltages and uses its own internal algorithm — which sounds more accurate in principle, but it can be overly pessimistic depending on the chemistry and how well the manufacturer has characterised the cells.
My current setup:
- 200Ah LiFePO4 (Fogstar Drift 12V)
- SmartShunt 500A
- Victron Cerbo GX pulling both readings via VE.Direct and DVCC
Once I dialled in the SmartShunt properly and let it go through a few full cycles to synchronise, the two readings settled within 3–4% of each other. That's about as good as it gets in practice.
Worth checking whether your BMS is even sending SOC over its comms protocol correctly — some cheaper units have known quirks there.
What BMS are you running? That'll narrow things down considerably.