CRM
For: Agents Where to find it: Sidebar → CRM (Quote to Book seat-holders) · comes with Quote to Book
The CRM keeps every enquiry, client and trade agency in one place, moves each piece of business along a pipeline you can see at a glance, and turns a lead into a priced quote without anyone retyping the trip.
The CRM is part of Quote to Book — there is nothing separate to buy or switch on. If your organisation has Quote to Book, it has the CRM. Quote to Book in turn requires the Rates Engine.
What it does
- A pipeline board. Every live lead as a card in a column, dragged (or moved from a menu on the card) between stages. Your pipeline starts with a sensible set of stages and you can rename, add or retire them under CRM → Settings → Pipeline settings.
- Contacts and agencies. The person you correspond with, and the trade agency a booking came through, each with their own record and their full history. Contacts and agencies are archived rather than deleted, because leads and quotes point at them.
- An enquiry inbox. Enquiries submitted against your published itineraries land here, ready to be turned into a lead in one action. So do enquiries your website emails you, once you have connected the website. See The enquiry inbox below — this is the surface you should work from.
- A timeline per lead. Notes, calls, emails and tasks in one list, alongside the stage changes and quote events Tourium records for you. Tasks live in the same timeline, with a due date; you get an in-app notification for tasks due today.
- Quotes linked to leads. Build a quote from a lead and the brand, agency, travel window, party size and client details are copied across. Sending, accepting or declining that quote writes back to the lead's timeline and moves it along the pipeline.
- Lost reasons. Moving a lead into a losing stage asks why. That is the only field the board insists on, and it is the one that makes the pipeline worth reading later.
What it costs
Nothing extra. The CRM comes with Quote to Book, and who can use it is decided by Quote to Book's two kinds of seat:
| Seat | What it gives | Price |
|---|---|---|
| Consultant | Quoting, bookings and the CRM | Billed per seat: R2,499 for the first, R999 for each additional one |
| Basic | The CRM only — leads, contacts, agencies, the pipeline and the enquiry inbox. No quote building | Free, for as many people as you like |
So a consultant never needs a second seat for the CRM, and the people who only handle enquiries — a front desk, a sales assistant — get a basic seat at no cost. Seats are assigned on Organisation → Seats, where Quote to Book shows a Consultant column and a Basic column.
Seats are separate from your plan's ordinary team seats, which cover logging in and using the rest of Tourium.
Until October 2026 the CRM was a separate add-on billed at R499 / R249 per seat. Anyone who held a CRM seat then now holds a free basic seat, and the separate CRM charge comes off your bill.
Getting access
- Make sure your organisation has Quote to Book (see Turning it on).
- On Organisation → Seats, give each person a Consultant seat (if they quote) or a Basic seat (if they only work the CRM).
- CRM appears in the sidebar for them.
The agent guided setup asks the same thing in two steps: the Quote to Book step picks the consultants, and the CRM access step after it picks anyone else who should get a free basic seat. Your pipeline stages are created for you and are edited afterwards under CRM → Settings → Pipeline settings, so there is only ever one place they live.
Switching Quote to Book off takes the CRM with it. Your leads, contacts and agencies are not deleted.
Who needs what
Two different questions decide who can do what: do you hold a seat, and which permission do you have.
| To do this | You need |
|---|---|
| Open the CRM and work leads, contacts and agencies | A consultant or basic Quote to Book seat, plus the Manage the CRM permission |
| Convert an enquiry into a lead | The same: either seat plus Manage the CRM |
| Edit the pipeline stages themselves | Either seat plus Configure the CRM pipeline — renaming or retiring a stage changes every consultant's board |
| Build a quote from a lead, or convert an accepted quote to a booking | A consultant seat and the Manage quotes permission |
| Work the rate gaps worklist | The Manage rate sheets permission — no seat of either kind needed |
| Grant or revoke seats (consultant and basic) | The Manage Quote to Book seats permission (Owners and Super Admins always have it) |
The quote line is the one worth reading twice. A basic seat buys the pipeline; it does not buy quote-building. The "Build a quote" action on a lead demands a consultant seat and the Manage quotes permission in its own right, and the button is hidden from anyone without both. If a free seat let people build quotes, nobody would pay for a consultant seat — so give the people who quote a consultant seat.
The rate-gap split is deliberate for the opposite reason. Fixing a gap means editing a rate sheet, which is a rates job, usually done by somebody who holds no Quote to Book seat at all. Putting the worklist behind a seat would have hidden the work from the only people who can do it.
Managerial roles bypass the permission checks, so an owner always sees everything. A seat, on the other hand, is what says who works the CRM — managerial roles can reach the CRM screens without one, but ordinary team members cannot.
Choosing a contact or agency on a lead
The lead form's Contact picker searches every contact in the brand you're working in — type part of a name or email and Tourium searches as you type, however many contacts you have.
- Can't find them? Click New contact to create the contact in a small dialog without leaving the lead. What you've already typed on the lead is kept, and the new contact is selected for you.
- The agency picker works the same way: search, or click New agency to add one on the spot. To take an agency off the lead, click Remove agency.
- Pickers only offer active contacts and agencies from the current brand. Archived ones drop out of the pickers, but stay on every lead and quote they're already on.
The enquiry inbox
When somebody enquires through one of your published itineraries, two things happen: the enquiry is recorded, and the consultant on that itinerary gets an email.
Work from the inbox, not from the email. The consultant notification is deliberately rate-limited to five per link per hour — a protection against a single popular itinerary flooding an inbox. That limit means a burst of enquiries in one hour produces a handful of emails and nothing more. Every enquiry, emailed or not, appears in CRM → Enquiries, whether it came from an itinerary link or a website email (the Source column says which), and the tabs Waiting, Converted, Dismissed and Quarantined sort them. The inbox is the complete record; the email is a convenience.
From the inbox you can:
- Convert an enquiry into a lead. Tourium matches the enquiry's email against your existing contacts and tells you, before you commit, whether it will reuse a contact you already have or create a new one. Converting twice — a double-click, two people acting at once — cannot create two leads; the second attempt simply shows you the lead that already exists.
- Dismiss an enquiry that is spam or a duplicate, and restore it later if you were wrong.
Lead sources: connect your website
If your website already emails you every enquiry, Tourium can read those emails and turn them into enquiries in your inbox, so nobody has to retype them. Nothing becomes a lead on its own; a person always converts the enquiry.
Adding a website. Open the CRM settings, go to Lead sources and click Add website. Give it a Website name and a Brand, and optionally list the domains your site sends from under Only accept mail from (mail from anywhere else is quarantined). Tourium gives it its own private Inbox address — use Copy address.
Getting the emails to Tourium. Either add the address as a CC on the form's notification email, or set the website's mailbox to forward a copy of each enquiry to it. Keep your normal mailbox as it is; Tourium only needs a copy.
Pausing, replacing or removing. Pause stops a website's address accepting mail and Resume turns it back on. Issue a new address makes the old one stop working immediately, so update your website straight after. Remove website also stops the address; enquiries already received stay in your inbox.
The mapping screen. Every website words its form differently ("Your name", "Full name", "Guest"). Open the source's Field mapping screen to see each label from your form's last email and choose what it Means (or Don't use), then Save mapping. Tick Also re-read recent enquiries from this website to apply the change to enquiries already received. The screen waits for a first email and checks automatically; use Check again if it stops.
Quarantine. Tourium checks who really sent each email. If it cannot confirm the sender, or the email looks like spam or a bot, the enquiry is held in Quarantined instead of the main inbox and you are not notified. Open it to see why. If it is genuine, choose Move to inbox to release it; if not, dismiss it.
AI-read enquiries. When an email does not match the usual layout, Tourium may use AI to read it. Those enquiries are clearly flagged, so check the details before converting.
Raw copies of the original emails are deleted automatically after a retention period (180 days by default); the enquiry itself stays.
Good to know
- Contacts are one per email address, per brand. A couple sharing one mailbox is one contact — the person you correspond with. The travellers themselves are recorded as the party size on the lead. If somebody genuinely has a second address, put it in the alternative-email field.
- Moving a card back where it came from does nothing, on purpose. It does not restart the stage clock or write a history entry.
- A won or lost stage cannot be retired, and neither can a stage still holding open leads, or the last stage standing.
- Renaming a stage is safe. The automatic moves Tourium makes when a quote is sent or accepted follow the stage's underlying identity, not its label.
- Accepting a quote moves the lead to provisional. From there, Convert to booking on the lead turns the accepted quote into a booking — it needs a consultant seat and the Manage quotes permission; until a quote is accepted the lead shows "Accept a quote to turn it into a booking." Once the booking exists, the lead links straight to it (Booking {reference}), and booking events such as created, confirmed and cancelled appear on the lead's timeline. See Bookings and invoicing.
- Bookings & documents. A contact's, an agency's and a lead's page each has a Bookings & documents card: the bookings for that client and every proforma, invoice and voucher issued on them, with whether it was emailed and to whom. With Manage bookings a booking opens and a voucher downloads; with Manage finance you also see each booking's outstanding balance and can download invoices. Without them the card still shows what was sent, without links or amounts.
- Documents on the timeline. When a proforma or invoice is emailed, a payment is recorded, or a voucher is emailed, a line appears on the lead's timeline (or the contact's, if the booking has no lead). It names the document number, never an amount.
- Consultant seat charges appear on the Billing page under Quote to Book, and one-off prorated charges show under On-demand charges on the Invoices page. Basic seats never appear on a bill.
Related
- Quote to Book — the module the CRM is part of, and the consultant seat someone needs to quote from a lead.
- Bookings and invoicing — what happens after a lead's quote becomes a booking.
- Rates Engine — the add-on that gets your own supplier rates into Tourium.
- Itinerary builder — publishes the itineraries the enquiry inbox collects enquiries from.
- Billing and subscriptions
- Team management
Appendix — loading data at onboarding (Tourium operators)
Not a self-serve feature. Importing a client list is part of the white-glove onboarding a Tourium engineer runs against a tenant's database; there is no upload screen, and there is deliberately no --all-tenants mode, because a CSV is one organisation's data and a mistyped sweep would be a data-protection incident.
Three commands, in this order:
php artisan crm:import-agencies --tenant={tenant} --dry-run path/to/agencies.csv
php artisan crm:import-contacts --tenant={tenant} --dry-run path/to/contacts.csv
php artisan crm:link-quotes-to-contacts --tenant={tenant} --dry-run
Agencies first, always. A contact row naming an agency is resolved against the agencies already in that brand and is rejected if the name is not there. It never creates a stub agency (a misspelling would become a permanent duplicate that looks real in every picker) and never silently nulls the link (the contact would look like a direct traveller forever).
Dry-run first, then the fix loop. Run with --dry-run to see what would happen without writing anything. Then run for real with --report=rejected.csv: rejected rows are written back out verbatim, in the delimiter they arrived in, with a reason column. Correct that file and re-run it. A run with any rejection exits non-zero even though its accepted rows were written — a pilot reported as "loaded" while forty rows sit in a scrollback buffer is the failure this prevents.
Re-running a file is safe, with one exception. Rows are matched against the database's own unique indexes (lower(name) for agencies, lower(email) for contacts, both brand-scoped) and matched rows are updated in place, so an interrupted import can simply be run again. A contact row with no email has no natural key: it is imported, with a loud warning naming the count, and re-running that file will create those rows a second time. Do not re-run a file containing keyless rows — either give those rows an email and re-run only them, or accept the import as final.
crm:link-quotes-to-contacts is the one-off historical backfill: it matches quotes created before the CRM existed to contacts by email address. It is not required for the CRM to work — the contact page also matches on email at read time, so a direct-created quote shows up against its contact before any backfill has run.
The import commands deliberately do not check that the tenant holds Quote to Book (which the CRM is part of). Loading a prospect's client list is part of the pitch, and happens before anything is bought; the module gate is a UI and route concern and is fully applied there.