Compare DC food truck catering quotes on equal terms

Comparison Last tested 24 October 2026

Compare DC food truck catering by fixing the guest count, service period and who pays for the food before comparing totals. A per-person private-event price, a vending sales guarantee and a booking-platform fee buy different things. The published terms below support partial calculations and focused follow-up questions; they do not establish a complete price or availability for your event.

Give each quote the same event description

Start with a short scenario that every comparison can use: guest count, date, venue, food-service start and end, selected meal, who pays and whether the truck must remain throughout the event. An 80-person hosted lunch is different from a public event where visitors buy their own meals. A two-hour serving period is also different from two hours that include setup. Without those distinctions, the smallest number may simply describe the smallest service.

Record attendance and billable quantities separately. Peruvian Brothers publishes a 50-person pricing minimum for weekend service; a 40-guest weekend scenario therefore has a published pricing floor of 50 people, but the page does not provide the unit price needed to calculate the food bill1. A minimum does not tell you how many guests will attend, how much food each receives or whether another service has the same minimum.

Do the same with time. Peruvian Brothers describes two hours of operation excluding setup. Rocklands describes typical private service as two to three hours, depending on guest count2. The first is an identified rental inclusion; the second is a typical duration, not a fixed promise attached to every price. Write the actual agreed serving period into a comparison before treating the offers as equivalent.

Separate the three kinds of published price

The DMV catering terms index retains 22 approved roster entries and 22 attributes, including unknown values and source-specific limitations. Sixteen have named primary pages; five exact operator identities were not verified, and one candidate page yielded only a generic title. Inclusion is not a recommendation or confirmation that a truck can be booked. The method explains the source and scope distinctions.

Published observationWhat the amount describesWhat remains unresolved
Rocklands: $18.49 per personPrivate-event food rateLabour, service, applicable travel and tax
Rocklands: seasonal sales guaranteesVending receipts, varying by day and seasonApplicable guarantee and any shortfall arrangement
Peruvian Brothers: 50-person weekend floorMinimum priced guest countUnit price and complete event total
Peruvian Brothers: $500 depositPayment required to hold dateFinal bill and deposit credit treatment
Curbside Kitchen: $250 for one truckEvent-manager base fee without subscriptionFood charges and other event costs
Curbside Kitchen: $250 per additional truckAdditional platform feeFood-inclusive total

Rocklands’ private-event food rate is separate from its vending schedule. The seasonal table ranges from a $750 weekday off-season guarantee to $2,000 for listed in-season holidays. General prose also says $1,000, so the applicable seasonal row matters; this article does not choose a guarantee for an unspecified event2. Do not apply a vending minimum to the private-event food calculation unless the actual proposal establishes that relationship.

Curbside Kitchen’s $250 base and additional-truck amounts appear in its property and event-manager FAQ. They are not published meal prices. That FAQ also contains a separate section for food-truck vendors; vendor-facing card timing and fees should not be imported into the customer’s comparison3. Two trucks can therefore imply $500 in the stated platform base fees without establishing how much feeding the guests will cost.

Calculate known charges without disguising unknowns

The example uses three declared scenarios rather than manufacturing three competing quotes. The first assumes 80 guests at Rocklands’ published private food rate. The second assumes 40 weekend guests for Peruvian Brothers’ stated pricing floor. The third assumes two trucks booked under Curbside Kitchen’s event-manager base-fee description without a subscription. Guest and truck counts are synthetic inputs; no event details were submitted.

Save the complete printed example as catering_scenarios.py and run python3 catering_scenarios.py. It uses Python 3’s decimal arithmetic and makes no network requests. A missing charge remains missing even when other charges can be added. The final synthetic check demonstrates a complete-input calculation with invented amounts; it is not a price recommendation or a tax-rate estimate.

# SPDX-License-Identifier: MIT
from decimal import Decimal
import json


def amount(value):
  return None if value is None else Decimal(value)


def summarize(name, charges, note):
  parsed = {key: amount(value) for key, value in charges.items()}
  known = sum((v for v in parsed.values() if v is not None), Decimal('0'))
  missing = [key for key, value in parsed.items() if value is None]
  return {
    'scenario': name,
    'known_charges_usd': f'{known:.2f}',
    'complete_total_usd': None if missing else f'{known:.2f}',
    'unresolved': missing,
    'scope': note,
  }


guests = 80  # Synthetic event size; no event or quote was submitted.
food = Decimal('18.49') * guests
rocklands = summarize('Rocklands: 80 private-event guests', {
  'food': str(food), 'labour': None, 'service': None,
  'travel_if_applicable': None, 'tax': None,
}, 'Published food rate only; vending guarantees are not applied.')

actual_guests = 40  # Synthetic weekend party size.
priced_guests = max(actual_guests, 50)
peruvian = {
  'scenario': 'Peruvian Brothers: 40 weekend guests',
  'priced_guest_count': priced_guests,
  'published_deposit_usd': '500.00',
  'food_total_usd': None,
  'scope': 'Unit price unknown; deposit is not added to a guessed total.',
}

