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.