aibrevo

GoHighLevel · Make.com · Aviation / Group Travel

Building an end-to-end group booking CRM and automation system

A single group travel enquiry can touch a dozen stages before it becomes a completed trip — requester, group details, qualification, quote, follow-up, booking decision, passenger information, documentation and post-trip follow-up. aibrevo designed the CRM and automation ecosystem connecting all of it for Spirit Airlines' group-booking operation, from first enquiry through to post-travel follow-up.

This case study covers the CRM and automation layer. The customer-facing quote request form, pricing engine, and payment platform built for the same group-booking operation is a separate engagement.

New InquiryQualificationAssignmentContactRequirementsQuote SentFollow-UpDecisionBooking ConfirmedInfo CollectionOperational HandoffTravel PrepPost-Travel
The connected lifecycle a single group booking moves through — one system, not a set of disconnected handoffs.

The challenge

Group travel isn't an individual booking. A single enquiry involves a requester, an organization, group size, dates, route, requirements and — usually — a quote that needs negotiation before anyone books. Managing that manually across a large airline operation creates delays, fragmented information, inconsistent follow-up and no shared visibility between sales and operations.

aibrevo designed and implemented an end-to-end CRM and automation ecosystem for Spirit Airlines' group-booking workflow, connecting customer acquisition, sales, communication, workflow automation, integrations, internal operations and reporting into a single system rather than a set of isolated automations.

Three properties of group travel make it harder than it looks. First, the data arrives incomplete: requesters submit what they know, which is often a rough date range and a headcount that will change. A system that assumes clean input either rejects real requests or accepts bad ones. Second, the sales cycle is negotiated and stretches over days or weeks, so follow-up has to be persistent without being intrusive, and has to yield immediately when a person replies. Third, the sale isn't the end. A confirmed group booking creates a second body of work, collecting passenger details and documentation, that belongs to a different team who need the sales context without asking for it again.

Each of those is a place where information gets lost between people or systems. The design goal was to remove the gaps rather than speed up individual steps: every record has one owner and one next action at all times, and every handoff carries the full history with it.

The architecture: four connected layers

01

Acquisition & Routing

Every group inquiry lands in one CRM record — requester, organization, dates, route, group size and requirements — then gets validated and routed to the right owner automatically instead of sitting in a shared inbox.

02

Sales & Quoting

Qualification, discovery, quoting and follow-up run as a structured pipeline with an owner and next action at every stage, not an email thread someone has to remember to revisit.

03

Operations

A confirmed booking triggers a clean handoff into passenger/group information collection and internal task creation — sales and operations work off the same record instead of recreating it.

04

Retention & Recovery

Non-responsive quotes get a structured follow-up sequence instead of quietly going cold, and lost opportunities move into nurture rather than disappearing from the pipeline.

Seven pipelines, one booking lifecycle

A group inquiry, a qualified opportunity and a confirmed booking aren't the same record moving through one flat list — treating them that way is where most CRM builds for group travel fall apart. An inquiry is an unvalidated request. An opportunity is a qualified deal with a quote being negotiated. A booking is a commitment with operational obligations attached. Each has different owners, different required data and a different definition of "done," and forcing them into one stage list produces a pipeline where half the columns mean different things depending on who is looking.

This build runs seven connected pipelines instead, each with explicit entry and exit criteria so a record only advances when the data the next stage needs actually exists:

Group inquiry intake

New Group Inquiry → Information Required → Qualified → Assigned → Contacted → Quote Preparation → Quote Sent → Follow-Up → Negotiation/Decision → Booking Confirmed. Every inbound request is captured with requester, organization, dates, route, group size and requirements the moment it arrives. The point of this pipeline is that the first minute of an inquiry's life is handled by the system: it is validated, acknowledged and owned before it can sit unread in a shared inbox, which is where group requests most commonly go to die.

Qualification

