Free OpenClaw skill · No signup · v1.0.0

Free OpenClaw Skill for Ghost Kitchens: Multi-Brand and Aggregator Agent (Download)

A working OpenClaw skill for ghost kitchen operators running 2 to 10 virtual brands from one kitchen. Owns the multi-brand order routing, the aggregator reconciliation across DoorDash, Uber Eats, and Grubhub, the kitchen station prep, and the daily P&L review per brand.

Built and maintained by Adhiraj Hangal, OpenClaw Consult. Code I wrote runs inside OpenClaw's source, merged by the project's creator.

Free OpenClaw skill for ghost kitchens

12 KB file. Free for any use. Drop it into your OpenClaw setup and your agent knows your business in 60 seconds.

v1.0.0

We email you a copy plus the install notes. One email, no list, no spam.

What this skill does for your ghost kitchens

  • Routes orders from Otter, Cuboh, Chowly, or Olo Dispatch into station-aware kitchen tickets keyed to which brand's recipe maps to which physical station.
  • Reconciles aggregator payouts (DoorDash, Uber Eats, Grubhub, Postmates) against POS-recorded orders to catch missing payouts and rate-card discrepancies.
  • Tracks per-brand contribution margin daily, flagging brands that drift below the operator's stated floor for a menu or pricing intervention.
  • Runs the multi-brand prep sheet for the morning shift, with cross-brand ingredient pooling (shared protein, shared rice, shared sauce base) called out explicitly.
  • Detects aggregator throttling or marketplace ranking drops by tracking conversion rate against impression count from each platform's analytics export.

What's inside this OpenClaw skill

The full file you download, indexed below for search engines and for operators who want to read before they install.

---
name: ghost-kitchen-multi-brand-and-aggregator
description: Multi-brand order routing, aggregator payout reconciliation, kitchen station prep, and per-brand contribution margin tracking for ghost kitchens. Integrates with Otter, Cuboh, Chowly, Olo Dispatch, DoorDash, Uber Eats, Grubhub, CloudKitchens, Reef Technology.
version: 1.0.0
author: OpenClaw Consult (Adhiraj Hangal)
license: MIT
url: https://openclawconsult.com/skills/ghost-kitchens
---

# OpenClaw Skill: Ghost Kitchen Multi-Brand and Aggregator Operator

## Overview

This skill turns the OpenClaw agent into the multi-brand operations and
aggregator reconciliation layer for a ghost kitchen. It owns the routing of
incoming orders from Otter / Cuboh / Chowly into station-aware kitchen
tickets, the daily reconciliation of DoorDash / Uber Eats / Grubhub payouts
against POS records, the per-brand contribution margin tracker, and the
multi-brand morning prep sheet with shared-ingredient pooling.

Designed for operators running 2 to 10 virtual brands out of one physical
kitchen, on Otter, Cuboh, Chowly, ItsaCheckmate, or Olo Dispatch. Works for
owned-kitchen, CloudKitchens-leased, and Reef Technology multi-merchant
environments.

## What this skill does

1. Routes incoming aggregator orders to station-aware kitchen tickets
2. Reconciles daily aggregator payouts against POS-recorded orders
3. Tracks per-brand contribution margin and flags brands below the floor
4. Generates the multi-brand morning prep sheet with ingredient pooling
5. Detects aggregator throttling and marketplace ranking drops
6. Drafts dispute messages to aggregator merchant support for missing payouts

## Triggers

```yaml
triggers:
  - type: heartbeat
    schedule: "0 8 * * *"            # Daily 8am, aggregator reconciliation
    action: morning_aggregator_reconciliation

  - type: heartbeat
    schedule: "0 6 * * *"            # Daily 6am, multi-brand prep sheet
    action: generate_morning_prep_sheet

  - type: heartbeat
    schedule: "0 21 * * *"           # Daily 9pm, contribution margin roll-up
    action: nightly_contribution_margin_roll_up

  - type: heartbeat
    schedule: "0 10 * * 1"           # Mondays 10am, marketplace ranking check
    action: weekly_marketplace_ranking_review

  - type: on_event
    event: otter.order_received
    action: route_to_station_ticket

  - type: on_event
    event: aggregator.payout_report_available
    action: trigger_reconciliation

  - type: on_event
    event: brand.contribution_margin_below_floor
    action: flag_for_pricing_review
```

