Vendors / Open source & self-hostable

ERPNext / Frappe POS

ERPNext / Frappe POS (Frappe Technologies)

dossier live

Claims in scope
258
Scored
258
Assessed
243
Unknown
15
Not applicable
56
Cells challenged
58

Identity

Owner
Frappe Technologies Pvt. Ltd.
Founded
Frappe Technologies Pvt. Ltd., Mumbai, India; ERPNext development began 2008, first public release 2010. Frappe Framework and ERPNext are developed in the open at github.com/frappe.
Scale
unknown. Frappe Cloud's marketplace page states 342+ apps listed and github.com/frappe/erpnext is a large, active repository. Frappe publishes no customer count, ARR or restaurant-location figure. Any "X thousand companies" number in circulation is marketing, not audited.
Who it is for
NOT a restaurant ICP. The real buyer is a 10-250 employee SMB or mid-market manufacturer/distributor/retailer that wants a full ERP (GL, AP/AR, inventory, BOM, manufacturing, HR) and is willing to self-host or hire an implementation partner. Heaviest adoption in India, the UAE/GCC and Africa, where localised tax (GST, VAT) and a zero licence cost dominate. The POS inside it is a single-screen retail/counter POS — the POS Profile and POS Invoice doctypes were read in full for this pass and contain no table, seat, course, modifier or kitchen concept. Restaurants on the Frappe stack overwhelmingly buy a third-party marketplace app (URY, POSNext, GETPOS, KLiK PoS, POS Restaurant, Retail Suite) rather than core ERPNext — see cloud.frappe.io/marketplace. Frappe's own restaurant/hotel module, github.com/frappe/hospitality, was archived read-only on 2023-10-04.
Site
https://erpnext.com/

Pricing

transparency: partial · unit: mixed · processor lock-in: no

Software
The software itself is free. license.txt in github.com/frappe/erpnext is the GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 — GPL-3.0, not AGPL-3.0. Note the vendor contradicts itself: frappe.io/erpnext/pricing describes ERPNext as 'AGPL-3.0 licensed' while the repository ships GPL-3.0. Self-hosting costs $0 in licence. Frappe Cloud managed hosting is priced inconsistently across two first-party pages, both retrieved 2026-08-02, and the figures should be read as a range rather than a rate card. frappe.io/erpnext/pricing: Sites '$5 onwards /mo' (₹410 onwards/mo); Servers '$20 onwards /mo' (₹1,800 onwards/mo); Premium Servers '$125 onwards /mo' (₹5,400 onwards/mo). frappe.io/cloud/pricing, the canonical Frappe Cloud page: Sites '$5 onwards /mo' (₹410 onwards/mo); Servers '$40 onwards /mo' (₹3,600 onwards/mo) — with no premium tier listed at all and no ₹1,800 figure anywhere. Only the $5 Sites floor survives cross-checking; server pricing is $20–$40 depending which vendor page you read. Billing is explicitly not per user — 'pay only for what you use, and not per user' — it is per site and per server. 14-day free trial. Enterprise plans are 'Speak to our solution consultants', i.e. quote-only. Every published figure is an 'onwards' floor, which is why transparency is scored partial rather than published: there is an entry price but no full rate card.
Card processing
Not applicable — Frappe is not a payment processor and takes no share of card volume. No card rates are published because no card acceptance is sold. The POS Profile payments table maps Modes of Payment to GL accounts, not to an acquirer.
Contract
Month-to-month, pay-as-you-use on Frappe Cloud; no minimum term is stated on the pricing page. Self-hosted has no contract at all.
Early termination
None can apply to self-hosting. For Frappe Cloud no ETF is stated on the pricing page, but the terms of service were not retrieved in this pass, so an affirmative "no ETF" clause could not be verified.

API posture

public API: open

Cost to integrate
$0. No partner fee, no certification fee and no revenue share is charged for API access — the API is part of the free GPL-3.0 software. Frappe publishes no marketplace/partner commercial terms, so app-listing economics on cloud.frappe.io/marketplace remain unknown.
Webhooks
Native Webhook doctype, configurable per DocType and per document event, with conditions, custom headers, and either form-urlencoded or Jinja-templated JSON payloads. When a webhook secret is set, Frappe adds an X-Frappe-Webhook-Signature header carrying a base64-encoded HMAC-SHA256 hash of the payload, and a request log records every successful transmission. Retry and backoff behaviour is not documented. Source: https://docs.frappe.io/framework/user/en/guides/integration/webhooks
Data export on exit
Structurally the strongest in this peer group. Self-hosted operators hold the MariaDB/Postgres database outright. Frappe ships a Data Export / Data Import tool, `bench backup` produces a full site tarball, and every DocType (Sales Invoice, POS Invoice, Customer, Item, Loyalty Point Entry, Employee Checkin) is readable and writable over REST. There is no vendor gate on exit. Frappe Cloud's post-termination retention window was not located.
Notes
The API is auto-generated for every DocType — /api/resource/:doctype with GET/POST/PUT/DELETE, plus filters, field selection, ordering and pagination. Auth is token (api_key:api_secret), session cookie, or OAuth 2.0 bearer token. Rate limiting is real but site-configurable rather than a published quota: site_config.json takes `limit` (seconds of processing per window) and `window` (seconds); responses carry X-RateLimit-Limit/Used/Remaining/Reset and Retry-After, with HTTP 429 over limit. Custom Fields, Client Script and Server Script let an operator add fields and run server-side logic with no engineering engagement — a genuine differentiator against every closed POS in this set.

Capabilities

Every claim is binary and checkable. Grades: A primary documentation · B product documentation · C pricing or feature page · D marketing claim · E third-party reporting · F inference with no source. A yes on a differentiator claim requires A or B.

Order capture & FOH workflow

No

order-capture-floor-plan-editor

Restaurant Table/floor concepts lived only in the hospitality app, which Frappe archived read-only on Oct 4, 2023. Core POS is a retail item grid. https://github.com/frappe/hospitality · retrieved 2026-08-01

B
No

order-capture-seat-level

POS Invoice was read field by field: there is no seat, cover or guest-number field and no per-seat grouping on the items table. Seats existed only in frappe/hospitality, archived read-only 2023-10-04. Regrade: the previous cell cited first-party documentation at grade E. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_invoice/pos_invoice.json · retrieved 2026-08-02

A
No

order-capture-coursing-hold-fire

No course or fire concept anywhere in ERPNext. No kitchen destination exists to fire to.

F
No

order-capture-split-merge

POS supports multiple payment modes on one invoice but no check splitting or merging by item, seat, or share.

F
No

order-capture-bar-tab-preauth differentiator

No card pre-authorization capability; ERPNext performs no card processing.

F
No

order-capture-transfer-audit

No open-check ownership model. Frappe's Version log would audit a document owner change but there is no transfer workflow.

F
No

order-capture-native-handheld

POS is a responsive browser page. No first-party handheld app, and no tableside card payment path.

F
No

order-capture-offline-order-entry

Offline order entry was never shipped. frappe/erpnext#29068 "POS offline mode", opened 2021-12-29 and labelled feature-request and inactive, is CLOSED without implementation; it proposed an Application Cache plus a WebSQL local store for master data and pending receipts. The browser-based offline POS was removed after v12 and nothing replaced it in core; the offline products in circulation (POS Awesome, POSNext, GPOS) are third-party apps. Corrected on verification: the issue is closed, not open, as this record and four sibling cells previously stated. https://github.com/frappe/erpnext/issues/29068 · retrieved 2026-08-02 adversarially verified

A
No

order-capture-qr-same-check differentiator

POS Invoice was read field by field: no open-check or table state and no ordering-channel origin field, so there is no persistent check for a scanned QR order to join. Guest and table ordering existed only in frappe/hospitality, archived read-only 2023-10-04. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_invoice/pos_invoice.json · retrieved 2026-08-02

A
No

order-capture-kiosk-first-party differentiator

No first-party kiosk product.

F
No

order-capture-drive-thru

POS Profile is the complete POS configuration doctype and its full field list was read (payment methods, item groups, customer groups, print settings, price list, write-off, taxes, item-selector flags). It enumerates no drive-thru order point, lane or vehicle-queue setting. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_profile/pos_profile.json · retrieved 2026-08-02

A
No

order-capture-drive-thru-timers

POS Invoice records only document creation, modification and posting timestamps. There are no lane-stage events (arrive, order, pay, present), so no drive-thru interval can be measured. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_invoice/pos_invoice.json · retrieved 2026-08-02

A
No

order-capture-voice-ai differentiator

No first-party voice agent and no voice-AI partner program. A generic REST write API exists, which a third party could use, but that is not a documented voice program.

F
No

order-capture-throttling differentiator

POS Profile is the complete POS configuration doctype and its full field list was read; it contains no order-pacing, capacity or quoted-time setting, and core ships no first-party ordering channel to throttle. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_profile/pos_profile.json · retrieved 2026-08-02

A
No

order-capture-scheduled-orders

Sales Order carries a delivery date, but there is no make-queue or computed fire time — no kitchen queue exists.

F
Partial

order-capture-catering

Not a catering flow, but the ERP primitives are exact: Quotation, Sales Order, advance Payment Entry for deposits, and native AR balance-due tracking. https://docs.frappe.io/erpnext/quotation · retrieved 2026-08-01

B
No

order-capture-order-ready-signal differentiator

No marketplace connections exist to signal.

F
Partial

order-capture-void-comp-controls

Shortfall: no reason codes and no shipped void or comp exception report. What exists is generic — Role Permission Manager gates cancel and amend, the allow_discount_change and allow_rate_change flags on POS Profile gate price overrides, and Frappe’s submit/cancel/amend model plus the Version log attribute every change to a named user. Regrade: first-party vendor documentation is grade B, not E. https://docs.frappe.io/erpnext/pos-profile · retrieved 2026-08-02

B

Menu, modifiers & pricing engine

No

menu-pricing-nested-modifiers

ERPNext has no modifier construct at all. Item Variants and Product Bundle are the documented alternatives and neither supports min/max or forced selection at order time. https://docs.frappe.io/erpnext/item · retrieved 2026-08-01

B
No

menu-pricing-modifier-price-by-parent-size

No modifiers exist, so no modifier price matrix.

F
No

menu-pricing-fractional-placement differentiator

ERPNext has no modifier construct. The Item manual enumerates the item-composition mechanisms it does have — Item Variants driven by Item Attributes, Product Bundle, alternate UOMs with conversion factors, EAN/UPC barcodes — and none of them places a component on a portion (half, quarter) of the parent item. https://docs.frappe.io/erpnext/item · retrieved 2026-08-02

B
No

menu-pricing-half-and-half-rule differentiator

With no modifier or portion model — the Item manual documents only variants, bundles and UOMs — there is no whole/half pricing rule to configure: no max, no average, no sum-of-halves setting exists. https://docs.frappe.io/erpnext/item · retrieved 2026-08-02

B
No

menu-pricing-topping-quantity-tiers

No modifier construct exists, so there are no light/regular/extra quantity tiers with per-tier price multipliers. Quantity on an item line is a plain number priced against one Item Price. https://docs.frappe.io/erpnext/item · retrieved 2026-08-02

B
Partial

menu-pricing-size-style-matrix differentiator

Item Attributes generate variants across two-plus axes (e.g. size x crust) and each variant carries its own Item Price — a real per-cell grid, but as separate item records, not a matrix UI. https://docs.frappe.io/erpnext/item · retrieved 2026-08-01

B
No

menu-pricing-included-allowance differentiator

Product Bundle fixes its component list at bundle level, and the Item manual documents no "N included, extras charged" allowance counter. With no modifiers there is nothing to count against an allowance. https://docs.frappe.io/erpnext/item · retrieved 2026-08-02

B
Partial

menu-pricing-combos

Product Bundle sells a parent item that depletes component stock. No component swap with price delta and no automatic a-la-carte-to-combo detection in the cart. https://docs.frappe.io/erpnext/item · retrieved 2026-08-01

B
No

menu-pricing-upsell-prompts differentiator

The POS item-selector settings are enumerated in POS Profile — hide_unavailable_items, hide_images, auto_add_item_to_cart — and there is no suggested-item, add-on or upsell prompt configuration anywhere in the doctype. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_profile/pos_profile.json · retrieved 2026-08-02

A
No

menu-pricing-86-propagation

No KDS, no first-party restaurant ordering, no kiosk, no marketplaces to propagate to.

F
No

menu-pricing-countdown-auto-86 differentiator

Stock quantity is tracked and can go to zero, but there is no auto-86 with scheduled restore.

F
No

menu-pricing-dayparting

Verified against the Pricing Rule doc: temporal control is 'Valid From and Valid Up To' date range only, with no time-of-day or day-of-week condition documented. This is a correct documented 'no', not an inference. It matters because dayparting is table stakes for a pizza operator. https://docs.frappe.io/erpnext/pricing-rule · retrieved 2026-08-01 adversarially verified

B
Partial

menu-pricing-channel-price-books

Shortfall: there is no channel dimension. Multiple Price Lists exist and are selected per POS Profile, Customer, Customer Group or Territory, and Pricing Rule applies percentage rules over a base rate rather than requiring per-item re-entry, so the markup mechanic is genuinely native. But channels are modelled as price lists by convention, not as named channels, and three of the five channels the claim enumerates — kiosk, each third-party marketplace, and any distinct delivery channel — do not exist in the product to be priced. Downgraded from yes on verification. https://docs.frappe.io/erpnext/pricing-rule · retrieved 2026-08-02 adversarially verified

B
No

menu-pricing-dual-pricing differentiator

POS Profile carries one selling_price_list and no cash/card price pair, and its payments table maps Modes of Payment to GL accounts rather than to an acquirer, so no tender-conditional price can be computed. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_profile/pos_profile.json · retrieved 2026-08-02

A
No

menu-pricing-allergen-nutrition

No shipped allergen or nutrition fields. Frappe Custom Fields make adding them trivial, but nothing publishes them anywhere and there is no recipe-derived nutrition rollup.

