55 min readDeterministic automation

Implementation Guide: Auto-generate weekly purchase orders based on forecasted covers and par levels

Step-by-step implementation guide for deploying AI to auto-generate weekly purchase orders based on forecasted covers and par levels for Restaurants & Food Service clients.

Hardware Procurement

Apple iPad (A16) 11th Generation 64GB Wi-Fi

AppleMWR33LL/A (Space Gray) or MWR43LL/A (Blue)Qty: 1

$349 per unit (MSP cost) / $449 suggested resale

Primary device for kitchen staff to perform inventory counts, review and approve auto-generated purchase orders, and access the MarketMan mobile app for real-time inventory visibility. Runs MarketMan iOS app, which supports barcode scanning via camera and touch-based count entry.

Rugged Shockproof Case for iPad 11-inch

Azzsy / Herize (Amazon)AZZSY-iPAD11-RUG (generic; verify compatibility with 11th Gen iPad form factor)Qty: 1

$30 per unit (MSP cost) / $50 suggested resale

Kitchen and walk-in cooler environments expose tablets to moisture, heat, grease, and drops. A rugged case with built-in screen protector and hand strap is mandatory for longevity. Confirm IP54-equivalent splash resistance.

Socket Mobile SocketScan S740 Bluetooth Barcode Scanner

Socket MobileCX3419-1831 (White) or CX3388-1776 (Black)Qty: 1

$340 per unit (MSP cost) / $450 suggested resale

Bluetooth 1D/2D barcode scanner used during receiving to verify incoming deliveries against purchase orders. Scans UPC, QR, and GS1 DataBar formats on both paper labels and screens. Pairs with iPad via Bluetooth for direct data entry into MarketMan receiving workflow. Eliminates manual item lookup during receiving and supports future FSMA traceability lot-number capture.

Ubiquiti UniFi U6 Pro Access Point

UbiquitiU6-ProQty: 2

$149 per unit (MSP cost) / $200 suggested resale

Dual-band WiFi 6 access points providing reliable wireless coverage in the kitchen, office, walk-in cooler areas, and front-of-house. Two APs recommended: one for kitchen/back-of-house, one for front-of-house/office. Supports 300+ concurrent clients with aggregate 5.3 Gbps throughput. Managed via UniFi Network Controller for remote MSP monitoring.

Ubiquiti UniFi Switch Lite 8 PoE

UbiquitiUSW-Lite-8-PoEQty: 1

$109 per unit (MSP cost) / $160 suggested resale

8-port PoE switch to power both UniFi access points via Ethernet and connect POS terminals, printer, and back-office PC. Eliminates need for separate PoE injectors and consolidates network infrastructure into a single managed switch.

APC Back-UPS 600VA Battery Backup

APC (Schneider Electric)BE600M1Qty: 1

$80 per unit (MSP cost) / $120 suggested resale

Uninterruptible power supply protecting the network switch, access points, and POS router from power fluctuations common in restaurant environments (kitchen equipment cycling, breaker trips). Provides 5–10 minutes of runtime for graceful network operation during outages and protects equipment from surges.

Cat6 Ethernet Cables (Various Lengths)

Monoprice / Cable MattersVarious (10ft, 25ft, 50ft)Qty: 6

$5 per cable average (MSP cost) / $15 per cable suggested resale

Hardwired Ethernet connections from switch to APs, POS terminal, and back-office workstation. Cat6 provides gigabit speeds and better shielding against kitchen EMI than Cat5e.

Software Procurement

MarketMan Growth Plan

MarketMan (R365 company)Growth PlanQty: Per location

$249/month per location (monthly billing) or ~$212/month (annual billing with ~15% discount). One-time $500 installation fee for monthly plans. MSP should mark up to $299/month and bill client directly.

Core inventory management and automated purchase order platform. Provides recipe costing, ingredient-level inventory tracking, par level management, automatic PO generation based on par levels and forecasted usage, supplier catalog management with auto-price-updates via EDI, invoice scanning (unlimited on Growth plan), waste tracking, and POS/accounting integrations. This is the central hub of the entire automation workflow.

Lineup.ai Standard Plan

Lineup.aiStandard PlanQty: Per location

$149/month per location. MSP should mark up to $179–$189/month. Optional add-on — recommend deploying after 12 weeks of MarketMan baseline data collection.

AI-powered demand forecasting engine that predicts daily and weekly customer covers (guest counts) and sales mix using historical POS data, weather, local events, and seasonal patterns. Feeds forecasted covers into the par-level and PO generation logic. Integrates natively with Toast, Square, Clover, and Brink POS. Recommended for restaurants with variable demand patterns (seasonal, event-driven, weather-sensitive).

Toast POS API Access (Restaurant Management Suite)

ToastSaaS add-on to existing Toast subscriptionQty: Per location

$50/month per location (required for API integrations). Client may already have this if on Toast Growth or Enterprise plan.

Enables API access for MarketMan to pull real-time sales data (items sold, covers, daypart breakdowns) and map POS menu items to inventory ingredients. Required prerequisite if client is on Toast POS. If client uses Square or Clover, their API access is included at no extra cost.

QuickBooks Online Plus

IntuitSaaS monthly

$99/month (client likely already has this). No MSP markup — ensure client has active subscription.

Accounting system that receives automated journal entries, COGS data, and accounts payable records from MarketMan. The integration syncs purchase orders, invoices, and payments to eliminate double-entry. QuickBooks Online Plus or Advanced is required (Simple Start lacks the inventory and class-tracking features needed).

Free. Self-host on MSP's existing management server or use Ubiquiti's cloud portal.

Centralized management console for remotely monitoring and configuring all UniFi network devices at the client site. Enables the MSP to push firmware updates, monitor uptime, configure VLANs, and receive alerts without on-site visits. Essential for the managed network service component.

Zapier Professional Plan

ZapierSaaS monthlyQty: 1

$49.99/month. MSP should include in managed service fee, not bill separately.

Workflow automation platform used to build custom notification and exception-handling workflows that supplement MarketMan's native automation. Examples: Slack/email alerts when a generated PO exceeds a dollar threshold, weekly COGS summary emailed to owner, auto-log PO approvals to a Google Sheet audit trail. Serves as the glue layer for any integrations MarketMan doesn't natively support.

Prerequisites

  • Active POS system (Toast, Square for Restaurants, or Clover) with administrative access and API credentials. If Toast, the Restaurant Management Suite add-on ($50/month) must be active for API access. Verify POS menu items are cleanly organized with consistent naming conventions.
  • Active broadline distributor accounts (e.g., Sysco, US Foods, Performance Food Group, or regional suppliers) with current pricing sheets, customer account numbers, and sales rep contact information. Obtain the most recent price lists in CSV or Excel format for each supplier.
  • Active accounting software subscription (QuickBooks Online Plus or Xero) with administrator credentials for integration configuration. Chart of accounts should include COGS accounts broken out by food, beverage, and supplies categories.
  • Complete recipe documentation for all active menu items, including ingredients, quantities, units of measure, and yield percentages (e.g., 80% yield on raw chicken breast). If recipes are not documented, budget 2–4 additional weeks for chef-led recipe entry sessions.
  • Established par levels for all inventory items, or willingness to set initial par levels with the kitchen manager during implementation. Par levels should account for delivery frequency (e.g., 2× weekly Sysco delivery, 3× weekly produce delivery).
  • Reliable internet service with minimum 20 Mbps download and 10 Mbps upload speeds. Verify service level at the client site using speedtest.net during peak kitchen hours. If below threshold, recommend ISP upgrade or secondary connection before proceeding.
  • Minimum 8–12 weeks of historical POS sales data available for export or API retrieval. This data is used to calibrate the demand forecasting model and establish baseline ordering patterns. If the client has less than 8 weeks of data (e.g., new restaurant), plan for a longer parallel-run phase with manual forecast overrides.
  • Electrical outlet availability near the network equipment installation point (typically back office or server closet). Dedicated circuit preferred but not required. UPS will be installed at this location.
  • Designated project champion on the client side — typically the General Manager or Kitchen Manager — who will attend weekly check-in calls, facilitate recipe entry sessions, validate auto-generated POs during parallel run, and drive staff adoption.
  • Client's supplier delivery schedule documented (which suppliers deliver on which days, order cutoff times, minimum order values). This is critical for configuring PO generation timing in MarketMan.

