Hi
An FFT algorithm calculates with integer (but, LSB) values.
Thus the "mV" values need to be calculated as bit values.
--> I recommend to the bit values for discussion.
--> As already said you need to choose sampling_rate and filter_bandwidth first.
You say ADC input range is 0....3.3V. This lets me assume you use VCC as voltage reference. If so, don't be surprised of varying results. All the drift and noise of VCC will be "copied" to the measurement signal.
--> if you want a stable and accurate measurement result, then use a clean and stable voltage_reference.
--> Be sure the ADC timing is free of jitter (not software controlled). All the timing_jitter will result in voltage noise.
--> FFT window width, sampling rate: Be sure that in the measurement window exactly fits an integer count of 50Hz fullwaves. Else it should be obvious that the 50Hz result will vary.In this case you may consider to use a windowing function (like "Hanning"), but then you need to take the result bins both sides next to the 50Hz bin into account. This will improve stability of the result, but not perfectly.
Klaus