F
Partial

menu-pricing-recipe-linkage differentiator

BOM gives multi-level costing and Product Bundle depletes components on sale, so item-level theoretical cost is derivable. Not wired to POS modifiers (none exist) and depletion is not recipe-driven from a plain POS Invoice line. https://github.com/frappe/erpnext · retrieved 2026-08-01

B
No

menu-pricing-3p-menu-push

No marketplace integrations in core or on Frappe's own roadmap.

F
No

menu-pricing-dynamic-pricing

Pricing Rule is condition-based (qty, customer, territory, date range), not demand- or time-of-day-driven, and has no floor/ceiling guardrails.

F

Payments & money movement

Partial

payments-processor-choice differentiator

Shortfall: the documented gateway flow is an online payment link, not card-present POS acceptance. Zero processor lock-in is structural — Frappe sells no processing and takes no share of card volume. Payment Request states that "ERPNext can email the request with an online payment link when a Payment Gateway Account is configured", and the Stripe guide documents configuring "Publishable Key, Secret Key" under "Explore > Integrations > Stripe Settings", which creates a Payment Gateway Account linked to an account head in the chart of accounts. Neither page mentions a terminal, a reader or an acquirer connection at the till. Re-cited on verification from the pricing page, which is grade C and names no gateway at all. https://docs.frappe.io/erpnext/stripe-integration · retrieved 2026-08-02 adversarially verified

B
No

payments-published-rates differentiator

Not applicable — Frappe is not a payment processor, so there are no card rates to publish. https://frappe.io/erpnext/pricing · retrieved 2026-08-01

C
No

payments-dual-pricing differentiator

No cash-discount or card-surcharge field exists in POS Profile, and no card or BIN data enters ERPNext because the payments table is a Mode of Payment to GL account mapping, not an acquirer connection. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_profile/pos_profile.json · retrieved 2026-08-02

A
No

payments-surcharge-guardrails differentiator

No BIN-level card data reaches ERPNext; no surcharging engine.

F
No

payments-emv-nfc

No first-party payment terminals of any kind.

F
No

payments-softpos-tap-to-pay differentiator

The POS Profile payments table links Modes of Payment to accounts; there is no reader, terminal or tap-to-phone SDK to configure. Frappe sells no card acceptance at all. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_profile/pos_profile.json · retrieved 2026-08-02

A
No

payments-pay-at-table

POS Invoice has no table or open-check state and no card-present path — it is submitted and settled at the till — so there is nothing for a guest to pay against at the table. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_invoice/pos_invoice.json · retrieved 2026-08-02

A
No

payments-qr-guest-pay differentiator

ERPNext can print a UPI QR on invoices in the India localization, but it does not close the check in the POS automatically and is not a guest-pay flow.

F
No

payments-tip-adjust

No tip concept in POS Invoice and no auth/capture window because there is no card processing.

F
No

payments-tip-pooling differentiator

POS Invoice enumerates no tip or gratuity field of any kind, so no tips are captured and nothing exists to pool, allocate or distribute. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_invoice/pos_invoice.json · retrieved 2026-08-02

A
No

payments-offline-store-and-forward differentiator

Offline POS is frappe/erpnext#29068, a feature request opened 2021-12-29, labelled feature-request and inactive and closed without implementation, rather than a shipped capability. ERPNext also performs no card authorization, so there is no offline card capture to store and forward. https://github.com/frappe/erpnext/issues/29068 · retrieved 2026-08-02

A
No

payments-offline-decline-liability differentiator

No offline card capture exists, so no liability position is published.

F
No

payments-gift-cards

No gift card product. Could be modeled as a customer advance/credit, but that is a build, not a feature.

F
Yes

payments-house-accounts

Verified in part and it holds: the Customer doc covers per-company credit-limit rows evaluated against submitted exposure, and points to the Accounts Receivable report. Minor correction — 'periodic Statement of Accounts' is not on the cited page, so trim that specific to avoid an unsupported detail inside an otherwise sound yes. https://docs.frappe.io/erpnext/customer · retrieved 2026-08-01 adversarially verified

B
Partial

payments-split-tender

POS Profile defines multiple Modes of Payment and one invoice can be settled across several of them with no low cap. No splitting by seat, item, or even shares. https://docs.frappe.io/erpnext/pos-profile · retrieved 2026-08-01

B
Partial

payments-refund-void-controls

Frappe's submit/cancel/amend model makes submitted documents immutable and the Version log attributes every change to a user with a timestamp; Role Permission Manager gates cancel and amend rights. No manager-PIN-at-terminal approval prompt and no approver field. https://docs.frappe.io/erpnext/pos-profile · retrieved 2026-08-01

B
No

payments-chargeback-tooling differentiator

ERPNext is neither an acquirer nor a processor and captures no card transaction — POS Profile payment methods are accounting tender types mapped to GL accounts. There is consequently no dispute, chargeback, evidence-upload or representment object anywhere in the POS or accounting modules; disputes belong entirely to whatever processor the operator contracts separately.

F
No

payments-card-on-file differentiator

No tokenization vault. Online gateway integrations hand off to the gateway's own hosted flow.

F
No

payments-payout-timing differentiator

Not applicable — Frappe does not settle funds.

F
No

payments-p2pe-pci4

Frappe publishes no PCI DSS AoC or P2PE listing. Card data never enters ERPNext in the intended architecture, which reduces but does not document scope.

F

Delivery, dispatch & third-party channels

Partial

delivery-driver-roster

ERPNext core has Driver and Vehicle doctypes and a Delivery Trip document with per-trip status, so drivers are first-class and run history is reportable. No in-store/on-run/returning dispatch state machine and no clock-in inside the POS.

F
No

delivery-dispatch-board

Delivery Trip is a form with a stop table, not a live dispatch board with driver availability and elapsed timers. Multi-stop batching exists as multiple stops on one trip.

F
Partial

delivery-route-map differentiator

Verified and can be upgraded from inferred to documented: 'Using Google Maps, the best route for the deliveries will be calculated' and Delivery Trip will 'calculate the estimated arrival time for the deliveries. This data is fetched from Google Maps.' One correction — the doc does not state that the operator must supply a Google Maps API key, so drop that as an asserted fact even though it is likely true. https://docs.frappe.io/erpnext/delivery-trip · retrieved 2026-08-01 adversarially verified

B
No

delivery-driver-tracking differentiator

No driver mobile app emitting live GPS back to dispatch.

F
No

delivery-zones-polygon differentiator

Territory is a hierarchical label, not a geographic polygon or isochrone.

F
No

delivery-zone-pricing

Pricing Rule can vary charges by Territory, but Territory is not derived from a validated address and carries no order minimum or promise time.

F
No

delivery-address-validation

Address is a free-text doctype; no geocoding gate at order time.

F
No

delivery-driver-comp differentiator

The Delivery Trip manual covers driver, vehicle, departure time, multiple customer stops, Google Maps estimated arrival and route optimisation. It documents no per-delivery pay, no mileage reimbursement and no driver tip allocation; driver compensation would be a Frappe HR payroll build. https://docs.frappe.io/erpnext/delivery-trip · retrieved 2026-08-02

B
No

delivery-cash-reconcile

POS Closing Entry reconciles a cashier drawer, not a driver bank.

F
No

delivery-daas-dispatch

Delivery Trip dispatches the operator’s own Driver and Vehicle records only. No DoorDash Drive, Uber Direct, Nash or other third-party courier hand-off appears anywhere in the documented flow. https://docs.frappe.io/erpnext/delivery-trip · retrieved 2026-08-02

B
No

delivery-daas-fallback differentiator

No third-party courier network is integrated at all — Delivery Trip is own-driver only — so there is no automatic fallback when in-house drivers are unavailable. https://docs.frappe.io/erpnext/delivery-trip · retrieved 2026-08-02

B
No

delivery-3p-direct-integration differentiator