Checks group size, travel dates, route and requirements against what's needed to quote. Complete information moves the record to Qualified automatically; missing fields route it to Information Required with an automated request instead of a manual review. The request to the customer names exactly which fields are missing, so a requester answers one specific question rather than a generic 'please send more details' that produces another round of back-and-forth.

Sales / group booking

Qualified → Discovery/Requirements → Quote Preparation → Quote Sent → Follow-Up → Negotiation → Decision Pending → Confirmed → Lost/No Decision. Every opportunity carries an owner, stage, next action and full communication history. Because group deals are negotiated rather than clicked, the record is built to hold multiple quote versions and the conversation around them, so anyone picking up the opportunity can see what was offered and why it changed.

Quote follow-up

Quote Sent starts a follow-up window; no response triggers Follow-Up #1, #2 and #3 before the opportunity moves to long-term nurture. Any customer reply at any point pauses automation and hands the opportunity back to a human. That pause rule is deliberate: an automated reminder landing in the middle of a live negotiation is worse than no reminder, so inbound replies take priority over every scheduled step.

Booking confirmation & handoff

Booking Confirmed triggers customer-facing confirmation and next-step communication plus internal tasks and team notification — a clean sales-to-operations transition without re-entering the customer record. Operations inherits the full history of the sales conversation, including the requirements captured during discovery, so travel preparation starts from what was actually agreed rather than what someone remembers.

Closed lost & reactivation

Closed Lost → reason captured → categorized into the right nurture track → re-engagement sequence. A lost opportunity is requalified and reopened the moment the customer shows renewed intent, rather than staying permanently closed. Group travel is often seasonal or event-driven, so a group that declined this year for timing reasons is exactly the group worth a well-timed re-approach.

Travel prep & post-travel

Booking Confirmed → Information Collection → Documentation Complete → Travel Prep → Trip Completed → Post-Travel Follow-Up → Repeat Prospect. This is the stretch that closes the loop most sales-only CRMs leave open: what happens between a confirmed booking and the trip itself, and what happens after. Each stage has its own tasks and reminders so passenger details and documentation are tracked to completion instead of assumed.

Make.com as the integration layer

GoHighLevel stays the customer-facing operational hub while Make.com handles the orchestration between it and connected systems — a new group inquiry triggers a webhook, Make.com processes and validates the data, applies routing logic, and writes the result back into GoHighLevel as an opportunity with the correct owner, tags and notifications. Complex business logic runs outside the CRM instead of being forced into it.

The split is a deliberate design choice. CRM workflow builders are good at stage-driven, contact-centered automation: send this message when this status changes. They get awkward when logic involves matching against existing records, branching on several conditions at once, or reshaping data arriving from different sources in different formats. Putting that in Make.com keeps the CRM's own workflows short and readable, and makes the complicated logic visible in one place rather than scattered across dozens of nested workflow branches.

A typical inquiry passes through the orchestration layer in five steps:

  1. 01

    Trigger

    A new inquiry from a web form, email parser or other source fires a webhook into a Make.com scenario. The scenario receives the raw payload exactly as submitted, before any interpretation.

  2. 02

    Validate and normalize

    Required fields are checked, dates and group sizes are normalized into consistent formats, and free-text request types are mapped to the defined categories the pipelines expect. Bad or partial data is caught here rather than polluting the CRM.

  3. 03

    Match and route

    The scenario looks for an existing contact or open opportunity, then applies routing logic — request type, group size, route or market — to pick the correct owner. This is the logic that would be awkward and brittle inside CRM workflow builders alone.

  4. 04

    Write back

    The result is written into GoHighLevel: contact and organization created or updated, opportunity created in the right pipeline and stage, tags applied and internal notification sent.

  5. 05

    Log and recover

    Each run is logged. Failed runs route to an error handler that records what failed, alerts the team and queues the record for manual resolution, so nothing is dropped silently.

