
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
$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
$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
$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
$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
$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
$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)
$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
$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
$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)
$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
$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).
Ubiquiti UniFi Network Controller (Self-Hosted or Cloud)
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
$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.
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.
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.
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.
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
Square for Restaurants
Clover
General Post-Integration Steps (All POS Systems)
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.
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.
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.
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.
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
For Xero
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.
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.
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.
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)
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)
// 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}}
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 supportStep 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
Restaurant_PO_Automation_Config with tabs: Baselines (week_type, baseline_weekly_covers) and Top_Items (name, current_par, unit, weekly_usage, cost_per_unit)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
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)
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}}
<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
COGS_Weekly_Tracker for historical trendingPO 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
🚨 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/ordersOption B — SMS (via Twilio)
- App: Twilio
- Action: Send SMS
- To: Owner's phone number
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)
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:
countTypedoes not equalNONE
Step 3: Send Count Reminder
- App: Slack or SMS
📋 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
⚠️ 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
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)
// 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
hasAlertsis true
Step 4: Send Price Alert Email
- To: Owner, Kitchen Manager
- Subject:
⚠️ Supplier Price Increases Detected: {{alertCount}} items, +${{totalWeeklyImpact}}/week impact
Body:
{{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 SystemStep 5: Archive current prices as 'previous' for next week's comparison
- App: Google Sheets → Copy 'Current_Prices' tab to 'Previous_Prices' tab
Setup
Current_Prices, Previous_PricesTesting & 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
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.
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?