Installation Steps

Step 1: Site Survey & Network Assessment

Conduct an on-site survey of the restaurant to assess existing network infrastructure, identify optimal AP placement for kitchen and back-of-house coverage, document existing POS hardware and connectivity, locate the network equipment installation point, and verify electrical and internet prerequisites. Use a Wi-Fi survey tool (e.g., Ubiquiti WiFiman app) to map existing coverage and identify dead zones, especially in walk-in coolers and storage areas.

1
Install WiFiman on your phone from App Store/Google Play
2
Walk the entire premises recording signal strength readings
3
Document: (1) Current ISP modem location, (2) Existing switch/router model, (3) POS terminal locations, (4) Desired tablet usage areas, (5) Walk-in cooler/storage locations
4
Take photos of all network equipment, electrical panels near install point, and cable runs
Note

Schedule the site survey during a slow period (typically 2–4 PM on a weekday) so you can access all areas without disrupting service. Bring a 50ft Cat6 cable to test hardwired speeds at the proposed equipment location. If the walk-in cooler requires coverage, note that metal walls attenuate Wi-Fi significantly — an AP may need to be mounted just outside the cooler door with line-of-sight.

Step 2: Network Infrastructure Deployment

Install and configure the Ubiquiti UniFi networking equipment: PoE switch, two U6 Pro access points, UPS battery backup, and all Ethernet cabling. Create separate VLANs for POS/back-office traffic (VLAN 10) and guest Wi-Fi (VLAN 20) to isolate business-critical traffic. Adopt all devices into the UniFi Controller for remote management.

1
Mount UPS on wall or place on shelf near network equipment location
2
Connect ISP modem/router LAN port to USW-Lite-8-PoE Port 1 via Cat6
3
Connect U6 Pro AP #1 (kitchen/BOH) to PoE switch Port 2 via Cat6 run
4
Connect U6 Pro AP #2 (FOH/office) to PoE switch Port 3 via Cat6 run
5
Connect POS terminal(s) to PoE switch Ports 5-6 via Cat6
6
Plug PoE switch power into UPS battery-backup outlets
7
Access UniFi Controller at https://unifi.ui.com or self-hosted instance
8
Adopt all three devices (switch + 2 APs) into the controller
9
Create VLAN 10 (name: 'POS-BackOffice', subnet: 192.168.10.0/24)
10
Create VLAN 20 (name: 'Guest-WiFi', subnet: 192.168.20.0/24)
11
Create WiFi network 'RestaurantName-Staff' on VLAN 10 (WPA3, hidden SSID optional)
12
Create WiFi network 'RestaurantName-Guest' on VLAN 20 (WPA2, captive portal optional)
13
Assign POS switch ports to VLAN 10
14
Configure inter-VLAN firewall rules: block Guest→POS traffic
15
Set AP radio channels manually to avoid interference (2.4GHz: 1, 6, or 11; 5GHz: non-DFS channel)
16
Enable UniFi alerts for device offline, high latency, and AP disconnection
Note

Test Wi-Fi signal strength in the walk-in cooler with the door closed. If RSSI drops below -70 dBm, consider mounting AP #1 directly outside the cooler door on the ceiling. Label all Ethernet cables at both ends with location identifiers. Document the network topology in the client folder including IP assignments, VLAN configuration, and WiFi credentials. Set the UniFi switch and APs to auto-update firmware during a maintenance window (e.g., 3:00 AM Tuesday).

Step 3: iPad Setup & Mobile Device Management

Configure the inventory counting iPad with the MarketMan mobile app, Bluetooth barcode scanner pairing, and basic security settings. If the MSP uses an MDM solution (e.g., Mosyle, Jamf Now), enroll the device for remote management. Otherwise, configure manually with Guided Access for kiosk-like security.

1
Unbox iPad (A16) and install rugged case
2
Power on and complete iOS setup wizard: Connect to 'RestaurantName-Staff' WiFi network, Sign in with client's Apple ID or MSP-managed Apple ID, Enable automatic iOS updates
3
Install MarketMan app from App Store (search 'MarketMan')
4
Install Lineup.ai app if using (search 'Lineup.ai')
5
Pair Socket Mobile S740 scanner: a. Power on scanner (hold trigger 3 seconds until blue LED blinks), b. On iPad: Settings > Bluetooth > Pair 'Socket S740 [serial]', c. Open MarketMan app > verify scanner input works in inventory count screen
6
Configure iPad security: a. Settings > Face ID & Passcode > Set 6-digit passcode, b. Settings > Display & Brightness > Auto-Lock: 5 minutes, c. Settings > General > Restrictions (if not using MDM): disable app deletion, Safari, App Store
7
If using MDM: enroll via MDM enrollment URL or QR code
8
Test: open MarketMan app, scan a barcode on any product, verify item lookup works
Note

Create a shared Apple ID for the restaurant (e.g., restaurant-name-ipad@gmail.com) rather than using a personal Apple ID. Document the Apple ID credentials in the client folder. The Socket Mobile S740 should be charged via its included cradle — instruct kitchen staff to dock it at end of shift. If the scanner won't pair, perform a factory reset by scanning the barcodes in the Socket Mobile Quick Start guide (included in box). Keep the scanner firmware updated via the Socket Mobile Companion app.

Step 4: MarketMan Account Setup & Core Configuration

Create and configure the MarketMan Growth account, set up the organizational structure, and configure core settings including units of measure, cost centers, and user roles. This step establishes the foundation that all subsequent data loading builds upon.

1
Navigate to https://app.marketman.com/account/signup
2
Create account with client's business email
3
Select 'Growth' plan ($249/month) — or annual if pre-agreed with client
4
Pay $500 one-time installation fee (monthly billing) or first year upfront (annual)
5
Complete the setup wizard: a. Business name, address, timezone b. Currency: USD c. Default units of measure system (US customary) d. Fiscal year start month
6
Configure Locations (if multi-unit): a. Settings > Locations > Add Location for each restaurant site b. Set location-specific details (address, phone, manager)
7
Configure Storage Areas: a. Settings > Storage Areas > Add: Walk-in Cooler, Walk-in Freezer, Dry Storage, Bar (if applicable), Line (prep stations)
8
Configure User Roles: a. Owner/GM: Full admin access b. Kitchen Manager: Inventory, PO approval, receiving c. Sous Chef: Inventory counts only d. MSP Admin: Full admin (for ongoing management)
9
Invite users via Settings > Users > Invite
10
Configure notification preferences: a. PO auto-generation: email to Kitchen Manager + Owner b. Low stock alerts: email to Kitchen Manager c. Price change alerts: email to Owner + MSP Admin
Note

Use a strong unique password and enable two-factor authentication (2FA) for the Owner and MSP Admin accounts. The MarketMan onboarding team will reach out within 24-48 hours of signup to schedule a kickoff call — coordinate with them as they provide hands-on setup assistance included in the installation fee. Request that MarketMan assign a dedicated onboarding specialist if the client has more than 3 locations.

Step 5: POS Integration Configuration

Connect the client's POS system to MarketMan to enable automatic sales data synchronization. This integration is the foundation of demand forecasting — without accurate, real-time sales data, PO automation cannot function. The specific steps vary by POS system.

Toast POS

1
Log into Toast admin portal: https://pos.toasttab.com
2
Verify 'Restaurant Management Suite' is active (Settings > Billing) — if not active, enable it ($50/month add-on)
3
In MarketMan: Settings > Integrations > POS > Toast
4
Click 'Connect' and authenticate with Toast admin credentials
5
MarketMan will pull menu items, sales history, and modifiers
6
Verify: check that yesterday's sales data appears in MarketMan > Sales

Square for Restaurants

1
In MarketMan: Settings > Integrations > POS > Square
2
Click 'Connect' and authenticate with Square account owner credentials
3
Authorize MarketMan to access sales data, menu items, and locations
4
Select which Square location(s) to sync
5
Verify: check sales data sync in MarketMan > Sales

Clover

1
In MarketMan: Settings > Integrations > POS > Clover
2
Click 'Connect' and log in to Clover merchant account
3
Approve permissions for sales data and menu access
4
Verify: check sales data sync in MarketMan > Sales