## Workflow: multi-brand order routing

When an order lands in Otter / Cuboh / Chowly:

1. Identify the source brand (Birria Bowls, Crispy Chicken, etc.)
2. Look up the recipe-to-station mapping for that brand
3. Generate the station-aware kitchen ticket (Grill, Fryer, Salad, Sauce, Pack)
4. Print to the appropriate KDS or kitchen printer
5. Log the order to the per-brand contribution margin tracker

The recipe-to-station map is editable per kitchen:

```yaml
recipe_station_map:
  birria_bowls:
    - station: protein_braise
      prep: "Pull braised beef from holding"
    - station: rice
      prep: "Cilantro lime rice 1.5 cup"
    - station: assembly
      prep: "Build bowl, sauce, salsa"
  crispy_chicken:
    - station: fryer
      prep: "Drop chicken tender 4-piece"
    - station: assembly
      prep: "Pack with slaw and sauce"
  acai_bowls:
    - station: cold_assembly
      prep: "Blend acai base, build toppings"
```

## Workflow: aggregator reconciliation

Each morning at 8am the agent:

1. Pulls the previous day's payout report from DoorDash, Uber Eats, Grubhub, Postmates
2. Pulls the previous day's POS orders
3. Reconciles order-by-order, brand-by-brand
4. Flags missing orders in aggregator portals (orders we fulfilled but they did not record)
5. Flags missing payouts in POS (orders they paid us for but we did not record)
6. Flags rate-card discrepancies (the aggregator applied a different commission than the contract)
7. Drafts dispute messages to aggregator merchant support

Operators we have scoped recover 1 to 4% of monthly aggregator revenue from
disputes that would otherwise go unflagged. The discipline is in pulling
the reports daily and reconciling within the aggregator's dispute window
(typically 14 to 30 days depending on platform).

## Workflow: per-brand contribution margin tracking

Each night at 9pm the agent:

1. Aggregates the day's orders by brand
2. Computes revenue per brand (net of aggregator commission)
3. Computes food cost per brand from the recipe-to-ingredient map and current ingredient prices
4. Computes labor allocation per brand based on order volume share
5. Computes contribution margin per brand
6. Flags any brand below the operator-set floor

Default floors:

```yaml
contribution_margin_floors:
  default: 30%
  high_food_cost_brand: 25%
  premium_pricing_brand: 35%
```

When a brand drops below its floor for 3 consecutive days, the agent drafts
a Slack with options: price increase candidates, recipe portion adjustments,
menu mix shifts, or temporary pause recommendation.

## Workflow: morning prep sheet

Each morning at 6am the agent:

1. Pulls the previous 4 weeks of orders by SKU
2. Forecasts today's demand by SKU (with day-of-week and weather adjustments)
3. Maps each SKU to its ingredient list
4. Pools shared ingredients across brands (Birria's beef and Crispy Chicken's chicken thigh share the same protein order if the recipe overlaps)
5. Generates the prep list per station with target quantities
6. Routes to the kitchen team's preferred surface

A representative 4-brand kitchen has 6 to 12 shared ingredients across
brands. Surfacing the pooling explicitly cuts prep waste and makes the
morning easier.

## Workflow: marketplace ranking detection

Each Monday at 10am the agent:

1. Pulls the previous 14 days of impressions and orders per brand per platform
2. Computes conversion rate (orders / impressions) per platform per brand
3. Compares against the trailing 28-day average
4. Flags any brand-platform combination with a conversion drop above the operator-set threshold

The most common causes of conversion drops are: aggregator-side ranking
changes, store-hours misconfiguration, completion-rate dropping below the
aggregator's quality floor, or a new competing brand entering the marketplace.

## Message templates

