Skip to main content

Record non-room revenue

Many properties offer ancillary outlets or affiliated services beyond room bookings such as spas or restaurants. Recording these purchases directly in guest profiles provides a complete view of each guest's spending behavior and preferences.

M
Written by Michelle Normoyle
Updated over 2 weeks ago

Reasons to record non-room revenue

Capturing ancillary spend enables:

  • Personalized marketing based on actual guest preferences and behavior.

  • Complete RFMAC scoring (Recency, Frequency, Monetary, Add-on, Canceled) for accurate segmentation.

  • Loyalty credit earning from all on-property and partner purchases.

  • Rewards management tied to total guest value, not just room stays.

  • Comprehensive reporting showing true guest lifetime value.

  • Unified guest profiles that reflect all touchpoints with your property.

If your PMS does not send complete folios, or if you have external systems that process transactions independently, this feature ensures your CRM still captures total guest value across all revenue streams.


How non-room revenue enters the CRM

Non-room revenue data can be added to guest profiles through three methods:

Bulk import

The first method is bulk import, outlined below is how to carry out the import.

  1. Click Profile Management and click Bulk Import and click Transaction Import tab.

  2. Click Transaction Import to upload the file.

    • Upload CSV files containing transaction data. The Transaction Import interface allows you to map CSV columns to CRM fields and process batches of transactions.

    • The required fields in the CSV are listed below:

      • First Name, Last Name, Transaction Date, Total Charge, Merchant Code (property/outlet identifier) and Transaction ID (unique transaction identifier).

    • The optional fields in the CSV are listed below:

      • Loyalty Member ID, Revenue category breakdowns: Food & Beverage, Spa, Other Revenue (with separate tax fields), Guest contact details: Email, Phone, Mobile, Birthday, Address and Transaction details: Currency Code, Language Code, Action Code.

    • File validation:

      • Transaction date must not be empty and must match your specified date format.

      • Total charge must not be empty.

      • Merchant code must not be empty.

      • Transaction ID must not be empty.

      • Birthday (if provided) must match your specified date format.

  3. Failed records are written to an error CSV file with specific error messages. You'll receive an email notification with success or error counts and a link to download the error file if applicable.

Secure file transfer

For properties requiring automated, scheduled imports, the CRM supports SFTP (Secure File Transfer Protocol) for retrieving transaction files on a defined schedule configured during implementation.

Operational guidelines:

  • Schedule frequency is determined during implementation.

  • File format follows the same structure as manual bulk imports.

  • Processing occurs automatically via background services.

๐Ÿ“ŒNote: This must be contracted. Contact support for details regarding this feature.

Real-time integration

External systems can send transaction data in real-time via REST API endpoints:

  • Post to the reservation or upload folio for assigning charges to existing reservation folios.

  • Transaction API endpoints - For standalone transactions not tied to room folios.

Contact the SHR Group team for integration guidance and supported partner systems.


Understanding transaction code mapping

Every point-of-sale (POS) or ancillary system uses its own transaction codes or revenue codes to categorize charges. These external codes must be mapped to CRM folio transaction codes so that transactions appear correctly in profiles, reports, and loyalty calculations.

Ensure mapping is correct

  • Accurate revenue attribution - Charges are categorized correctly such as food and beverage, spa and other revenue.

  • Reliable segmentation - Guests can be grouped by spend patterns across specific outlets.

  • Consistent reporting - Revenue totals reflect actual business performance by category.

  • Loyalty credit earning - Configured earning rules can apply to specific revenue categories.

Revenue categories

The CRM tracks three non-room revenue categories:

Category

Description

Tax Field

Food & Beverage

Restaurant, bar, room service, catering charges

Tax Food and Beverage

Spa

Spa services, wellness treatments

Tax Spa

Other Revenue

Retail, golf, activities, parking, other ancillary services

Tax Other Revenue

All imported or integrated transactions must be mapped to one of these categories through folio transaction code configuration.

Mapping configuration

The below steps with outline how folio transaction codes are configured.

  1. Click CRM Setup and click Folio Transaction Codes.

    • Each external system's transaction codes are mapped to internal CRM codes, which are then assigned to one of the revenue categories above.

    • This mapping determines how charges are categorized, reported, and processed for loyalty purposes.

๐Ÿ“ŒNote: Detailed steps for configuring folio transaction codes and code mapping are covered in a separate article.

Preventing double-counting

Ensure revenue is not counted twice by:

  • Avoiding simultaneous import from PMS folios AND external systems for the same charges.

  • Coordinating with your implementation team on which system is the source of truth for each revenue category.

  • Using unique transaction IDs to prevent duplicate processing.

Multiple external systems can be connected simultaneously for example spa software plus POS system, but each charge should only enter the CRM once.

Loyalty module considerations

If your property uses the loyalty module, additional configuration determines whether non-room revenue contributes to:

  • Tier qualification - Whether spend in specific outlets counts toward tier upgrades.

  • Credit earning - Whether guests earn loyalty points or credits from ancillary purchases.

These settings are configured in:

  1. Click Loyalty Setup and click Membership Tiers - For tier consideration rules.

  2. Click Loyalty Setup and click Loyalty Earning Rule Setup - For credit earning rules.

Both configurations reference the folio transaction codes you've mapped, allowing granular control over which revenue categories contribute to loyalty program metrics.

๐Ÿ“ŒNote: Detailed steps for loyalty configuration are covered in separate articles. The value from external systems can be used for reporting and segmentation regardless of whether the Loyalty module is active.

Where transaction data appears

Transaction data displays in different areas of the CRM depending on whether charges are associated with a room folio or recorded as standalone transactions.

Reservations tab