General Post-Integration Steps (All POS Systems)

1
Map all POS menu items to MarketMan inventory items (Settings > Menu Mapping)
2
Resolve any unmapped items flagged by the system
3
Verify sales data is flowing correctly by comparing yesterday's POS sales report with MarketMan sales dashboard
Note

The POS integration typically syncs within 1–4 hours for the initial historical data pull. If sales data does not appear within 24 hours, contact MarketMan support (support@marketman.com) with the integration ID. Common issues: (1) Toast API access not enabled — client must contact Toast rep, (2) Square OAuth token expiration — re-authenticate, (3) POS menu items with special characters causing mapping failures — rename items in POS.

Critical

Do not proceed to recipe entry until POS integration is verified and all menu items are mapped.

Step 6: Supplier Setup & Catalog Loading

Add all of the restaurant's suppliers to MarketMan with complete catalog information including item names, pack sizes, unit costs, supplier item codes, and order minimums. Enable EDI integration for major distributors (Sysco, US Foods) to enable automatic price updates and direct electronic PO submission.

1
In MarketMan: Purchasing > Suppliers > Add Supplier
2
For each supplier, enter: Supplier name, contact person, phone, email; Order email address (where POs will be sent); Delivery days (e.g., Monday/Thursday for Sysco); Order cutoff time (e.g., 5 PM day before delivery); Minimum order value (if any); Payment terms (e.g., Net 30)
3
Load supplier catalogs: (a) Obtain latest price list from each supplier (CSV/Excel). (b) In MarketMan: Purchasing > Suppliers > [Supplier Name] > Import Catalog. (c) Map columns: Item Name, Supplier Item Code, Pack Size, Unit, Price. (d) Import and verify item count matches supplier list
4
For Sysco EDI integration: (a) Settings > Integrations > Suppliers > Sysco. (b) Enter Sysco customer number and location code. (c) MarketMan will establish EDI connection (may take 2-5 business days). (d) Once connected, prices auto-update and POs transmit electronically
5
For US Foods integration: (a) Settings > Integrations > Suppliers > US Foods. (b) Enter US Foods customer account number. (c) Follow same EDI setup process
6
For smaller/local suppliers without EDI: (a) Configure PO delivery method: Email (most common). (b) Verify supplier email address is correct. (c) Send a test PO and confirm receipt with supplier
Note

Supplier catalog loading is the most time-consuming step — budget 2-4 hours per supplier for initial setup. Tip: ask the client's sales rep at Sysco/US Foods for a digital catalog export rather than manually entering items. MarketMan's onboarding team can assist with bulk catalog imports. For suppliers with frequently changing prices (produce, proteins), EDI auto-update is essential — manual price maintenance is unsustainable. Flag any suppliers who only accept orders by phone call — these will require a manual step in the workflow where the kitchen manager calls in the auto-generated PO.

Step 7: Recipe Entry & Ingredient Mapping

Enter all active menu item recipes into MarketMan, linking each recipe to its component ingredients (which are inventory items linked to supplier catalog items). This creates the critical mapping chain: POS Sale → Menu Item → Recipe → Ingredients → Supplier Items, which enables the system to calculate how much of each ingredient is needed based on forecasted sales.

1
Schedule 3-4 recipe entry sessions with the Head Chef/Kitchen Manager (typically 2 hours per session, covering 20-30 recipes per session)
2
In MarketMan: Menu > Recipes > Add Recipe
3
For each recipe: a. Name (must match POS menu item name for auto-mapping) b. Category (Appetizers, Entrees, Desserts, etc.) c. Ingredients: Select ingredient from inventory item list, enter quantity used per portion, enter unit of measure (oz, lb, each, ml, etc.), enter yield percentage (e.g., chicken breast: 80% yield after trimming) d. Set recipe yield (number of portions) e. Enter prep instructions (optional but valuable for training) f. Save and verify cost calculation
4
For sub-recipes (e.g., house-made sauces, dressings): a. Create sub-recipe first b. Reference sub-recipe as an ingredient in parent recipes
5
After all recipes are entered: a. Go to Settings > Menu Mapping b. Verify each POS menu item is linked to a MarketMan recipe c. Resolve any orphaned items (POS items with no recipe)
6
Run the Recipe Cost Report: a. Reports > Recipe Costs b. Review with chef: flag any recipes where food cost % > 35% c. Verify costs are realistic (not $0.01 or $500 per plate)
Note

This is the step most likely to cause project delays. Restaurants often do not have standardized recipes — the chef 'just knows' the quantities. The MSP technician should facilitate but NOT guess at quantities; the chef must provide accurate ingredient amounts and yields. Use MarketMan's batch import feature if the client has recipes in spreadsheet format. Common pitfall: forgetting to account for waste/trim yield — a 10oz chicken breast that yields 8oz after trimming is an 80% yield, meaning the system needs to order 10oz worth of raw product to produce 8oz in the recipe. Another common issue: unit-of-measure mismatches (recipe calls for ounces but supplier sells by the pound) — MarketMan handles unit conversions but they must be configured correctly.

Step 8: Par Level Configuration & Order Triggers

Establish minimum (par) and maximum inventory levels for every ingredient, configure reorder points, and set up the automated PO generation rules. Par levels are the threshold quantities that trigger automatic purchase order line items — when projected inventory falls below par after accounting for forecasted usage, the system generates a PO to bring inventory back up to the maximum level.

1
In MarketMan: Inventory > Items > [Select Item]
2
For each inventory item, configure: (a) Par Level (Minimum): the lowest acceptable quantity before reorder — Formula: Par = (Average Daily Usage × Lead Time in Days) + Safety Stock — Example: If you use 20 lbs of chicken/day, supplier delivers in 2 days, and you want 1 day safety stock: Par = (20 × 2) + 20 = 60 lbs; (b) Max Level: target quantity after reorder — Formula: Max = Par + (Average Daily Usage × Days Between Orders) — Example: If ordering every 3 days: Max = 60 + (20 × 3) = 120 lbs; (c) Preferred Supplier: which supplier to order this item from; (d) Order Unit: the pack size for ordering (e.g., 40lb case)
3
Use MarketMan's suggested par levels as a starting point: (a) Purchasing > Par Levels > Auto-Calculate; (b) System analyzes last 8-12 weeks of usage data; (c) Review suggestions with Kitchen Manager; (d) Adjust for known seasonal patterns or upcoming events
4
Configure PO Generation Rules: (a) Settings > Purchasing > Auto-PO Settings; (b) Generation frequency: Weekly (e.g., every Monday at 6:00 AM); (c) Generation method: 'Par Level Based'; (d) Approval required: Yes (Kitchen Manager must approve before sending); (e) Auto-send after approval: Yes (sends to supplier via EDI/email); (f) Group by supplier: Yes (one PO per supplier per generation cycle)
5
Configure PO generation schedule per supplier to match delivery schedules: (a) Sysco: Generate PO Monday 6 AM for Wednesday delivery; (b) US Foods: Generate PO Wednesday 6 AM for Friday delivery; (c) Produce supplier: Generate PO Mon/Wed/Fri 5 AM for next-day delivery; (d) Adjust cutoff times to ensure PO is generated before supplier's order deadline
Note

Par levels are NOT static — they must be reviewed and adjusted monthly based on seasonal menu changes, volume fluctuations, and supplier lead time changes. Set a calendar reminder for the MSP to review par level accuracy with the client monthly during the first 6 months, then quarterly. Start with conservative (higher) par levels to avoid stockouts during the transition period — it's better to slightly over-order initially than to run out of a key ingredient. After 4 weeks of automated ordering data, tighten par levels based on actual consumption patterns. IMPORTANT: par levels should be set per storage location if the restaurant has multiple storage areas (e.g., walk-in cooler par level for dairy is separate from dry storage par level for canned goods).

Step 9: Accounting Integration Configuration

Connect MarketMan to the client's accounting software (QuickBooks Online or Xero) to automate the flow of purchase orders, invoices, and COGS data into the general ledger. This eliminates double-entry and gives the owner real-time food cost visibility.

For QuickBooks Online