```yaml
templates:
  aggregator_dispute_uber_eats:
    channel: email
    subject: "Missing order in merchant portal: {date}, {brand_name}"
    body: |
      Hi Uber Eats Merchant Support,

      We are missing the following orders from our {brand_name} merchant
      portal for {date}:

      {missing_order_list}

      All orders were received in our POS, fired in the kitchen, and
      delivered. Receipt time stamps and KDS logs are attached.

      Please credit the payouts to our next-cycle settlement.

      Account ID: {uber_eats_account_id}
      Store: {store_name}

      {operator_name}

  contribution_margin_alert:
    channel: slack
    body: |
      CONTRIBUTION MARGIN ALERT
      Brand: {brand_name}
      Today's margin: {todays_margin}
      Floor: {brand_floor}
      Trailing 3-day average: {trailing_3day}
      Top drivers: {top_cost_drivers}
      Suggested actions:
      1. {action_1}
      2. {action_2}
      3. {action_3}

  morning_prep_sheet:
    channel: slack
    body: |
      MORNING PREP ({prep_date})
      Forecasted orders today: {total_orders_forecast}
      Per-brand forecast: {brand_breakdown}
      Shared protein pool: {shared_protein_pool}
      Shared rice pool: {shared_rice_pool}
      Shared sauce pool: {shared_sauce_pool}
      Station-specific prep:
      {station_prep_blocks}

  marketplace_ranking_drop:
    channel: slack
    body: |
      MARKETPLACE RANKING ALERT
      Brand: {brand_name}
      Platform: {platform_name}
      Conversion rate this week: {conversion_this_week}
      Trailing 4-week average: {trailing_4w}
      Drop: {drop_percent}
      Suspected cause: {suspected_cause}
      Suggested investigation: {investigation_steps}
```

## Memory keys

```yaml
memory:
  - key: kitchen.brands[{brand_id}]
    description: Brand metadata, recipe-station map, contribution margin floor
    schema: { name: string, station_map: object, margin_floor: number, status: string }

  - key: orders.daily[{date}][{brand_id}]
    description: Daily orders aggregated per brand
    schema: { order_count: number, revenue_net: number, food_cost: number, labor_alloc: number, margin: number }

  - key: aggregator.reconciliation[{date}]
    description: Daily aggregator reconciliation results
    schema: { aggregator: string, pos_count: number, portal_count: number, payout_expected: number, payout_received: number, exceptions: array }

  - key: aggregator.disputes[{dispute_id}]
    description: Pending and resolved disputes
    schema: { aggregator: string, brand: string, amount: number, status: string, opened: date }

  - key: marketplace.ranking[{platform}][{brand_id}]
    description: Weekly impressions, conversion, ranking signal
    schema: { impressions: number, orders: number, conversion: number, trailing_4w: number }
```

## Required integrations

| Integration              | Purpose                                          | Read | Write |
|--------------------------|--------------------------------------------------|------|-------|
| Otter / Cuboh / Chowly / ItsaCheckmate / Olo Dispatch | Order feed and routing | yes | yes |
| DoorDash merchant portal | Order, payout, impression data                   | yes  | no    |
| Uber Eats merchant portal | Order, payout, impression data                  | yes  | no    |
| Grubhub merchant portal  | Order, payout, impression data                   | yes  | no    |
| Postmates / regional aggregator | Order, payout data                        | yes  | no    |
| POS (Square, Toast, Lightspeed) | Order records and refund logs             | yes  | optional |
| CloudKitchens / Reef Technology | Facility-level coordination                | yes  | no    |
| Email provider           | Dispute messages and operator alerts             | no   | yes   |
| Slack                    | Operator alerts                                  | no   | yes   |
| OpenClaw Memory          | Brand state, reconciliation, ranking signals     | yes  | yes   |
| OpenClaw Heartbeat       | Daily and weekly cadences                        | yes  | yes   |

Aggregator merchant portals vary widely in API access. Where API is not
available, the skill works from the scheduled CSV export each portal
supports.

## Compliance notes

