Oracle NetSuite and Toast integration
Toast runs restaurant operations from POS through labor and inventory. Oracle NetSuite runs the complete accounting system. Connecting the two keeps your revenue records aligned: every Toast order and payment posts to NetSuite's general ledger without re-keying, voided transactions are filtered, and revenue is allocated to the correct GL account and cost center for each location. Month-end close starts with sales already posted and reconciled.
What moves between them
Toast sales orders, checks (line items), and payments flow into Oracle NetSuite daily. After each business day closes in Toast, ml-connector reconciles orders from the previous business date, filters voided orders and fundraising items, and posts net revenue and receivable entries to NetSuite's general ledger, mapped to the correct revenue centers and GL accounts per location. Service charges are classified (gratuity vs standard), and payments are recorded in the correct receivable or cash account. Historical orders older than one month can be re-polled for reconciliation at a slower rate. Data flows one direction: Toast into NetSuite. NetSuite does not write menu or order data back to Toast.
How ml-connector handles it
ml-connector stores Toast's OAuth clientId and clientSecret encrypted, exchanges them for a bearer token on demand, and caches the token to avoid hitting Toast's authentication rate limit. On the NetSuite side, it uses OAuth 2.0 Client Credentials with the required certificate and accepts a custom integration mapping ID per NetSuite account. Toast requires the restaurant ID (Toast-Restaurant-External-ID) on every request; ml-connector retrieves all accessible locations via the partners API if multi-location support is enabled. For daily reconciliation, ml-connector polls Toast's orders API with businessDate filters, accounting for each restaurant's configurable closeout hour. Voided orders (voided==true), fundraising items, and service charges flagged as gratuity are filtered before posting. NetSuite's 60-minute OAuth token is refreshed before expiry. Toast does not guarantee webhook delivery, so ml-connector implements a nightly full-day reconciliation poll as the safety net. Rate limits (Toast: 20 req/sec default, Menu API 1 req/sec per location) are observed with backoff. Every posted record carries a Toast externalId for deduplication and audit.
A real-world example
A casual dining group operates 15 Toast-enabled locations across three cities, each running its own POS but using a single Oracle NetSuite instance for consolidated accounting. Before the integration, the corporate accounting team waited for a nightly manual export of sales from each location, then re-entered the totals into NetSuite by hand, separating cash from credit card payments and allocating revenue to cost centers by location. Reconciling the 15 locations took three full days after month-end close. With Toast and NetSuite connected, each location's daily orders, checks, and payments post automatically to NetSuite on the revenue recognition date, allocated to the correct location cost center. The group's accounting team now sees live sales in NetSuite and completes month-end close in one day.
What you can do
- Post Toast orders and checks (bills) to Oracle NetSuite's revenue and receivable accounts, segregated by payment method and location.
- Filter voided orders, fundraising items, and service charge classifications before posting to the general ledger.
- Handle multi-location restaurants by routing each location's sales to a separate cost center or department in NetSuite.
- Cache Toast OAuth tokens and refresh Oracle NetSuite's 60-minute OAuth tokens automatically to avoid authentication rate limits.
- Reconcile daily via webhook and nightly full-day poll to catch missed orders and ensure every Toast transaction posts to NetSuite.
Questions
- How does ml-connector handle Toast's lack of payment webhooks?
- Toast does not push webhooks for payments or labor. ml-connector polls Toast's orders API once per business day to fetch orders, checks, and payments together. A nightly full-day reconciliation poll acts as a safety net since Toast webhooks are not guaranteed delivery. Each record is checked for duplication via Toast's externalId field.
- What happens to voided orders and service charges?
- ml-connector filters voided orders (voided==true) before posting to NetSuite and excludes fundraising items. Service charges are classified based on the gratuityServiceCharge flag. Gratuity charges are recorded separately from net sales, so tip reporting and GL allocation remain accurate.
- How are multi-location restaurants handled?
- ml-connector retrieves all accessible locations via Toast's partners API at startup. Each location has a separate Toast-Restaurant-External-ID. Sales from each location are posted to a dedicated cost center or department in NetSuite so location-level profit and loss reporting is possible.
Related integrations
More Oracle NetSuite integrations
Other systems that connect to Toast
Connect Oracle NetSuite and Toast
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started