Putting a Tourist Railroad's Store and Cafe Revenue Inside NetSuite
How a tourist railroad connected Toast POS to NetSuite so its gift shop and cafe post a full day of sales, refunds, fees, gift cards, and tips automatically each night, with inventory staying in sync between the two systems.

Client: A tourist railroad that runs a gift shop and a cafe in a multi subsidiary environment.
Platform: NetSuite ERP (OneWorld), Boomi, Toast POS
Focus area: Point-of-sale revenue automation, retail inventory sync, gift-card liability accounting
Solution: A nightly NetSuite and Boomi integration that books each day's gift shop and cafe activity into NetSuite, including sales, refunds, processing fees, gift cards, and tips, while keeping items and inventory in sync with Toast.
Executive Summary
Our client runs a gift shop and a cafe on Toast POS while keeping the books in NetSuite. Toast works well at the counter, including ringing up sales when the internet drops, but it didn't feed NetSuite. The two systems were kept in step by hand: items entered twice, daily deposits keyed in manually, and inventory drifting between the store and the ERP.
We built a nightly integration across NetSuite and Boomi to connect them. Rather than copying every individual order into NetSuite, it summarizes each day and posts accounting-ready transactions: the gift shop's sales as Cash Sales, which draw down inventory, and the cafe's as a single net-revenue journal entry, along with refunds, processor fees, gift-card activity, and per-employee tips, each mapped to the right accounts, locations, and departments. The store and cafe post differently because they run differently, and gift cards are tracked as a deferred-revenue liability rather than booked as income.
The Challenge
Keeping Toast and NetSuite aligned was a daily manual job, and several problems compounded it:
- Every retail product had to be created and maintained in both Toast and NetSuite, with no shared key tying the two records together.
- Each day's store and cafe deposits were transcribed into NetSuite one transaction at a time, with sales tax, shipping, and fees sorted out by hand.
- Stock counts lived separately in each system, so the number on the shelf, the number in Toast, and the number in NetSuite rarely agreed.
- Gift cards sell across the store, cafe, and station on one property-wide program, around $30,000 in balances outstanding, with no systematic way to carry them as a liability or meet the state's five-year unclaimed-property (escheatment) rules.
- Cafe tips had to be captured per employee for payroll, yet kept out of revenue and off the general ledger.
- Nothing tied Toast's settled deposits back to what actually landed in the bank account.
The Solution
We delivered the integration as a set of independently scoped enhancements on a nightly schedule, so the railroad could go live in stages and each piece stays maintainable on its own. Toast doesn't expose everything through one clean API: item data is reachable one way, the day's sales another, and the rest another still. So rather than force everything down a single path, we used the method that fit each job: a Boomi web service listener for item data, a nightly NetSuite SFTP pull for the sales totals, and a scheduled Boomi process for cafe sales, refunds, redemptions, and the inventory push. NetSuite SuiteScript and custom records tie it together.
Figure 1. One integration, three methods. Toast's automation surface is uneven, so each job uses the channel that fits: a Boomi web service listener for item data, a nightly NetSuite SFTP pull for sales totals (retail Cash Sales, gift-card sales, cafe tax), and a scheduled Boomi process for cafe sales, retail refunds, gift-card redemptions, and the inventory push back to Toast.

Item data, through the Boomi web service listener
Toast is the system of record for retail items. A NetSuite script calls a Boomi web service listener to pull in all of an item's data from Toast, then creates or updates the matching NetSuite inventory item. A User Event script on that item stamps its native External ID from the Toast identifier on every save, so the External ID always mirrors Toast and stays the cross-reference between the two systems as items are added or changed. An exclusion list in Boomi keeps generically named "open" items and other noise out of NetSuite, and a daily saved-search email flags any new item still missing a preferred vendor so the purchasing team can fill it in.
Inventory, pushed back to Toast
Stock levels go the other way through the scheduled Boomi process. Each morning before the doors open, it finds every item whose available quantity changed in NetSuite the previous day and updates the number in Toast. The timing is deliberate: running it mid-day would wipe out the sales decrements happening live at the register.
Retail sales as inventory-aware Cash Sales
Each night a scheduled NetSuite script reads Toast's CSV export from SFTP, with item sales, quantities, and totals for the day, and posts the store as a single summarized Cash Sale: one line per unique item with quantities and rates rolled up, so inventory draws down correctly and revenue lands in the right income accounts. The transaction carries the settled deposit to the operating bank account, applies sales tax through NetSuite's native tax engine, and rolls daily shipping charges into a dedicated shipping-income line. Refunds run through the scheduled Boomi process and post as Cash Refunds that restock inventory; same-day voids are treated as if they never happened. Processor and deposit fees, which Toast nets out of each deposit, post as their own journal entries so revenue isn't understated.
A big sales day can exceed NetSuite's 500-line limit on a single transaction, so a configurable threshold, set to 400, splits the day across multiple Cash Sales and numbers each overflow transaction in sequence.

Cafe sales as a net-revenue journal entry
The scheduled Boomi process posts the cafe as a single journal entry per day for net sales, meaning gross sales less tax, gratuity, tips, discounts, refunds, and deferred amounts, credited to the cafe's revenue account and debited to the bank. The entry posts net of tax; the cafe's sales tax comes in on the nightly SFTP feed instead. The cafe doesn't track inventory, so there's no need to itemize it in NetSuite; the daily net is what the books require. A "run-as date" parameter lets the team re-post a specific prior day when needed.

Per-employee tips, captured for payroll
From the same cafe settlement data, tips are aggregated per employee and written to a custom sub-record attached to that day's cafe journal entry, capturing who earned what for payroll without touching a GL account. Employees are matched by the ID carried in Toast, the same one used by the railroad's payroll system.

Gift cards as a real liability, across the whole property
This is the piece most POS integrations get wrong. Gift cards sell through both the store and the cafe on one property-wide program, and they are money owed, not revenue earned. So when a card is sold or reloaded, the sale arrives on the nightly SFTP feed and credits a deferred gift-card liability rather than income. When a card is later redeemed, often days after it was sold, the scheduled Boomi process posts a journal entry that draws the liability down and recognizes the sale.
Splitting redemption out keeps revenue from being double-counted and gives the finance team a clean, auditable gift-card balance that supports the state's five-year expiration and escheatment requirements.

Results
- No more double entry: items and inventory stay in step between Toast and NetSuite automatically, instead of being keyed into both.
- Each night, both locations post automatically: sales, refunds, fees, gift cards, and tips, mapped to the right accounts, locations, and departments, with deposits that reconcile to the bank.
- Gift-card balances sit on the books as a liability and are recognized only on redemption, so revenue stays accurate and the balance is ready for unclaimed-property reporting.
- Tips land per employee for payroll, without ever hitting the general ledger.
- Busy days don't break it: the off-hours timing and automatic line-splitting absorb the volume.
What used to be a nightly stack of manual entries is now an overnight job. The store and cafe's day is in NetSuite and reconciled to the bank before the team logs in.
Reach out to our NetSuite specialists about your specific challenges