The skill respects each aggregator's dispute window (typically 14 to 30
days depending on platform). Disputes filed outside the window are
flagged but not auto-submitted. The operator is responsible for the final
dispute call.

For operators in CloudKitchens or Reef Technology multi-merchant facilities,
the skill respects the facility's order-fulfillment SLAs and does not draft
any communication that would conflict with the facility-level agreements.

## Configuration

```yaml
config:
  kitchen_name: "Your Kitchen"
  brand_count: 4
  brands:
    - id: birria_bowls
      contribution_margin_floor: 30
    - id: crispy_chicken
      contribution_margin_floor: 28
    - id: plant_bowl
      contribution_margin_floor: 32
    - id: korean_wings
      contribution_margin_floor: 30
  order_aggregator: otter           # or "cuboh", "chowly", "olo_dispatch"
  facility: owned                   # or "cloudkitchens", "reef_technology"
  approval_mode: operator_approves_all  # or "autonomous_after_2_weeks"
  autonomous_template_allowlist:
    - morning_prep_sheet
    - aggregator_dispute_doordash
    - aggregator_dispute_uber_eats
  marketplace_ranking_alert_threshold: -15
  contribution_margin_below_floor_consecutive_days: 3
  dispute_max_amount_auto_draft: 200
```

## Quick install

```bash
mkdir -p ~/.claude/skills
mv ghost-kitchens.md ~/.claude/skills/ghost-kitchen-multi-brand-and-aggregator.md
# Edit the config block to match your operation
```

Launch OpenClaw and the skill is live. Trigger it manually with
`run aggregator reconciliation` or `compile morning prep sheet` or wait
for Heartbeat to fire on the configured cadence.

## Want it wired to your stack?

This SKILL.md is the starting point. If you want it plugged into your
specific brand mix, aggregator portfolio, kitchen station layout, and
facility on a fixed-price two-week clock, the door is at
https://www.adhirajhangal.com/work

Install in 60 seconds

  1. 1

    Drop the file into your OpenClaw skills directory

    Save the downloaded ghost-kitchens.md as ~/.claude/skills/ghost-kitchen-multi-brand-and-aggregator.md (or your project-level .claude/skills/). OpenClaw picks up new skill files on next agent launch.

  2. 2

    Connect Otter (or your order aggregator) and each aggregator merchant portal

    Edit the integrations block to point at your Otter, Cuboh, Chowly, or Olo Dispatch order feed, plus the DoorDash, Uber Eats, and Grubhub merchant exports for payout reconciliation. The skill includes prompts that translate each aggregator's daily payout report into the agent's reconciliation memory.

  3. 3

    Launch in approval mode, then flip the standard routing and reconciliation to autonomous

    Start with the operator approving every kitchen ticket route and aggregator escalation for the first two weeks. The skill's defaults route any payout exception above $50 and any kitchen station override to a human. After two weeks, flip the standard routing rules and the daily reconciliation summary to autonomous.

Example conversation

You

Pull yesterday's aggregator reconciliation and tell me where I'm getting short.

Agent

Yesterday's reconciliation complete. POS-recorded orders: 312 across 6 brands. DoorDash: 142 orders POS, 142 in DoorDash portal, $4,287 expected payout, $4,271 received, $16 short (one cancelled-order refund applied to next-day cycle, normal). Uber Eats: 98 orders POS, 96 in Uber Eats portal, 2 orders missing from their portal flagged for a dispute (orders 4471 and 4498, both fired and delivered on our end). Grubhub: 72 orders POS, 72 in portal, $1,840 expected, $1,840 received, clean. Per-brand contribution margin: Birria Bowls 42% (above floor), Crispy Chicken 28% (below 30% floor due to chicken thigh cost spike), Plant Bowl 38%, Korean Wings 31%, Loaded Fries 45%, Acai Bowls 26% (below floor, recommended pricing review). Two dispute drafts queued for your approval to send to Uber Eats merchant support.

Founder-led · 14 days

Want this multi-brand and aggregator operator live in your ghost kitchen in 14 days?

