8. Money
Modules: Invoicing, E-commerce
Invoices, products, orders, and the engine that tells you who looked but did not buy.
8.1 Invoices
Module: Invoicing
Create a draft against a contact, a company or a deal. Add line items and a tax rate; totals are calculated for you.
Numbering is atomic and gap-free. Invoices are numbered INV-0001, INV-0002, and so on, per organisation, allocated in a way that cannot produce a duplicate or a gap even if two people create invoices in the same second. This sounds like a detail until an accountant asks why invoice 47 does not exist.
Sending emails the client a public link, flips the status to sent, and emits
invoice.sent. The verb tells the truth up front: with no contact email on the
invoice (or email sending not configured) the button reads Mark as issued,
the confirmation says no email will go, and the notification afterwards says the
same — the event carries an emailed flag so automations can tell the two
apart. An invoice without a deliverable address is still perfectly valid
(B2B, accounting); you share its public link yourself.
The client views it at a public link — no account, no login, read-only. They cannot see anything else about you, and the link cannot be guessed.
Marking paid emits invoice.paid, which is one of the most useful automation
triggers in the product: thank-you email, tag them as a customer, remind yourself to
follow up in a month.
There is a print-ready A4 layout for when someone wants paper.
The API can read invoices; creating them stays in the app deliberately, because an invoice with a wrong number created by a script is a problem that takes an accountant to unwind.
8.2 Products
Module: E-commerce
A catalogue: name, SKU, price, and the URL of the product's page on your site. Products can be switched inactive without being deleted.
That URL is doing more work than it looks like. It is how a click in one of your emails becomes knowledge about a specific person's interest in a specific product. Fill it in.
8.3 Orders and loyalty
Orders have line items, a lifecycle — placed, shipped, delivered, cancelled, returned — and award loyalty points automatically, one point per unit of currency.
Orders arrive three ways: typed in, through the API, or automatically from a connected shop.
Placing an order emits order.placed, with the products in the payload, so automations
can react to what was bought and not merely that something was.
8.4 Interest signals — the part that is genuinely unusual
Most CRMs know who bought. This one also knows who looked and did not.
An interest signal is a record that a specific contact showed interest in a specific product. Three things create one:
A click in your email. Someone clicks a link in a campaign; the URL is matched against your product catalogue. This is why the product URL field matters.
An abandoned checkout. If your shop is connected, a checkout that was started and not finished becomes a signal.
Your own observation. Someone tells you at an event that they are interested; you log it by hand.
The first signal creates the record and emits product.interest. Repeats do not create
duplicates — they increment a counter and update the timestamp, so you can see the
difference between a passing glance and someone who has come back four times.
Buying the product deletes the signal. Interest converted; it stops appearing as an opportunity. Without this, your interest list would slowly fill with people who already bought, which is how these systems usually die.
Reports → Products shows the picture.
What to do with it: product.interest is an automation trigger. Notify the account
owner. Send information about that exact product — not a generic catalogue. Follow up
personally when the counter gets high, because a counter of four is a person waiting to
be asked.
8.5 Connecting a shop
A shop connector pushes data in: customers become contacts, abandoned checkouts become interest signals, orders become orders with line items and loyalty points. Order notifications that arrive twice are deduplicated.
Every incoming message is verified cryptographically and journaled, so you can see what
arrived and what was rejected. Setup is in Settings → Connectors, and the mechanism is
covered in chapter 11.
8.6 Getting paid for CRM City itself
Separate from everything above, which is about your money.
Settings → Billing shows your plan and lets you upgrade. Payment is handled by Stripe;
your card details never touch this product. The same page gives you the customer portal,
where you change plan, update your card, or cancel.
Plans limit users, contacts, automations and sequences. Hitting a limit does not break anything you already have — existing contacts, automations and sequences keep working exactly as they are. You simply cannot create new ones past the limit until you upgrade.