No DoorDash, Uber Eats or Grubhub connector ships in ERPNext core or in any frappe/* repository, and ERPNext is not among the 2026 DoorDash Preferred Integration Partners. Every marketplace connection in the Frappe ecosystem is a third-party app carrying its own maintenance risk.

F
No

delivery-3p-injection

No marketplace connectors. The REST write API would let an integrator build one, but nothing ships.

F
No

delivery-menu-push

There are no marketplace integrations in core, so there is no channel to publish the Item master and Item Price rows to. Menus reach only the POS and frappe/webshop, both of which read the same Item master directly rather than receiving a push.

F
No

delivery-86-sync

No marketplace connectors exist, so an out-of-stock item has nowhere to propagate to beyond the POS and webshop, which read availability from the same Warehouse balance.

F
No

delivery-store-pause

No marketplace connectors exist, so there is no store-level pause with a duration or reason to send to a channel.

F
No

delivery-3p-reconciliation differentiator

No marketplace connectors and no commission or payout ledger exist. Third-party payouts would be hand-entered as ordinary Journal or Payment Entries, with no order-level reconciliation of expected versus deposited.

F
No

delivery-injection-error-visibility differentiator

Frappe does expose an Error Log and Webhook Request Log, but there are no channels whose health to report.

F
Unknown

delivery-tracking-page

The Delivery Trip documentation makes no mention of customer notification by email or SMS. It documents driver/vehicle selection, multiple stops, Google Maps best-route calculation and Google-sourced ETAs — nothing outbound to the guest. The partial rests entirely on an unverified notification feature. adversarially verified

F
No

delivery-promise-time differentiator

Delivery Trip ETAs come from Google Maps drive time only — no kitchen load or driver-availability input.

F
No

delivery-offline-behavior

No offline mode exists anywhere in the product, so no delivery offline behavior is documented.

F

Digital ordering & guest-facing channels

Partial

digital-first-party-web

frappe/webshop is a first-party GPL e-commerce storefront (split out of ERPNext core at v14) that writes Sales Orders with no commission. It is a product catalog storefront, not a restaurant ordering flow — no fulfillment modes, no prep timing, no modifiers.

F
Partial

digital-menu-single-source

Webshop renders the same Item master and Price List as the POS, so one edit does propagate. There is no separate digital menu build because there is no menu concept at all.

F
No

digital-native-app differentiator

No branded consumer iOS/Android ordering app.

F
No

digital-account-saved-payment

Webshop supports customer accounts and saved Addresses, but no tokenized saved payment method and no one-tap reorder.

F
No

digital-upsell-engine differentiator

Neither ordering surface has one. The POS item selector is fully enumerated in POS Profile (hide_unavailable_items, hide_images, auto_add_item_to_cart) with no suggestion engine, and frappe/webshop renders the Item master and Price List with no recommendation or add-on prompt layer.

F
No

digital-scheduled-pacing

There is no first-party restaurant ordering channel with capacity-limited time slots. Sales Order carries a delivery date, but no slot inventory, no per-interval cap and no kitchen-load input exist anywhere in the model.

F
No

digital-fulfillment-modes

No pickup/curbside/dine-in/delivery mode selector with mode-specific fees and prep timing.

F
No

digital-qr-table

Table-side ordering — restaurants, menus, tables, reservations, order entry — existed only in frappe/hospitality, archived read-only 2023-10-04. Nothing equivalent ships in core, and POS Invoice has no table state for a QR order to attach to. https://github.com/frappe/hospitality · retrieved 2026-08-02

B
No

digital-kiosk differentiator

No first-party kiosk application ships in ERPNext core or in any frappe/* repository. The POS is a staff-facing browser screen requiring a logged-in Frappe User, not a guest-facing kiosk mode.

F
No

digital-group-ordering

No first-party guest ordering product exists, so there is no shared cart, no per-participant sub-cart and no split-payment ordering flow.

F
No

digital-catering-portal differentiator

Quotation, Sales Order and advance Payment Entry support catering-shaped flows in the back office, but there is no guest-facing catering portal with lead-time rules, order minimums, deposit capture or approval routing.

F
No

digital-voice-ai-phone differentiator

No first-party voice ordering agent and no voice-AI partner programme. Frappe’s Telephony module integrates Twilio and Exotel to pop an incoming call against a Contact, but it takes no order and writes nothing into a cart.

F
No

digital-drivethru-ai

There is no drive-thru product of any kind in ERPNext — no order point, no lane, no timing — so there is no drive-thru voice AI to assess.

F
No

digital-sms-ordering

SMS Settings is a generic outbound HTTP SMS gateway used for notifications. There is no inbound message handling and no conversational ordering flow.

F
No

digital-google-order differentiator

Order with Google requires a certified consumer ordering end-point to link to. ERPNext ships no restaurant ordering channel at all, so there is nothing to certify or connect.

F
No

digital-apple-business-connect

Apple Business Connect ordering actions require a consumer ordering end-point. ERPNext ships no restaurant ordering channel, so no ordering action can be registered; a place-card listing would be the operator acting as their own business, not a product capability.

F
Unknown

digital-loyalty-attach

Loyalty Program is documented against Sales Invoice and POS. Whether webshop checkout accrues and redeems against the same Customer identity is not documented on any page retrieved.

F
Partial

digital-subscriptions

ERPNext ships a Subscription doctype with recurring invoicing against a Subscription Plan. It is a B2B billing construct, not a guest membership with entitlements or fee waivers.

F
Partial

digital-promo-parity

Pricing Rule, Promotional Scheme and Coupon Code are a single engine evaluated on Sales Invoice, POS Invoice and webshop orders alike, so promos are defined once. No per-channel eligibility control because there is no channel dimension. https://docs.frappe.io/erpnext/promotional-scheme · retrieved 2026-08-01

B
Partial

digital-guest-data-ownership differentiator

Shortfall: the vendor documents the export but not the ownership. "‘Data Export’ helps you extract data from any DocTypes to a CSV or an Excel format", with filters and field selection, run by the operator with no ticket and no fee, and REST reads Customer and Contact programmatically — so bulk guest export is real and unencumbered. No published Frappe Cloud term states that the operator owns the data or limits Frappe’s use of it (commercial-data-ownership-clause is unknown for exactly this reason). Self-hosting makes ownership true in fact; the claim asks whether the vendor documents it. Downgraded from yes on verification. https://docs.frappe.io/erpnext/data-export · retrieved 2026-08-02 adversarially verified

B
Unknown

digital-checkout-pci-sca

Webshop hands off to hosted gateway flows (Razorpay/Stripe/PayPal), which would keep PAN off the page, but Frappe publishes no PCI DSS 4.0 statement, no script-integrity position, and no 3DS documentation.

F
No

digital-surcharge-transparency differentiator

There is no surcharge or service-fee engine whose disclosure could be governed: POS Profile enumerates taxes_and_charges, tax_category and apply_discount_on but no card surcharge, cash discount or service fee, and no card or BIN data enters the system. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_profile/pos_profile.json · retrieved 2026-08-02

A

Guest data, loyalty & marketing

Partial

guest-loyalty-unified-profile

One Customer master is shared by POS, webshop and back office, so transactions do land on a single identity. There is no automatic phone/email dedup or documented merge behavior — Customer creation at POS is manual. https://docs.frappe.io/erpnext/customer · retrieved 2026-08-01

B
No

guest-loyalty-thirdparty-identity-attach differentiator

No marketplace integrations.

F
Yes

guest-loyalty-accrual-models

Verified: Collection Factor drives points-per-spend ('with a Collection Factor of $100, an eligible $1,000 invoice earns 10 points'), Conversion Factor sets redemption value, and 'Programs can use one tier or several tiers based on a Customer's cumulative eligible spend'. Caveat the dossier did not surface: the doc frames earning against submitted Sales Invoices and gives no POS- or webshop-specific accrual guidance, which strengthens the existing 'unknown' on digital-loyalty-attach. https://docs.frappe.io/erpnext/loyalty-program · retrieved 2026-08-01 adversarially verified

B
Partial

guest-loyalty-tiers differentiator

Multiple tiers with names and cumulative-spend thresholds, auto-promotion on threshold. Rolling-window evaluation and automatic demotion are not documented. https://docs.frappe.io/erpnext/loyalty-program · retrieved 2026-08-01

B
No

guest-loyalty-offline-behavior differentiator

There is no offline mode in the product, so no queue-and-reconcile behavior is defined or documented.

F
Yes

guest-loyalty-offer-stacking-rules differentiator

Verified: Pricing Rule documents Priority to resolve overlapping rules, 'Apply Multiple Pricing Rules' for stacking, and Mixed Conditions across selected items. Genuinely configurable precedence and combinability. https://docs.frappe.io/erpnext/pricing-rule · retrieved 2026-08-01 adversarially verified

B
No

guest-loyalty-targeted-offers differentiator

Pricing Rules target Customer, Customer Group and Territory — static attributes, not recency/frequency/spend/item-purchased audiences.

F
No

guest-loyalty-rfm-segmentation differentiator

The Loyalty Program manual enumerates the whole feature — Collection Factor (eligible spend per point), Conversion Factor, tiers by cumulative eligible spend, expiry in days, redemption accounting, and eligibility limited by Customer Group and Territory. No recency/frequency/monetary or behavioural segment builder is documented. https://docs.frappe.io/erpnext/loyalty-program · retrieved 2026-08-02

B
No

guest-loyalty-lifecycle-automation

Frappe's Notification doctype can send scheduled or event-triggered email/SMS on any doctype, so a birthday or win-back send is buildable — but no lifecycle campaigns ship configured.

F
Partial

guest-loyalty-native-email-sms differentiator

Newsletter/Email Group sends bulk email natively, and SMS Settings supports a generic HTTP SMS gateway. Both are framework primitives, not a marketing product — no campaign builder, templates library, or send analytics.

F
Partial

guest-loyalty-consent-management

Newsletter subscription carries an unsubscribe flag and Email Unsubscribe records the event. No per-channel consent capture with source-of-consent, and SMS consent is not modeled.

F
No

guest-loyalty-10dlc-registration

No A2P 10DLC handling or documentation; SMS is BYO-gateway, so registration is entirely the operator's problem.

F
No

guest-loyalty-campaign-attribution differentiator

Coupon Code tracks a used-count, and a Campaign doctype links to Lead/Opportunity in CRM, but there is no redemption-to-check-total attribution report.

F
Yes

guest-loyalty-data-export-portability differentiator

"‘Data Export’ helps you extract data from any DocTypes to a CSV or an Excel format", with filters to "add filters to select only specific data" and per-field selection. Any DocType covers Customer, Contact, Address, Loyalty Point Entry and Sales Invoice, so the full guest list with contact PII and the transaction history are both exportable from the desk — no support ticket, no fee — with REST as the programmatic equivalent. Upgraded from partial on verification: the earlier downgrade rested on the Data Export tool being uncited, not absent. https://docs.frappe.io/erpnext/data-export · retrieved 2026-08-02 adversarially verified

B
No

guest-loyalty-review-capture-routing differentiator

No review request, star-rating capture or routing feature exists in ERPNext or Frappe HR. The Notification doctype could email a request on invoice submission, but nothing captures the response, scores it, or routes negative feedback privately.

F
No

guest-loyalty-referral-program

The Loyalty Program manual covers points accrual, tiers, expiry and redemption only. No referral code, referrer credit or referred-guest reward mechanism is documented. https://docs.frappe.io/erpnext/loyalty-program · retrieved 2026-08-02

B
No

guest-loyalty-wallet-pass differentiator

No Apple Wallet or Google Wallet pass issuance is documented. The loyalty balance lives on Loyalty Point Entry records visible in the Frappe desk and portal, with no pass generation and no push update. https://docs.frappe.io/erpnext/loyalty-program · retrieved 2026-08-02

B
Partial

guest-loyalty-privacy-rights-tooling

Frappe Framework ships Personal Data Download Request and Personal Data Deletion Request doctypes for GDPR-style access and erasure. Deletion propagation to loyalty ledgers is not documented, and no published DPA was located.

F
Partial

guest-loyalty-redemption-fraud-controls

Role Permission Manager can restrict who may create or amend Loyalty Point Entry, and the Version log attributes every change. No velocity limits and no employee self-redemption flagging.

F
No

guest-loyalty-ai-offer-recommendation differentiator

No propensity, next-best-offer or recommendation model is documented against the Loyalty Program, and Pricing Rule targeting is static (Customer, Customer Group, Territory) rather than behavioural. https://docs.frappe.io/erpnext/loyalty-program · retrieved 2026-08-02

B
No

guest-loyalty-stored-value-gift

No stored-value or gift card product.

F

Labor & workforce

Partial

labor-clock-in-at-pos

Frappe HR (separate free GPL-3.0 app) provides Employee Checkin with geolocation check-in/out and biometric-device import. It is not embedded in the POS screen and requires installing a second app. https://github.com/frappe/hrms · retrieved 2026-08-01

B
No

labor-photo-punch-verification differentiator

Frappe HR documents geolocation check-in but no photo capture or facial verification at punch.

F
Unknown

labor-offline-time-punch differentiator

Undetermined rather than absent. Frappe HR imports punches from biometric attendance devices, which typically buffer locally, but no documentation retrieved states whether a punch can be taken and later reconciled while the Frappe server is unreachable. The POS itself has no offline mode, so a POS-embedded offline punch is certainly unavailable.

F
Yes

labor-granular-rbac

Capability upheld but the citation is wrong and I had to source it myself. The REST API page documents CRUD, auth and pagination only — it says nothing about permissions, permlevels or User Permissions. The correct source is the users-and-permissions page, which does document read/write/create/submit/cancel/amend/delete per role, field-level Permission Levels, and User Permissions restricting by Link field value. Re-cite before publishing. https://docs.frappe.io/framework/user/en/basics/users-and-permissions · retrieved 2026-08-01 adversarially verified

B
Partial

labor-manager-override-audit

Shortfall: there is no approver to attribute. Frappe’s Version doctype carries track_changes: 1 and stores ref_doctype, docname and a serialised field-level diff with owner and creation timestamps, and submitted documents are immutable behind cancel-and-amend, so the immutable queryable audit trail half of the claim is met at primary-source level. But no override or approval event exists to log: there is no manager-PIN prompt at the terminal and no approver field anywhere in the POS (payments-refund-void-controls, order-capture-void-comp-controls). What is recorded is the actor, not a second party who authorised the action. Downgraded from yes on verification. https://raw.githubusercontent.com/frappe/frappe/develop/frappe/core/doctype/version/version.json · retrieved 2026-08-02 adversarially verified

A
Partial

labor-native-scheduling differentiator

Frappe HR provides Shift Type, Shift Assignment and Shift Request in the same app that holds attendance. It is shift assignment, not a graphical restaurant schedule builder with role coverage.

F
No

labor-demand-labor-forecast differentiator

Frappe HR enumerates its modules: employee lifecycle, leave, attendance with geolocation check-in, payroll and salary structures, expense claims and advances, performance management, shift management, onboarding and exit interviews. No sales-driven demand forecast or labour-model generator is among them. https://github.com/frappe/hrms · retrieved 2026-08-02

B
No

labor-realtime-labor-percent differentiator

No shipped report joining live clocked hours to live sales.

F
No

labor-overtime-prevention differentiator

Frappe HR documents Shift Type, Shift Assignment and attendance capture, but no approaching-overtime alert, no clock-in block against scheduled hours and no weekly-hours projection. https://github.com/frappe/hrms · retrieved 2026-08-02

B
No

labor-break-compliance-by-state differentiator

Frappe HR's compliance localizations are India- and UAE-centric; no US state break rule library.

F
No

labor-minor-labor-rules

Frappe HR’s documented compliance content is India- and UAE-oriented (income tax slabs, statutory payroll components). No minor or youth labour rule library, no school-night hour caps and no age-based clock-in restrictions appear in its module list. https://github.com/frappe/hrms · retrieved 2026-08-02

B
No

labor-tip-pooling-rules

No tip concept anywhere in POS or HR.

F
No

labor-tip-distribution-audit-trail

POS Invoice enumerates no tip or gratuity field, so no tip is ever captured in the system and there is no distribution to audit. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_invoice/pos_invoice.json · retrieved 2026-08-02

A
No

labor-qualified-tips-w2-reporting differentiator

No US W-2 payroll output at all, let alone Box 12 code TP or Treasury tipped-occupation codes.

F
Partial

labor-native-payroll differentiator

Frappe HR runs payroll natively — salary structures, income tax slabs, standard and off-cycle payroll runs, salary slips, bank payment entries. But it is a payroll calculation engine, not a US tax-filing and direct-deposit provider; filing is the operator's responsibility. https://github.com/frappe/hrms · retrieved 2026-08-01

B
No

labor-payroll-export-formats

No named Gusto/ADP/Paychex/QuickBooks payroll connectors. Generic CSV export and REST are available.

F
Partial

labor-shift-swap-workflow differentiator

Frappe HR Shift Request goes through an approval workflow. No open-shift claiming marketplace and no overtime/role eligibility enforcement in the swap path.

F
Partial

labor-server-performance-metrics differentiator

Every POS Invoice carries an owner and optional Sales Person, and Sales Person / Item-wise Sales reports slice by them, so average check and mix per cashier are derivable. Void and comp rate per server is not a shipped metric.

F

Inventory, purchasing & cost control

Yes

inventory-recipe-bom-costing

The BOM manual states that "each item (sub-assembly) could have its own BOM hence forming a tree of Items with multiple levels", exposes that tree through the Materials Required (Exploded) view, and documents the "Update Cost button" to "fetch the latest price/costs", adding that "BOM cost can also be set to be updated automatically via Manufacturing Settings". Multi-level sub-recipes with automatic parent-cost recalculation on component price movement, in a core module rather than a contracted add-on. Re-cited on verification from the repository landing page to the manual. https://docs.frappe.io/erpnext/bill-of-materials · retrieved 2026-08-02 adversarially verified

B
Partial

inventory-unit-conversion-yields

Shortfall: no raw-to-usable yield or waste percentage. The multi-unit half is documented verbatim in the Item manual — "set an additional UoM with an appropriate conversion factor. For example, 500 Nos of screws = 1 Kilogram" — so purchase, recipe and count units with explicit conversion factors are native. BOM scrap and process loss do not fill the gap: scrap is "the scrap Item that will be created when manufacturing", and process loss applies when a scrap item matches the finished product, where "its quantity is subtracted from the manufactured Item quantity". That is shrinkage on a produced item’s output, not usable yield on a purchased ingredient. Downgraded from yes on verification. https://docs.frappe.io/erpnext/bill-of-materials · retrieved 2026-08-02 adversarially verified

B
Partial

inventory-theoretical-vs-actual differentiator

Stock Ledger gives actual movement, Stock Reconciliation records counts and posts the variance to a difference account, and BOM-driven Work Order consumption gives theoretical usage in a manufacturing flow. There is no shipped restaurant-style theoretical-vs-actual usage variance report in units and currency per count period.

F
Partial

inventory-realtime-depletion differentiator

POS Profile binds a Warehouse and POS Invoice with Update Stock depletes on submit in real time — but only the sold item, or the Product Bundle's components. No modifier-driven depletion, because modifiers do not exist. https://docs.frappe.io/erpnext/pos-profile · retrieved 2026-08-01

B
No

inventory-86-auto-sync differentiator

Stock can hit zero and stop-sale can be enforced, but nothing auto-86s across POS, online, and third-party channels.

F
Partial

inventory-count-modes

Stock Reconciliation supports both full and partial/subset counts, and each is a separate submitted document so history is preserved rather than overwritten. No scheduled recurring cycle-count scheduler.

F
No

inventory-mobile-count-offline

Item barcode scanning works in Stock Entry via keyboard-wedge scanners on any browser, but there is no offline-capable mobile counting app.

F
No

inventory-vendor-catalogs-edi differentiator

No Sysco / US Foods / PFG catalog or EDI connectors. Purchase Orders can be emailed as PDF.

F
No

inventory-invoice-ocr differentiator

No supplier-invoice OCR in core ERPNext.

F
Partial

inventory-price-change-alerts differentiator

Item Price history and Item-wise Purchase History give full per-item purchase price trails, and the Notification doctype could be configured to alert on a threshold. Nothing ships pre-built as a price-variance alert.

F
Partial

inventory-par-auto-suggest differentiator

Reorder Level and Reorder Qty per item-per-warehouse automatically generate Material Requests when on-hand falls below par — genuinely native. The forecast-driven mode is Production Plan pulling from open Sales Orders, which is demand-of-record, not a sales forecast.

F
Partial

inventory-waste-logging

Stock Entry (Material Issue) debits an expense/scrap account and depletes inventory, and Stock Entry Type is extensible. No shipped reason-code taxonomy and no waste-cost report separated from usage variance.

F
Partial

inventory-shelf-life-expiry

Only expiry survives. The Batch documentation covers expiry date and expiry-vs-posting-date filtering, but the retrieved page documents neither 'Shelf Life in Days' on Item, nor Batch-Wise Balance History, nor FEFO auto-selection. Three of the four specifics in the note are unsourced inference on a cell scored yes with no URL. https://docs.frappe.io/erpnext/batch · retrieved 2026-08-01 adversarially verified

B
No

inventory-bar-partial-bottle

Fractional UOMs would let you record 0.4 bottles, but there is no scale integration, pour-spout integration, or bar-specific counting workflow.

F
Partial

inventory-cogs-gl-export

ERPNext is itself the accounting system — perpetual inventory posts COGS to the GL automatically with expense accounts mappable per Item and Item Group. That makes export mostly moot, but there is no ongoing mapped journal-entry sync to QuickBooks/Intacct/NetSuite; the QuickBooks Migrator is a one-time import direction.

F
Yes

inventory-native-not-partner differentiator

Inventory, purchasing, BOM costing and manufacturing are core modules of the same free application. No MarginEdge/MarketMan/R365 equivalent contract needed. https://github.com/frappe/erpnext · retrieved 2026-08-01

B
Partial

inventory-menu-margin-linkage differentiator

The Gross Profit report joins selling price to valuation rate per item/invoice/sales-person and yields contribution margin per item. No configurable margin-threshold flag when ingredient cost moves.

F

Reporting, BI & data access

Partial

reporting-realtime-dashboard

Dashboard, Dashboard Chart and Number Card render live query results and the Frappe UI is responsive/PWA-capable off-premise. There is no dedicated owner-facing mobile sales app.

F
Partial

reporting-eod-closeout

Shortfall: tips. POS Closing Entry is a single submitted document carrying period_start_date and period_end_date, the linked POS Opening Entry, pos_profile, the cashier, the POS Invoice and Sales Invoice transaction tables, a taxes table, total_quantity, net_total, total_taxes_and_charges, grand_total and a payment_reconciliation table of expected versus closing amount per Mode of Payment. Against a claim covering gross sales, net sales, tax, tips, discounts, refunds, tender types and expected cash deposit, everything is present except tips — POS Invoice enumerates no tip or gratuity field, so none is ever captured. Partial upheld on verification but re-evidenced at primary-source level: the earlier objection was that the mechanism was unverified, and it now is. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.json · retrieved 2026-08-02 adversarially verified

A
Partial

reporting-pmix-modifier-level

Item-wise Sales Register and Sales Analytics give per-item quantity, gross and net, filterable by date, company, customer group and territory. There is no modifier level because there are no modifiers, and no daypart or revenue-center dimension.

F
Partial

reporting-comps-voids-audit

Cancelled and amended invoices are permanent records attributed to a user, and the Version log captures field-level changes including rate overrides. No reason codes, no approver field, and no packaged exception report.

F
Yes

reporting-cash-over-short

POS Closing Entry Detail carries exactly five fields — mode_of_payment, opening_amount, expected_amount, closing_amount and difference — giving counted-versus-expected per tender type. Its parent POS Closing Entry carries period_start_date, period_end_date, the linked POS Opening Entry, pos_profile and a user field labelled "Cashier", so the over/short figure resolves per drawer, per shift and per employee. Upgraded from partial on verification: the mechanic is real but had only ever been sought on the thin POS manual page, which documents none of it. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_closing_entry_detail/pos_closing_entry_detail.json · retrieved 2026-08-02 adversarially verified

A
No

reporting-labor-productivity

Frappe HR holds clocked hours and ERPNext holds sales, but no shipped report joins them into sales-per-labor-hour or labor cost percentage by hour.

F
Partial

reporting-server-scorecards differentiator

Sales Person-wise reports and invoice owner give average check and item mix per cashier. Attachment rate for named categories and tips-as-percent are absent (no tips exist).

F
No

reporting-channel-profitability differentiator

No channel dimension and no marketplace commission data to net out.

F
Unknown

reporting-scheduled-delivery

Scored yes with confidence 'inferred' and no source URL whatsoever. Auto Email Report is a specific named doctype with specific claimed behaviour (daily/weekly/monthly, CSV/XLSX/HTML, recipient list) and none of it is cited. Representative of a systemic pattern: roughly a dozen 'yes' scores in this dossier — inventory-transfers, inventory-lot-traceability, inventory-unit-conversion-yields, multi-location-org-hierarchy, multi-location-multi-tax-jurisdiction, multi-location-multi-currency-locale, multi-location-config-audit-log, multi-location-normalized-item-rollup, labor-manager-override-audit — carry confidence 'inferred' and no URL at all. Each should be partial or unknown under the no-URL-no-yes rule. adversarially verified

F
Yes

reporting-public-api differentiator

REST endpoints are auto-generated for every DocType, covering orders, invoices, payments, items, prices and customers, and API keys are self-generated by any user from User Settings > API Access with no partner agreement and no sales call. Caveat carried on verification: the labor half of the claim depends on installing Frappe HR, a separate — free, first-party — application, rather than being available out of the box. https://docs.frappe.io/framework/user/en/api/rest · retrieved 2026-08-02 adversarially verified

B
Partial

reporting-webhooks differentiator

Shortfall: no documented retry or backoff behaviour, which the claim requires alongside signature verification. The signature half is documented — the Webhook doctype fires on document lifecycle events and, when a secret is set, adds an X-Frappe-Webhook-Signature header whose value is "a base64-encoded HMAC-SHA256 hash of the payload". The guide states only that "a webhook request log is created for every successful request"; failed deliveries are neither logged nor retried on any retrievable page. Downgraded from yes on verification, for consistency with extensibility-webhook-reliability, which scores the same evidence partial. https://docs.frappe.io/framework/user/en/guides/integration/webhooks · retrieved 2026-08-02 adversarially verified

B
Yes

reporting-api-not-upcharged differentiator

API reference: Frappe "generates REST API for all of your DocTypes out of the box" - GET /api/resource/:doctype for lists (filters, pagination, sorting), CRUD on /api/resource/:doctype/:name, /api/method/ for whitelisted methods, authenticated by per-user api_key:api_secret token, cookie session or OAuth bearer. No plan tier, entitlement flag or per-location gate appears anywhere in the API contract; the ERPNext manual's Data Export page separately documents extracting any DocType's records to CSV or Excel with field selection and filters. GPL-3.0 source, so self-hosted use carries no fee at all. https://docs.frappe.io/framework/user/en/api/rest · retrieved 2026-08-06 adversarially verified

A
Partial

reporting-tier-paywall differentiator

Shortfall: nothing is paywalled, but two of the four reports the claim names are not shipped in any tier. There are no software feature tiers — the whole reporting surface is in the free GPL-3.0 application and Frappe Cloud prices compute and isolation rather than features — so no report can sit behind an upgrade. PMIX (Item-wise Sales Register) and multi-location comparison (Consolidated Financial Statement, cross-company filters) exist; labor-versus-sales does not exist at all (reporting-labor-productivity) and comps/voids has no packaged exception report (reporting-comps-voids-audit). Regraded C on verification: a vendor pricing page is the only source for the no-tiers fact, and grade C cannot carry a differentiator yes. https://frappe.io/erpnext/pricing · retrieved 2026-08-02 adversarially verified

C
Partial

reporting-history-retention differentiator

Retention is unlimited in practice because the operator owns the database and nothing is truncated or archived behind a fee. Frappe does not publish a retention commitment as such, and large histories are the operator's performance problem.

F
Partial

reporting-anomaly-alerts differentiator

The Notification doctype fires email/SMS/system alerts on document events or scheduled conditions against any field, so a void-count or sales threshold alert is configurable. No statistical deviation-from-pattern detection.

F
Unknown

reporting-nl-query

Frappe Insights is a separate first-party BI app and has shipped AI-assisted query features in recent versions, but this could not be verified against a retrievable source in this pass.

F
Partial

reporting-guest-cohorts differentiator

ERPNext ships a Customer Acquisition and Loyalty report (new versus repeat customers by period) and Customer-wise sales, tied to real Customer records. No lifetime-spend cohort or visit-frequency segmentation view.

F
No

reporting-sales-forecast differentiator

No shipped forward sales forecast at daypart or hourly granularity.

F
No

reporting-tip-tax-compliance

No tips are captured, so no declared-versus-charged reporting exists.

F

Multi-location, franchise & enterprise governance

Yes

multi-location-org-hierarchy

Documented verbatim at the current URL: "Open the Company tree view. Select New to create an independent Company, or select a group and use Add Child to create a subsidiary under it." Field behaviour: "Enable Is Group only for a parent used to organize child companies. A group does not post normal business transactions." and "Select a Parent Company when the entity belongs to a group structure." On structuring the group: "Use sibling Companies for entities at the same level. Use a parent and child structure for subsidiaries." and the Parent Company field "Places the entity under a group for consolidated navigation and reporting." Re-pointed 2026-08-09 from /erpnext/company, which 301s here. RE-TRANSCRIBED 2026-08-14: the page was rewritten between the 2026-08-13 and 2026-08-14 drift runs (visible text 47,236 -> 42,859 chars) and the five sentences previously quoted here no longer appear verbatim; every concept they carried is still documented on the same page, so the verdict is unchanged and only the wording was restated. https://docs.frappe.io/erpnext/company-setup · retrieved 2026-08-14 adversarially verified

B
Partial

multi-location-central-menu-publish

One Item master on one site is automatically shared by all companies and warehouses, so central authoring is the default. There is no publish action, target-set selection, or push history showing what went where and when.

F
Partial

multi-location-price-zones

Shortfall: no daypart dimension. One Item carries many Item Price rows selected per company, currency, customer group, territory and POS Profile, so per-location-group pricing works with no item duplication. Time-of-day pricing does not: Pricing Rule’s only temporal control is a Valid From / Valid Up To date range, with no time-of-day or day-of-week condition (menu-pricing-dayparting). Downgraded from yes on verification. https://docs.frappe.io/erpnext/pricing-rule · retrieved 2026-08-02 adversarially verified

B
Partial

multi-location-consolidated-reporting

Consolidated Financial Statement across a group-company tree is native, and sales/item reports filter across companies. Labor, discount and void rollups plus store-vs-store ranking with variance flags are not packaged.

F
No

multi-location-cross-location-giftcard

No gift card product and therefore no outstanding-liability or inter-store settlement reporting.

F
Partial

multi-location-cross-location-loyalty

A single Customer's Loyalty Point Entry ledger spans every POS Profile and warehouse in the company, so cross-store loyalty works within a brand on one site. Loyalty Program is scoped per Company, so a multi-company franchise group does not share one balance. https://docs.frappe.io/erpnext/loyalty-program · retrieved 2026-08-01

B
Partial

multi-location-multi-brand differentiator

Multiple Companies on one site give separate revenue reporting, letterheads and print formats. A POS Profile binds to one Company, so a single terminal and drawer serving two brands simultaneously is not supported.

F
Partial

multi-location-multi-tax-jurisdiction

Shortfall: no per-location tax configuration, no documented inclusive-versus-exclusive setting and no per-location exemption. Tax Rule selects a Sales Taxes and Charges Template by Customer or Supplier, by billing and shipping addresses "fetched if saved in the Customer/Supplier master", and by Tax Category — "Setting a Tax Category allows applying multiple Tax Rules to a transaction based on different factors" — and setting an Item or Item Group on the rule covers the prepared-food-versus-grocery class distinction. Matching keys on the party’s address rather than the selling store, and the manual documents none of the other three elements. Downgraded from yes on verification. https://docs.frappe.io/erpnext/tax-rule · retrieved 2026-08-02 adversarially verified

B
No

multi-location-central-labor-policy

Frappe HR policies are configurable per company, but nothing is enforced at a POS terminal and there is no predictive-scheduling or break-enforcement engine.

F

Hardware & physical footprint

Yes

hardware-commodity-devices differentiator

The POS ships as a JavaScript Desk page in the product repository — point_of_sale.js, pos_controller.js, pos_item_cart.js, pos_item_selector.js, pos_item_details.js, pos_number_pad.js, pos_payment.js, pos_past_order_summary.js — with no native client and no device binding, so any iPad, Android tablet, PC, Mac or Chromebook with a browser runs it, and Frappe sells no terminals at all. Re-cited on verification: the POS manual page previously cited documents no device, browser or operating-system requirement of any kind. https://github.com/frappe/erpnext/tree/develop/erpnext/selling/page/point_of_sale · retrieved 2026-08-02 · not refetchable · site policy · graded A when read adversarially verified

B
Unknown

hardware-os-platforms

No page retrieved names specific client operating systems with minimum versions or device specs. Frappe documents server requirements, not POS client hardware requirements.

F
No

hardware-handheld-purpose-built

No first-party handheld of any kind, so no drop or IP rating.

F
No

hardware-handheld-battery-swap differentiator

Frappe sells no hardware of any kind and ships no first-party handheld, so there is no battery, hot-swap or spare-battery programme. Operators run the browser POS on commodity tablets and phones bought at open-market price, where battery handling belongs to the device OEM.

F
No

hardware-handheld-lte

There is no first-party handheld device, so no cellular-equipped SKU exists. A staff phone’s own LTE radio would carry the browser session, but that is the operator’s device rather than a product capability, and there is no offline mode to cover a cellular gap.

F
No

hardware-offline-mode

Terminals require a live connection to the Frappe server. Offline operation is frappe/erpnext#29068, a feature request opened 2021-12-29, labelled inactive and closed without implementation, and no degradation matrix is published anywhere — the POS Profile field list contains no offline setting and the POS manual addresses offline mode nowhere. Corrected on verification: the issue is closed, not open. https://github.com/frappe/erpnext/issues/29068 · retrieved 2026-08-02 adversarially verified

A
No

hardware-kds

No first-party KDS. Kitchen screens existed only in the hospitality app, archived Oct 4, 2023. https://github.com/frappe/hospitality · retrieved 2026-08-01

B
No

hardware-kiosk differentiator

Frappe sells no hardware and ships no kiosk application, so there is no kiosk enclosure, stand, printer or payment-reader bundle to assess.

F
No

hardware-drive-thru

No drive-thru product exists in the software and Frappe sells no hardware, so there are no headsets, lane loops, order confirmation boards, vehicle detectors or lane timers.

F
Partial

hardware-printer-compatibility

Shortfall: no manufacturer is ever named, no ESC/POS compatibility list is published, and raw thermal printing depends on third-party client software. Print Settings documents a CUPS print server — "You can enable print server by filling the print server IP and port. Then chose the default printer" — gated on installing the pycups library, covering generic LAN/IPP printers. Raw Printing documents driving a thermal printer in its native command language ("any string-based printer languages can be used in the Raw Commands field") but requires the operator to "download and install the QZ Tray application on the computer to which your thermal printer is connected". Regraded on verification from an unsourced inference to vendor documentation. https://docs.frappe.io/erpnext/raw-printing · retrieved 2026-08-02 adversarially verified

B
Partial

hardware-peripherals

Barcode scanners work out of the box (Item Barcode field plus keyboard-wedge input in POS and Stock Entry). Cash drawers, scales for by-weight items and customer-facing displays have no native support and no published compatibility list.

F
No

hardware-p2pe-terminal

No PTS device program and no stated merchant SAQ type.

F
No

hardware-tap-to-phone differentiator

The POS Profile payments table maps Modes of Payment to GL accounts; there is no acquirer connection, no reader configuration and no SoftPOS or tap-to-phone SDK anywhere in the POS configuration. https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_profile/pos_profile.json · retrieved 2026-08-02

A
No

hardware-pricing-transparency differentiator

Not applicable in the operator's favor: Frappe publishes no hardware prices because it sells no hardware. The operator buys at open-market price. https://frappe.io/erpnext/pricing · retrieved 2026-08-01

C
Partial

hardware-ownership-vs-lease differentiator

There is no lease because there is no vendor hardware — everything is owned outright by definition. Frappe does not state this anywhere, which is why this is not a clean yes.

F
Partial

hardware-usable-after-churn differentiator

Structurally guaranteed — commodity devices running a browser cannot be software-locked or bricked by Frappe. Not documented by the vendor as a commitment.

F
No

hardware-rma-sla differentiator

No vendor hardware, therefore no warranty or advance-exchange program. Device warranty is the OEM's.

F
Partial

hardware-byod

Any staff phone with a browser and a user account can reach the POS, and Frappe's role/user permission model plus optional 2FA governs access. There is no BYOD-specific security posture, MDM guidance, or documented model.

F
No

hardware-remote-device-management differentiator

No device fleet console. Frappe Cloud manages sites and servers, not terminals or printers.

F
No

hardware-selfpour-scales

No self-pour, keg, flow-meter, pour-spout or scale integration exists. Item UOM conversion can record a fractional quantity entered by hand, but nothing in the product reads a meter, a scale or a pour device.

F
Partial

hardware-callerid-integration

Frappe's Telephony module integrates Twilio and Exotel and pops an incoming-call notification linked to the matching Contact with call history. It surfaces in the desk UI, not in the POS order screen, and does not pre-populate an order.

F

Integrations, API & extensibility

Yes

extensibility-public-api-docs

Re-verified independently this pass: the page loads for an anonymous reader with no account, NDA or sales contact and states "Frappe framework generates REST API for all of your DocTypes out of the box". It documents token auth (the token "is generated by concatenating api_key and api_secret with a colon"), password auth and OAuth 2.0 access tokens, plus CRUD over POST/GET/PUT/DELETE, filters, pagination, remote method calls and file upload. https://docs.frappe.io/framework/user/en/api/rest · retrieved 2026-08-02 adversarially verified

B
Yes

extensibility-api-access-cost differentiator

Framework docs: API throttling is self-administered, not sold. "You can enable rate limiting on your site by adding configuration similar to the following in site_config.json" with "limit" (max request-seconds permitted) and "window" (window size in seconds); over-limit requests get HTTP 429. The site owner writes that file, so there is no vendor-metered API quota to buy up. The REST API reference confirms the API is generated for all DocTypes out of the box on every site, authenticated by per-user api_key:api_secret - no upgraded plan or per-location surcharge exists in the software, and self-hosting the GPL-3.0 stack costs nothing. https://docs.frappe.io/framework/user/en/rate-limiting · retrieved 2026-08-06 adversarially verified

A
Yes

extensibility-free-sandbox differentiator

Seeded test environment is in the product source. erpnext/setup/demo.py defines setup_demo_data(company_name) - it opens a "demo_data" savepoint, calls create_demo_company(), process_masters() and make_transactions(company) (items, item groups, customers, suppliers, sales and purchase invoices, payment entries) and rolls back on failure; clear_demo_data() removes it again. The framework installation guide documents standing the stack up locally with bench init, and the ERPNext README documents docker compose -f pwd.yml up -d on port 8080. GPL-3.0, so this requires no production account or payment. https://github.com/frappe/erpnext/blob/develop/erpnext/setup/demo.py · retrieved 2026-08-06 adversarially verified

A
Yes

extensibility-oauth-partner-apps

OAuth 2.0 is a documented auth method — 'Use the generated access_token in request header' as Authorization: Bearer. Scoped OAuth Client / OAuth Bearer Token records are revocable per app, alongside per-user API key/secret pairs. https://docs.frappe.io/framework/user/en/api/rest · retrieved 2026-08-01

B
Yes

extensibility-webhooks-push

Webhook doctype fires on document lifecycle events (on_update, on_submit, on_cancel, after_insert and similar) for any DocType including Sales Invoice and POS Invoice, with conditional filters. No polling required. https://docs.frappe.io/framework/user/en/guides/integration/webhooks · retrieved 2026-08-01

B
Partial

extensibility-webhook-reliability differentiator

Verified against the webhooks guide: X-Frappe-Webhook-Signature carrying a base64-encoded HMAC-SHA256 of the payload, doc-event triggers, and 'a webhook request log is created for every successful request'. Retry/backoff is genuinely absent from the documentation — the partial is correctly conservative, and the log-only-on-success detail is accurate. https://docs.frappe.io/framework/user/en/guides/integration/webhooks · retrieved 2026-08-01 adversarially verified

B
Partial

extensibility-order-injection-api

Shortfall: injected orders cannot fire to a KDS or a kitchen printer, because no KDS exists and no ticket-routing engine ships. POST /api/resource/Sales Invoice, POS Invoice or Sales Order does create a first-class submittable document that hits the GL, depletes stock and appears in all reporting, so the land-in-reporting half of the claim holds fully. Downgraded from yes on verification — the researcher’s own note conceded the KDS shortfall. https://docs.frappe.io/framework/user/en/api/rest · retrieved 2026-08-02 adversarially verified

B
Partial

extensibility-menu-write-api differentiator

Shortfall: modifiers cannot be written because they do not exist. "Frappe framework generates REST API for all of your DocTypes out of the box", so Item, Item Price, Item Variant and Pricing Rule are fully writable over POST/PUT — the items-and-prices two thirds of the claim is real and unrestricted. ERPNext has no modifier construct at all (menu-pricing-nested-modifiers), so the third element is unsatisfiable. Downgraded from yes on verification. https://docs.frappe.io/framework/user/en/api/rest · retrieved 2026-08-02 adversarially verified

B
No

extensibility-doordash-preferred differentiator

Not among the 2026 DoorDash Preferred Integration Partners (Checkmate, Chowly, Deliverect, Otter, PAR, Qu, Square, Stream, Toast, UrbanPiper). Would also fail the 250-live-store threshold.

F
No

extensibility-first-party-delivery-integrations differentiator

No DoorDash, Uber Eats or Grubhub integrations, first-party or otherwise.

F
Unknown

extensibility-middleware-compatibility

No evidence located that Deliverect, Chowly, Otter or Checkmate list ERPNext as a supported POS endpoint. Absence of evidence, not evidence of absence — their partner directories were not retrieved.

F
Partial

extensibility-accounting-connectors

ERPNext replaces the GL rather than syncing to one, so the criterion partly misfits. A QuickBooks Migrator app exists for one-time inbound migration; there is no ongoing bidirectional mapped journal-entry connector to QBO or a second GL.

F
No

extensibility-payroll-export

No native connectors to Gusto, ADP, Paychex or Paylocity. Frappe HR runs payroll itself; export to third parties is generic CSV/REST.

F
Yes

extensibility-app-marketplace

Re-verified verbatim 2026-08-09 at the current URL (the old /marketplace 301s here): "Showing 344 apps", browsable by category (Analytics, Retail, E-commerce, Developer, ...) with a per-app detail page and self-install. Named third-party POS listings still present: URY - Restaurant POS & ERP, POSNext, GETPOS, KLiK PoS, POS Restaurant, POSpire. The vendor's cloud pricing page markets '150+ apps', an internal inconsistency, but the catalogue itself is the stronger source. https://cloud.frappe.io/marketplace/search · retrieved 2026-08-09 adversarially verified

B
Partial

extensibility-headless-embedded

Architecturally native — the POS UI is itself just a client of the same REST layer, so a third-party kiosk or web front end can drive the transaction engine. Frappe does not market or document a supported headless mode with its own contract.

F
Yes

extensibility-data-portability-exit differentiator

The Data Export tool emits CSV or Excel for any DocType with filters and per-field selection, and REST reads every DocType, so orders, customers, items, prices and payment metadata all leave in a documented machine-readable format on demand. Self-hosted operators never surrender the database in the first place. Re-cited on verification, and the previously asserted downloadable full-site backup is trimmed: it appears on no page retrieved in this pass. https://docs.frappe.io/erpnext/data-export · retrieved 2026-08-02 adversarially verified

B

Reliability, offline & operations

No

reliability-offline-order-entry

Order entry requires a reachable server. The browser-based offline POS was removed after v12 following chronic sync failures, and offline support is frappe/erpnext#29068, a feature request opened 2021-12-29 and closed as inactive without implementation. https://github.com/frappe/erpnext/issues/29068 · retrieved 2026-08-02

A
No

reliability-offline-card-auth differentiator

No card processing at all, offline or online-card-present.

F
No

reliability-offline-decline-liability differentiator

No store-and-forward exists, so no liability position is published.

F
No

reliability-lan-degraded-multi-terminal differentiator

If the on-premise or cloud server is reachable over LAN, all terminals share state normally — but there is no degraded partition mode, and if the server is unreachable terminals stop entirely.

F
Yes

reliability-local-transaction-engine differentiator

Capability upheld, citation wrong. The pricing page says nothing about self-hosting; it sells the opposite. The supporting evidence is Frappe's production setup documentation (docker images as the recommended production path, plus 'bench setup production' with Supervisor/Nginx). Re-cite to the production-setup docs. https://docs.frappe.io/framework/user/en/production-setup · retrieved 2026-08-01 adversarially verified

B
No

reliability-offline-kds-printing

No KDS, and printing is initiated by the server-rendered client.

F
No

reliability-printer-fallback

No automatic backup-printer failover or unreachable-printer alerting.

F
Partial

reliability-sync-conflict-handling

Frappe enforces optimistic concurrency on the document modified timestamp and prompts the second writer that the document has been modified since it was opened, which is an operator-prompt resolution. Not a documented network-partition sync policy, because there is no offline sync.

F
No

reliability-offline-feature-matrix

No published offline feature matrix — a direct consequence of there being no supported offline mode.

F
Unknown

reliability-public-status-page

status.frappe.io failed TLS validation (cert covers *.frappe.cloud only) and no alternate status host was confirmed. Per the ground rules this is recorded as unknown rather than absent — the page may exist at a URL not tested.

F
No

reliability-247-live-support

Upheld and now documented rather than inferred. frappe.io/support-sla: business hours are '10:00 to 18:00 Indian Standard Time (IST) (Monday-Friday)', weekend coverage is email-only for critical issues, and phone support is not in standard plans — 'Priority & Phone Support' must be purchased separately. For a US restaurant, 9pm Friday local is outside every published support window. The dossier's risk framing understates it: there is no support entitlement at all below the $50 plan. https://frappe.io/support-sla · retrieved 2026-08-01 adversarially verified

B
Partial

reliability-onsite-install differentiator

Frappe itself is remote-only, but the pricing page markets a 'global network of 200+ partners' for implementation, which in practice includes local on-site work. Frappe does not warrant or price partner on-site delivery. https://frappe.io/erpnext/pricing · retrieved 2026-08-01

C
Partial

reliability-menu-build-service differentiator

'Starter Packs' are described as certified-partner help to migrate and get started, and partner implementation covers data setup. Not first-party, not priced, and there is no menu concept to build. https://frappe.io/erpnext/pricing · retrieved 2026-08-01

C
No

reliability-hardware-replacement-sla

No vendor hardware program.

F
Unknown

reliability-pci-dss-4-attestation

No PCI DSS 4.0/4.0.1 AoC or P2PE listing located. Frappe's architecture keeps card data out of the application, but the vendor publishes no attestation either way.

F
Yes

reliability-mfa-role-based-access

Both halves documented. 2FA is activated with "bench --site [sitename] set-config enable_two_factor_auth true" and configured in System Settings (validation method, QR expiry, issuer), offering "OTP App = TOTP using Soft or Hard Token" and "Email/SMS = HOTP using Email or SMS". On activation all users including the Administrator must complete a second factor, and enforcement is role-scoped — an administrator can disable 2FA for the All role and enable it on selected roles. RBAC is documented separately (per-role read/write/create/submit/cancel/amend/delete, field-level Permission Levels, User Permissions). Caveat: "2FA does not apply to login by Web Users and API login", so webshop guests and API tokens sit outside it. Upgraded from partial on verification: the earlier downgrade rested on the previously cited 2FA URL 404ing, not on the capability being absent. https://docs.frappe.io/erpnext/setup-two-factor-authentication · retrieved 2026-08-02 adversarially verified

B
Partial

reliability-self-serve-training

Free public documentation at docs.frappe.io, an active public forum, and Frappe School courses cover self-serve learning. There is no POS training mode that lets staff practice without writing real transactions. https://docs.frappe.io/erpnext/point-of-sale · retrieved 2026-08-01

B
No

reliability-failover-terminal-role differentiator

Architecture is client-server; no terminal can assume a server role. The server is the single point of failure.

F
No

reliability-cellular-backup

No first-party or documented LTE failover; a tablet's own cellular radio would work but that is the device, not the product.

F

Commercial, compliance & data ownership

Yes

commercial-month-to-month-contract differentiator

Frappe Cloud product documentation: "Frappe Cloud billing cycles are monthly" and "each site is microbilled on a daily basis - when you select a plan, the monthly amount is divided by the number of days in the current calendar month", so a site is charged only for the days it exists. The Disable Account / Cancel Subscription doc gives a self-service path (drop sites and servers, Settings > Team Actions > Disable) after which "your billing will be paused"; no notice period, minimum term or termination fee is stated anywhere in the billing docs. Self-hosting the GPL-3.0 stack involves no subscription at all. https://docs.frappe.io/cloud/billing/billing-cycle · retrieved 2026-08-06 adversarially verified

B
Partial

commercial-no-early-termination-fee differentiator

No ETF can apply to a month-to-month hosting subscription or to self-hosted GPL software, so the practical answer is none. Frappe's published terms of service were not retrieved, so no affirmative contractual statement is cited.

F
Unknown

commercial-autorenew-terms-published

Auto-renewal and cancellation-notice terms were not located; the Frappe Cloud ToS/MSA was not retrieved in this pass.

F
Yes

commercial-processing-not-bundled differentiator

ERPNext manual: "to enable Stripe payment service, you need to configure parameters like Publishable Key, Secret Key" - the merchant supplies credentials from their own processor account, and Frappe is never a party to the processing relationship. The first-party frappe/payments app documents five interchangeable gateways (Razorpay, Stripe, Braintree, PayPal, PayTM) implemented as separate Payment Gateway DocTypes and linked through a Payment Gateway Account, so the processor is a per-account configuration choice. No in-house processing product, attach requirement or revenue share is documented anywhere. Caveat noted elsewhere in the record: these are online/e-commerce gateways, so card-present integration must be built or bought. https://docs.frappe.io/erpnext/stripe-integration · retrieved 2026-08-06 adversarially verified

B
No

commercial-interchange-plus-published differentiator

Not applicable — Frappe is not an acquirer or ISO and publishes no processing rates of any structure. https://frappe.io/erpnext/pricing · retrieved 2026-08-01

C
Unknown

commercial-rate-increase-clause differentiator

No processing agreement exists. Frappe Cloud hosting price-change terms were not located in the published ToS.

F
Partial

commercial-pricing-published

Three problems the researcher missed: (a) every figure is an 'onwards' floor, which the dossier notes but then scores as a clean yes; (b) the two vendor pricing pages publish different server prices (see pricing.software); (c) a material commercial condition is undisclosed on the pricing page — frappe.io/support-sla states the standard SLA applies only to 'Frappe Cloud customers entitled for product warranty as per subscription plans of $50 and above', so the advertised $5 and $20 entry plans carry no support entitlement. That is a published-price-with-hidden-gating pattern, not full transpare https://frappe.io/support-sla · retrieved 2026-08-01 adversarially verified

B
Yes

commercial-module-unbundling differentiator

Frappe Cloud documents per-app subscriptions separate from the site plan: "During app installation on a Frappe Cloud site, the user gets an option to select a plan. They can also change the plan from their site dashboard", and "Currently only monthly recurring plans are available. These are charged on pro-rata basis, i.e. if the customer uses your app's $30/mo plan for 10 days and let's say uninstalls the app, they will be charged $10 for that app at the end of the month." Apps are installed per site (Apps tab > Install App) and uninstalled individually (Apps tab > three dots > uninstall, /cloud/how-to-uninstall-an-app-from-the-site); the site plan is changed on a wholly separate screen. Base modules - ERPNext, Frappe HR, Webshop, Insights, CRM, Helpdesk - are separate free apps, so there is no bundled base POS subscription to reprice. Re-evidenced 2026-08-09; the prior citation (cloud.frappe.io/marketplace, a catalogue listing) went stale and did not support the a-la-carte/cancellation half of the claim. https://docs.frappe.io/cloud/app-plan · retrieved 2026-08-09 adversarially verified

B
Yes

commercial-hardware-purchase-outright

All hardware is bought outright from third parties at market price. Frappe has no lease, no rental, and no hardware SKUs to bundle. https://frappe.io/erpnext/pricing · retrieved 2026-08-01

C
Yes

commercial-hardware-not-locked differentiator

Print Settings documents a generic CUPS print server addressed by IP and port with a selectable default printer, and Raw Printing documents driving any thermal printer in its native command language; neither is vendor-branded, and Frappe sells no hardware to lock to. The POS itself is a browser Desk page, so the terminal is whatever the operator buys. Against the claim’s wording: no specific manufacturer is named on any Frappe page, so Epson/Star support is generic rather than an explicit compatibility list. Re-cited on verification — the POS manual page previously cited says nothing about printers or devices. https://docs.frappe.io/erpnext/print-settings · retrieved 2026-08-02 adversarially verified

B
Yes

commercial-data-export-self-serve

"‘Data Export’ helps you extract data from any DocTypes to a CSV or an Excel format", with filters and field selection, run by the operator with no support ticket and no fee; REST reads the same DocTypes programmatically. Orders, line items and payments are ordinary DocTypes. Labor requires installing Frappe HR, which is free but is a second application. Re-cited on verification: the REST page previously cited documents no export tooling, backups or CSV/XLSX output. https://docs.frappe.io/erpnext/data-export · retrieved 2026-08-02 adversarially verified

B
Yes

commercial-export-customer-and-loyalty differentiator

Customer, Contact, Address and Loyalty Point Entry are ordinary DocTypes, and the Data Export tool extracts "any DocTypes to a CSV or an Excel format" with filters and field selection. Gift-card liability is not exportable because gift cards do not exist in the product. Re-cited on verification: the Loyalty Program page previously cited documents accrual, tiers, expiry and redemption but nothing about export. https://docs.frappe.io/erpnext/data-export · retrieved 2026-08-02 adversarially verified

B
Unknown

commercial-post-termination-export-window differentiator

Frappe Cloud's post-termination data retention window is not stated on any page retrieved. Moot for self-hosted operators, who never hand the data over.

F
Unknown

commercial-data-ownership-clause differentiator

Frappe Cloud's terms of service were not retrieved, so no data-ownership or data-use restriction clause can be cited. Self-hosting makes the question moot in practice, but the hosted contract language is unverified.

F
No

commercial-pci-p2pe-tokenization

No P2PE, no tokenization vault, and no stated merchant SAQ type. Card acceptance is entirely the operator's separate arrangement, so their PCI scope depends on whatever they bolt on.

F
Unknown

commercial-pci-dss-4-controls

MFA is technically enforceable on all logins via Frappe's built-in 2FA, but Frappe publishes no PCI DSS 4.0.1 control documentation, no CDE definition, and no payment-page script-integrity position for webshop.

F
Partial

commercial-privacy-dsar-tooling

Frappe Framework ships Personal Data Download Request and Personal Data Deletion Request doctypes providing in-app access and erasure workflows. No published DPA was located, and deletion propagation across linked loyalty and communication records is not documented.

F
No

commercial-wcag-kiosk-accessibility differentiator

No VPAT/ACR published, and no kiosk product to certify.

F
No

commercial-dual-pricing-compliant differentiator

No dual pricing, cash discount, or surcharging engine, and no card-brand or BIN data in the system to enforce debit exclusion.

F

Adversarial verification

An independent pass was instructed to refute this record, defaulting to downgrade when uncertain. It challenged 58 values — 40 upheld, 15 downgraded, 3 upgraded. This is published in full because a reader who can see which values were contested, on what evidence, and which way they moved has something no affiliate-funded comparison offers.

Pricing and identity

FieldVerdictWhat the verifier found
pricing.implementation_feeupheldVerified on the pricing page: the 'global network of 200+ partners' language is present, Starter Packs are described as 'certified partners will help you get started quickly and economically' with no price attached, and no implementation figure of any kind is published. The dossier is right that this is the largest undisclosed cost line and it deserves the prominence given. source
pricing.processing_rateupheldNothing on the pricing page or POS documentation sells card acceptance; the only card references are Frappe charging the customer for hosting. commercial-processing-not-bundled and payments-published-rates follow correctly from this. This is one of the few 'no' scores in the dossier that is genuinely structural rather than merely undocumented. source
pricing.softwaredowngrade-to-partialThe record repeats the marketing page's figures as settled fact and does not reconcile them, which reintroduces an error an earlier pass had already caught. I retrieved both vendor pages today. frappe.io/erpnext/pricing shows Sites '$5 onwards /mo' (₹410), Servers '$20 onwards /mo' (₹1,800) and Premium Servers '$125 onwards /mo' (₹5,400). Frappe's own Frappe Cloud pricing page shows Sites '$5 onwards /mo' (₹410) and Servers '$40 onwards /mo' (₹3,600), with no premium tier and no ₹1,800 figure anywhere on it. Only the $5 Sites floor survives cross-checking; server pricing must be reported as $20–$40 conflicting between two first-party pages, source-dated. The AGPL-versus-GPL contradiction the record flags is real and I confirmed it independently — license.txt in frappe/erpnext opens 'GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007' while the pricing page says 'AGPL-3.0 licensed'. source

Capability claims

ClaimAs first scoredVerdictWhat the verifier found
commercial-pricing-publishedyes / documenteddowngrade-to-partialThree problems the researcher missed: (a) every figure is an 'onwards' floor, which the dossier notes but then scores as a clean yes; (b) the two vendor pricing pages publish different server prices (see pricing.software); (c) a material commercial condition is undisclosed on the pricing page — frappe.io/support-sla states the standard SLA applies only to 'Frappe Cloud customers entitled for product warranty as per subscription plans of $50 and above', so the advertised $5 and $20 entry plans carry no support entitlement. That is a published-price-with-hidden-gating pattern, not full transparency. source
reliability-247-live-supportno / inferredupheldUpheld and now documented rather than inferred. frappe.io/support-sla: business hours are '10:00 to 18:00 Indian Standard Time (IST) (Monday-Friday)', weekend coverage is email-only for critical issues, and phone support is not in standard plans — 'Priority & Phone Support' must be purchased separately. For a US restaurant, 9pm Friday local is outside every published support window. The dossier's risk framing understates it: there is no support entitlement at all below the $50 plan. source
labor-granular-rbacyes / documented, source: docs.frappe.io/framework/user/en/api/restupheldCapability upheld but the citation is wrong and I had to source it myself. The REST API page documents CRUD, auth and pagination only — it says nothing about permissions, permlevels or User Permissions. The correct source is the users-and-permissions page, which does document read/write/create/submit/cancel/amend/delete per role, field-level Permission Levels, and User Permissions restricting by Link field value. Re-cite before publishing. source
extensibility-webhook-reliabilitypartial / documentedupheldVerified against the webhooks guide: X-Frappe-Webhook-Signature carrying a base64-encoded HMAC-SHA256 of the payload, doc-event triggers, and 'a webhook request log is created for every successful request'. Retry/backoff is genuinely absent from the documentation — the partial is correctly conservative, and the log-only-on-success detail is accurate. source
menu-pricing-daypartingno / documentedupheldVerified against the Pricing Rule doc: temporal control is 'Valid From and Valid Up To' date range only, with no time-of-day or day-of-week condition documented. This is a correct documented 'no', not an inference. It matters because dayparting is table stakes for a pizza operator. source
guest-loyalty-offer-stacking-rulesyes / documentedupheldVerified: Pricing Rule documents Priority to resolve overlapping rules, 'Apply Multiple Pricing Rules' for stacking, and Mixed Conditions across selected items. Genuinely configurable precedence and combinability. source
guest-loyalty-accrual-modelsyes / documentedupheldVerified: Collection Factor drives points-per-spend ('with a Collection Factor of $100, an eligible $1,000 invoice earns 10 points'), Conversion Factor sets redemption value, and 'Programs can use one tier or several tiers based on a Customer's cumulative eligible spend'. Caveat the dossier did not surface: the doc frames earning against submitted Sales Invoices and gives no POS- or webshop-specific accrual guidance, which strengthens the existing 'unknown' on digital-loyalty-attach. source
payments-house-accountsyes / documentedupheldVerified in part and it holds: the Customer doc covers per-company credit-limit rows evaluated against submitted exposure, and points to the Accounts Receivable report. Minor correction — 'periodic Statement of Accounts' is not on the cited page, so trim that specific to avoid an unsupported detail inside an otherwise sound yes. source
inventory-shelf-life-expiryyes / inferred — shelf life days, batch-wise balance history, FEFOdowngrade-to-partialOnly expiry survives. The Batch documentation covers expiry date and expiry-vs-posting-date filtering, but the retrieved page documents neither 'Shelf Life in Days' on Item, nor Batch-Wise Balance History, nor FEFO auto-selection. Three of the four specifics in the note are unsourced inference on a cell scored yes with no URL. source
delivery-tracking-pagepartial / inferred — 'Delivery Trip can email/SMS customers an estimated arrival notification'downgrade-to-unknownThe Delivery Trip documentation makes no mention of customer notification by email or SMS. It documents driver/vehicle selection, multiple stops, Google Maps best-route calculation and Google-sourced ETAs — nothing outbound to the guest. The partial rests entirely on an unverified notification feature. source
delivery-route-mappartial / inferredupheldVerified and can be upgraded from inferred to documented: 'Using Google Maps, the best route for the deliveries will be calculated' and Delivery Trip will 'calculate the estimated arrival time for the deliveries. This data is fetched from Google Maps.' One correction — the doc does not state that the operator must supply a Google Maps API key, so drop that as an asserted fact even though it is likely true. source
reliability-local-transaction-engineyes / documented, source: frappe.io/erpnext/pricingupheldCapability upheld, citation wrong. The pricing page says nothing about self-hosting; it sells the opposite. The supporting evidence is Frappe's production setup documentation (docker images as the recommended production path, plus 'bench setup production' with Supervisor/Nginx). Re-cite to the production-setup docs. source
reporting-scheduled-deliveryyes / inferred — Auto Email Report doctypedowngrade-to-unknownScored yes with confidence 'inferred' and no source URL whatsoever. Auto Email Report is a specific named doctype with specific claimed behaviour (daily/weekly/monthly, CSV/XLSX/HTML, recipient list) and none of it is cited. source
extensibility-app-marketplaceyes / documented — '342+ apps'upheldVerified verbatim: the marketplace page reads 'Showing 342 apps', and URY - Restaurant POS & ERP, POSNext, GETPOS, KLiK PoS, POS Restaurant and POSpire are all present as third-party listings. Note the vendor's own cloud pricing page markets '150+ apps' — an internal inconsistency worth flagging but the marketplace listing itself is the stronger source. Developer revenue-share terms are indeed not published, so the 'unknown' on extensibility-partner-revshare is correct. source
reporting-webhooksyes / grade B, docs.frappe.io/framework/user/en/guides/integration/webhooksdowngrade-to-partialThe taxonomy claim requires webhooks 'with documented retry behavior and payload signature verification'. I retrieved the webhooks guide myself: the signature half is documented — 'an additional header (X-Frappe-Webhook-Signature) will be added to the request before it's sent out, with its value being generated from the secret as a base64-encoded HMAC-SHA256 hash of the payload' — and the retry half is entirely absent, with the page stating only that 'a webhook request log is created for every successful request'. Half a required conjunction is a partial, not a yes. The record scores the identical evidence as partial at extensibility-webhook-reliability, so this cell was also internally inconsistent with its own neighbour. source
extensibility-menu-write-apiyes / grade B, docs.frappe.io/framework/user/en/api/restdowngrade-to-partialThe claim is that 'menu items, modifiers, and prices can be written and updated via API'. I retrieved the REST page and it does support the items-and-prices half — 'Frappe framework generates REST API for all of your DocTypes out of the box', so Item, Item Price, Item Variant and Pricing Rule are writable over POST/PUT. But the modifier third of the claim cannot be satisfied at any price: the record's own menu-pricing-nested-modifiers scores no because ERPNext has no modifier construct. An API cannot write an object that does not exist, and this is a differentiator cell where the whole conjunction should be met before a yes. source
extensibility-order-injection-apiyes / grade B, docs.frappe.io/framework/user/en/api/restdowngrade-to-partialThe claim requires externally originated orders to land 'as first-class tickets that fire to KDS/printers and land in reporting'. The REST page confirms POST to /api/resource/:doctype creates submittable documents for any DocType, so the land-in-reporting half holds. The fire-to-KDS half does not, and the researcher's own note concedes it verbatim: 'it cannot fire to KDS/printers because no KDS exists'. A yes whose note disclaims a required element of the claim is the exact pattern this pass exists to catch. source
menu-pricing-channel-price-booksyes / grade B, docs.frappe.io/erpnext/price-listdowngrade-to-partialThe claim asks for distinct price books per channel — dine-in, pickup, delivery, kiosk, each third-party marketplace — plus percentage-markup rules over a base price. The percentage-rule half is real (Pricing Rule applies a rate or discount percentage over the selected Price List). The per-channel half is not: Price Lists are selected by POS Profile, Customer, Customer Group or Territory, and the record itself scores digital-kiosk, delivery-3p-direct-integration and delivery-menu-push as no, so three of the five channels the claim enumerates do not exist in the product to be priced. The researcher's own note says it — 'Channels are modeled as price lists, not as named channels' — and then scored a yes anyway. source
multi-location-price-zonesyes / grade B, docs.frappe.io/erpnext/price-listdowngrade-to-partialThe claim requires one item to carry different prices per location group, per order channel AND per daypart without duplicating the item record. The per-location-group and per-item-record halves hold — many Item Price rows hang off one Item, selected per POS Profile, company, currency, customer group and territory. The daypart dimension does not exist: menu-pricing-dayparting is scored no in this same record and was independently verified against the Pricing Rule page, whose only temporal control is a Valid From / Valid Up To date range with no time-of-day or day-of-week condition. Two of three dimensions is a partial. source
multi-location-multi-tax-jurisdictionyes / grade B, docs.frappe.io/erpnext/tax-ruledowngrade-to-partialI retrieved the Tax Rule page the researcher cited. It documents matching on Customer/Supplier, on the billing and shipping addresses 'fetched if saved in the Customer/Supplier master', on Tax Category ('Setting a Tax Category allows applying multiple Tax Rules to a transaction based on different factors') and on Item or Item Group — that last one genuinely covers the prepared-food-versus-grocery class distinction the claim names. What the page does not document, and I could find nowhere else, is any of the other three elements of the claim: per-location tax configuration (Tax Rule keys on the party's address, not on the selling store), an inclusive-versus-exclusive tax setting, or per-location tax exemptions. Item-class rates plus party-address matching earn a partial, not the full jurisdiction claim. source
labor-manager-override-audityes / grade A, frappe Version doctype JSONdowngrade-to-partialThe Version doctype evidence is sound as far as it goes — track_changes with a field-level diff, owner and creation timestamp, and submitted documents immutable behind cancel-and-amend. But the claim is that 'manager overrides and approvals are attributed to the individual approver', and there is no override or approval event in this product to attribute. The record's own payments-refund-void-controls states there is 'no manager-PIN-at-terminal approval prompt and no approver field', and order-capture-void-comp-controls says the same. What Frappe logs is the actor who made the change, not a second party who authorised it. Audit trail yes; approver attribution no. source
inventory-unit-conversion-yieldsyes / grade B, docs.frappe.io/erpnext/itemdowngrade-to-partialThe UOM half is documented and the researcher's verbatim quote is accurate — alternate UoMs with conversion factors, '500 Nos of screws = 1 Kilogram'. The claim also requires 'a yield/waste percentage applied to raw-to-usable conversion', and the note reaches for BOM scrap and process loss to cover it. I read the BOM page: scrap is 'the scrap Item that will be created when manufacturing', and process loss is what happens 'when a scrap item matches the finished product being manufactured', where 'its quantity is subtracted from the manufactured Item quantity'. That is shrinkage on a produced item's output, not a usable-yield percentage on a purchased raw ingredient, which is the restaurant mechanic the claim describes. No such per-item yield field exists. source
digital-guest-data-ownershipyes / grade B, docs.frappe.io/framework/user/en/api/restdowngrade-to-partialThe claim has two halves: the operator can export first-party guest records in bulk without fee or approval, and the vendor documents that the operator owns them. The export half survives and is now properly sourced — the Data Export manual states "'Data Export' helps you extract data from any DocTypes to a CSV or an Excel format", with filters and field selection, in-app and free. The ownership half is not documented anywhere: the record's own commercial-data-ownership-clause is unknown because the Frappe Cloud terms of service were never retrieved, and the cited REST page says nothing about ownership or export tooling at all. Self-hosting makes ownership true in practice, but the claim asks whether the vendor documents it, and it does not. source
reporting-tier-paywallyes / grade B, frappe.io/erpnext/pricingdowngrade-to-partialTwo problems. First the evidence: a vendor pricing page is grade C by the project's own scale, not B, and a differentiator yes may not rest on one. Second the substance: the claim is that specific reports — labor versus sales, PMIX, comps/voids audit, multi-location comparison — are available on the entry-level paid plan rather than behind a higher tier. It is true that Frappe operates no feature tiers at all, which disposes of the paywall question. But two of the four named reports are not shipped in any tier: this record scores reporting-labor-productivity as no ('no shipped report joins them into sales-per-labor-hour or labor cost percentage by hour') and reporting-comps-voids-audit as partial with 'no packaged exception report'. Nothing is paywalled because half of it does not exist, which is a partial, not the clean yes the claim intends. source
reliability-mfa-role-based-accesspartial / grade B — 'the framework 2FA guide URL returns 404; no retrievable source supports TOTP/SMS/email OTP or per-role enforcement'upgrade-to-yesThe previous pass downgraded this because it could not find a live 2FA document. I found one. docs.frappe.io/erpnext/setup-two-factor-authentication is current and documents the whole mechanism: activation via 'bench --site [sitename] set-config enable_two_factor_auth true', configuration in System Settings with OTP validation method, QR expiry and issuer name, and three methods — 'OTP App = TOTP using Soft or Hard Token' and 'Email/SMS = HOTP using Email or SMS'. It also documents exactly the per-role enforcement the previous verifier said was unsupported: on activation 'all users including the Administrator have to perform a 2nd level authentication with a token', and an administrator may disable 2FA for the All role while enabling it in other roles. One real caveat to carry in the note rather than in the value: '2FA does not apply to login by Web Users and API login', so webshop guests and API tokens are outside it. With RBAC already documented on the users-and-permissions page, both halves of the claim are met. source
guest-loyalty-data-export-portabilitypartial / grade B — 'the cited page documents nothing about the Data Export tool or full-site backups, which is half the claim'upgrade-to-yesThe previous pass was right that docs.frappe.io/framework/user/en/api/rest documents no export tooling — I re-read it and it covers auth, CRUD and pagination only, with no mention of Data Export, backups or CSV/XLSX. But the tool is real and documented elsewhere, and I located the page: "'Data Export' helps you extract data from any DocTypes to a CSV or an Excel format", with filters to 'add filters to select only specific data', field selection, and an option to omit header notes. Any DocType includes Customer, Contact, Address, Loyalty Point Entry and Sales Invoice. It is in-app, self-serve, no ticket and no fee, and REST covers the same ground programmatically. Both halves of the claim now hold; the downgrade was a citation failure, not a capability failure. source
reporting-cash-over-shortpartial / grade B — 'expected-versus-counted per Mode of Payment per cashier per session is a specific mechanic and I could not confirm it on any retrieved page'upgrade-to-yesThe previous pass could not confirm the mechanic because the thin POS manual page does not describe it — I re-fetched that page and it says nothing about closing entries, reconciliation or cash at all. So I went to the doctype definitions instead. POS Closing Entry Detail carries exactly five fields: mode_of_payment, opening_amount, expected_amount, closing_amount and difference. Its parent POS Closing Entry carries period_start_date, period_end_date, pos_opening_entry, pos_profile, a user field whose label is literally 'Cashier', a payment_reconciliation table, plus net_total, total_taxes_and_charges and grand_total. That is over/short per drawer, per shift and per employee, comparing counted against expected, which is the claim verbatim. Grade A primary evidence, upgraded. source
reporting-eod-closeoutpartial / grade B — 'the claimed mechanism is unverified on the source given'upheldPartial stands, but for a different reason than the previous pass gave, and the evidence needs replacing. The mechanism is no longer unverified: POS Closing Entry is a real submitted document carrying period start and end, the linked POS Opening Entry, the cashier, the POS Invoice and Sales Invoice transaction tables, a taxes table, total_quantity, net_total, total_taxes_and_charges, grand_total and a payment_reconciliation table with expected versus closing amounts per Mode of Payment. Against the claim that reconciles 'gross sales, net sales, tax, tips, discounts, refunds, tender types, and expected cash deposit in one document', everything is present except tips — and tips are structurally absent, since POS Invoice enumerates no tip or gratuity field. Named shortfall is tips, not missing documentation. source
hardware-printer-compatibilitypartial / grade F, no source — 'no native ESC/POS raw kitchen-ticket routing engine'upheldPartial is the right value but it was inference with no URL, and two first-party pages settle it. Print Settings documents a print server: 'You can enable print server by filling the print server IP and port. Then chose the default printer', gated on installing the pycups library via libcups2-dev or cups-libs — that is CUPS/IPP network printing to any queue the host can see. Raw Printing documents thermal printing: 'Sending a string of commands to a printer directly in its native language is called Raw Printing', with 'any string-based printer languages' usable in the Raw Commands field, but it requires installing QZ Tray, a third-party desktop application, on the machine the thermal printer is attached to. Named shortfall, now sourced: no manufacturer is named on either page, no Epson or Star compatibility list is published, and raw thermal printing depends on third-party client software rather than shipping in the product. source
hardware-commodity-devicesyes / grade B, docs.frappe.io/erpnext/point-of-saleupheldCapability upheld, citation worthless. I fetched the cited POS manual page and asked it directly about device, browser and operating-system requirements: it addresses none of them, being a short introduction to what POS is and why to use it. The supporting evidence is the source tree. erpnext/selling/page/point_of_sale contains point_of_sale.js, pos_controller.js, pos_item_cart.js, pos_item_selector.js, pos_item_details.js, pos_number_pad.js, pos_payment.js and pos_past_order_summary.js — the POS is a JavaScript Desk page rendered in the browser, with no native client and no device binding, and Frappe sells no terminals. Re-cite to the repository path. source
commercial-hardware-not-lockedyes / grade B, docs.frappe.io/erpnext/point-of-saleupheldUpheld with the citation replaced, because the cited POS page says nothing about printers or devices — I checked. The claim asks the vendor to document at least one non-proprietary hardware option. Print Settings documents a generic CUPS print server addressed by IP and port with a selectable default printer, and Raw Printing documents driving a thermal printer in its native command language via QZ Tray. Neither is vendor-branded, neither is gated to a Frappe SKU, and Frappe sells no hardware to lock to. Worth noting against the researcher's phrasing: no specific manufacturer is named on any Frappe page, so the 'Epson/Star' example in the claim is satisfied generically rather than by an explicit compatibility list. source
commercial-data-export-self-serveyes / grade B, docs.frappe.io/framework/user/en/api/restupheldUpheld, citation corrected. The REST page carries the API half — 'Frappe framework generates REST API for all of your DocTypes out of the box' — but I confirmed it contains no mention of a Data Export tool, backups, or CSV/XLSX output, which is what the claim's 'export to CSV' half needs. The Data Export manual supplies it: extract 'from any DocTypes to a CSV or an Excel format', with filters and field selection, run by the operator from the desk with no ticket and no fee. Orders, line items and payments are ordinary DocTypes; labor requires installing Frappe HR, which is free but is a second app. source
extensibility-data-portability-exityes / grade B, docs.frappe.io/framework/user/en/api/restupheldUpheld, citation corrected — same mis-citation as commercial-data-export-self-serve. The claim wants a complete historical export in a documented machine-readable format on demand at contract end. The Data Export manual documents CSV and Excel output for any DocType with filters and field selection; REST supplies the same data programmatically for every DocType. The specific 'full site backup (database plus files) is downloadable' assertion in the researcher's note is not on either page I retrieved, so it should be trimmed rather than asserted, even though bench backup exists. source
commercial-export-customer-and-loyaltyyes / grade B, docs.frappe.io/erpnext/loyalty-programupheldUpheld, citation corrected. The Loyalty Program page documents accrual, tiers, expiry and redemption; it documents nothing about exporting anything, so it cannot support an export claim. The Data Export manual can and does: 'any DocTypes to a CSV or an Excel format', which covers Customer, Contact, Address and Loyalty Point Entry. The researcher's own caveat is correct and worth keeping — gift-card liability is not exportable because no gift-card object exists in the product. source
payments-processor-choicepartial / grade B, frappe.io/erpnext/pricingupheldPartial is right and the shortfall is correctly named, but a pricing page is grade C and cannot carry the 'documented list of supported processors/gateways' half of the claim. First-party integration documentation can. I retrieved two pages. Payment Request states that 'ERPNext can email the request with an online payment link when a Payment Gateway Account is configured' and instructs the user to 'select the payment gateway account when collecting online' — but it names no gateway. The named guide is Stripe: 'to enable Stripe payment service, you need to configure parameters like Publishable Key, Secret Key' under 'Explore > Integrations > Stripe Settings', which then creates a Payment Gateway Account linked to an account head in the chart of accounts. Card-present and terminal acceptance appear on neither page — both are online payment-link flows — which is exactly why this stays partial rather than becoming a yes. source
inventory-recipe-bom-costingyes / grade B, github.com/frappe/erpnextupheldUpheld and now sourced to documentation rather than a repository landing page. The BOM manual states that 'each item (sub-assembly) could have its own BOM hence forming a tree of Items with multiple levels', exposes a Materials Required (Exploded) view of that tree, and documents the 'Update Cost button' to 'fetch the latest price/costs' with the note that 'BOM cost can also be set to be updated automatically via Manufacturing Settings'. Multi-level sub-recipes with automatic cost recalculation on component price movement is the claim exactly, and it is a core module rather than a paid add-on. source
extensibility-public-api-docsyes / grade BupheldRe-verified independently this pass rather than taken from the earlier one. docs.frappe.io/framework/user/en/api/rest loads for an anonymous reader with no account, no NDA and no sales contact, and states 'Frappe framework generates REST API for all of your DocTypes out of the box'. It documents token-based auth where 'the token is generated by concatenating api_key and api_secret with a colon', password-based auth, and OAuth 2.0 access tokens, plus CRUD, filters and pagination. This is one of the strongest cells in the record. source
reporting-public-apiyes / grade BupheldUpheld, with a caveat the record should carry. The REST page confirms auto-generated endpoints for every DocType and self-generated api_key/api_secret credentials with no partner agreement, which covers orders, payments and the item master. The claim also names labor data, and labor lives in Frappe HR — a separate application that must be installed on the site. It is first-party and free, so the claim is met, but 'covering labor' is conditional on a second install rather than out of the box, and that belongs in the note. source
order-capture-offline-order-entryno / grade A — 'an open, inactive feature request against the product repository (frappe/erpnext#29068, opened 2021-12-29)'upheldThe value is right and the evidence is right, but the record states a fact about the source that is false, and it repeats it in five cells. I opened frappe/erpnext#29068: it is titled 'POS offline mode', opened 29 December 2021, labelled feature-request and inactive, and it is CLOSED, not open. It proposes Application Cache plus a WebSQL local store for master data and receipts pending sync — a proposal, never shipped. A closed-and-inactive request is if anything slightly firmer evidence of absence than an open one, so the no holds, but 'open' must be corrected here and in payments-offline-store-and-forward, kitchen-offline-operation, hardware-offline-mode and reliability-offline-order-entry, all of which carry the same wording. source
hardware-offline-modeno / grade A — 'an open feature request labelled inactive (frappe/erpnext#29068)'upheldSame correction as order-capture-offline-order-entry: issue #29068 is closed, not open. The claim additionally asks whether the vendor documents which functions degrade offline; it publishes no such matrix, and I found no offline configuration of any kind in the POS Profile field list or the POS manual page, which addresses offline mode nowhere. The no is well founded — terminals require a reachable server — and only the characterisation of the issue needs fixing. source
payments-published-ratesno, grade B - Not applicable — Frappe is not a payment processor, so thereupheldGrade only, value untouched. Corpus-wide mechanical pass (workflows/regrade-marketing-pages.mjs): the cited page is a first-party pricing/feature/product page, which atlas-evidence-rules grades C ("vendor pricing page or feature page - first-party, but written to sell"), not B ("vendor product documentation - the manual, the help centre, the admin guide"). No claim was re-researched in this pass and no evidence was re-read; only the grade was brought into line with the source type. source
hardware-pricing-transparencyno, grade B - Not applicable in the operator's favor: Frappe publishes no upheldGrade only, value untouched. Corpus-wide mechanical pass (workflows/regrade-marketing-pages.mjs): the cited page is a first-party pricing/feature/product page, which atlas-evidence-rules grades C ("vendor pricing page or feature page - first-party, but written to sell"), not B ("vendor product documentation - the manual, the help centre, the admin guide"). No claim was re-researched in this pass and no evidence was re-read; only the grade was brought into line with the source type. source
reliability-onsite-installpartial, grade B - Frappe itself is remote-only, but the pricing page markets aupheldGrade only, value untouched. Corpus-wide mechanical pass (workflows/regrade-marketing-pages.mjs): the cited page is a first-party pricing/feature/product page, which atlas-evidence-rules grades C ("vendor pricing page or feature page - first-party, but written to sell"), not B ("vendor product documentation - the manual, the help centre, the admin guide"). No claim was re-researched in this pass and no evidence was re-read; only the grade was brought into line with the source type. source
reliability-menu-build-servicepartial, grade B - 'Starter Packs' are described as certified-partner help to mupheldGrade only, value untouched. Corpus-wide mechanical pass (workflows/regrade-marketing-pages.mjs): the cited page is a first-party pricing/feature/product page, which atlas-evidence-rules grades C ("vendor pricing page or feature page - first-party, but written to sell"), not B ("vendor product documentation - the manual, the help centre, the admin guide"). No claim was re-researched in this pass and no evidence was re-read; only the grade was brought into line with the source type. source
commercial-interchange-plus-publishedno, grade B - Not applicable — Frappe is not an acquirer or ISO and publisupheldGrade only, value untouched. Corpus-wide mechanical pass (workflows/regrade-marketing-pages.mjs): the cited page is a first-party pricing/feature/product page, which atlas-evidence-rules grades C ("vendor pricing page or feature page - first-party, but written to sell"), not B ("vendor product documentation - the manual, the help centre, the admin guide"). No claim was re-researched in this pass and no evidence was re-read; only the grade was brought into line with the source type. source
commercial-hardware-purchase-outrightyes, grade B - All hardware is bought outright from third parties at marketupheldGrade only, value untouched. Corpus-wide mechanical pass (workflows/regrade-marketing-pages.mjs): the cited page is a first-party pricing/feature/product page, which atlas-evidence-rules grades C ("vendor pricing page or feature page - first-party, but written to sell"), not B ("vendor product documentation - the manual, the help centre, the admin guide"). No claim was re-researched in this pass and no evidence was re-read; only the grade was brought into line with the source type. source
reporting-api-not-upchargedyes / B / "API and raw data access carry no fee on any plan and are free entirely when self-hosted. Frappe Cloud"upheldThe cited evidence was frappe.io/erpnext/pricing, a grade-C sales page, which cannot support a yes on a differentiator. Located the primary API reference instead: the REST API is generated for every DocType on every site, authenticated per user, with no tier or metering construct; raw-data export to CSV/Excel is documented in the ERPNext manual. Value stands on grade-A documentation. source
extensibility-api-access-costyes / B / "No API fee, no per-location surcharge, no upgraded plan requirement. Free entirely when self-h"upheldOriginal citation was the grade-C pricing page. Replaced with primary framework documentation: the REST API ships for every DocType on every site, and rate limiting is configured by the site administrator in site_config.json rather than provisioned by Frappe, so there is no metered or tier-gated API to upcharge. Value stands at grade A. source
extensibility-free-sandboxyes / B / "Strongest possible form: install the entire GPL-3.0 stack locally via bench or Docker for free"upheldOriginal citation was the grade-C pricing page (trial and signup credit), which does not establish a developer sandbox. Read the actual demo-data implementation in the ERPNext repository and the framework installation guide: local install is documented and the seeded demo dataset is a shipped, callable function. Value stands at grade A on first-party source for an open-source product. source
commercial-month-to-month-contractyes / B / "Frappe Cloud is pay-as-you-use from $5/mo with no stated minimum term, and self-hosting has no"upheldThe pricing page is grade C and cannot carry a differentiator yes. Frappe Cloud's own billing documentation independently establishes monthly cycles with daily proration and a documented self-service cancellation that pauses billing, with no minimum term or exit fee anywhere in the billing section. Value stands at grade B on vendor product documentation. source
commercial-processing-not-bundledyes / B / "Absolute. Frappe sells no payment processing, so there is no in-house lock and no attach requir"upheldReplaced the grade-C pricing-page citation with the ERPNext integration manual and the frappe/payments source. Positive documentation: the operator enters their own Stripe publishable/secret keys, and five gateways ship as swappable DocTypes behind a Payment Gateway Account, which is direct evidence of processor choice rather than an inference from silence. Value stands at grade B. source
multi-location-org-hierarchyyes / B - "Documented verbatim: 'A parent company is a larger organization which consists of one or more chi"upheldCitation-staleness check. The cited https://docs.frappe.io/erpnext/company 301s to https://docs.frappe.io/erpnext/company-setup; I fetched the destination (200, 2.7MB, Googlebot UA) and extracted its text. Every sentence the record quotes is present word for word, including the Is Group and Parent Company field definitions and the company tree view. The record's unsourced trailing claim about Cost Center, Warehouse and Territory trees is not on this page and has been withdrawn from the note. Value and grade stand. source
extensibility-app-marketplaceyes / B - "Verified verbatim: the marketplace page reads 'Showing 342 apps', and URY - Restaurant POS "upheldCitation-staleness check. https://cloud.frappe.io/marketplace 301s to https://cloud.frappe.io/marketplace/search; I fetched it (200, 366KB) and confirmed the body is the real catalogue, not an SPA shell - the app names and descriptions are in the served HTML. It reads "Showing 344 apps" rather than the recorded 342, and all six named third-party POS apps (URY, POSNext, GETPOS, KLiK PoS, POS Restaurant, POSpire) are still present, each with its own /marketplace/apps/<slug> page. Public browsing and self-install both hold; value and grade stand, URL and count refreshed. source
commercial-module-unbundlingyes / B - "Apps are installed and uninstalled individually on a site - ERPNext, Frappe HR, Webshop, In"upheldCitation-staleness check that turned into a re-evidencing. The cited cloud.frappe.io/marketplace 301s to /marketplace/search, and that catalogue page never carried the assertion anyway - it lists apps but says nothing about independent purchase or cancellation, which is thin for a differentiator-weight yes. I went to Frappe Cloud's documentation instead: https://docs.frappe.io/cloud/app-plan (200, Googlebot UA) states plans are selected per app at install time, are changeable from the site dashboard, are monthly, and are pro-rated so that uninstalling mid-month charges only the days used; https://docs.frappe.io/cloud/how-to-uninstall-an-app-from-the-site documents per-app uninstall from the Apps tab; https://docs.frappe.io/cloud/installing-an-app documents per-app install, and the site plan is a separate document (/cloud/how-to-change-a-site-plan), confirming app charges are not entangled with the base site subscription. Value and grade stand on much better evidence. source
multi-location-org-hierarchyyes / B — five sentences quoted from docs.frappe.io/erpnext/company-setupupheldFound by the 62nd session's full drift re-run asking the regression question: matched fell 5 -> 0 on this page while visible text fell 47,236 -> 42,859 characters, the only unexplained movement in the run that was not a code effect. The page was REWRITTEN, not withdrawn. Every concept the cell rests on is still documented there: the company tree view with Add Child to create a subsidiary, Is Group marking an organizational parent that posts no transactions, Parent Company placing an entity under a group for consolidated reporting, and sibling companies for entities at the same level. Value and grade are unchanged; the five stale quotations were re-transcribed from the same document and each replacement was verified present against the live page before it was written. source

Sources

Every URL this record cites. 58 in total.