The short answer
Pick which system owns which object and write it down: the CRM owns accounts, opportunities and revenue, the billing system owns what was actually invoiced, the product database owns usage. Everything else is a copy, and copies are allowed to be stale as long as everyone knows they are copies. The mistake teams make is syncing everything bidirectionally, which guarantees that two systems will overwrite each other and nobody will be able to tell which number is right. If you have the engineering support, land everything in a warehouse, model it once, and push the modelled result back out to the tools. If you do not, keep the CRM as the single reporting surface and stop building dashboards anywhere else.