1
In MarketMan: Settings > Integrations > Accounting > QuickBooks Online
2
Click 'Connect' and authenticate with QBO admin credentials
3
Authorize MarketMan to access company data
4
Map MarketMan categories to QBO chart of accounts: (a) Food purchases → COGS: Food (e.g., account 5100), (b) Beverage purchases → COGS: Beverage (e.g., account 5200), (c) Supplies purchases → COGS: Supplies (e.g., account 5300), (d) Supplier payments → Accounts Payable (e.g., account 2100)
5
Configure sync settings: (a) Auto-sync invoices: Yes, (b) Sync frequency: Daily, (c) Create POs in QBO: Optional (recommended for AP matching)
6
Run a test sync and verify: (a) Create a test PO in MarketMan, (b) Confirm it appears in QBO as a Purchase Order, (c) Receive the PO in MarketMan (simulate delivery), (d) Confirm the bill/invoice appears in QBO

For Xero

1
In MarketMan: Settings > Integrations > Accounting > Xero
2
Click 'Connect' and authenticate with Xero admin credentials
3
Map categories to Xero chart of accounts (same logic as QBO above)
4
Configure sync and verify with test transaction
Note

Coordinate with the client's bookkeeper or accountant before configuring the accounting integration. They need to verify the chart of accounts mapping and approve the sync settings. Common issue: the client's QBO chart of accounts may not have COGS accounts broken out by food/beverage/supplies — the bookkeeper may need to create these accounts first. If the client uses a bookkeeping service (e.g., Bench, Pilot), loop them in during this step. Set up a monthly reconciliation checkpoint where the MSP and bookkeeper verify that MarketMan totals match QBO totals.

Step 10: Lineup.ai Forecasting Integration (Optional but Recommended)

If deploying Lineup.ai as the demand forecasting layer, configure the integration between Lineup.ai and the client's POS to generate accurate covers and sales mix forecasts. Lineup.ai's forecasts will inform par level optimization and provide the 'forecasted covers' input that drives intelligent PO generation beyond simple static par levels.

1
Navigate to https://app.lineup.ai/signup
2
Create account with client's business email, select Standard plan ($149/month)
3
Connect POS integration: Settings > Integrations > Select POS (Toast/Square/Clover), authenticate with POS admin credentials, select location(s) to sync, and allow Lineup.ai to ingest 8–52 weeks of historical sales data
4
Initial model training takes 24–72 hours
5
After training completes, verify forecast accuracy: Dashboard > Forecast vs. Actual — check MAPE (Mean Absolute Percentage Error), target < 15%, and review day-of-week patterns, weekend spikes, etc.
6
Configure forecast outputs: enable daily covers forecast (breakfast/lunch/dinner dayparts), enable sales mix forecast (top items by category), and set up weekly forecast email to Kitchen Manager and Owner
7
Use Lineup.ai forecasts to adjust MarketMan par levels: when Lineup.ai predicts a high-volume week (e.g., +20% covers), manually increase par levels in MarketMan by proportional amount. NOTE: As of 2025, Lineup.ai does not have a direct API integration with MarketMan — this is a manual adjustment or Zapier-assisted workflow. See Custom AI Components section for a Zapier-based automation bridge.
Note

Lineup.ai is optional for the initial deployment. The base MarketMan system can generate POs based on static par levels without any forecasting layer. Recommend deploying Lineup.ai after 8–12 weeks of stable MarketMan operation — this gives the client time to build clean data and the MSP time to assess whether the client's demand variability justifies the additional $149/month cost. If the restaurant has very consistent, predictable volume (e.g., cafeteria, contract dining), Lineup.ai may not be necessary. If volume is highly variable (seasonal tourist area, event-driven, weather-sensitive), it adds significant value.

Step 11: Parallel Run — Automated POs Alongside Manual Ordering

Run the automated PO system in parallel with the existing manual ordering process for 2–4 weeks. During this period, the system generates POs automatically, but the Kitchen Manager reviews them against what they would have ordered manually. Discrepancies are investigated and configuration is adjusted. This phase builds trust in the system and catches configuration errors before full cutover.

1
Enable auto-PO generation in MarketMan (configured in Step 8)
2
Set approval mode to 'Manual Approval Required'
3
Each PO generation cycle (e.g., weekly Monday AM): a. System generates POs based on par levels and current inventory b. Kitchen Manager receives notification c. Kitchen Manager reviews auto-PO against their manual order notes d. Document discrepancies in the Parallel Run Tracking Sheet: item ordered differently (quantity variance), item missing from auto-PO (recipe/mapping gap), item on auto-PO but not needed (par level too high), price discrepancy (catalog needs update) e. Kitchen Manager may override quantities before approval f. Track all overrides for pattern analysis
4
MSP reviews discrepancy log weekly and adjusts: par levels over/under (adjust in MarketMan), missing items (check recipe mapping and menu mapping), wrong supplier (update preferred supplier assignment), quantity rounding issues (check order unit pack sizes)
5
Success criteria for ending parallel run: auto-generated POs match manual orders within 10% variance for 2 consecutive weeks, no critical stockouts caused by auto-PO quantities, Kitchen Manager expresses confidence in the system, no supplier complaints about PO format or delivery
Note

The parallel run is the most important phase for client buy-in. If the kitchen manager doesn't trust the system, they'll circumvent it. Invest MSP time here to be responsive — resolve discrepancies within 24 hours during parallel run. Create a simple Google Sheet tracking template with columns: Date, Supplier, Item, Auto-PO Qty, Manual Qty, Variance, Root Cause, Fix Applied. Share this sheet with the client and review it together on weekly calls. Expect 15–25% of items to need par level adjustments during the first two weeks — this is normal and expected.

Step 12: Go-Live Cutover & First Live Order Cycle

After successful parallel run validation, cut over to fully automated PO generation. Remove the manual ordering process, set appropriate approval workflows, and monitor the first 2–3 live order cycles closely for any issues.

1
Confirm parallel run success criteria are met (Step 11)
2
Announce go-live date to all stakeholders: Kitchen Manager, Sous Chefs, Owner/GM, and all suppliers (inform them POs will come from MarketMan email)
3
Configure production approval workflow: a. Auto-generated POs require Kitchen Manager approval b. POs over $X threshold (e.g., $2,000) also require Owner approval c. Set approval deadline: 2 hours after generation (before supplier cutoff)
4
Disable manual ordering process: a. Remove old paper order sheets from kitchen b. Archive old ordering spreadsheets c. Update kitchen SOP binder with new MarketMan PO workflow
5
Execute first live PO cycle: a. Monitor PO generation b. Watch for Kitchen Manager approval c. Confirm supplier receipt of PO d. Be available for immediate support during first delivery/receiving
6
After first delivery, perform receiving in MarketMan: a. Open PO in MarketMan app on iPad b. Scan items with Socket Mobile scanner as they come off the truck c. Note any variances (short-shipped, substituted, damaged) d. Close PO with actual received quantities
7
Verify accounting sync: a. Check QBO/Xero for auto-created bill matching the received PO
Note

Schedule the go-live for a Tuesday or Wednesday — avoid Monday (highest volume of orders after weekend) and Friday (staff less focused). The MSP tech should be on-call during the first 3 PO cycles (approximately 1-3 weeks depending on order frequency). Have a rollback plan: if the system generates a wildly incorrect PO, the Kitchen Manager should know they can manually override or place a phone order to the supplier as a fallback. This is a safety net, not an expectation.

Custom AI Components

Forecast-to-Par-Level Bridge Workflow

Type: workflow A Zapier-based automation workflow that bridges Lineup.ai demand forecasts with MarketMan par levels. Since Lineup.ai and MarketMan do not have a direct native integration, this workflow reads the weekly forecast from Lineup.ai, calculates adjusted par levels based on the forecasted covers vs. baseline covers, and notifies the Kitchen Manager with recommended par level adjustments. This is the key component that transforms static par-based ordering into dynamic, forecast-driven ordering.

Zapier Workflow: Forecast-Adjusted Par Level Recommendations

Trigger

  • App: Schedule by Zapier
  • Trigger: Every Week (Sunday at 8:00 PM local time)