When to expect data here: Charges posted to an existing reservation folio.

When external systems send charges to the UploadFolio API endpoint and reference an existing reservation, those charges appear on the Reservations tab alongside room charges. All folio-associated charges display together, including mapped ancillary service codes.

Database identifier: Records have standard reservation status codes for example 'A' for active, 'I' for in-house, 'O' for checked-out.

Transactions tab

When to expect data here: Standalone charges not tied to a room folio.

Ideal for:

  • Walk-in purchases, spa appointment without a room booking.

  • On-property dining by local residents.

  • Retail sales to non-guests.

  • Golf rounds or activities booked independently.

  • Any transaction where the guest did not have an active reservation.

Database identifier: Records have ResStatus is equal to T which stands for transaction type.

Display format: The transactions tab shows:

  • Transaction date.

  • Location or merchant name.

  • Guest name.

  • Transaction ID.

  • Revenue breakdown by category such as food and beverage or spa.

  • Tax amounts per category.

  • Total charge.

  • Folio items detail, if available.

Loyalty module earnings tab

When to expect data here: Loyalty module is enabled and earning rules are configured.

The earnings tab displays all loyalty credit earnings regardless of source. For transactions originating from external systems, the hotel or merchant name reflects the external system name as configured in your merchant code mapping.

Earnings show:

  • Transaction date.

  • Earning rule applied.

  • Points or credits earned.

  • Source system or merchant.

  • Associated reservation, if applicable.

Segmentation

Non-room revenue can be combined with other guest attributes to create targeted segments, including:

  • RFMAC scoring components.

  • Guest preferences and behaviors.

  • Loyalty status and tier.

  • Future and past stays.

  • Demographics.

  • Specific activity types or outlet usage.

Available segment filters

Lifetime spend filters:

  • Lifetime spend: Room only, total room revenue only.

  • Lifetime spend: Non room, combined food and beverage, spa and other revenue.

  • Lifetime spend: Total, all revenue categories combined.

  • Lifetime room nights: Total nights stayed.

  • Lifetime stays: Total number of stays.

๐Ÿ“ŒNote: Individual filters for food and beverage only, Spa only, or Other Revenue only are not available. Use Lifetime Spend - Non Room for all ancillary spend combined.

Segmentation examples

Create segments for targeted marketing such as:

  • High-value spa guests (Lifetime Spend - Non Room > $X AND specific Revenue Code filters).

  • Restaurant-only customers (Lifetime Stays = 0 AND Lifetime Spend - Non Room > 0).

  • Guests with strong local usage (Transactions with no associated room folios).

  • Retail-focused segments (Transaction records from retail Merchant Codes).

To navigation to segments follow the steps below:

  1. Click Campaign Management Tool and click Segments.

  2. Click Filters tab.


Reporting

Reports incorporate all mapped non-room revenue, enabling a complete financial picture of each guest's value regardless of where transactions occurred.

To navigate to the performance metrics report follow the steps below:

  1. Click CRM Reports and click Loyalty Program Reports and click Performance Metrics Report.

    • This report includes non-room revenue metrics:

      • Total Non-Room Revenue (aggregate across all categories).

      • Total Non-Room Revenue - Members.

      • Total Non-Room Revenue - Non-Members.

    • Compare member versus non-member spending patterns to measure loyalty program impact.

    • Guest transaction detail view:

      • Individual transaction records display separate columns for:

        • Food and beverage revenue.

        • Spa revenue.

        • Other revenue.

        • Tax amounts per category.

        • Folio items breakdown, revenue code and amount.

Access transaction details through the guest profile transactions tab for complete purchase history.


Getting started

To begin recording non-room revenue consider the follow outlined below.

  • Identify your external systems - Determine which POS, spa, retail, or activity booking systems you want to integrate.

  • Obtain transaction codes - Collect the complete list of transaction or revenue codes used by each external system.

  • Configure folio transaction codes - Map external codes to CRM revenue categories.

  • Choose import method - Decide between bulk import, SFTP, or real-time integration based on your operational needs.

  • Test with sample data - Process a small batch to verify mapping and data flow.

  • Configure loyalty rules, this is optional - Set up tier consideration and earning rules if using the loyalty module.

  • Contact the SHR support team for integration guidance, supported partner systems, and implementation support.


Frequently asked questions

Listed below are some of the most frequently asked questions.

Can I import transactions for guests who don't have existing profiles?

Yes. The transaction import process creates new guest profiles if a matching profile is not found. The system matches by email address or loyalty member ID.

What happens if I import the same transaction twice?

The system has limited deduplication at the database level. To prevent duplicate charges, ensure your external systems implement deduplication logic before sending data to the CRM, or use unique transaction IDs for each import.

Can I import transactions that occurred before a guest joined the loyalty program?

Yes. Transaction date and loyalty join date are independent. Historical transactions can be imported at any time.

Do non-room revenue transactions count toward tier qualification automatically?

Only if configured in Loyalty setup and click membership tiers. By default, transactions do not contribute to tier qualification until you configure which folio transaction codes should be considered.

How do I know which revenue category a transaction was assigned to?

Check the folio transaction codes configuration, click CRM Setup and click folio transaction codes to see how each external code is mapped to food and beverage, spa, or other revenue categories.

Can I change the revenue category assignment after transactions are imported?

Changing the folio transaction code mapping affects future imports only. Previously imported transactions retain their original category assignment. Contact SHR Group support if you need to reclassify historical data.

What if my PMS already sends complete folios including ancillary charges?

If your PMS includes all charges in the folio, you typically do not need separate transaction imports. However, you may still need to configure folio transaction code mapping to ensure charges are categorized correctly for reporting and loyalty purposes.

Did this answer your question?