Again a suggestion for a small inprovement, I noticed that (at least in the code snippet based on your tops.py I am using) if the formation name is mutli-word with spaces between only the first word is retained. I solved it by replacing
formation = cols[0].split('color="Navy">')[1].split(' ')[0]
with
formation = cols[0].split('color="Navy">')[1].split('</td>')[0].strip().
I did not check if this issue occurs in your original code, but I suspect so. There are plenty of wells to check this on, for example the well with api 0512335102 has multiple occurences fo multi-word formation names.