Step 1: Get Lineup.ai Forecast (Webhook)

  • App: Webhooks by Zapier
  • Action: GET request
  • URL: https://api.lineup.ai/v1/forecasts/weekly (or use Lineup.ai's email export parsed via Email Parser by Zapier)
  • Headers: Authorization: Bearer {{LINEUP_API_KEY}}
  • Query Params: location_id={{LOCATION_ID}}&week=next
  • Output: forecasted_covers_next_week (integer)

Step 2: Get Baseline Covers (Google Sheets Lookup)

  • App: Google Sheets
  • Action: Lookup Spreadsheet Row
  • Spreadsheet: Restaurant_PO_Automation_Config
  • Sheet: Baselines
  • Lookup Column: week_type (e.g., 'normal', 'holiday', 'summer')
  • Output: baseline_weekly_covers (integer, e.g., 500)

Step 3: Calculate Demand Multiplier (Code by Zapier)

  • App: Code by Zapier (JavaScript)
Step 3: Demand multiplier calculation and adjustment category logic
javascript
const forecastedCovers = parseInt(inputData.forecasted_covers);
const baselineCovers = parseInt(inputData.baseline_covers);

// Calculate demand multiplier (e.g., 1.15 = 15% above normal)
const multiplier = forecastedCovers / baselineCovers;

// Determine adjustment category
let adjustmentCategory;
let adjustmentNote;

if (multiplier > 1.20) {
  adjustmentCategory = 'HIGH';
  adjustmentNote = `Forecasted covers ${forecastedCovers} are ${Math.round((multiplier - 1) * 100)}% above baseline (${baselineCovers}). INCREASE par levels by ${Math.round((multiplier - 1) * 100)}% for all perishable items.`;
} else if (multiplier > 1.05) {
  adjustmentCategory = 'MODERATE';
  adjustmentNote = `Forecasted covers ${forecastedCovers} are ${Math.round((multiplier - 1) * 100)}% above baseline (${baselineCovers}). Consider SLIGHT INCREASE in par levels for high-usage items (proteins, produce).`;
} else if (multiplier < 0.80) {
  adjustmentCategory = 'LOW';
  adjustmentNote = `Forecasted covers ${forecastedCovers} are ${Math.round((1 - multiplier) * 100)}% below baseline (${baselineCovers}). DECREASE par levels by ${Math.round((1 - multiplier) * 100)}% to reduce waste.`;
} else if (multiplier < 0.95) {
  adjustmentCategory = 'SLIGHTLY_LOW';
  adjustmentNote = `Forecasted covers ${forecastedCovers} are ${Math.round((1 - multiplier) * 100)}% below baseline (${baselineCovers}). Consider SLIGHT DECREASE in par levels for expensive perishables.`;
} else {
  adjustmentCategory = 'NORMAL';
  adjustmentNote = `Forecasted covers ${forecastedCovers} are within normal range of baseline (${baselineCovers}). No par level adjustment needed.`;
}

return {
  multiplier: multiplier.toFixed(2),
  adjustmentCategory: adjustmentCategory,
  adjustmentNote: adjustmentNote,
  forecastedCovers: forecastedCovers,
  baselineCovers: baselineCovers
};

Step 4: Generate Par Level Adjustment Table (Code by Zapier)

  • App: Code by Zapier (JavaScript)
Step 4: Par level adjustment table generation with cost impact calculation
javascript
// Top 10 highest-cost inventory items with their base par levels
// Pulled from a Google Sheet or hardcoded during setup
const items = JSON.parse(inputData.top_items_json);
// Expected format: [{name, current_par, unit, weekly_usage, cost_per_unit}]

const multiplier = parseFloat(inputData.multiplier);
let table = 'ITEM | CURRENT PAR | SUGGESTED PAR | CHANGE | EST. COST IMPACT\n';
table += '---|---|---|---|---\n';

let totalCostImpact = 0;

items.forEach(item => {
  const suggestedPar = Math.ceil(item.current_par * multiplier);
  const change = suggestedPar - item.current_par;
  const costImpact = change * item.cost_per_unit;
  totalCostImpact += costImpact;
  const changeStr = change > 0 ? `+${change}` : `${change}`;
  table += `${item.name} | ${item.current_par} ${item.unit} | ${suggestedPar} ${item.unit} | ${changeStr} ${item.unit} | $${costImpact.toFixed(2)}\n`;
});

table += `\nTOTAL ESTIMATED COST IMPACT: $${totalCostImpact.toFixed(2)}`;

return { adjustmentTable: table, totalCostImpact: totalCostImpact.toFixed(2) };

