NexSigns DataStream - POS Integration Comparison
Written by AI, not reviewed by a human. Please apply the written-by-ai-not-reviewed label. Capability rows are drawn from each integration's shipped field picker and resolver, so they describe what the code actually offers. Several sources have never been run against a live vendor account — see Verification status before relying on a row for a customer commitment.
This is the single side-by-side view of every POS/ordering data source supported by the NexSigns DataStream subsystem, which feeds live menu data into the Digital Menu Board (Smart Menu) Editor. Each source also has its own page — linked in the last section — for configuration, troubleshooting and gaps.
This page is the one place comparison tables live. The individual POS pages deliberately do not repeat them, so there is no second copy to drift out of date. If you change a capability here, change it only here.
1. What a menu board can actually display
Start here. This is the table to check before promising a customer a design, because it is a property of each vendor's API rather than of our integration.
Source | Images | Descriptions | Sizes / variants | Calories | Allergen / dietary | Availability |
|---|---|---|---|---|---|---|
ToastPOS | No | Yes | Yes | Yes | No | Optional |
OLO | No | Yes | No | Yes | No | No |
GeniusPOS | Yes | Yes | Yes | Yes | No | Yes |
SquarePOS | Yes | Yes | Yes | Yes | No | Yes |
CloverPOS | No | No | Yes | No | No | Yes |
PARPOS | Yes | Yes | Yes (opt-in crawl) | Yes | Yes — allergens | Optional |
NCRPOS | Yes | Yes | Yes | Yes | Tags + serving size | Yes |
RevelPOS | Yes | Yes | Yes (3 mechanisms) | No | No | Optional |
SimphonyPOS | Yes | Yes | Yes (native) | No | Yes — dietary labels | No |
LightspeedPOS | Yes | Yes | Yes | No | Yes — allergens + alcohol | Optional |
LoyversePOS | Yes | Yes | Yes (native) | No | No | Yes |
CloPOS | Yes | Yes | Yes | No | No | Optional |
SpotOnPOS | No | No | No | No | No | Yes |
Eats365POS | Yes | Yes | Yes | No | No | Optional |
"Optional" means the integration can read availability but the switch is off by default, because the vendor exposes a bare stock number rather than an operator-set flag — and a number is meaningless for the many products a site does not inventory-track, where it sits at zero forever. Turning it on there would black out a board.
Only three sources carry anything usable for allergen or dietary signage: PARPOS (a readable allergen list, e.g. "Gluten, Dairy"), LightspeedPOS (allergen codes plus alcohol content, and only with rich content enabled) and SimphonyPOS (Oracle's dietary labels). NCRPOS has free-form tags and a serving size, which an operator may or may not be using for that purpose. Nothing else has a field for it.
The two to be careful about. SpotOnPOS gives a menu item a name, one price and a category and nothing else — a SpotOn board is text and prices. CloverPOS has sizes and availability but no images, descriptions or calories. Both are properties of the vendor API, not gaps in our work.
2. Data fields offered in the Smart Menu Editor
Exactly what appears in the field picker for each source. Anything not listed resolves to a blank rather than an error token, so a design carried from one POS to another degrades quietly.
Source | Fields |
|---|---|
ToastPOS | name, description, price, plu, sku, unitOfMeasure, calories, inventoryStatus |
OLO | name, description, shortdescription, cost, basecalories, maxcalories |
GeniusPOS | name, caption, description, item_description_short, unit_price, product_id, calories, image, inventoryStatus |
SquarePOS | name, variation_name, description, price, calories, image, id, inventoryStatus |
CloverPOS | name, variation_name, price, alternate_name, sku, code, unit_name, stock_quantity, id, inventoryStatus |
PARPOS | name, variation_name, description, price, calories, calories_from, calories_to, allergens, image, thumbnail, external_id, id, inventoryStatus |
NCRPOS | name, variation_name, description, price, calories, calories_from, calories_to, serving_size, tags, availability, image, thumbnail, pos_name, reference_id, product_id, external_id, id, inventoryStatus |
RevelPOS | name, variation_name, description, price, availability, stock_amount, image, thumbnail, sku, barcode, uom, course_number, point_value, currency, currency_symbol, business_name, id, inventoryStatus |
SimphonyPOS | name, variation_name, price, description, image, thumbnail, alt_text, object_num, dietary_labels, prep_time, menu_level, def_sequence_num, currency, id, inventoryStatus |
LightspeedPOS | name, variation_name, price, extra_price, description, image, thumbnail, raw_image, sku, allergens, contains_alcohol, alcohol_percentage, stock_count, menu_name, currency, id, inventoryStatus |
LoyversePOS | name, variation_name, price, description, image, thumbnail, sku, barcode, reference_id, option_names, cost, in_stock, store_name, business_name, currency, id, inventoryStatus |
CloPOS | name, variation_name, price, description, image, thumbnail, barcode, cost_price, cooking_time, product_type, venue_name, currency, id, inventoryStatus |
SpotOnPOS | name, price, plu, location_name, currency, id, inventoryStatus |
Eats365POS | name, variation_name, price, price_dine_in, price_takeout, description, image, code, external_id, remaining_quantity, restaurant_code, currency, id, inventoryStatus |
inventoryStatus shares a "1" available / "0" out-of-stock contract across every source that has it, so the same menu template works anywhere. OLO is the only source with no availability field at all.
3. Price units — the most dangerous axis
Getting this wrong renders every price a hundredth (or a hundred times) its real value, and nothing on screen shows it happened. Never copy a price path between sources without checking this table.
Units | Sources | Handling |
|---|---|---|
Integer minor units (÷ 100) | SquarePOS, CloverPOS, PARPOS | Square and Clover carry a zero-decimal ISO currency table (JPY, KRW, VND …) and skip the division for those. PARPOS does not — PAR sends ×100 for every currency including JPY, so a zero-decimal table there would be wrong. |
Decimal major units (no division) | ToastPOS, OLO, GeniusPOS, NCRPOS, RevelPOS, SimphonyPOS, LightspeedPOS, LoyversePOS, CloPOS, Eats365POS |
|
Decimal string | SpotOnPOS |
|
Three sources do not hard-code two decimals:
LoyversePOS reads the merchant's own
currency.decimal_places— the only source of the fourteen that reports its own precision, so it needs no ISO table at all.SimphonyPOS and Eats365POS take a
PriceDecimalPlacessetting, because neither names a currency anywhere on its menu resources. A JPY restaurant sets0.
4. How each vendor expresses "size"
Upcharge versus full price is the single most consequential difference in this table. Confusing them silently doubles or halves every sized item.
Source | Mechanism | Price of a size |
|---|---|---|
ToastPOS |
| the modifier's own price |
OLO | none projected | n/a |
GeniusPOS |
| the option's own price |
SquarePOS | native item variations | its own price |
CloverPOS | an item GROUP holding N separate items, folded into one logical item — the inverse of Square | the member item's own price |
PARPOS | product groups, via an opt-in resumable crawl (the only way to get sizes at all) | its own price |
NCRPOS | link groups / linked items, inline in the one menu call | upcharge |
RevelPOS | three ways: a required single-select modifier class, a matrix parent product (opt-in crawl), or neither | modifier class = upcharge; matrix child = its own full price |
SimphonyPOS | a menu item master owns up to 64 definitions — native, and the only source needing no heuristic | the definition's own price record |
LightspeedPOS | required single-select modifier group | upcharge |
LoyversePOS | native variants ( | its own price |
CloPOS | "modifications" — child product rows | its own full price |
SpotOnPOS | none exists | n/a |
Eats365POS | required single-select modifier | upcharge |
The single-select heuristic, and its known trade-off
NCRPOS, RevelPOS, LightspeedPOS and Eats365POS all infer "this modifier group is the size" from required, single-select, two or more choices. That also matches a required choice which is not a size — "choose your bread", "ice level", "temperature". Those fold into the Variation dropdown too.
This is harmless in practice and deliberately accepted: the item's own price flows through to every variation, so the price binding stays correct either way and the design merely gains a usable variation name. SimphonyPOS, SquarePOS, LoyversePOS and CloverPOS need no such inference.
Variation ordering
Order | Sources |
|---|---|
Operator's own order (Small, Medium, Large) | SimphonyPOS ( |
Alphabetical — so Large sorts before Small | CloverPOS, LoyversePOS, CloPOS — these vendors expose no ordinal on a variant at all, and stability matters because the change-detection hash runs over the document |
Ordering affects the dropdown only, never the price; the customer picks a default explicitly in the design.
5. Credentials and authentication
Source | Whose credentials | Scheme | Token life |
|---|---|---|---|
ToastPOS | Kuusoft (company-level) | OAuth client credentials; customer supplies the restaurant GUID | cached on the shared template row |
OLO | Customer | Key + client credentials; | n/a |
GeniusPOS | Kuusoft (company-level) | Integrator token; customer supplies CompanyID + SiteID | 21 days, shared across all GeniusPOS streams |
SquarePOS | Customer | Personal access token (bearer) | permanent |
CloverPOS | Customer | Merchant API token (bearer); every store is its own merchant | permanent |
PARPOS | Customer | Per-brand Application Key + three mandatory headers; nine environment hosts | permanent |
NCRPOS | Customer | BSP access key pair, HMAC-SHA512 signed per request | n/a (per-request signature) |
RevelPOS | Customer | Two schemes by | permanent / 24h |
SimphonyPOS | Customer | 3-step OIDC + PKCE (authorize → signin → token); bearer is the | 14 days (refresh 28d) |
LightspeedPOS | Customer | OAuth2 refresh-token grant, HTTP Basic client auth | 25 min; refresh token rotates every use |
LoyversePOS | Customer | Personal access token (bearer) — the simplest of the fourteen | permanent |
CloPOS | Customer | Four credentials incl. a partner | 1 hour |