Credit tiers are the part that never scales cleanly. I hit the same wall when list size started swinging month to month.
What helped me was splitting enrichment into two passes instead of one big waterfall on the full CSV.
Pass 1 is cheap: domain validation, dedupe, kill obvious junk, flag catch-alls. Don't burn credits on rows you'll never send to.
Pass 2 only runs on what's actually going out that week. I stopped enriching the whole TAM up front. If it's not entering a campaign in the next 7 to 10 days, it waits.
On providers, pay-per-result beat fixed credit buckets for me. You only get charged when something comes back valid, so the bad months don't hurt as much. Some tools also let credits roll instead of resetting, which matters when one month you're re-enriching half the list and the next month you're barely touching it.
For catch-alls, I don't auto-kick them. I segment them. Some domains are fine, some aren't worth the risk. Worth testing on a small batch before you write off the whole column.
Phone coverage I treat as optional unless the rep is actually calling that segment. Email-first lists don't need mobile on every row.
If you're on Clay, a short waterfall (find, then verify, only then mobile) usually beats one tool trying to do everything. More steps, but you stop paying for failures twice.
Big annual contracts are hard to avoid at enterprise scale. For SMB/mid volume, the month-to-month API tools are easier to flex. Not perfect, but closer to actual usage.
Happy to share my exact stack if useful. Still iterating honestly.