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
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
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
order-capture-coursing-hold-fire
No course or fire concept anywhere in ERPNext. No kitchen destination exists to fire to.
order-capture-split-merge
POS supports multiple payment modes on one invoice but no check splitting or merging by item, seat, or share.
order-capture-bar-tab-preauth differentiator
No card pre-authorization capability; ERPNext performs no card processing.
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.
order-capture-native-handheld
POS is a responsive browser page. No first-party handheld app, and no tableside card payment path.
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
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
order-capture-kiosk-first-party differentiator
No first-party kiosk product.
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
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
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.
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
order-capture-scheduled-orders
Sales Order carries a delivery date, but there is no make-queue or computed fire time — no kitchen queue exists.
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
order-capture-order-ready-signal differentiator
No marketplace connections exist to signal.
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
Menu, modifiers & pricing engine
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
menu-pricing-modifier-price-by-parent-size
No modifiers exist, so no modifier price matrix.
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
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
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
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
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
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
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
menu-pricing-86-propagation
No KDS, no first-party restaurant ordering, no kiosk, no marketplaces to propagate to.
menu-pricing-countdown-auto-86 differentiator
Stock quantity is tracked and can go to zero, but there is no auto-86 with scheduled restore.
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
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
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
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.
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
menu-pricing-3p-menu-push
No marketplace integrations in core or on Frappe's own roadmap.
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.
Payments & money movement
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
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
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
payments-surcharge-guardrails differentiator
No BIN-level card data reaches ERPNext; no surcharging engine.
payments-emv-nfc
No first-party payment terminals of any kind.
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
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
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.
payments-tip-adjust
No tip concept in POS Invoice and no auth/capture window because there is no card processing.
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
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
payments-offline-decline-liability differentiator
No offline card capture exists, so no liability position is published.
payments-gift-cards
No gift card product. Could be modeled as a customer advance/credit, but that is a build, not a feature.
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
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
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
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.
payments-card-on-file differentiator
No tokenization vault. Online gateway integrations hand off to the gateway's own hosted flow.
payments-payout-timing differentiator
Not applicable — Frappe does not settle funds.
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.
Delivery, dispatch & third-party channels
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.
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.
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
delivery-driver-tracking differentiator
No driver mobile app emitting live GPS back to dispatch.
delivery-zones-polygon differentiator
Territory is a hierarchical label, not a geographic polygon or isochrone.
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.
delivery-address-validation
Address is a free-text doctype; no geocoding gate at order time.
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
delivery-cash-reconcile
POS Closing Entry reconciles a cashier drawer, not a driver bank.
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
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
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.
delivery-3p-injection
No marketplace connectors. The REST write API would let an integrator build one, but nothing ships.
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.
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.
delivery-store-pause
No marketplace connectors exist, so there is no store-level pause with a duration or reason to send to a channel.
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.
delivery-injection-error-visibility differentiator
Frappe does expose an Error Log and Webhook Request Log, but there are no channels whose health to report.
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
delivery-promise-time differentiator
Delivery Trip ETAs come from Google Maps drive time only — no kitchen load or driver-availability input.
delivery-offline-behavior
No offline mode exists anywhere in the product, so no delivery offline behavior is documented.
Digital ordering & guest-facing channels
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.
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.
digital-native-app differentiator
No branded consumer iOS/Android ordering app.
digital-account-saved-payment
Webshop supports customer accounts and saved Addresses, but no tokenized saved payment method and no one-tap reorder.
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.
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.
digital-fulfillment-modes
No pickup/curbside/dine-in/delivery mode selector with mode-specific fees and prep timing.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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
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.
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
Guest data, loyalty & marketing
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
guest-loyalty-thirdparty-identity-attach differentiator
No marketplace integrations.
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
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
guest-loyalty-offline-behavior differentiator
There is no offline mode in the product, so no queue-and-reconcile behavior is defined or documented.
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
guest-loyalty-targeted-offers differentiator
Pricing Rules target Customer, Customer Group and Territory — static attributes, not recency/frequency/spend/item-purchased audiences.
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
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.
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.
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.
guest-loyalty-10dlc-registration
No A2P 10DLC handling or documentation; SMS is BYO-gateway, so registration is entirely the operator's problem.
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.
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
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.
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
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
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.
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.
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
guest-loyalty-stored-value-gift
No stored-value or gift card product.
Labor & workforce
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
labor-photo-punch-verification differentiator
Frappe HR documents geolocation check-in but no photo capture or facial verification at punch.
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.
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
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
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.
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
labor-realtime-labor-percent differentiator
No shipped report joining live clocked hours to live sales.
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
labor-break-compliance-by-state differentiator
Frappe HR's compliance localizations are India- and UAE-centric; no US state break rule library.
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
labor-tip-pooling-rules
No tip concept anywhere in POS or HR.
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
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.
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
labor-payroll-export-formats
No named Gusto/ADP/Paychex/QuickBooks payroll connectors. Generic CSV export and REST are available.
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.
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.
Inventory, purchasing & cost control
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
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
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.
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
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.
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.
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.
inventory-vendor-catalogs-edi differentiator
No Sysco / US Foods / PFG catalog or EDI connectors. Purchase Orders can be emailed as PDF.
inventory-invoice-ocr differentiator
No supplier-invoice OCR in core ERPNext.
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.
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.
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.
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
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.
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.
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
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.
Reporting, BI & data access
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.
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
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.
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.
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
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.
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).
reporting-channel-profitability differentiator
No channel dimension and no marketplace commission data to net out.
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
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
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
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
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
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.
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.
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.
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.
reporting-sales-forecast differentiator
No shipped forward sales forecast at daypart or hourly granularity.
reporting-tip-tax-compliance
No tips are captured, so no declared-versus-charged reporting exists.
Multi-location, franchise & enterprise governance
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
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.
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
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.
multi-location-cross-location-giftcard
No gift card product and therefore no outstanding-liability or inter-store settlement reporting.
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
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.
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
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.
Hardware & physical footprint
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
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.
hardware-handheld-purpose-built
No first-party handheld of any kind, so no drop or IP rating.
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.
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.
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
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
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.
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.
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
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.
hardware-p2pe-terminal
No PTS device program and no stated merchant SAQ type.
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
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
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.
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.
hardware-rma-sla differentiator
No vendor hardware, therefore no warranty or advance-exchange program. Device warranty is the OEM's.
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.
hardware-remote-device-management differentiator
No device fleet console. Frappe Cloud manages sites and servers, not terminals or printers.
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.
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.
Integrations, API & extensibility
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
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
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
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
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
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
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
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
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.
extensibility-first-party-delivery-integrations differentiator
No DoorDash, Uber Eats or Grubhub integrations, first-party or otherwise.
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.
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.
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.
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
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.
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
Reliability, offline & operations
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
reliability-offline-card-auth differentiator
No card processing at all, offline or online-card-present.
reliability-offline-decline-liability differentiator
No store-and-forward exists, so no liability position is published.
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.
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
reliability-offline-kds-printing
No KDS, and printing is initiated by the server-rendered client.
reliability-printer-fallback
No automatic backup-printer failover or unreachable-printer alerting.
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.
reliability-offline-feature-matrix
No published offline feature matrix — a direct consequence of there being no supported offline mode.
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.
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
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
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
reliability-hardware-replacement-sla
No vendor hardware program.
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.
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
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
reliability-failover-terminal-role differentiator
Architecture is client-server; no terminal can assume a server role. The server is the single point of failure.
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.
Commercial, compliance & data ownership
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
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.
commercial-autorenew-terms-published
Auto-renewal and cancellation-notice terms were not located; the Frappe Cloud ToS/MSA was not retrieved in this pass.
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
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
commercial-rate-increase-clause differentiator
No processing agreement exists. Frappe Cloud hosting price-change terms were not located in the published ToS.
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
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
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
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
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
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
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.
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.
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.
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.
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.
commercial-wcag-kiosk-accessibility differentiator
No VPAT/ACR published, and no kiosk product to certify.
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.
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
| Field | Verdict | What the verifier found |
|---|---|---|
| pricing.implementation_fee | upheld | Verified 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_rate | upheld | Nothing 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.software | downgrade-to-partial | The 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
| Claim | As first scored | Verdict | What the verifier found |
|---|---|---|---|
| commercial-pricing-published | yes / documented | downgrade-to-partial | 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 transparency. source |
| reliability-247-live-support | no / inferred | upheld | 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. source |
| labor-granular-rbac | yes / documented, source: docs.frappe.io/framework/user/en/api/rest | upheld | 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. source |
| extensibility-webhook-reliability | partial / documented | upheld | 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. source |
| menu-pricing-dayparting | no / documented | upheld | 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. source |
| guest-loyalty-offer-stacking-rules | yes / documented | upheld | 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. source |
| guest-loyalty-accrual-models | yes / documented | upheld | 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. source |
| payments-house-accounts | yes / documented | upheld | 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. source |
| inventory-shelf-life-expiry | yes / inferred — shelf life days, batch-wise balance history, FEFO | downgrade-to-partial | 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. source |
| delivery-tracking-page | partial / inferred — 'Delivery Trip can email/SMS customers an estimated arrival notification' | downgrade-to-unknown | 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. source |
| delivery-route-map | partial / inferred | upheld | 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. source |
| reliability-local-transaction-engine | yes / documented, source: frappe.io/erpnext/pricing | upheld | 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. source |
| reporting-scheduled-delivery | yes / inferred — Auto Email Report doctype | downgrade-to-unknown | 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. source |
| extensibility-app-marketplace | yes / documented — '342+ apps' | upheld | Verified 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-webhooks | yes / grade B, docs.frappe.io/framework/user/en/guides/integration/webhooks | downgrade-to-partial | The 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-api | yes / grade B, docs.frappe.io/framework/user/en/api/rest | downgrade-to-partial | The 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-api | yes / grade B, docs.frappe.io/framework/user/en/api/rest | downgrade-to-partial | The 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-books | yes / grade B, docs.frappe.io/erpnext/price-list | downgrade-to-partial | The 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-zones | yes / grade B, docs.frappe.io/erpnext/price-list | downgrade-to-partial | The 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-jurisdiction | yes / grade B, docs.frappe.io/erpnext/tax-rule | downgrade-to-partial | I 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-audit | yes / grade A, frappe Version doctype JSON | downgrade-to-partial | The 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-yields | yes / grade B, docs.frappe.io/erpnext/item | downgrade-to-partial | The 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-ownership | yes / grade B, docs.frappe.io/framework/user/en/api/rest | downgrade-to-partial | The 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-paywall | yes / grade B, frappe.io/erpnext/pricing | downgrade-to-partial | Two 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-access | partial / grade B — 'the framework 2FA guide URL returns 404; no retrievable source supports TOTP/SMS/email OTP or per-role enforcement' | upgrade-to-yes | The 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-portability | partial / grade B — 'the cited page documents nothing about the Data Export tool or full-site backups, which is half the claim' | upgrade-to-yes | The 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-short | partial / 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-yes | The 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-closeout | partial / grade B — 'the claimed mechanism is unverified on the source given' | upheld | Partial 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-compatibility | partial / grade F, no source — 'no native ESC/POS raw kitchen-ticket routing engine' | upheld | Partial 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-devices | yes / grade B, docs.frappe.io/erpnext/point-of-sale | upheld | Capability 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-locked | yes / grade B, docs.frappe.io/erpnext/point-of-sale | upheld | Upheld 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-serve | yes / grade B, docs.frappe.io/framework/user/en/api/rest | upheld | Upheld, 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-exit | yes / grade B, docs.frappe.io/framework/user/en/api/rest | upheld | Upheld, 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-loyalty | yes / grade B, docs.frappe.io/erpnext/loyalty-program | upheld | Upheld, 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-choice | partial / grade B, frappe.io/erpnext/pricing | upheld | Partial 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-costing | yes / grade B, github.com/frappe/erpnext | upheld | Upheld 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-docs | yes / grade B | upheld | Re-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-api | yes / grade B | upheld | Upheld, 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-entry | no / grade A — 'an open, inactive feature request against the product repository (frappe/erpnext#29068, opened 2021-12-29)' | upheld | The 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-mode | no / grade A — 'an open feature request labelled inactive (frappe/erpnext#29068)' | upheld | Same 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-rates | no, grade B - Not applicable — Frappe is not a payment processor, so there | upheld | Grade 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-transparency | no, grade B - Not applicable in the operator's favor: Frappe publishes no | upheld | Grade 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-install | partial, grade B - Frappe itself is remote-only, but the pricing page markets a | upheld | Grade 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-service | partial, grade B - 'Starter Packs' are described as certified-partner help to m | upheld | Grade 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-published | no, grade B - Not applicable — Frappe is not an acquirer or ISO and publis | upheld | Grade 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-outright | yes, grade B - All hardware is bought outright from third parties at market | upheld | Grade 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-upcharged | yes / B / "API and raw data access carry no fee on any plan and are free entirely when self-hosted. Frappe Cloud" | upheld | The 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-cost | yes / B / "No API fee, no per-location surcharge, no upgraded plan requirement. Free entirely when self-h" | upheld | Original 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-sandbox | yes / B / "Strongest possible form: install the entire GPL-3.0 stack locally via bench or Docker for free" | upheld | Original 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-contract | yes / B / "Frappe Cloud is pay-as-you-use from $5/mo with no stated minimum term, and self-hosting has no" | upheld | The 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-bundled | yes / B / "Absolute. Frappe sells no payment processing, so there is no in-house lock and no attach requir" | upheld | Replaced 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-hierarchy | yes / B - "Documented verbatim: 'A parent company is a larger organization which consists of one or more chi" | upheld | Citation-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-marketplace | yes / B - "Verified verbatim: the marketplace page reads 'Showing 342 apps', and URY - Restaurant POS " | upheld | Citation-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-unbundling | yes / B - "Apps are installed and uninstalled individually on a site - ERPNext, Frappe HR, Webshop, In" | upheld | Citation-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-hierarchy | yes / B — five sentences quoted from docs.frappe.io/erpnext/company-setup | upheld | Found 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.
- https://frappe.io/erpnext/pricing
- https://github.com/frappe/erpnext/blob/develop/license.txt
- https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_profile/pos_profile.json
- https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_invoice/pos_invoice.json
- https://raw.githubusercontent.com/frappe/frappe/develop/frappe/core/doctype/version/version.json
- https://github.com/frappe/erpnext/issues/29068
- https://github.com/frappe/hospitality
- https://github.com/frappe/hrms
- https://docs.frappe.io/erpnext/point-of-sale
- https://docs.frappe.io/erpnext/pos-profile
- https://docs.frappe.io/erpnext/item
- https://docs.frappe.io/erpnext/loyalty-program
- https://docs.frappe.io/erpnext/delivery-trip
- https://docs.frappe.io/erpnext/company
- https://docs.frappe.io/erpnext/tax-rule
- https://docs.frappe.io/framework/user/en/desk/version
- https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.json
- https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/accounts/doctype/pos_closing_entry_detail/pos_closing_entry_detail.json
- https://docs.frappe.io/erpnext/data-export
- https://docs.frappe.io/erpnext/setup-two-factor-authentication
- https://docs.frappe.io/erpnext/bill-of-materials
- https://docs.frappe.io/erpnext/raw-printing
- https://docs.frappe.io/erpnext/print-settings
- https://docs.frappe.io/erpnext/stripe-integration
- https://docs.frappe.io/erpnext/payment-request
- https://docs.frappe.io/erpnext/pos-workflows
- not refetchable
- https://frappe.io/cloud/pricing
- https://docs.frappe.io/erpnext/opening-and-closing
- not refetchable
- https://docs.frappe.io/erpnext/quotation
- https://docs.frappe.io/erpnext/pricing-rule
- https://docs.frappe.io/erpnext/price-list
- https://docs.frappe.io/erpnext/customer
- https://docs.frappe.io/erpnext/promotional-scheme
- https://docs.frappe.io/erpnext/batch
- https://docs.frappe.io/framework/user/en/api/rest
- https://docs.frappe.io/framework/user/en/guides/integration/webhooks
- https://docs.frappe.io/framework/user/en/basics/users-and-permissions
- https://docs.frappe.io/framework/user/en/production-setup
- https://cloud.frappe.io/marketplace
- https://frappe.io/support-sla
- https://frappe.io/cloud/pricing
- https://docs.frappe.io/erpnext
- https://github.com/frappe/erpnext
- https://docs.frappe.io/erpnext/v13/user/manual/en/setting-up/data/data-export
- https://docs.frappe.io/framework/user/en/rate-limiting
- https://github.com/frappe/erpnext/blob/develop/erpnext/setup/demo.py
- https://docs.frappe.io/framework/user/en/installation
- https://docs.frappe.io/cloud/billing/billing-cycle
- https://docs.frappe.io/cloud/billing/disable-account
- https://docs.frappe.io/erpnext/stripe-integration
- https://github.com/frappe/payments
- https://docs.frappe.io/erpnext/company-setup
- https://cloud.frappe.io/marketplace/search
- https://docs.frappe.io/cloud/app-plan
- https://docs.frappe.io/cloud/how-to-uninstall-an-app-from-the-site
- https://docs.frappe.io/cloud/installing-an-app