Webhooks and API calls are treated as contracts. The fields Make.com sends into GoHighLevel, and the status values it expects back, are documented and kept stable, so a change on one side doesn't silently break the other. When a source system changes its format, the fix lives in one normalization step instead of rippling through every downstream workflow.

Automation that removes the manual handoff

Every stage transition above is backed by an automation, not a person remembering to move a record. The governing rule is that an automation either advances a record or explains why it can't. A workflow that quietly does nothing when a precondition fails is worse than no workflow at all, because the team assumes the step happened. Each one therefore has a defined trigger, defined preconditions and a defined fallback, usually a notification or a queued manual task. A few of the load-bearing ones:

Lead routing

New inquiry → validate fields, identify request type, assign owner, create opportunity, apply tags, create internal task, send acknowledgement — before a human touches it.

Qualification gate

Complete information → Qualified. Missing information → automated request for exactly what's missing, instead of an employee manually reviewing every field.

Quote follow-up sequence

No response after a quote triggers escalating follow-ups on a fixed schedule, then long-term nurture — and stops the moment the customer responds.

Booking → operations handoff

Booking Confirmed → confirmation sent, documentation requests queued, internal tasks created, operations team notified, customer lifecycle stage updated — all from one status change.

Error handling

Automation trigger → process → on failure, the workflow logs the error, notifies the internal team and queues manual resolution instead of silently failing.

Duplicate detection

Group requests frequently arrive twice — a form submission followed by an email, or a requester submitting again after not hearing back. Incoming requests are matched against existing contacts and open opportunities before a new record is created, so one group doesn't end up with two owners and two conflicting quotes.

Reassignment on inactivity

An opportunity that sits untouched in a stage beyond its allowed window is flagged and can be reassigned, so a request isn't stranded because one owner is out of office or overloaded.

Passenger information collection

After confirmation, the requester receives a structured request for passenger and group details with reminders for anything outstanding, and completion status is written back to the booking so operations can see at a glance what is still missing.

Post-travel follow-up

Trip completion triggers a follow-up sequence covering feedback and a prompt for future group travel, moving the organization back into a nurture track as a repeat-booking prospect rather than closing the record.

The data model underneath it

Separate, related object types instead of one flat contact record carrying every detail of a group request:

ContactWho is the requester
OrganizationWho they're booking on behalf of
OpportunityWhere the request sits in the sales process
Group RequestThe specific travel requirement being managed
BookingConfirmed booking status and details
ActivityCommunication and actions taken on the record
QuoteWhich version was sent, when, and what response it received
Passenger / group rosterTraveler details collected after confirmation, tracked as complete or outstanding

The relationships carry the logic. One Contact (the requester) can belong to an Organization and can make several Group Requests over time. Each Group Request can carry an Opportunity with more than one Quote as terms are negotiated, and a request that converts produces a Booking, which in turn owns the passenger roster and its completion status. Activity records hang off all of them, so the complete history of a trip, from first email through post-travel follow-up, is reconstructable from one place.

The reason to separate Group Request from Contact is repeat business. An organization that books a group this quarter and another next year is the same customer with two distinct requests. On a flat contact record the second request overwrites the first, and the history that would make the second quote faster and more accurate is lost. Related objects keep both, and let reporting distinguish new organizations from returning ones without manual tagging.

Tagging that drives automation

Tags are organized into four families: source, customer type, lifecycle stage and priority. The discipline is that a tag must be read by something. A source tag feeds reporting on which channels produce qualified requests. A customer-type tag selects the right communication template. A lifecycle-stage tag controls which automations a record is eligible for. A priority tag changes routing and follow-up timing. Tags that no workflow or report consumes are removed rather than accumulated, because an unmaintained tag list becomes noise that nobody trusts and nobody filters on.

Lifecycle-stage tags matter most for suppression. A record marked as mid-negotiation is excluded from nurture and reminder sequences, and a record marked as booking-confirmed is excluded from anything sales-oriented. That prevents the failure customers notice most: a sales follow-up arriving after they have already booked.

