Your retry stops creating duplicate rows. Now you need to decide whether a missing price should erase the previous one.
Keeping it feels responsible. But this source drops empty and null fields before publishing each record. A missing field carries no instruction to preserve an earlier value.
Merging sparse observations can assemble an offer you never observed. A retained price, a different seller, and fresh availability can look perfectly respectable together. Your database has become creative.
Define the destination before defining the key
You're building a product monitor for your own business. Its current row should answer: what did the latest observation actually contain?
Start with explicit product URLs.…