Adhiraj ships OpenClaw AI agents into real businesses. Short discovery to map it to Otter, the major aggregators, and your kitchen line, build in 14 days, then optional ongoing support so your OpenClaw system keeps working.

Build it with me

Common questions

Will this work for a 2-brand operation or a 10-brand multi-cuisine ghost kitchen?

+

Both. The skill is designed for the 2 to 10 virtual brand range out of a single physical kitchen. Below 2 brands the multi-brand routing workflow is overkill. Above 10 brands the cross-brand ingredient pooling logic typically needs custom rules and the skill is a starting point that needs operator-specific extension.

Which aggregator orchestrators does it integrate with?

+

Otter (the dominant multi-aggregator orchestrator for ghost kitchens), Cuboh, Chowly, ItsaCheckmate, and Olo Dispatch via their respective APIs. For operators on a closed system, the skill works at the email + portal-CSV-export layer with a Notion DB or Google Sheet as the source of truth.

How does the aggregator reconciliation actually work?

+

Each morning the agent pulls the previous day's payout report from DoorDash, Uber Eats, Grubhub, and Postmates merchant portals (where API available, otherwise scheduled CSV export). It reconciles against POS-recorded orders for the same window. Missing orders, missing payouts, rate-card discrepancies, and refund anomalies are flagged. Most operators recover 1 to 4% of monthly aggregator revenue from disputes that would otherwise have gone unflagged.

Does it handle CloudKitchens or Reef Technology shared kitchen environments?

+

Yes. For operators leasing space in a CloudKitchens facility or a Reef Technology multi-merchant kitchen, the skill includes the operational-handle nuances of those environments: shared loading dock scheduling, shared driver pickup windows, facility-level utility billing reconciliation. The README block explains the integration setup for each.

Can it detect aggregator throttling or marketplace ranking drops?

+

It tracks conversion rate (orders / impressions) per platform per brand using each platform's analytics export. When conversion drops more than the operator-set threshold against the trailing 14-day average, the agent flags the brand for review. The most common cause is a marketplace ranking change driven by store-hours, completion rate, or aggregator-side promotion changes.

Can I modify this skill?

+

Yes. MIT licensed. Edit the routing rules, the reconciliation thresholds, the per-brand contribution margin floors, the marketplace ranking alerts. Most operators fork it within the first month to match their specific brand mix.

What does this cost to run on top of OpenClaw?

+

Token cost scales with order volume and brand count. A representative 200-order-per-day ghost kitchen with 4 brands sees monthly token spend in the $40 to $90 range. A 500-order-per-day kitchen with 8 brands sees $100 to $250.

How does this compare to Otter's built-in reconciliation features?

+

Otter's built-in reconciliation and Cuboh's payout matching are excellent at the single-aggregator job each handles. The OpenClaw skill reasons across all aggregators at once, layers per-brand contribution margin tracking on top, and detects marketplace ranking drops that neither tool surfaces. Most operators keep Otter and add this skill on top for the cross-aggregator operator workflows.

Can OpenClaw Consult build a customized version for my kitchen?

+

Yes. The free SKILL.md is the starting point. If you want it wired into your specific brand mix, your kitchen station layout, your aggregator portfolio, and your facility (CloudKitchens, Reef, owned) on a fixed-price two-week clock, the door is at openclawconsult.com/hire.

How do I keep the skill updated?

+

We post a changelog at openclawconsult.com/skills/ghost-kitchens and bump the version in the frontmatter. Updates track aggregator API changes (DoorDash and Uber Eats update their merchant APIs every 6 to 12 months) and the seasonal ranking pattern changes we see across operators.

Want the full implementation playbook?

Read the deep-dive guide for ghost kitchens

The playbook covers workflows, software integrations, compliance, ROI math, and a four-week rollout plan. The skill file above is a working slice of that build.

Read the ghost kitchens playbook →

Related free skills

Want it wired to your stack?

The free skill is the starting point. If you want it plugged into your actual software, on a fixed-price two-week clock, with the founder writing every line, this is the door.