Reporting across sales and operations

Reporting spans four views: sales pipeline and conversion by stage, operations workload and handoff status, customer activity and communication history, and automation health. The last one is easy to overlook and is what keeps the whole system trustworthy. The error-handling logs from the orchestration layer feed a view showing which automations ran, which failed and which records are waiting on manual resolution, so a broken integration surfaces within days instead of being discovered when a customer complains.

Because sales and operations share one record, the questions that usually require stitching together two systems can be answered directly: which confirmed bookings are still missing passenger information, which quotes have gone longest without a response, and which owners are carrying the most open requests.

The result

Before: inquiry → manual review → manual assignment → manual follow-up → quote → manual reminder → manual handoff to a separate operations process → manual reporting. After: one connected system carrying a group booking from first inquiry through qualification, quoting, follow-up, confirmation, operational handoff, travel preparation and post-travel follow-up — with no manual handoff between sales and operations.

What aibrevo built

The CRM, automation and integration layer.

  • Six connected pipelines covering the full inquiry-to-retention lifecycle
  • Automatic lead routing, qualification and quote follow-up with escalating reminders that pause the moment a human conversation starts
  • A Make.com orchestration layer connecting GoHighLevel to webhook- and API-based integrations
  • A structured tagging framework (source, customer type, lifecycle stage, priority) driving automation rather than sitting as unused labels
  • A clean sales-to-operations handoff at booking confirmation, with no record recreated by hand
  • Reporting across sales, operations, customer activity and automation health in one place

Why it's structured this way

The core design principle behind the build.

Group bookings fail in the gaps between systems, not inside any one of them — a quote that never gets followed up, a confirmed booking that operations doesn't hear about until a customer calls asking why nothing's happened. The architecture is built around "update once, automate the rest" instead of asking a team to keep three systems in sync by hand.

Design decisions and what to watch for

The useful part of any build is the set of decisions that shaped it and the failure modes it was designed around. These are the ones that mattered most on the group-booking system, and the ones worth planning for on any similar project.

  • Validate at the edge. Checking and normalizing data before it enters the CRM is far cheaper than cleaning it afterward. Once malformed dates or ambiguous request types are inside pipelines, every downstream automation inherits the problem.
  • Make human replies the highest-priority event. Any inbound response pauses scheduled automation. Without that rule, reminders collide with live conversations and damage exactly the relationships the sequence was meant to protect.
  • Separate the record types early. Retrofitting a Group Request or Quote object onto a CRM that has run for a year on flat contacts means untangling history that was never structured. Modeling them at the start costs a little design time and saves a migration.
  • Design failure paths deliberately. Integrations fail: webhooks time out, source systems change format, a field arrives empty. Logging the error, alerting a person and queuing manual resolution turns a silent data loss into a visible, fixable task.
  • Guard against duplicates. Group requests are especially prone to arriving through more than one channel. Matching against existing records before creating a new one prevents two owners quoting the same group at different prices.
  • Keep automation ownership documented. With this many workflows reading the same tags and stages, each needs a named purpose and a suppression rule. Otherwise two automations respond to the same event and the customer receives conflicting messages.
  • Review the automation set periodically. Business rules change. Workflows that were correct at launch drift out of date, so a scheduled review of triggers, tags and timing windows keeps the system matching how the team really operates.

The aibrevo approach

The brief wasn't "set up GoHighLevel for group sales." It was "design the complete digital operating system around group booking" — connecting CRM, sales, customer communication, workflow automation, Make.com, APIs/webhooks, internal operations and reporting into one architecture built for scale, not a template configuration. The connectors between GoHighLevel and Make.com followed the same pattern covered in ourGoHighLevel API integration guide. For a build of this scope, see what's included on theGoHighLevel implementation service page.

Running group or enterprise bookings through spreadsheets and inboxes?

Book the free 30-minute call. We'll give you an honest read on what your setup actually needs.