Poor process of cleaning the carpets.
Leaving them too wet, activates the bacteria and their "food source", customer turns on his heat, they start feeding and you get the odor.
Would gather you are not using an extractor, and leaving excess moisture in the carpets and seats.
While there are several products available to "cover up" the odor, there are a few that actually cause the bacteria to die without the use of toxic chemicals.
The one I know is from my old company, Odor Terminator.
It is non-toxic, put about 2 oz in each gallon of cleaning solution when you clean, then when done cleaning, then"mist" the "entire surface" with the product, undiluted..
It does things very simple, bacteria must feed on a source every few seconds to a few minutes, depending on which bacteria is present.
The product makes the food source unattractive so they don't feed and without food, they die, IE-odor is gone in a few minutes to an hour.
It "must be misted on all the surfaces" to work.
Miss a spot where there are bacteria present and they will continue to eat and produce the odor.
Works great on milk, vomit, blood, etc any organic food source.
It has no odor it's self, however, when applied in large quanities, it may produce a "clorine" smell", that is due not to the product having clorine in it, but it has eliminated all the other odor sources so one starts to notice the "clorine" that is in all treated water.
Get this, you can drink the product and it will not hurt you, it is truly non-toxic.
Grumpy