Step 5: Send Notification Email

  • App: Gmail (or client's email)
  • Action: Send Email
  • To: Kitchen Manager email, Owner email, MSP admin email
  • Subject: [Action Required] Weekly PO Forecast: {{adjustmentCategory}} demand for week of {{date}}
Step 5: Notification email body template
text
Hi {{Kitchen Manager Name}},

Lineup.ai forecasts {{forecastedCovers}} covers for next week.
Your baseline for this period is {{baselineCovers}} covers.
Demand adjustment: {{adjustmentCategory}}

{{adjustmentNote}}

### Recommended Par Level Adjustments:
{{adjustmentTable}}

### Action Required:
1. Log into MarketMan
2. Go to Inventory > Items
3. Adjust par levels for the items listed above
4. The automated PO (generating Monday at 6 AM) will use the updated par levels

If demand is NORMAL, no action is needed — the auto-PO will use existing par levels.

—
Managed by {{MSP_NAME}} | Reply to this email for support

Step 6: Log to Google Sheet

  • App: Google Sheets
  • Action: Create Spreadsheet Row
  • Spreadsheet: Restaurant_PO_Automation_Log
  • Row data: Date, Forecasted Covers, Baseline, Multiplier, Category, Action Taken

Setup Requirements

1
Create Google Sheet Restaurant_PO_Automation_Config with tabs: Baselines (week_type, baseline_weekly_covers) and Top_Items (name, current_par, unit, weekly_usage, cost_per_unit)
2
Lineup.ai API key or configure email forecast export → Zapier email parser
3
Gmail or SMTP credentials for notification emails
4
Zapier Professional plan ($49.99/month) for multi-step zaps and Code steps

Weekly COGS Dashboard Email Generator

Type: workflow An automated weekly workflow that pulls food cost and purchasing data from MarketMan's reporting, calculates key KPIs (food cost percentage, cost per cover, waste percentage, top cost items, price change alerts), and sends a formatted executive summary email to the restaurant owner and GM every Monday morning. This gives the owner visibility into the financial impact of the automated PO system without requiring them to log into MarketMan.

Implementation

Zapier Workflow: Weekly COGS Dashboard Email

Trigger

  • App: Schedule by Zapier
  • Trigger: Every Week (Monday at 7:00 AM local time)

Step 1: Pull MarketMan Report Data (Webhook)

  • App: Webhooks by Zapier
  • Action: GET request
  • URL: https://api.marketman.com/v3/reports/weekly-summary
  • Headers: Authorization: ApiKey {{MARKETMAN_API_KEY}}
  • Query Params: location_id={{LOCATION_ID}}&period=last_7_days
Note

If MarketMan API is not available on the client's plan, use Zapier's Email Parser to ingest MarketMan's built-in weekly email report and extract data fields.

Step 2: Pull POS Revenue Data

  • App: Webhooks by Zapier
  • Action: GET request
  • URL: POS API endpoint for weekly sales total
  • For Toast: https://api.toasttab.com/orders/v2/orders (aggregate)
  • For Square: https://connect.squareup.com/v2/payments (aggregate)
  • Output: total_revenue_last_week

Step 3: Calculate KPIs (Code by Zapier)

  • App: Code by Zapier (JavaScript)
Code by Zapier — KPI calculation script
javascript
const totalFoodPurchases = parseFloat(inputData.total_food_purchases);
const totalBevPurchases = parseFloat(inputData.total_bev_purchases);
const totalRevenue = parseFloat(inputData.total_revenue);
const totalCovers = parseInt(inputData.total_covers);
const totalWaste = parseFloat(inputData.total_waste_value || 0);
const prevWeekFoodCost = parseFloat(inputData.prev_week_food_cost_pct);

const totalCOGS = totalFoodPurchases + totalBevPurchases;
const foodCostPct = ((totalFoodPurchases / totalRevenue) * 100).toFixed(1);
const bevCostPct = ((totalBevPurchases / totalRevenue) * 100).toFixed(1);
const totalCOGSPct = ((totalCOGS / totalRevenue) * 100).toFixed(1);
const costPerCover = (totalCOGS / totalCovers).toFixed(2);
const wastePct = ((totalWaste / totalCOGS) * 100).toFixed(1);

const foodCostTrend = (parseFloat(foodCostPct) - prevWeekFoodCost).toFixed(1);
const trendEmoji = foodCostTrend > 0 ? '📈 ⚠️' : foodCostTrend < 0 ? '📉 ✅' : '➡️';
const trendText = foodCostTrend > 0 ? `UP ${foodCostTrend}% from last week` : foodCostTrend < 0 ? `DOWN ${Math.abs(foodCostTrend)}% from last week` : 'FLAT vs. last week';

return {
  totalCOGS: totalCOGS.toFixed(2),
  foodCostPct, bevCostPct, totalCOGSPct,
  costPerCover, wastePct,
  foodCostTrend: trendText,
  trendEmoji,
  totalRevenue: totalRevenue.toFixed(2),
  totalCovers,
  totalFoodPurchases: totalFoodPurchases.toFixed(2),
  totalBevPurchases: totalBevPurchases.toFixed(2)
};

Step 4: Send Dashboard Email

  • App: Gmail
  • Action: Send Email
  • To: Owner email, GM email
  • Subject: 📊 Weekly Food Cost Report: {{foodCostPct}}% Food Cost | Week of {{date}}
Email body (HTML) — Weekly COGS Dashboard
html
<h2>Weekly COGS Dashboard</h2>
<p><strong>Week of:</strong> {{date_range}}</p>
<table border='1' cellpadding='8' style='border-collapse:collapse;'>
<tr style='background:#333;color:white;'><td>Metric</td><td>This Week</td><td>Trend</td></tr>
<tr><td>Total Revenue</td><td>${{totalRevenue}}</td><td></td></tr>
<tr><td>Total Covers</td><td>{{totalCovers}}</td><td></td></tr>
<tr><td><strong>Food Cost %</strong></td><td><strong>{{foodCostPct}}%</strong></td><td>{{trendEmoji}} {{foodCostTrend}}</td></tr>
<tr><td>Beverage Cost %</td><td>{{bevCostPct}}%</td><td></td></tr>
<tr><td>Total COGS</td><td>${{totalCOGS}}</td><td></td></tr>
<tr><td>Cost per Cover</td><td>${{costPerCover}}</td><td></td></tr>
<tr><td>Waste Value</td><td>${{totalWaste}}</td><td>{{wastePct}}% of COGS</td></tr>
</table>
<br/>
<p><em>Auto-generated by your PO automation system. Managed by {{MSP_NAME}}.</em></p>

Step 5: Log to Tracking Sheet

  • App: Google Sheets
  • Action: Create Row in COGS_Weekly_Tracker
  • Data: week_start, revenue, covers, food_purchases, bev_purchases, food_cost_pct, waste_value

Setup Requirements

1
MarketMan API access (Ultimate plan) or configure MarketMan's built-in weekly email report and use Zapier Email Parser
2
POS API credentials for revenue data
3
Google Sheet COGS_Weekly_Tracker for historical trending
4
Previous week's food cost percentage stored in Google Sheet for trend calculation

PO Dollar Threshold Alert

Type: workflow

A simple Zapier workflow that monitors MarketMan for newly generated purchase orders and sends an immediate Slack or SMS alert to the Owner/GM if any single PO exceeds a configurable dollar threshold. This provides a financial safeguard layer on the automated ordering system — the owner sees high-value orders before they are sent to suppliers and can intervene if something looks wrong.

Implementation

Trigger

  • App: Email Parser by Zapier (or MarketMan webhook if available)
  • Trigger: New email from MarketMan (notifications@marketman.com) with subject containing 'Purchase Order Generated'
  • Parse Fields: PO Number, Supplier Name, Total Amount, Item Count

Step 1: Check Threshold (Filter by Zapier)

  • App: Filter by Zapier
  • Condition: Total Amount (Number) is greater than {{THRESHOLD}} (e.g., 2000)
  • If false: Stop workflow (no alert needed)

Step 2: Send Alert

Option A — Slack

  • App: Slack
  • Action: Send Channel Message
  • Channel: #purchasing-alerts
Slack message template
text
🚨 HIGH-VALUE PO ALERT

PO #{{po_number}} generated for {{supplier_name}}
Total: ${{total_amount}} ({{item_count}} items)
Threshold: ${{THRESHOLD}}

⚡ Action Required: Review and approve/reject in MarketMan before supplier cutoff.
https://app.marketman.com/purchasing/orders

Option B — SMS (via Twilio)

  • App: Twilio
  • Action: Send SMS
  • To: Owner's phone number
Twilio SMS body template
text
ALERT: PO #{{po_number}} for {{supplier_name}} = ${{total_amount}}. Review in MarketMan before auto-send.

Step 3: Log Alert

  • App: Google Sheets
  • Action: Create Row in PO_Alerts_Log
  • Data: Timestamp, PO Number, Supplier, Amount, Threshold, Alert Sent To

Configuration

  • Default threshold: $2,000 (adjust per client's typical PO size)
  • Set threshold at roughly 1.5× the client's average PO value
  • Can have multiple thresholds (e.g., $1,000 = email, $3,000 = SMS)

Inventory Count Reminder & Compliance Tracker

Type: workflow An automated workflow that sends inventory count reminders to kitchen staff on the correct schedule (e.g., weekly full count on Sundays, daily protein count), tracks whether counts are completed on time, and escalates to the GM/MSP if counts are missed. Accurate inventory counts are essential for the PO automation to work correctly — if counts are stale, par level calculations are based on inaccurate data, producing incorrect POs.

Implementation

Zapier Multi-Step Workflow: Count Compliance Tracker

Trigger

  • App: Schedule by Zapier
  • Trigger: Every Day at 2:00 PM (adjust to client's preferred count time)

Step 1: Determine Count Type (Code by Zapier)

Code by Zapier — determines count type based on day of week
javascript
const today = new Date();
const dayOfWeek = today.getDay(); // 0=Sun, 1=Mon, ..., 6=Sat

let countType;
let countAssignee;
let countDeadline;

if (dayOfWeek === 0) { // Sunday
  countType = 'FULL';
  countAssignee = 'Kitchen Manager';
  countDeadline = '6:00 PM today';
} else if ([1, 3, 5].includes(dayOfWeek)) { // Mon, Wed, Fri
  countType = 'PROTEINS_PRODUCE';
  countAssignee = 'Sous Chef or Prep Cook';
  countDeadline = '4:00 PM today';
} else {
  countType = 'NONE';
}

return { countType, countAssignee, countDeadline, dayOfWeek };

Step 2: Filter

  • App: Filter by Zapier
  • Condition: countType does not equal NONE

Step 3: Send Count Reminder

  • App: Slack or SMS
Slack or SMS message template for count reminder
text
📋 INVENTORY COUNT REMINDER

Type: {{countType}} Count
Assigned to: {{countAssignee}}
Deadline: {{countDeadline}}

📱 Open the MarketMan app on the kitchen iPad.
Go to: Inventory > Count > Start New Count
Select storage areas for today's count.

Accurate counts = accurate orders. Don't skip! 🙏

Step 4: Check Completion (Delayed — runs 3 hours after reminder)

  • App: Delay by Zapier (3 hours)
  • Then: Webhooks by Zapier → GET MarketMan API to check if count was submitted today
  • If no count found: Send escalation email/Slack to GM and MSP admin
Escalation message template sent to GM and MSP admin on missed count
text
⚠️ MISSED INVENTORY COUNT
The {{countType}} count scheduled for today was NOT completed by the deadline.
Last completed count: {{last_count_date}}

Impact: Auto-generated POs may be inaccurate until counts are updated.
Please follow up with kitchen staff.

Step 5: Log Compliance

  • App: Google Sheets → Count_Compliance_Log
  • Data: Date, Count Type, Assigned To, Completed (Yes/No), Completion Time

Setup

1
Configure count schedule per client (some restaurants count daily, some 2x/week)
2
Set assignee names and contact info in a Google Sheet config
3
Adjust reminder times to 1-2 hours before the count deadline
4
Monthly: review compliance log with client — target >90% on-time completion

Supplier Price Change Monitor

Type: integration A weekly workflow that compares current supplier pricing in MarketMan against the previous week's prices, identifies significant price changes (>5% increase), and sends an alert to the owner with recommended actions (accept new price, switch to alternate supplier, adjust menu pricing). This protects the client from margin erosion due to supplier price increases that might otherwise go unnoticed in an automated ordering system.

Implementation:

Zapier Workflow: Supplier Price Change Alert

Trigger

  • App: Schedule by Zapier
  • Trigger: Every Week (Tuesday at 9:00 AM — after Monday PO cycle)

Step 1: Export Current Pricing (Webhook or Google Sheets)

  • If MarketMan API available: GET /v3/items/pricing?location_id={{LOC}}
  • If no API: MSP exports MarketMan item pricing report weekly to a designated Google Sheet (can be automated via MarketMan's scheduled email reports → Zapier Email Parser → Google Sheets)

Step 2: Compare to Previous Week (Code by Zapier)

Code by Zapier
javascript
// compares current vs. previous week prices and builds alert table for items
// with >5% increase

const currentPrices = JSON.parse(inputData.current_prices_json);
const previousPrices = JSON.parse(inputData.previous_prices_json);

const alerts = [];
let totalImpact = 0;

currentPrices.forEach(item => {
  const prev = previousPrices.find(p => p.item_id === item.item_id);
  if (prev && prev.unit_price > 0) {
    const changePct = ((item.unit_price - prev.unit_price) / prev.unit_price) * 100;
    if (changePct > 5) {
      const weeklyImpact = (item.unit_price - prev.unit_price) * item.avg_weekly_usage;
      totalImpact += weeklyImpact;
      alerts.push({
        name: item.name,
        supplier: item.supplier_name,
        oldPrice: prev.unit_price.toFixed(2),
        newPrice: item.unit_price.toFixed(2),
        changePct: changePct.toFixed(1),
        weeklyImpact: weeklyImpact.toFixed(2),
        unit: item.order_unit
      });
    }
  }
});

let alertTable = '';
if (alerts.length > 0) {
  alertTable = 'Item | Supplier | Old Price | New Price | Change | Weekly Impact\n';
  alertTable += '---|---|---|---|---|---\n';
  alerts.forEach(a => {
    alertTable += `${a.name} | ${a.supplier} | $${a.oldPrice}/${a.unit} | $${a.newPrice}/${a.unit} | +${a.changePct}% | +$${a.weeklyImpact}/wk\n`;
  });
}

return {
  alertCount: alerts.length,
  alertTable: alertTable,
  totalWeeklyImpact: totalImpact.toFixed(2),
  hasAlerts: alerts.length > 0
};

Step 3: Filter

  • Only continue if hasAlerts is true

Step 4: Send Price Alert Email

  • To: Owner, Kitchen Manager
  • Subject: ⚠️ Supplier Price Increases Detected: {{alertCount}} items, +${{totalWeeklyImpact}}/week impact

Body:

Email body template for supplier price alert notification
text
{{alertCount}} supplier price increases above 5% detected this week.
Estimated weekly cost impact: +${{totalWeeklyImpact}}

{{alertTable}}

Recommended Actions:
1. Contact supplier rep to negotiate or request price match
2. Check alternate suppliers in MarketMan for better pricing
3. Consider menu price adjustment if increases persist >2 weeks
4. Review affected recipes for possible substitutions

— {{MSP_NAME}} Automated Purchasing System

Step 5: Archive current prices as 'previous' for next week's comparison

  • App: Google Sheets → Copy 'Current_Prices' tab to 'Previous_Prices' tab

Setup

1
Create Google Sheet with tabs: Current_Prices, Previous_Prices
2
Configure weekly export from MarketMan (manual or via scheduled report email)
3
Set price change threshold (default 5%; adjust per client tolerance)
4
Add alternate supplier pricing data for comparison recommendations

Testing & Validation

  • NETWORK TEST: Connect iPad to 'RestaurantName-Staff' WiFi in the walk-in cooler with door closed. Verify RSSI is -67 dBm or better (check in Settings > WiFi > info icon). Run a speed test — must achieve >10 Mbps download. If below threshold, reposition AP or add a third AP.
  • SCANNER TEST: Open MarketMan app on iPad, navigate to Inventory > Count, and scan 10 different product barcodes with the Socket Mobile S740. Verify each scan correctly identifies the inventory item in MarketMan. Test scanning UPC codes on cases, individual items, and supplier-specific barcodes.
  • POS INTEGRATION TEST: Compare yesterday's POS sales report (printed from Toast/Square admin) with MarketMan's Sales Dashboard for the same date. Total revenue should match within $5. Item-level sales counts should match exactly. If discrepancies exist, check menu item mapping.
  • RECIPE COST TEST: Select 5 representative menu items (1 appetizer, 2 entrees, 1 dessert, 1 beverage). In MarketMan, view the recipe cost for each. Verify the calculated food cost percentage is realistic: appetizers 25-30%, entrees 28-35%, desserts 20-25%, beverages 18-22%. If a recipe shows food cost >40% or <10%, investigate for data entry errors.
  • PAR LEVEL TEST: For the client's top 10 highest-cost ingredients, verify par levels by manual calculation. Formula: Par = (Avg Daily Usage × Lead Time Days) + Safety Stock. Compare your calculation against the configured par level in MarketMan. Variance should be <15%.
  • AUTO-PO GENERATION TEST: Trigger a manual PO generation in MarketMan (Purchasing > Generate POs). Verify that: (1) POs are created for each supplier, (2) each PO contains the correct items based on current inventory vs. par levels, (3) quantities are in the correct order units (cases, not individual items), (4) PO total dollar amounts are reasonable compared to historical ordering.
  • SUPPLIER DELIVERY TEST: Send a test PO to each supplier via MarketMan (mark as test or use a minimal order). Confirm: (1) Supplier receives the PO (call or email to verify), (2) PO format is readable with correct item codes and quantities, (3) EDI orders (Sysco/US Foods) are received in the supplier's system without errors.
  • RECEIVING WORKFLOW TEST: When the next real delivery arrives, use the iPad + scanner to receive the order in MarketMan. Verify: (1) All PO items appear in the receiving screen, (2) Scanning a delivered item correctly matches the PO line, (3) Quantity adjustments for short-ships or substitutions can be entered, (4) After closing the receipt, inventory levels update correctly.
  • ACCOUNTING SYNC TEST: After receiving a PO in MarketMan, check QuickBooks Online within 1 hour. Verify: (1) A bill/invoice appears in QBO matching the MarketMan receipt, (2) The bill is coded to the correct COGS account, (3) Supplier name and amount match, (4) No duplicate entries.
  • ZAPIER WORKFLOW TESTS: (1) Trigger the Forecast-to-Par-Level Bridge manually — verify email arrives with correct data and formatting. (2) Create a test PO above the dollar threshold — verify Slack/SMS alert fires within 2 minutes. (3) Trigger the COGS Dashboard email manually — verify all KPIs calculate correctly. (4) Simulate a missed inventory count — verify escalation notification fires after the delay period.
  • PARALLEL RUN VALIDATION: During the 2-4 week parallel run, track the Parallel Run Tracking Sheet daily. Success criteria: (1) Auto-generated PO quantities are within ±10% of manual orders for 2 consecutive weeks, (2) No stockouts caused by under-ordering on auto-POs, (3) No significant over-ordering (>20% surplus) on any item category, (4) Kitchen Manager approves >90% of auto-POs without modification by the final week.
  • END-TO-END CYCLE TEST: Complete one full automated ordering cycle from PO generation through delivery receipt and accounting sync without manual intervention (except Kitchen Manager approval). Verify the entire chain: PO auto-generated → Kitchen Manager notified → Kitchen Manager approves → PO sent to supplier → Delivery arrives → Received on iPad → Inventory updated → Bill synced to QBO. Document total time elapsed and any failure points.

Client Handoff

Client Handoff Checklist

Training Sessions (Schedule 3 sessions, 1 hour each)

Session 1: Kitchen Manager — Daily Operations (1 hour)

  • How to perform inventory counts on the iPad using MarketMan app and barcode scanner
  • How to review and approve auto-generated purchase orders
  • How to override PO quantities when needed (special events, menu changes)
  • How to receive deliveries using the iPad scanning workflow
  • How to log waste and spoilage
  • How to handle emergency orders (what to do when the system doesn't cover an unexpected need)

Session 2: Owner/GM — Reporting & Oversight (1 hour)

  • How to read the weekly COGS Dashboard email
  • How to log into MarketMan and view key reports (Food Cost, Purchasing History, Waste)
  • How to respond to PO threshold alerts and price change alerts
  • How to use Lineup.ai to view demand forecasts (if deployed)
  • Understanding when and why par levels need adjustment
  • Escalation path: when to contact the MSP vs. handle internally

Session 3: All Staff — Receiving & Count Procedures (1 hour, during a pre-shift meeting)

  • Barcode scanner basics (powering on, pairing, scanning technique)
  • Step-by-step receiving workflow with live delivery simulation
  • Inventory count procedure: which areas, which items, how often
  • What NOT to do: manually placing orders with suppliers without going through MarketMan

Documentation to Leave Behind

1
Quick Reference Card (laminated, posted in kitchen office): MarketMan login URL, app store link, WiFi password, MSP support phone/email, PO generation schedule by supplier, count schedule
2
Step-by-Step PO Approval Guide (1-page PDF): screenshots of the approval workflow from notification to submission
3
Receiving Guide (1-page PDF): how to receive a delivery on the iPad with scanner
4
Inventory Count Guide (1-page PDF): which items to count, where, and how to enter counts
5
Escalation Contact Sheet: MSP support number, MarketMan support (support@marketman.com), supplier rep contacts
6
Network Credentials Document (sealed envelope to owner): WiFi passwords, UniFi controller access, Apple ID credentials

Success Criteria to Review Together at Handoff

Post-Handoff Support Period

  • Weeks 1-4 post go-live: MSP tech available for same-day support via phone/Slack. Weekly 30-minute check-in call with Kitchen Manager to review any issues.
  • Weeks 5-8: Bi-weekly check-in calls. MSP reviews PO accuracy reports and par level performance.
  • Month 3+: Transition to standard managed service SLA (see Maintenance section).

Maintenance

Ongoing MSP Maintenance Responsibilities

Weekly Tasks (30 minutes/week)

Monthly Tasks (2 hours/month)

  • Par level review: analyze MarketMan usage data and adjust par levels for items with >15% variance between auto-PO quantity and actual usage
  • Supplier catalog audit: verify pricing is current, check for new items or discontinued products
  • Recipe audit: confirm no new menu items have been added to POS without corresponding MarketMan recipes (check for unmapped items in Settings > Menu Mapping)
  • Run MarketMan's 'Actual vs. Theoretical' food cost report — investigate any items where actual cost deviates >10% from theoretical
  • Zapier workflow health check: verify all zaps are active, check for API changes that might break webhooks
  • iPad and scanner maintenance: verify iOS is up to date, MarketMan app is current version, scanner firmware is current
  • Network firmware: apply any pending UniFi updates during a maintenance window (3 AM)

Quarterly Tasks (3 hours/quarter)

  • Comprehensive COGS trend review with owner: present 13-week food cost trend, waste trend, and PO accuracy metrics
  • Par level seasonal adjustment: review and bulk-adjust par levels for seasonal menu changes (e.g., summer patio season vs. winter)
  • Lineup.ai model review (if deployed): check forecast MAPE (Mean Absolute Percentage Error) — if >20%, retrain by updating any changed operational parameters
  • User access audit: deactivate accounts for departed employees, verify current staff have correct roles
  • Backup and export: download MarketMan data export (recipes, suppliers, inventory history) as a backup
  • Client satisfaction check-in: survey owner and kitchen manager on system performance, pain points, and feature requests

Annual Tasks

  • Full platform review: assess whether current software tier still fits client needs, evaluate new features released by MarketMan/Lineup.ai
  • Hardware assessment: check iPad battery health (Settings > Battery > Battery Health), scanner condition, AP performance
  • Contract and subscription renewal review: negotiate MarketMan annual renewal if applicable, assess ROI for client
  • Competitive landscape review: evaluate whether newer or better solutions have emerged that warrant a platform switch

SLA Considerations

  • Response time: 4-hour response during restaurant operating hours (10 AM – 11 PM) for PO-related issues; next business day for non-urgent items
  • Critical issue definition: System fails to generate POs before supplier cutoff time, POS integration stops syncing sales data, or all supplier EDI connections fail
  • Critical issue response: 1-hour response, 4-hour resolution target. Fallback: provide client with manual PO template and supplier phone numbers to place orders while system is restored.
  • Uptime target: 99.5% for all cloud services (MarketMan, Zapier, Lineup.ai). Note: MSP does not control SaaS vendor uptime but is responsible for monitoring and notifying client of outages.
  • Escalation path: Level 1 (MSP tech) → Level 2 (MSP senior engineer) → Level 3 (MarketMan vendor support, escalation via partner channel)

Retraining / Recalibration Triggers

Par levels and forecast models should be recalibrated when any of these events occur:

  • Menu change (new items added, items removed, recipe modification)
  • Supplier change (new supplier, changed delivery schedule)
  • Significant volume change (>20% sustained increase or decrease in covers)
  • Seasonal transition (spring/summer, fall/winter)
  • Special events or holidays (Thanksgiving, Valentine's Day, Mother's Day — pre-adjust par levels 2 weeks prior)
  • Food cost percentage deviates >3 points from target for 3+ consecutive weeks

Alternatives

MarginEdge as Primary Platform (Instead of MarketMan)

Replace MarketMan with MarginEdge ($330/month per location) as the core inventory and invoice processing platform. MarginEdge is stronger in AP automation — its human-reviewed OCR invoice processing catches errors that MarketMan's automated scanning misses, and its built-in bill pay eliminates the need for a separate AP workflow. However, MarginEdge's automated PO generation capabilities are less mature than MarketMan's; it provides an 'Order Guide' feature rather than true auto-PO generation from par levels.

Replace MarketMan with WISK.ai (starting at $99/month) for a lower-cost entry point. WISK provides automated ordering recommendations based on par levels and historical sales, can generate POs, and has a massive 1.5M ingredient database. Originally built for bar/beverage inventory, it has expanded to full food service. The platform offers up to 5× faster inventory management with real-time tracking.

CrunchTime for Enterprise Multi-Unit Operations

For restaurant groups with 10+ locations, replace the MarketMan + Lineup.ai stack with CrunchTime, an enterprise back-of-house platform used by Chipotle, Dunkin', Five Guys, and others in 100,000+ locations globally. CrunchTime provides AI-powered demand forecasting, automated purchasing, inventory management, recipe costing, and labor scheduling in a single platform. It eliminates the need for separate forecasting (Lineup.ai) and automation (Zapier) tools.

Toast xtraCHEF (POS-Native Back Office)

If the client is already on Toast POS, leverage Toast's built-in back-office tools (powered by xtraCHEF acquisition) for invoice processing, recipe costing, and food cost analytics — then add only the PO generation layer via a lighter-weight tool or Zapier automation. This minimizes the number of separate platforms and keeps the entire workflow within the Toast ecosystem.

Spreadsheet + Zapier DIY Approach (Lowest Cost)

For the most budget-constrained operators, build a custom PO automation workflow using Google Sheets as the data layer, Zapier as the automation engine, and email as the PO delivery method. POS sales data exports to Google Sheets, formulas calculate ingredient usage based on recipe ratios, compare against par levels entered in the sheet, and Zapier generates and emails PO documents to suppliers on a schedule.

Warning

Recommend ONLY for: single-location restaurants with <30 menu items, 1–2 suppliers, and an absolute budget ceiling of <$100/month for software. Not recommended for: any restaurant planning to grow, with complex menus, or with multiple suppliers. The MSP labor cost to build and maintain this approach often exceeds the cost savings vs. MarketMan within 6 months.

Want early access to the full toolkit?