trucks = 2  # Synthetic event-manager scenario without subscription.
platform_base = Decimal('250.00') * trucks
curbside = summarize('Curbside Kitchen: two trucks', {
  'platform_base': str(platform_base), 'food': None,
  'other_event_charges': None, 'tax': None,
}, 'Platform base only; not a food-inclusive package.')

assert rocklands['known_charges_usd'] == '1479.20'
assert rocklands['complete_total_usd'] is None
assert peruvian['priced_guest_count'] == 50
assert curbside['known_charges_usd'] == '500.00'
assert curbside['complete_total_usd'] is None
synthetic = summarize('Synthetic complete-input check', {
  'food': '100.00', 'service': '15.00', 'tax_amount': '7.00',
}, 'Invented amounts for arithmetic only; no provider or tax-rate claim.')
assert synthetic['complete_total_usd'] == '122.00'
print(json.dumps({'scenarios': [rocklands, peruvian, curbside],
                  'synthetic_check': synthetic}, indent=2))

The $1,479.20 result is the multiplication of 80 by $18.49. It is not a total catering budget. The $500 platform result is similarly limited to two stated base fees. Neither is compared as a cheaper way of serving the same meal, because they describe different components. The Peruvian scenario deliberately returns no food total: the known priced headcount cannot fill in an unknown unit price.

Keep a deposit out of the cost addition unless the offer explains its treatment. Adding a deposit to a full quoted total could double-count a payment already included in that total. Assuming it is credited could also be wrong when the inspected source does not say so. The calculator therefore displays the published $500 deposit separately and leaves the unanswered relationship visible.

Compare the terms that can change the budget

Rocklands says prepaid private events require a signed contract and a 50% deposit. That is a percentage condition, not a fixed-dollar deposit that can be filled in before the relevant quote is known. Its page also gives conflicting distance descriptions: roughly 20 miles from Alexandria in one section and 25–30 miles in the FAQ. A separate answer describes a time-based travel fee beyond an hour from the shop2. Those statements cannot be reduced to a single confirmed free-delivery radius.

Peruvian Brothers states a surcharge beyond 20 miles from its Alexandria kitchen, without publishing the amount. It describes payment at the party and a two-week cancellation notice, with deposit forfeiture after that window1. These are attributed public statements. The index does not determine which terms govern a particular booking, resolve a dispute or decide what a customer legally owes.

Happy Hippo supplies more detailed, dated policies. Its cancellation page describes a refund less 10% at 14 or more days, 50% booking credit at seven to thirteen days and no refund under seven days, with further qualifications for incurred costs. It also says full payment within 24 hours after approval holds the date4. A single “cancellation days” number would lose those distinctions, so the index preserves the tiers rather than assigning one misleading deadline.

Compare what each stated payment accomplishes: request received, date held, booking confirmed or final balance paid. District Small Bites says the date is not booked until a deposit is made, but its request page does not state the amount5. Captain Cookie publishes a one-to-two-business-day response expectation, not a promise of availability6. An enquiry acknowledgement and an available truck are different observations.

Read a missing field as a specific question

Many opened pages offer an enquiry form without publishing minimums, fees or cancellation terms. That does not mean those conditions are absent. Other rows have a different limitation: the exact current operator identity could not be established. Keep the two cases separate. One calls for missing details from an identified provider; the other needs identity and service confirmation before comparing terms at all.

Service type also needs to remain current. Swizzler’s own catering page says its food trucks are no longer on the road, while other catering is still offered7. The retained roster row records that boundary rather than presenting the name as a current mobile option. Similarly, typical crowd sizes, menu photographs and a historical marketplace listing do not prove a guest minimum, available date or present operating status.

For a usable comparison, ask each proposal to identify the food package, priced headcount, included service time, staffing, tableware, travel, setup, tax and any other mandatory charge. Keep dietary preferences separate from allergy suitability. This price comparison establishes no individual dietary suitability.

Finish with two columns: complete amount established and items still unresolved. Only compare complete amounts when the event description and inclusions match. If one proposal is incomplete, show its known charges without awarding it a price advantage. Preserve the date and source alongside the comparison, because the arithmetic can remain correct after the underlying prices or policies have changed.

Not covered on this page

Sources

  1. Peruvian Brothers, food-truck rental terms, opened 24 October 2026; effective date not shown. ↩ ↩2

  2. Rocklands, food-truck service and rental FAQ, opened 24 October 2026; conflicting radius descriptions retained. ↩ ↩2 ↩3

  3. Curbside Kitchen, property and event-manager FAQ, opened 24 October 2026; vendor-facing terms treated separately. ↩

  4. Happy Hippo, cancellation and refund policy effective 5 September 2026, and terms effective 7 October 2026; opened 24 October 2026. ↩

  5. District Small Bites, catering request page, opened 24 October 2026. ↩

  6. Captain Cookie, catering and events, opened 24 October 2026. ↩

  7. Swizzler, catering, opened 24 October 2026. ↩

How we test: methodology. Found a mistake? Corrections.