Blog

Field notes from keeping CRMs, billing and ledgers in step — the joins nobody maintains, the vendor changes we absorb, and the decisions worth settling first.

Field notes12 min read

Each of these three systems links its own objects natively. None of them links to the other two. Here are the seven joins you own, and what breaks at each one.

Read it →
Field notes8 min read

Almost always one of three causes: matching on the wrong email, an automation that creates before it searches, or two writers with no agreed key. How to tell which one you have.

Read it →
Engineering10 min read

A retried webhook that creates a second invoice isn't an edge case, it's a Tuesday. What an idempotency key actually has to cover, and why request-level keys alone don't save you.

Read it →
Playbook9 min read

Five conflicts worth settling before you connect anything. Each one is a business decision disguised as a field mapping.

Read it →
Playbook7 min read

Computing every write and showing it to you without making it sounds cautious. It's actually the fastest way to find out your rules disagree with your data.

Read it →
API changes6 min read

quantity_decimal arrived with the 2026-03-25 API version and quantity is now deprecated. If you post invoices to a ledger, this is the kind of change that silently rounds your revenue.

Read it →
Engineering10 min read

Sparse updates, sync tokens, DisplayName uniqueness, and why posting an invoice is harder than the docs make it look.

Read it →
Playbook8 min read

An honest comparison for CRM → billing → ledger. Where automation builders are the right answer, and where they structurally can't be.

Read it →