Transaction import is used to load historical or external folio transaction data into the CRM, such as spend details for loyalty earning, transaction records from non-integrated POS systems, correction and adjustment transactions, and legacy revenue activity during implementations or migrations.
Understand transaction imports
Transaction import creates transaction entries in the CRM that can be used for loyalty earning rules, revenue-based segmentation, guest activity reporting, and historical revenue consumption analysis.
When to use transaction import
During initial onboarding or migration from a legacy system to load historical transaction data.
When you have an unconnected POS system and perform manual imports at regular intervals.
To import legacy revenue activity that predates your current POS integration.
To load correction or adjustment transactions from external systems.
When not to use transaction import
Do not perform transaction imports if your POS (Point of Sale) is connected to the CRM. If you have an active POS integration with SHR CRM, transaction data flows automatically from your POS. Manual transaction imports while an active POS connection exists can create duplicate records and data inconsistencies.
What transaction import does
Creates stand-alone transaction entries that can be used by the CRM for financial and loyalty calculations.
Triggers loyalty earning rules based on revenue if configured.
Provides revenue data for segmentation and reporting.
Maintains historical guest spending records.
What transaction import does not do:
Does not modify guest profile demographic information.
Does not modify reservation records.
Does not directly modify loyalty point balances (points are calculated based on earning rules).
Does not modify reward balances.
Cannot be undone through bulk import.
Does not overwrite existing transactions.
Transaction Import relies heavily on correct merchant code and transaction code mapping. The system creates a new transaction entry per CSV row and assigns it to the guest profile using the provided loyalty member ID or guest email address.
Key characteristics
Outlined below are key characteristics of transaction import.
Requires profile identification (Loyalty Member ID or Email).
Requires correct merchant codes that match CRM configuration.
Requires transaction dates.
Supports transaction amounts and multiple revenue categories.
Processes transactions row-by-row.
Cannot be undone via bulk import.
Does not overwrite existing transactions.
May trigger loyalty earning rules automatically if configured for revenue-based earning.
Before you start
Outlined below are important factors to know before you can perform a transaction import.
Confirm that all merchant codes in your file match CRM hotel configuration.
Verify that each row includes the correct identifier (Loyalty Member ID or Email) for the profile receiving the transaction.
Remove placeholder or invalid data such as TEST, NULL, or NONE.
Confirm all revenue amounts use numeric formatting with no currency symbols or commas.
Confirm your CSV contains accurate and complete historical records.
Perform a test import with five to ten rows before processing a full file.
Verify your date format matches the format you will select during import.
⚠️Important: Incorrect transaction imports may impact loyalty point earning and revenue reporting. These imports cannot be undone through bulk import.
File format requirements (CSV)
Your transaction import CSV file must contain required fields and may include optional fields. The table below lists all available fields.
General CSV rules
Save your file in CSV (Comma delimited) format (.csv).
Header row required.
One transaction per row.
No blank rows.
Merchant codes must match CRM hotel configuration.
Transaction amounts must be numeric only (no currency symbols, commas, or letters).
At least one identifier required (Loyalty Member ID or Email).
Required fields
The following fields are mandatory. The import will fail if any required field is blank or left unmapped.
Field | Description | Field Type | Limit / Values |
Loyalty Member ID or Email | Guest's loyalty program member ID or email address (at least one required; stored in guest profile) | Alphanumeric | Loyalty Member ID: 32 characters; Email: 128 characters, valid email format |
Transaction Date | Date the transaction occurred (stored in transaction record) | Date | Must match selected date format |
Merchant Code | Property/hotel code where transaction occurred (stored in transaction record) | Alphanumeric | 16 characters, must exist in CRM |
Total Charge | Total transaction amount (stored in transaction record) | Numeric | Decimal number, no currency symbols; converted to cents (multiplied by 100) |
Currency Code | ISO currency code (stored in transaction record) | Alphanumeric | Must exist in CRM currency list (e.g., USD, EUR, GBP) |
Optional fields
The following fields enrich the transaction and guest records but are not required for import. Fields marked as stored in guest profile follow the character limits and validation rules defined in guest bulk import and are only written when creating new profiles.
Field | Description | Field Type | Limit / Values |
Transaction ID | Unique identifier for the transaction (stored in transaction record) | Alphanumeric | 32 characters |
Action Code | Transaction action type (stored in transaction record) | Alphanumeric | N=New, M=Modify, C=Cancel |
Merchant Name | Property/hotel name (stored in hotel record) | Alphanumeric | 255 characters |
URL Merchant | Property URL (stored in hotel record) | Alphanumeric | 255 characters |
Chain Code | Hotel chain identifier (stored in hotel record) | Alphanumeric | 255 characters |
Food & Beverage | Food and beverage charges (stored in transaction record) | Numeric | Decimal number, no currency symbols; converted to cents (multiplied by 100) |
Tax Food & Beverage | Tax on food and beverage (stored in transaction record) | Numeric | Decimal number, no currency symbols; converted to cents (multiplied by 100) |
Spa | Spa service charges (stored in transaction record) | Numeric | Decimal number, no currency symbols; converted to cents (multiplied by 100) |
Tax Spa | Tax on spa services (stored in transaction record) | Numeric | Decimal number, no currency symbols; converted to cents (multiplied by 100) |
Other Revenue | Other revenue charges (stored in transaction record) | Numeric | Decimal number, no currency symbols; converted to cents (multiplied by 100) |
Tax Other Revenue | Tax on other revenue (stored in transaction record) | Numeric | Decimal number, no currency symbols; converted to cents (multiplied by 100) |
Salutation | Guest salutation/title (stored in guest profile) | Alphanumeric | 5 characters (Mr, Mrs, Ms, Dr, etc.); special characters may be removed |
First Name | Guest's first name (stored in guest profile) | Alphanumeric | 64 characters; accented characters allowed |
Last Name | Guest's last name (stored in guest profile) | Alphanumeric | 64 characters; accented characters allowed |
Middle Name | Guest's middle initial or name (stored in guest profile) | Alphanumeric | 1 character; accented characters allowed |
Birthday | Guest's date of birth (stored in guest profile) | Date | Must match selected date format |
Gender | Guest's gender (stored in guest profile) | Alphanumeric | 1 character (M, F) |
Address 1 | Primary address line (stored in guest profile) | Alphanumeric | 256 characters; some special characters removed (# allowed) |
Address 2 | Secondary address line (stored in guest profile) | Alphanumeric | 256 characters; some special characters removed (# allowed) |
City | City name (stored in guest profile) | Alphanumeric | 128 characters; some special characters removed |
Region/State | State or province (stored in guest profile) | Alphanumeric | 128 characters; some special characters removed |
Zip | Postal or ZIP code (stored in guest profile) | Alphanumeric | 16 characters |
Country | Country code or name (stored in guest profile) | Alphanumeric | 16 characters |
Phone | Primary phone number (stored in guest profile) | Alphanumeric | 32 characters, can include country code with + prefix; spaces, parentheses, hyphens, periods automatically removed |
Mobile | Mobile phone number (stored in guest profile) | Alphanumeric | 32 characters, can include country code with + prefix; spaces, parentheses, hyphens, periods automatically removed |
Company | Company name (stored in guest profile) | Alphanumeric | 64 characters |
Language Code | Language preference (stored in guest profile) | Alphanumeric | Must exist in CRM for example en,es,fr ; system matches by language code or ISO 639 code (2 characters) |
Date format behavior
Transaction date and birthday fields are interpreted according to the date format you select during import. For example, 4/3/2027 could mean April 3 or March 4 depending on your selection. Invalid dates will result in row-level failures. Ensure your date format selection matches your CSV data consistently across all rows.
Character encoding and special characters
File encoding
Save CSV files in UTF-8 encoding for best compatibility with international characters.
Accented characters
Name fields (First Name, Last Name, Middle Name) fully support accented characters such as é, ñ, ü, ö, à, and ç. The system does not apply character filtering to name fields—they are only truncated to their maximum length.
Examples of valid names: José García, François Müller, Søren Østergård, Björk Guðmundsdóttir
Special characters in address fields
Address fields (Address 1, Address 2, City, Region/State) may have the following special characters removed during processing:
Characters Removed |
@@ (double at sign) |
+ (plus sign) |
' (single quote/apostrophe) |
-- (double hyphen) |
% (percent sign) |
^ (caret) |
& (ampersand) |
? (question mark) |
( ) (parentheses) |
< > (angle brackets) |
[ ] (square brackets) |
{ } (curly braces) |
/ \ (slashes) |
; (semicolon) |
: (colon) |
" (double quote) |
📌Note: The # character is allowed in address fields and is not removed.
Phone number formatting
Phone numbers have the following characters automatically removed during processing: spaces, parentheses, hyphens, and periods.
Examples:
Input: +1 (212) 555-1234 → Stored as: +12125551234
Input: 212.555.1234 → Stored as: 2125551234
Numbers starting with + will have the country code automatically parsed and separated.
Create your CSV file
Follow the steps below to create a properly formatted CSV file for transaction import.
Open Microsoft Excel or Google Sheets.
In row 1, create column headers that match the field names listed in the table above (e.g., Loyalty Member ID, Transaction ID, Transaction Date, Merchant Code, Total Charge, Currency Code).
Starting in row 2, enter one transaction per row.
Verify that required fields (Loyalty Member ID or Email, Transaction Date, Merchant Code, Total Charge, Currency Code) are populated for every row.
Verify that numeric fields contain only numbers and decimal points (no currency symbols, commas, or text).
Verify that date fields follow a consistent format throughout the file.
Go to File, click Save As or File and click Download in Google Sheets.
Select CSV (Comma delimited) (*.csv) as the file type.
Name your file descriptively for example transaction_import_2025-01-28.csv.
Click Save.
Step by step guide to transaction import
Follow the steps below to import transaction records.
From the left navigation menu, click Profile Management.
Click Bulk Import.
Click the tab labeled Transaction Import.
Click the button labeled Transaction Import.
Click Upload File and select your CSV file.
Select a Date Format that matches your CSV's Date format
Map source columns to CRM fields by dragging and dropping:
Required fields appear in red until mapped.
Auto-matched fields appear in blue.
Verify each mapping is correct.
Click Save and Close to start processing.
A confirmation banner appears if the file is accepted. The system processes the import asynchronously in the background.
View transaction import results
Follow the steps below to view import results.
From the left navigation menu, click Profile Management.
Click Bulk Import.
Locate your transaction import entry in the list.
Review the status:
Processing, Completed and Failed.
Click the record to view errors or failed rows if applicable.
To view imported transactions on guest profiles:
Navigate to Profile Management and click Guest.
Search for and open a guest profile that was included in the import.
Click the Transactions tab to view transaction details.
Error file format:
If any rows fail during processing, the system generates an error CSV file with the naming pattern TransactionImportError_{ClientID}_{Timestamp}.csv. The error file contains all original columns plus an Error column describing why each row failed.
Revenue field conversion
All monetary values are converted from decimal to integer storage. For example, 150.00 becomes 15000 (cents). This ensures accurate financial calculations without floating-point errors.
Guest matching and profile creation
The system matches transactions to existing profiles using the following priority:
Loyalty Member ID – Provides the most reliable match if the member ID exists in the CRM.
Email address – Used as a fallback if no loyalty member ID is provided or if the member ID does not match an existing profile.
If no matching profile is found, the system creates a new guest profile using the demographic information provided in the CSV. Guest profile fields such as salutation, First Name, Last Name, Middle Name, Birthday, Gender, Address 1, Address 2, City, Region/State, Zip, Country, Phone, Mobile, Company, Language Code are only written when creating new profiles. Existing profiles are not updated with this information.
Loyalty earning
If your loyalty program includes revenue-based earning rules, the import may automatically trigger point calculations. Points are added based on the total charge or specific revenue categories such as Food and Beverage, Spa, other revenue depending on your earning rule configuration. The GuestPoint table records all points transactions with ActivityType set to transaction (value 14).
Completion notification
After processing completes, the system sends an email notification to the user who initiated the import with success count, error count, and a link to the error file if applicable.
Tips and best practices
Outlined below are tips and best practices for transaction import.
Keep transaction amounts numeric and free of formatting characters such as no $, commas, or currency symbols.
Confirm your date format selection matches your CSV data consistently across all rows.
Always validate profile identifiers, incorrect or missing identifiers will cause row failures.
Perform a test import with five to ten rows before processing large files to verify field mappings and data quality.
Review loyalty earning rules before importing large transaction files to understand point calculation impact.
Save CSV files in UTF-eight encoding for best compatibility with international characters.
Troubleshooting
Outlined below are common issues and their solutions for Transaction Import.
Merchant Code not found
The merchant code in your CSV does not match any hotel configuration in the CRM. Verify the merchant code exists under CRM Setup and click Hotel Group and correct the values in your CSV.
Row failures due to missing profile match
The Loyalty Member ID or Email may be incorrect, missing, or may not match an existing profile. Verify the identifier exists in CRM or ensure all required demographic fields are provided to create new profiles.
Incorrect amounts displayed
Ensure the Total Charge column and all revenue fields are purely numeric. Remove currency symbols ($, €, £), commas, and any text. Use decimal points only for example 150.00 not $150.00.
Date-related import issues
Your Date Format selection may not match your CSV data. Ensure consistent date formatting across all rows. For example, if you select mm/dd/yyyy format, all dates must follow that pattern. Invalid dates will cause individual row failures.
Currency Code invalid
The Currency Code must exist in the CRM currency list. Common codes include USD, EUR, GBP, CAD, AUD. Verify the currency code is configured under CRM Setup and click System Settings before importing.
Import fails entirely
Common causes include:
CSV formatting errors (file not saved as .csv).
Missing or malformed header row.
Blank rows in the CSV file.
Unsupported characters in text fields.
Missing required field mappings.
Duplicate transactions
Transaction Import does not check for duplicates. If you import the same file twice, the system creates duplicate transaction records. Always verify import results before re-uploading files.
Language Code not saved
The language code must exist in the system language table. The system first attempts to match by language code, then by ISO 639 code (2-character). Verify language codes in CRM Setup and click System Languages.
Special characters missing from address fields
Certain special characters are automatically removed from address fields during processing. The # character is allowed and preserved. See the Character encoding and special characters section for the full list of removed characters.
Accented characters not displaying correctly
Ensure your CSV file is saved with UTF-eight encoding. Accented characters are fully supported in name fields (First Name, Last Name, Middle Name).
Frequently asked questions
Outlined below are a list of frequently asked questions.
Do transaction imports impact loyalty points?
Yes, if your loyalty program has earning rules configured for revenue-based point calculation. The system automatically triggers earning rules when transactions are imported, and points are awarded based on total charge or specific revenue categories depending on your configuration.
Can transactions be deleted after import?
Not through bulk import. Imported transactions must be removed manually by an administrator with appropriate permissions. Contact SHR support if you need to remove incorrectly imported transactions.
Do transaction imports create new guest profiles?
Yes, if the Loyalty Member ID or Email in your CSV does not match an existing profile, the system creates a new guest profile using the demographic information provided in the CSV. To avoid creating duplicate profiles, ensure identifiers match existing records or use the Guest Bulk Import first to create profiles before importing transactions.
Do transaction imports update existing guest profiles?
No. Guest profile fields such as name, address, phone are only written when creating new profiles. If a matching profile exists, the transaction is assigned to that profile but the profile's demographic information is not updated.
Can negative transactions be imported?
No, the Transaction Import does not support negative transaction amounts. Use the adjustment or correction features in the CRM to handle refunds or reversals.
Where do transactions appear after import?
Imported transactions appear on the guest profile's transactions tab. Navigate to Profile Management and click Guest, search for the guest, and click the Transactions tab to view transaction details.
What is the difference between Transaction Import and Reservation Import?
Transaction Import loads folio transaction data is spend records and is used for loyalty earning based on revenue. Reservation Import loads reservation records including check-in, check-out, room details, and rate information. Use Transaction Import for non-room revenue such as Food and Beverage, spa, retail and Reservation Import for hotel stay data.
Can I import transactions while my POS is connected?
No, do not import transactions if your POS is actively integrated with the CRM. Manual imports while a POS connection exists will create duplicate records and data inconsistencies. Transaction Import is intended for historical data, unconnected POS systems, or during migration periods only.
How long does transaction processing take?
Processing time depends on the number of rows in your CSV file. Small imports under 100 rows typically complete within a few minutes. Larger imports may take 15–30 minutes or longer. You will receive an email notification when processing completes.
Can I modify imported transactions?
No, imported transactions cannot be modified through the bulk import interface. Contact SHR support if you need to correct transaction data after import.
Are accented characters supported in name fields?
Yes. Name fields (First Name, Last Name, Middle Name) fully support accented characters such as é, ñ, ü, ö, à, and ç. Save your CSV file in UTF-8 encoding for best results.
Why are some special characters missing from my imported addresses?
Address fields have certain special characters automatically removed during processing, including apostrophes, ampersands, parentheses, slashes, and colons. The # character is allowed and preserved. See the character encoding and special characters section for details.
