---
title: Grubhub Clone Business Model
description: 
url: https://miracuves.com/grubhub-clone/business-model
date_modified: 2026-09-10
author: miracuves
language: en_US
---

.mcv-ghb{
    --crimson:#e8344f; --crimson-deep:#a70d2a; --crimson-hot:#d81b46; --crimson-light:#ff8090;
    --amber:#fbbf24; --black:#0a0a0a; --white:#ffffff; --paper:#faf8f8; --ink:#191419; --ink-dim:#6d666d;
    --line:rgba(11,11,16,0.1); --line-light:rgba(255,255,255,0.12);
    --card-bg:rgba(8,3,8,0.82);
    font-family:'Plus Jakarta Sans',Arial,sans-serif; color:var(--ink); background:var(--white); margin:0; padding:0;
  }
  .mcv-ghb *{ box-sizing:border-box; }
  .mcv-ghb h1,.mcv-ghb h2,.mcv-ghb h3{ font-family:'Plus Jakarta Sans',Arial,sans-serif; font-weight:800; margin:0; letter-spacing:-0.02em; line-height:1.12; }
  .mcv-ghb p{ margin:0 0 14px; line-height:1.7; color:var(--ink); }
  .mcv-ghb a{ color:var(--crimson-deep); text-decoration:none; }
  .mcv-ghb .mono{ font-family:'JetBrains Mono',monospace; }
  .mcv-ghb-wrap{ max-width:1180px; margin:0 auto; padding:0 24px; position:relative; z-index:2; }
  .mcv-ghb-bleed{ position:relative; left:50%; right:50%; margin-left:-50vw; margin-right:-50vw; width:100vw; }

  .mcv-seo-ref{ background:#FFF7E0; border:2px dashed #C79A00; padding:18px 22px; font-family:Arial,sans-serif; font-size:13px; color:#4A3B00; max-width:1180px; margin:18px auto; border-radius:8px; }

  .mcv-ghb-crumb{ display:flex; gap:8px; align-items:center; font-family:'JetBrains Mono',monospace; font-size:11.5px; color:rgba(255,255,255,.62); margin-bottom:20px; }
  .mcv-ghb-crumb a{ color:rgba(255,255,255,.62); }
  .mcv-ghb-crumb a:hover{ color:var(--crimson-light); }
  .mcv-ghb-crumb span.sep{ opacity:.5; }
  .mcv-ghb-crumb span.cur{ color:rgba(255,255,255,.75); }

  .mcv-ghb-eyebrow{ display:inline-flex; align-items:center; gap:8px; padding:7px 16px; border-radius:100px; background:rgba(255,255,255,.06); border:1px solid var(--line-light); font-family:'JetBrains Mono',monospace; font-size:11.5px; font-weight:700; letter-spacing:.18em; text-transform:uppercase; color:var(--crimson-light); margin-bottom:22px; }
  .mcv-ghb-eyebrow .dot{ width:6px; height:6px; border-radius:50%; background:var(--crimson); }

  .mcv-ghb-hero{ background:radial-gradient(ellipse 900px 500px at 85% -10%, rgba(232,52,79,.16), transparent), #0a0a0a; color:#fff; padding:56px 0 150px; position:relative; overflow:hidden; }
  .mcv-ghb-hero .ring{ position:absolute; border:2px solid rgba(232,52,79,.18); border-radius:50%; pointer-events:none; }
  .mcv-ghb-hero .ring1{ width:560px; height:560px; top:-260px; right:-200px; }
  .mcv-ghb-hero .ring2{ width:340px; height:340px; bottom:-200px; right:120px; border-color:rgba(232,52,79,.1); }
  .mcv-ghb-herogrid{ display:grid; grid-template-columns:1.1fr 0.9fr; gap:48px; align-items:center; }
  .mcv-ghb-hero h1{ font-size:clamp(27px,3.9vw,44px); color:#fff; }
  .mcv-ghb-hero h1 em{ font-style:normal; color:#ff8090; }
  .mcv-ghb-hero p.sub{ font-size:16px; color:rgba(255,255,255,.68); max-width:600px; margin:20px 0 30px; }

  .mcv-ghb a.mcv-ghb-btn{ display:inline-flex; align-items:center; gap:8px; border-radius:12px; background:linear-gradient(160deg,#d81b46,#e6223f); color:#fff; font-weight:700; font-size:15px; padding:15px 28px; box-shadow:0 10px 30px rgba(232,52,79,.3); transition:transform .25s cubic-bezier(.2,.8,.2,1), box-shadow .25s; }
  .mcv-ghb a.mcv-ghb-btn:hover{ color:#fff; transform:translateY(-2px); box-shadow:0 14px 36px rgba(232,52,79,.42); text-decoration:none; }
  .mcv-ghb a.mcv-ghb-btn-outline{ display:inline-flex; align-items:center; border:2px solid rgba(255,255,255,.7); color:#fff; border-radius:12px; font-weight:700; font-size:15px; padding:13px 26px; margin-left:12px; transition:all .2s; }
  .mcv-ghb a.mcv-ghb-btn-outline:hover{ background:#fff; color:#191419; text-decoration:none; }

  .mcv-ghb-trust{ display:flex; flex-wrap:wrap; gap:22px; margin-top:34px; padding-top:24px; border-top:1px solid var(--line-light); }
  .mcv-ghb-trust-item{ display:flex; align-items:center; gap:8px; font-size:12.5px; color:rgba(255,255,255,.6); }
  .mcv-ghb-trust-item strong{ font-family:'JetBrains Mono',monospace; color:#fff; font-size:14px; }

  .mcv-ghb-cardstack{ position:relative; height:340px; }
  .mcv-ghb-fincard{ position:absolute; width:300px; height:180px; border-radius:18px; padding:22px; background:linear-gradient(150deg,#1c1418,#0d0709); border:1px solid var(--line-light); box-shadow:0 30px 70px rgba(0,0,0,.5); }
  .mcv-ghb-fincard.c1{ top:0; left:10px; z-index:1; opacity:.5; transform:rotate(-6deg) scale(.92); }
  .mcv-ghb-fincard.c2{ top:30px; left:40px; z-index:2; background:linear-gradient(150deg,#3a0a15,#160408 60%,#0a0a0a); border-color:rgba(232,52,79,.3); box-shadow:0 40px 90px rgba(0,0,0,.55), 0 0 60px -12px rgba(232,52,79,.35); }
  .mcv-ghb-fincard .brand{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:rgba(255,255,255,.55); }
  .mcv-ghb-fincard .chip{ width:34px; height:24px; border-radius:5px; background:linear-gradient(135deg,#ff8090,#e8344f); margin:22px 0 18px; }
  .mcv-ghb-fincard .num{ font-family:'JetBrains Mono',monospace; font-size:15px; color:#fff; letter-spacing:.1em; }
  .mcv-ghb-fincard .curr{ position:absolute; bottom:22px; right:22px; font-family:'JetBrains Mono',monospace; font-size:11px; color:#ff8090; }
  .mcv-ghb-float{ position:absolute; background:rgba(8,3,8,0.82); border:1px solid var(--line-light); border-radius:14px; padding:12px 16px; box-shadow:0 16px 40px rgba(0,0,0,.35); z-index:3; }
  .mcv-ghb-float .k2{ font-family:'JetBrains Mono',monospace; font-size:10px; color:#ff8090; text-transform:uppercase; letter-spacing:.08em; margin-bottom:3px; }
  .mcv-ghb-float .v{ font-family:'JetBrains Mono',monospace; font-size:15px; color:#fff; font-weight:700; }
  .mcv-ghb-float-1{ top:-10px; right:0; }
  .mcv-ghb-float-2{ bottom:10px; left:0; }

  .mcv-ghb-statbar{ margin-top:-72px; position:relative; z-index:3; }
  .mcv-ghb-statbar .inner{ background:rgba(8,3,8,0.82); border:1px solid var(--line-light); border-radius:18px; box-shadow:0 24px 60px rgba(0,0,0,.35); padding:32px 20px; display:grid; grid-template-columns:repeat(4,1fr); }
  .mcv-ghb-statbar .stat{ text-align:center; padding:0 12px; border-right:1px solid var(--line-light); }
  .mcv-ghb-statbar .stat:last-child{ border-right:none; }
  .mcv-ghb-statbar .num{ font-family:'JetBrains Mono',monospace; font-weight:700; font-size:22px; color:#ff8090; }
  .mcv-ghb-statbar .lbl{ font-size:11.5px; color:rgba(255,255,255,.62); margin-top:6px; line-height:1.4; }

  .mcv-ghb-section{ padding:100px 0 76px; }
  .mcv-ghb-section.paper{ background:#faf8f8; }
  .mcv-ghb-section.tight{ padding-top:76px; }
  .mcv-ghb-head{ text-align:center; max-width:720px; margin:0 auto 48px; }
  .mcv-ghb-head .kicker{ font-family:'JetBrains Mono',monospace; font-size:12px; font-weight:700; letter-spacing:.18em; text-transform:uppercase; color:#a70d2a; margin-bottom:12px; }
  .mcv-ghb-head h2{ font-size:clamp(22px,3vw,34px); color:#191419; }
  .mcv-ghb-head p{ color:#6d666d; margin-top:14px; }

  .mcv-ghb-rolegrid{ display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
  .mcv-ghb-rolecard{ background:#fff; border:1px solid var(--line); border-radius:18px; padding:28px 24px; box-shadow:0 6px 18px rgba(0,0,0,.05); transition:transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s, border-color .3s; }
  .mcv-ghb-rolecard:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-ghb-roleicon{ width:40px; height:40px; border-radius:10px; background:rgba(232,52,79,.12); border:1px solid rgba(232,52,79,.3); display:flex; align-items:center; justify-content:center; margin-bottom:16px; font-family:'JetBrains Mono',monospace; font-weight:700; font-size:14px; color:#a70d2a; }
  .mcv-ghb-rolecard h3{ font-size:17px; margin-bottom:12px; color:#191419; }
  .mcv-ghb-rolecard ul{ margin:0; padding-left:18px; font-size:13.5px; color:#191419; }
  .mcv-ghb-rolecard li{ margin-bottom:8px; line-height:1.5; }

  .mcv-ghb-tablewrap{ overflow-x:auto; border-radius:16px; box-shadow:0 12px 34px rgba(0,0,0,.07); border:1px solid var(--line); }
  table.mcv-ghb-table{ border-collapse:collapse; width:100%; min-width:680px; background:#fff; font-size:13.5px; }
  table.mcv-ghb-table th{ background:#0a0a0a; color:#ffffff; text-align:left; padding:14px 16px; font-family:'JetBrains Mono',monospace; font-weight:600; font-size:12px; letter-spacing:.04em; text-transform:uppercase; }
  table.mcv-ghb-table td{ padding:14px 16px; border-bottom:1px solid rgba(11,11,16,0.1); vertical-align:top; color:#191419; }
  table.mcv-ghb-table td.hl{ background:rgba(232,52,79,.06); border-top:3px solid #e8344f; font-weight:600; color:#191419; }
  table.mcv-ghb-table th.hl{ background:#e6223f; color:#ffffff; }
  table.mcv-ghb-table tbody tr:hover td{ background:#f4f1f1; color:#191419; }
  table.mcv-ghb-table tbody tr:hover td.hl{ background:rgba(232,52,79,.13); color:#191419; }
  table.mcv-ghb-table tr:last-child td{ border-bottom:none; }
  .mcv-ghb-note{ font-size:12.5px; color:#6d666d; margin-top:12px; }

  .mcv-ghb-callout{ background:linear-gradient(135deg,#2B0710,#4A0F1E); color:#fff; border-radius:20px; padding:40px 44px; }
  .mcv-ghb-callout h2,.mcv-ghb-callout h3{ color:#fff; font-size:22px; margin-bottom:12px; }
  .mcv-ghb-callout p{ color:rgba(255,255,255,.78); font-size:14.5px; margin:0; }

  .mcv-ghb-honest{ background:#fff; border:1px solid var(--line); border-left:4px solid #fbbf24; border-radius:14px; padding:28px 30px; }
  .mcv-ghb-honest h3{ font-size:17px; margin-bottom:14px; color:#191419; }
  .mcv-ghb-honestgrid{ display:grid; grid-template-columns:1fr 1fr; gap:10px 28px; }
  .mcv-ghb-honestgrid div{ font-size:13.5px; color:#191419; line-height:1.55; padding-left:18px; position:relative; }
  .mcv-ghb-honestgrid div::before{ content:'!'; position:absolute; left:0; top:0; font-family:'JetBrains Mono',monospace; font-weight:700; color:#8a6100; }

  .mcv-ghb-cs{ background:#fff; border:1px solid var(--line); border-radius:20px; padding:32px 34px; display:flex; justify-content:space-between; align-items:center; gap:24px; flex-wrap:wrap; box-shadow:0 8px 24px rgba(0,0,0,.05); }
  .mcv-ghb-cs-badge{ display:inline-flex; align-items:center; gap:7px; padding:6px 14px; border-radius:100px; background:rgba(232,52,79,.08); border:1px solid rgba(232,52,79,.25); font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:#a70d2a; margin-bottom:12px; }
  .mcv-ghb-cs-badge .dot{ width:6px; height:6px; border-radius:50%; background:#e8344f; }
  .mcv-ghb-cs-body{ flex:1; min-width:260px; }
  .mcv-ghb-cs-body h3{ font-size:16.5px; margin-bottom:6px; color:#191419; }
  .mcv-ghb-cs-body p{ color:#6d666d; font-size:13.5px; margin:0; max-width:460px; }
  .mcv-ghb a.mcv-ghb-cs-link{ font-family:'JetBrains Mono',monospace; font-size:12px; font-weight:700; color:#a70d2a; white-space:nowrap; }

  .mcv-ghb-faqgrid{ display:grid; grid-template-columns:1fr 1fr; gap:0 40px; max-width:1000px; margin:0 auto; }
  .mcv-ghb-faq details{ border-bottom:1px solid var(--line); padding:18px 0; }
  .mcv-ghb-faq summary{ font-family:'Plus Jakarta Sans',Arial,sans-serif; font-weight:700; font-size:15px; color:#191419; cursor:pointer; list-style:none; display:flex; justify-content:space-between; align-items:center; gap:16px; }
  .mcv-ghb-faq summary::-webkit-details-marker{ display:none; }
  .mcv-ghb-faq summary::after{ content:'+'; font-family:'JetBrains Mono',monospace; color:#a70d2a; font-size:20px; font-weight:700; flex:none; }
  .mcv-ghb-faq details[open] summary::after{ content:'\2212'; }
  .mcv-ghb-faq .a{ color:#6d666d; font-size:13.5px; margin-top:10px; line-height:1.65; }

  .mcv-ghb-cta{ background:linear-gradient(120deg,#e6223f,#6e0e1f); color:#fff; padding:64px 0; position:relative; overflow:hidden; }
  .mcv-ghb-cta .ring{ position:absolute; border:2px solid rgba(255,255,255,.14); border-radius:50%; width:360px; height:360px; top:-140px; right:-100px; }
  .mcv-ghb-cta .flex{ display:flex; justify-content:space-between; align-items:center; gap:28px; flex-wrap:wrap; position:relative; z-index:2; }
  .mcv-ghb-cta h2{ color:#fff; font-size:clamp(20px,2.6vw,28px); margin-bottom:8px; }
  .mcv-ghb-cta p{ color:#ffffff; margin:0; max-width:460px; }
  .mcv-ghb-cta a.mcv-ghb-btn-outline{ border-color:#fff; }
  .mcv-ghb-cta a.mcv-ghb-btn{ background:#fff; box-shadow:0 10px 30px rgba(0,0,0,.2); }
  .mcv-ghb-cta a.mcv-ghb-btn,.mcv-ghb-cta a.mcv-ghb-btn:hover{ color:#a70d2a; }

  .mcv-ghb-explore{ display:flex; flex-wrap:wrap; gap:10px; justify-content:center; }
  .mcv-ghb a.mcv-ghb-pill{ font-family:'JetBrains Mono',monospace; font-size:12.5px; font-weight:600; padding:10px 18px; border-radius:100px; border:1px solid var(--line); color:#191419; background:#fff; transition:all .2s; }
  .mcv-ghb a.mcv-ghb-pill:hover{ border-color:#e8344f; color:#a70d2a; text-decoration:none; }
  .mcv-ghb a.mcv-ghb-pill.cur{ background:#191419; color:#fff; border-color:#191419; }

  .mcv-ghb-finalcta{ background:#0a0a0a; color:#fff; text-align:center; padding:96px 24px 64px; position:relative; overflow:hidden; }
  .mcv-ghb-finalcta .ring{ position:absolute; border:1.5px solid rgba(232,52,79,.16); border-radius:50%; }
  .mcv-ghb-finalcta .ring1{ width:480px; height:480px; top:-220px; left:-160px; }
  .mcv-ghb-finalcta .ring2{ width:300px; height:300px; bottom:-180px; right:-90px; }
  .mcv-ghb-finalcta .card{ background:rgba(8,3,8,0.82); border:1px solid var(--line-light); border-radius:24px; padding:56px 40px; max-width:720px; margin:0 auto; position:relative; z-index:2; }
  .mcv-ghb-finalcta h2{ color:#fff; font-size:clamp(24px,3.2vw,34px); max-width:640px; margin:0 auto 14px; }
  .mcv-ghb-finalcta p.sub{ color:rgba(255,255,255,.7); max-width:520px; margin:0 auto 30px; }
  .mcv-ghb-footerbar{ max-width:1180px; margin:56px auto 0; padding-top:28px; border-top:1px solid var(--line-light); position:relative; z-index:2; }
  .mcv-ghb-byline{ display:flex; flex-wrap:wrap; gap:6px 14px; align-items:center; font-family:'JetBrains Mono',monospace; font-size:11.5px; color:rgba(255,255,255,.55); border-bottom:1px solid rgba(255,255,255,.12); padding-bottom:16px; margin-bottom:12px; }
  .mcv-ghb-byline strong{ color:#fff; font-weight:600; }
  .mcv-ghb-byline .dotsep{ opacity:.4; }
  .mcv-ghb-footermeta{ display:flex; flex-wrap:wrap; justify-content:space-between; gap:12px; font-family:'JetBrains Mono',monospace; font-size:11px; color:rgba(255,255,255,.55); }

  @media (max-width:900px){
    .mcv-ghb-herogrid{ grid-template-columns:1fr; }
    .mcv-ghb-statbar .inner{ grid-template-columns:repeat(2,1fr); gap:18px 0; }
    .mcv-ghb-statbar .stat:nth-child(2){ border-right:none; }
    .mcv-ghb-rolegrid{ grid-template-columns:1fr; }
    .mcv-ghb-honestgrid{ grid-template-columns:1fr; }
    .mcv-ghb-faqgrid{ grid-template-columns:1fr; }
    .mcv-ghb-hero h1{ font-size:27px; }
    .mcv-ghb-cta .flex{ flex-direction:column; align-items:flex-start; }
    .mcv-ghb-cardstack{ height:260px; }
    .mcv-ghb-fincard{ width:250px; height:150px; }
  }
  @media (prefers-reduced-motion: reduce){ .mcv-ghb *{ animation:none !important; transition:none !important; } }
  /* --- components used by cost / company / business-model --- */
  .mcv-ghb-pricecard{ background:linear-gradient(150deg,#3a0a15,#160408 60%,#0a0a0a); border:1px solid rgba(232,52,79,.3); border-radius:22px; padding:34px 32px; box-shadow:0 40px 90px rgba(0,0,0,.55), 0 0 60px -12px rgba(232,52,79,.35); }
  .mcv-ghb-pricecard .plan{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:#ff8090; margin-bottom:14px; }
  .mcv-ghb-pricecard .amt{ font-family:'JetBrains Mono',monospace; font-size:44px; font-weight:700; color:#fff; line-height:1; }
  .mcv-ghb-pricecard .per{ font-size:13px; color:rgba(255,255,255,.6); margin-top:8px; }
  .mcv-ghb-pricecard ul{ margin:22px 0 0; padding-left:18px; color:rgba(255,255,255,.78); font-size:13.5px; }
  .mcv-ghb-pricecard li{ margin-bottom:8px; line-height:1.5; }
  .mcv-ghb-drivers{ display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
  .mcv-ghb-driver{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:18px; padding:26px 24px; box-shadow:0 6px 18px rgba(0,0,0,.05); transition:transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s, border-color .3s; }
  .mcv-ghb-driver:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-ghb-driver h3{ font-size:16px; margin-bottom:10px; color:#191419; }
  .mcv-ghb-driver p{ font-size:13.5px; color:#6d666d; margin:0; }
  .mcv-ghb-steps{ display:grid; grid-template-columns:repeat(3,1fr); gap:18px; }
  .mcv-ghb-step{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:16px; padding:24px 22px; }
  .mcv-ghb-step .n{ font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:700; letter-spacing:.12em; text-transform:uppercase; color:#a70d2a; margin-bottom:8px; }
  .mcv-ghb-step h3{ font-size:15.5px; margin-bottom:8px; color:#191419; }
  .mcv-ghb-step p{ font-size:13.5px; color:#6d666d; margin:0; }
  .mcv-ghb-checkgrid{ display:grid; grid-template-columns:1fr 1fr; gap:16px 28px; }
  .mcv-ghb-check{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:14px; padding:20px 22px; }
  .mcv-ghb-check h3{ font-size:15px; margin-bottom:8px; color:#191419; }
  .mcv-ghb-check p{ font-size:13.5px; color:#6d666d; margin:0; }
  .mcv-ghb-flags{ display:grid; grid-template-columns:1fr 1fr; gap:14px 28px; }
  .mcv-ghb-flag{ font-size:13.5px; color:#191419; line-height:1.55; padding-left:22px; position:relative; }
  .mcv-ghb-flag::before{ content:'\2715'; position:absolute; left:0; top:0; font-family:'JetBrains Mono',monospace; font-weight:700; color:#a70d2a; }
  .mcv-ghb-pt{ background:radial-gradient(ellipse 800px 400px at 20% 0%, rgba(232,52,79,.14), transparent), #0a0a0a; color:#fff; padding:92px 0 84px; }
  .mcv-ghb-pt .mcv-ghb-head h2{ color:#fff; }
  .mcv-ghb-pt .mcv-ghb-head p{ color:rgba(255,255,255,.68); }
  .mcv-ghb-pt .mcv-ghb-head .kicker{ color:#ff8090; }
  .mcv-ghb-ptgrid{ display:grid; grid-template-columns:repeat(3,1fr); gap:20px; }
  .mcv-ghb-ptcard{ background:rgba(8,3,8,0.82); border:1px solid rgba(255,255,255,0.12); border-radius:18px; padding:26px 24px; }
  .mcv-ghb-ptcard h3{ font-size:15.5px; color:#fff; margin-bottom:10px; }
  .mcv-ghb-ptcard p{ font-size:13.5px; color:rgba(255,255,255,.72); margin:0; }
  .mcv-ghb-ptcard .tag{ display:inline-block; font-family:'JetBrains Mono',monospace; font-size:10px; letter-spacing:.1em; text-transform:uppercase; color:#ff8090; border:1px solid rgba(232,52,79,.35); border-radius:100px; padding:3px 10px; margin-bottom:12px; }
  .mcv-ghb-csbox{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:22px; padding:40px 42px; box-shadow:0 12px 34px rgba(0,0,0,.06); }
  .mcv-ghb-csmeta{ display:flex; flex-wrap:wrap; gap:26px; margin:22px 0 26px; padding:20px 0; border-top:1px solid rgba(11,11,16,0.1); border-bottom:1px solid rgba(11,11,16,0.1); }
  .mcv-ghb-csmeta div{ font-size:13px; color:#6d666d; }
  .mcv-ghb-csmeta strong{ display:block; font-family:'JetBrains Mono',monospace; font-size:18px; color:#191419; margin-bottom:2px; }
  .mcv-ghb-cscols{ display:grid; grid-template-columns:repeat(3,1fr); gap:26px; }
  .mcv-ghb-cscols h4{ font-size:13px; font-family:'JetBrains Mono',monospace; letter-spacing:.08em; text-transform:uppercase; color:#a70d2a; margin:0 0 10px; }
  .mcv-ghb-cscols ul{ margin:0; padding-left:18px; font-size:13.5px; color:#191419; }
  .mcv-ghb-cscols li{ margin-bottom:8px; line-height:1.5; }
  .mcv-ghb-quote{ margin-top:28px; padding:24px 26px; background:#faf8f8; border-left:3px solid #e8344f; border-radius:0 12px 12px 0; }
  .mcv-ghb-quote p{ font-size:15px; font-style:italic; color:#191419; margin:0 0 10px; }
  .mcv-ghb-quote .who{ font-family:'JetBrains Mono',monospace; font-size:12px; color:#6d666d; font-style:normal; }
  .mcv-ghb-revgrid{ display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
  .mcv-ghb-revcard{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:18px; padding:28px 24px; box-shadow:0 6px 18px rgba(0,0,0,.05); transition:transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s, border-color .3s; }
  .mcv-ghb-revcard:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-ghb-revcard .n{ font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:700; letter-spacing:.12em; text-transform:uppercase; color:#a70d2a; margin-bottom:10px; }
  .mcv-ghb-revcard h3{ font-size:16.5px; margin-bottom:10px; color:#191419; }
  .mcv-ghb-revcard p{ font-size:13.5px; color:#6d666d; margin:0; }
  .mcv-ghb-revcard .core{ display:inline-block; margin-top:14px; font-family:'JetBrains Mono',monospace; font-size:10px; letter-spacing:.1em; text-transform:uppercase; color:#a70d2a; background:rgba(232,52,79,.08); border:1px solid rgba(232,52,79,.25); border-radius:100px; padding:3px 10px; }
  .mcv-ghb-disclose{ background:#faf8f8; border:1px dashed rgba(11,11,16,0.1); border-radius:14px; padding:26px 28px; max-width:860px; margin:0 auto; }
  .mcv-ghb-disclose h3{ font-size:16px; margin-bottom:10px; color:#191419; }
  .mcv-ghb-disclose p{ font-size:13.5px; color:#6d666d; margin:0 0 10px; }
  .mcv-ghb-disclose p:last-child{ margin-bottom:0; }
  .mcv-ghb-callout .figs{ display:flex; flex-wrap:wrap; gap:32px; margin-top:22px; padding-top:20px; border-top:1px solid rgba(255,255,255,0.12); }
  .mcv-ghb-callout .figs div{ font-size:12.5px; color:rgba(255,255,255,.65); }
  .mcv-ghb-callout .figs strong{ display:block; font-family:'JetBrains Mono',monospace; font-size:20px; color:#fff; margin-bottom:3px; }
  @media (max-width:900px){
    .mcv-ghb-drivers,.mcv-ghb-steps,.mcv-ghb-checkgrid,.mcv-ghb-flags,.mcv-ghb-ptgrid,.mcv-ghb-cscols,.mcv-ghb-revgrid{ grid-template-columns:1fr; }
    .mcv-ghb-csbox{ padding:28px 24px; }
  }
  /* ===== components ported from the shipped reference bundle (instagram-clone) ===== */
  .mcv-ghb-aside{ border-left:3px solid #e8344f; background:#faf8f8; border-radius:0 16px 16px 0; padding:32px 36px; }
  .mcv-ghb-aside h3{ font-size:17px; margin-bottom:14px; color:#191419; }
  .mcv-ghb-aside ul{ margin:0; padding:0; list-style:none; display:grid; grid-template-columns:1fr 1fr; gap:16px 32px; }
  .mcv-ghb-aside li{ padding-left:18px; position:relative; font-size:14px; color:#191419; line-height:1.6; }
  .mcv-ghb-aside li::before{ content:''; position:absolute; left:0; top:7px; width:7px; height:7px; background:#e8344f; transform:rotate(45deg); }
  .mcv-ghb-aside li span{ color:#6d666d; display:block; font-size:12.5px; margin-top:2px; }
  .mcv-ghb-flowrow{ display:grid; grid-template-columns:64px 1fr; gap:22px; padding:28px 0; border-bottom:1px solid rgba(11,11,16,0.1); align-items:start; }
  .mcv-ghb-flowrow:last-child{ border-bottom:none; }
  .mcv-ghb-flowrow h3{ font-size:18px; margin-bottom:8px; color:#191419; }
  .mcv-ghb-flowrow p{ color:#6d666d; font-size:14.5px; margin:0; max-width:760px; }
  .mcv-ghb-flownum{ width:56px; height:56px; border-radius:50%; border:1.5px solid rgba(11,11,16,0.1); display:flex; align-items:center; justify-content:center; font-family:'JetBrains Mono',monospace; font-weight:700; color:#a70d2a; font-size:16px; }
  .mcv-ghb-icongrid{ display:grid; grid-template-columns:repeat(2,1fr); gap:20px; }
  .mcv-ghb-iconitem{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:14px; padding:22px 24px; display:flex; gap:14px; align-items:flex-start; box-shadow:0 6px 18px rgba(0,0,0,.05); }
  .mcv-ghb-iconitem h3{ font-size:15px; margin-bottom:6px; color:#191419; }
  .mcv-ghb-iconitem p{ font-size:13px; color:#6d666d; margin:0; }
  .mcv-ghb-icondot{ width:34px; height:34px; border-radius:10px; background:rgba(232,52,79,.12); border:1px solid rgba(232,52,79,.3); flex:none; display:flex; align-items:center; justify-content:center; font-family:'JetBrains Mono',monospace; font-weight:700; font-size:14px; color:#a70d2a; }
  .mcv-ghb-steprow{ display:flex; gap:24px; padding:22px 0; border-bottom:1px solid rgba(11,11,16,0.1); }
  .mcv-ghb-steprow:last-child{ border-bottom:none; }
  .mcv-ghb-step-num{ font-family:'JetBrains Mono',monospace; font-weight:700; font-size:15px; color:#a70d2a; flex:none; width:90px; padding-top:2px; }
  .mcv-ghb-step-body h3{ font-size:17px; color:#191419; margin-bottom:6px; }
  .mcv-ghb-step-body p{ font-size:14.5px; color:#6d666d; margin:0; }
  .mcv-ghb-trustband{ background:#0a0a0a; color:#fff; padding:96px 0; position:relative; overflow:hidden; }
  .mcv-ghb-trustband .ring{ position:absolute; border:1.5px solid rgba(232,52,79,.16); border-radius:50%; width:420px; height:420px; top:-160px; left:-140px; }
  .mcv-ghb-trustband .head{ text-align:center; max-width:720px; margin:0 auto 44px; position:relative; z-index:2; }
  .mcv-ghb-trustband .head .kicker{ font-family:'JetBrains Mono',monospace; font-size:12px; font-weight:700; letter-spacing:.18em; text-transform:uppercase; color:#ff8090; margin-bottom:12px; }
  .mcv-ghb-trustband .head h2{ color:#fff; font-size:clamp(22px,3vw,34px); }
  .mcv-ghb-trustband .head p{ color:rgba(255,255,255,.68); margin-top:14px; }
  /* the band markup uses the prefixed head class, so scope the light colours to it explicitly -
     without this the h2 falls through to .mcv-ghb-head h2 (#191419) and vanishes on the black band */
  .mcv-ghb-trustband .mcv-ghb-head h2{ color:#ffffff; font-size:clamp(22px,3vw,34px); }
  .mcv-ghb-trustband .mcv-ghb-head p{ color:rgba(255,255,255,0.68); }
  .mcv-ghb-trustband .mcv-ghb-head .kicker{ color:#ff8090; }
.mcv-ghb-trustband .mcv-ghb-note{ color:rgba(255,255,255,0.68); }
.mcv-ghb-pt .mcv-ghb-note{ color:rgba(255,255,255,0.68); }
  .mcv-ghb-trustgrid{ display:grid; grid-template-columns:repeat(4,1fr); gap:20px; position:relative; z-index:2; }
  .mcv-ghb-trustcard{ background:rgba(8,3,8,0.82); border:1px solid rgba(255,255,255,0.12); border-radius:16px; padding:26px 22px; }
  .mcv-ghb-trustcard h3{ color:#fff; font-size:15px; margin-bottom:8px; }
  .mcv-ghb-trustcard p{ color:rgba(255,255,255,.68); font-size:13px; margin:0; line-height:1.55; }
  .mcv-ghb-trusticon{ width:38px; height:38px; border-radius:10px; background:rgba(232,52,79,.16); border:1px solid rgba(232,52,79,.4); display:flex; align-items:center; justify-content:center; margin-bottom:14px; }
  .mcv-ghb-scorecard{ background:rgba(8,3,8,0.82); border:1px solid rgba(255,255,255,0.12); border-radius:20px; padding:28px 26px; }
  .mcv-ghb-scorecard .k{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.1em; text-transform:uppercase; color:#ff8090; margin-bottom:16px; }
  .mcv-ghb-scorerow{ display:flex; justify-content:space-between; align-items:center; padding:10px 0; border-bottom:1px solid rgba(255,255,255,0.12); }
  .mcv-ghb-scorerow:last-child{ border-bottom:none; }
  .mcv-ghb-scorerow .lbl2{ font-size:12.5px; color:rgba(255,255,255,.75); }
  .mcv-ghb-scorerow .val{ font-family:'JetBrains Mono',monospace; font-size:13px; font-weight:700; color:#fff; }
  .mcv-ghb-scorerow .val.good{ color:#ff8090; }
  /* scorecard is a DARK card sitting in a light section. Rows authored as
     **label**text inherit var(--ink) and vanish (1.13:1).
     Give them light ink and stack them; .lbl2/.val two-column rows are untouched. */
  .mcv-ghb-scorerow{ flex-wrap:wrap; }
  .mcv-ghb-scorecard > .mcv-ghb-scorerow > strong{ flex:1 0 100%; color:#ffffff; font-size:14.5px; margin-bottom:4px; }
  .mcv-ghb-scorecard > .mcv-ghb-scorerow > span{ flex:1 0 100%; color:rgba(255,255,255,0.78); font-size:13px; line-height:1.62; }
  .mcv-ghb-cs-top{ display:flex; justify-content:space-between; align-items:flex-start; gap:24px; flex-wrap:wrap; margin-bottom:28px; }
  .mcv-ghb-cs-top p{ color:#6d666d; font-size:14.5px; max-width:480px; margin:0; }
  .mcv-ghb-cs-meta{ text-align:right; font-size:13.5px; }
  .mcv-ghb-cs-meta strong{ display:block; color:#191419; font-size:14.5px; }
  .mcv-ghb-cs-meta .lbl{ font-family:'JetBrains Mono',monospace; font-size:10.5px; text-transform:uppercase; letter-spacing:.08em; color:#6d666d; margin:2px 0 12px; }
  .mcv-ghb-cs-stats{ display:grid; grid-template-columns:repeat(3,1fr); border:1px solid rgba(11,11,16,0.1); border-radius:16px; margin-bottom:24px; overflow:hidden; }
  .mcv-ghb-cs-stat{ text-align:center; padding:22px 12px; border-right:1px solid rgba(11,11,16,0.1); }
  .mcv-ghb-cs-stat:last-child{ border-right:none; }
  .mcv-ghb-cs-stat .v{ font-family:'JetBrains Mono',monospace; font-weight:700; font-size:26px; color:#a70d2a; }
  .mcv-ghb-cs-stat .l{ font-size:12.5px; color:#6d666d; margin-top:4px; }
  .mcv-ghb-cs-grid{ display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-bottom:16px; }
  .mcv-ghb-cs-box{ background:#faf8f8; border-radius:14px; padding:22px 24px; }
  .mcv-ghb-cs-box .h{ font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:#6d666d; margin-bottom:12px; }
  .mcv-ghb-cs-box ul{ margin:0; padding:0; list-style:none; display:grid; gap:8px; }
  .mcv-ghb-cs-box li{ padding-left:16px; position:relative; font-size:13.5px; color:#191419; line-height:1.55; }
  .mcv-ghb-cs-box li::before{ content:''; position:absolute; left:0; top:7px; width:6px; height:6px; background:#e8344f; transform:rotate(45deg); }
  .mcv-ghb-cs-quote{ border-left:3px solid #e8344f; background:#faf8f8; border-radius:0 14px 14px 0; padding:22px 26px; margin-top:16px; display:flex; gap:16px; align-items:flex-start; }
  .mcv-ghb-cs-quote p{ font-style:italic; font-size:15px; color:#191419; margin:0 0 10px; }
  .mcv-ghb-cs-avatar{ width:38px; height:38px; border-radius:50%; background:#a70d2a; color:#fff; display:flex; align-items:center; justify-content:center; font-family:'JetBrains Mono',monospace; font-weight:700; font-size:13px; flex:none; }
  .mcv-ghb-cs-who strong{ display:block; font-size:13.5px; color:#191419; }
  .mcv-ghb-cs-who span{ font-size:12.5px; color:#6d666d; }
  .mcv-ghb-cs-foot{ margin-top:20px; padding-top:16px; border-top:1px solid rgba(11,11,16,0.1); font-size:12.5px; color:#6d666d; }
  .mcv-ghb-mockwrap{ position:relative; }
  .mcv-ghb-chartcard{ background:rgba(8,3,8,0.82); border:1px solid rgba(255,255,255,0.12); border-radius:20px; padding:28px 26px; position:relative; }
  .mcv-ghb-chartcard .k{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.1em; text-transform:uppercase; color:#ff8090; margin-bottom:18px; }
  .mcv-ghb-chartcard .mcv-ghb-barrow{ display:flex; align-items:center; gap:14px; height:auto; margin:0 0 14px; }
  .mcv-ghb-chartcard .mcv-ghb-barrow .l{ flex:0 0 140px; font-size:12.5px; line-height:1.35; color:rgba(255,255,255,.78); }
  .mcv-ghb-chartcard .mcv-ghb-barrow>.bar{ flex:1; height:8px; border-radius:999px; background:rgba(255,255,255,.10); overflow:hidden; }
  .mcv-ghb-chartcard .mcv-ghb-barrow>.bar>.mcv-ghb-barcol{ height:8px; border-radius:999px; background:linear-gradient(90deg,#ff8090,#d81b46); }
  .mcv-ghb-chartcard .note{ margin-top:18px; padding-top:14px; border-top:1px solid rgba(255,255,255,0.12); font-size:11.5px; line-height:1.5; color:rgba(255,255,255,.62); }
  .mcv-ghb-seggrid{ display:grid; grid-template-columns:repeat(4,1fr); gap:20px; }
  .mcv-ghb-segcard{ background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:16px; padding:26px 22px; box-shadow:0 6px 18px rgba(0,0,0,.05); transition:transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s, border-color .3s; }
  .mcv-ghb-segcard:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-ghb-segcard h3{ color:#191419; font-size:15.5px; margin-bottom:8px; }
  .mcv-ghb-segcard p{ color:#6d666d; font-size:13px; margin:0; line-height:1.55; }
  .mcv-ghb-segcard ul{ margin:12px 0 0; padding-left:17px; }
  .mcv-ghb-segcard li{ color:#6d666d; font-size:12.5px; line-height:1.5; margin-bottom:6px; }
  .mcv-ghb-segcard li:last-child{ margin-bottom:0; }
  .mcv-ghb-segicon{ width:38px; height:38px; border-radius:10px; background:rgba(232,52,79,.12); border:1px solid rgba(232,52,79,.3); display:flex; align-items:center; justify-content:center; margin-bottom:14px; font-family:'JetBrains Mono',monospace; font-weight:700; font-size:14px; color:#a70d2a; transition:background .3s; }
  .mcv-ghb-modelgrid{ display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
  .mcv-ghb-modelcard{ position:relative; background:#fff; border:1px solid rgba(11,11,16,0.1); border-radius:18px; padding:26px 24px; box-shadow:0 6px 18px rgba(0,0,0,.05); transition:transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s, border-color .3s; overflow:hidden; }
  .mcv-ghb-modelcard:hover{ transform:translateY(-6px); box-shadow:0 20px 40px rgba(0,0,0,.09); border-color:#e8344f; }
  .mcv-ghb-modelcard .ghost{ position:absolute; top:-4px; right:6px; font-family:'JetBrains Mono',monospace; font-weight:700; font-size:64px; color:#000; opacity:.045; line-height:1; }
  .mcv-ghb-modelcard:hover .ghost{ color:#e8344f; opacity:.09; }
  .mcv-ghb-modelcard .stage{ font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:#a70d2a; margin-bottom:10px; position:relative; }
  .mcv-ghb-modelcard h3{ font-size:16.5px; margin-bottom:8px; position:relative; color:#191419; }
  .mcv-ghb-modelcard p{ font-size:13.5px; color:#6d666d; margin:0; line-height:1.55; position:relative; }
  .mcv-ghb-streamlist{ display:flex; flex-direction:column; gap:9px; }
  .mcv-ghb-streamrow{ display:flex; align-items:center; gap:12px; padding:9px 12px; border:1px solid rgba(255,255,255,0.12); border-radius:10px; background:rgba(255,255,255,.03); }
  .mcv-ghb-streamrow .n{ font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:700; color:#ff8090; }
  .mcv-ghb-streamrow .s{ font-size:13px; color:#fff; font-weight:600; }
  @media (max-width:900px){
    .mcv-ghb-aside ul{ grid-template-columns:1fr; }
    .mcv-ghb-flowrow{ grid-template-columns:48px 1fr; gap:16px; }
    .mcv-ghb-flownum{ width:44px; height:44px; font-size:14px; }
    .mcv-ghb-icongrid,.mcv-ghb-cs-grid,.mcv-ghb-modelgrid{ grid-template-columns:1fr; }
    .mcv-ghb-trustgrid,.mcv-ghb-seggrid{ grid-template-columns:1fr 1fr; }
    .mcv-ghb-cs-stats{ grid-template-columns:1fr; }
    .mcv-ghb-cs-stat{ border-right:none; border-bottom:1px solid rgba(11,11,16,0.1); }
    .mcv-ghb-cs-stat:last-child{ border-bottom:none; }
    .mcv-ghb-cs-top,.mcv-ghb-steprow{ flex-direction:column; }
    .mcv-ghb-cs-meta{ text-align:left; }
    .mcv-ghb-chartcard .mcv-ghb-barrow{ gap:10px; }
    .mcv-ghb-chartcard .mcv-ghb-barrow .l{ flex:0 0 104px; font-size:11.5px; }
  }
* + .mcv-ghb-callout{ margin-top:22px; }
.mcv-ghb-cta .mcv-ghb-byline,.mcv-ghb-cta .mcv-ghb-footerbar{ color:#ffffff; }
.mcv-ghb-cta .mcv-ghb-byline .dotsep{ opacity:.65; }
.mcv-ghb-trustband .kicker,.mcv-ghb-pt .kicker{ color:var(--crimson-light); }
.mcv-ghb-cta .kicker{ color:#ffffff; }
.mcv-ghb-cta .mcv-ghb-footermeta{ color:#ffffff; }
@media (max-width:560px){ .mcv-ghb-trustgrid,.mcv-ghb-seggrid{ grid-template-columns:1fr; } }

  .mcv-ghb-seggrid{ grid-template-columns:repeat(3,1fr); }
  @media (max-width:900px){ .mcv-ghb-seggrid{ grid-template-columns:1fr 1fr; } }
  @media (max-width:560px){ .mcv-ghb-seggrid{ grid-template-columns:1fr; } }

    
    
      
        
          
            [Home](/)/[Grubhub Clone](/grubhub-clone/)/Business Model
          
          Grubhub Clone · Business Model
          
# Grubhub Clone Business Model: The Delivery Fee Is the Line You Can Improve

          
Commission is a percentage of somebody else's price. The delivery fee is the only revenue line whose cost side you also control, which makes it the one number on the platform that gets better because you got better. Six lines ship here, and this one is first, because assignment quality, zone density and orders per partner hour move it every single week.

          [Design My Revenue Model →](https://miracuves.com/schedule-consultation/)[See Pricing](/grubhub-clone/development-cost/)
          
            **1** line you control both sides of
            **6** revenue lines built
            **0%** taken by Miracuves
          
        
        
          Better dispatchStraight into margin
          
            Where the Money Comes From
            
              01Delivery fee margin per zone
              02Commission on every order
              03Store subscription plans
              04Customer membership
              05Placement and advertising
              06Service and packaging charges
            
          
        
      
    
  

  
    
      
        6Revenue Lines Available
        3Inputs to Cost per Delivery
        0%Taken by Miracuves
        $2,199One-Time, Fixed
      
    
  

  
    
      
        The Model
        
## Why Cost per Delivery Decides Everything

        
Most delivery businesses fail on a number that no revenue line can rescue.

      
      
A delivery order carries a fixed operational cost that arrives whether or not the order was profitable: a rider is paid for the run, a processor takes a component of a small basket, and somebody answers the phone when it goes wrong. Raising commission is the obvious response and the wrong one, because a higher rate is exactly what makes restaurants leave for the aggregator you were competing with. The number that actually moves is what a delivery costs you to complete, and it is decided by three things: assignment quality, zone density and orders per partner hour.

      
All three are visible in this build rather than inferred. Partners are filtered by zone before assignment so dispatch cost tracks the area rather than the fleet. Every transition writes its own named column, so time-to-assign and time-to-door are queries rather than an analytics project. And delivery pricing is set per zone, so a dense area and a sparse one are not forced to share a fee. That is why the delivery fee margin sits first on this page: it is the line that rewards operational work rather than pricing power.

      
Commission remains the largest line for most operators. The argument is that it is the line you defend, and delivery margin is the line you improve.

    
  

  
    
      
        The Lines
        
## Six Revenue Lines, One You Improve Rather Than Raise

        
Every one of these is built. Which are switched on, and at what rate, is yours.

      
      
        
### Delivery fee margin

The difference between what the customer pays for delivery and what the run costs you, set per zone. Because you control assignment, zone geometry and fleet utilization, this is the only line that improves when you operate better rather than when you charge more, and it is the reason dispatch quality is a commercial subject.

        
### Commission per order

A percentage of every order, set platform-wide or negotiated per restaurant, with each rate frozen onto the transaction at settlement. The largest line for most operators and the one restaurants are most sensitive about, which is exactly why it should not be the lever you reach for when margins are thin.

        
### Store subscription plans

A monthly fee instead of commission, with plans you build and price and the store panel gated by plan entitlement. It suits the restaurant with volume that resents a percentage, and it can run alongside commission for the restaurants that have none yet.

        
### Customer membership

A recurring line carrying free or reduced delivery, which on a delivery-led platform does something beyond revenue: it smooths demand by making repeat ordering feel free at the point of decision, and predictable demand is cheaper to dispatch than spiky demand.

        
### Placement and advertising

Featured positions and promoted campaigns sold to restaurants on surfaces you control and price yourself. A secondary line on a dispatch-led platform, worth opening once a listing page has enough restaurants for position to be worth something.

        
### Service and packaging charges

Per-order charges you configure, including the small fixed lines that are invisible individually and material across volume. On thin delivery economics these are often what turns a marginal order into a positive one, which is also why they need modelling rather than copying.

      
      
Miracuves takes no percentage of any of these and nothing is charged per rider, per restaurant or per delivery. Every efficiency you win on cost per delivery stays entirely with you.

    
  

  
    
      
        Category
        
## How Delivery-Led Operators Actually Earn

        
The shapes that recur, and what each one genuinely requires before it produces anything.

      
      
        
| Approach | What it needs first | Where it breaks |
| --- | --- | --- |
| Delivery fee margin | A tight zone and riders in it | Sparse areas where the run costs more than the fee |
| Commission per order | One restaurant and one customer | Raising it is what sends restaurants to the aggregator |
| Store subscriptions | Restaurants with volume worth a fixed fee | Meaningless before order volume exists |
| Customer membership | Customers ordering more than weekly | Waives the fee on your most improvable line |
| Placement | More restaurants than fit a screen | Nothing to outrank in a thin category |
| Raising the fee to fix margin | Nothing, which is the temptation | Demand falls, density falls, cost per delivery rises |

      
      
The last row is the trap specific to this model. Raising the delivery fee to repair margin reduces order frequency, which reduces density, which raises cost per delivery, which is the number you were trying to fix.

    
  

  
    
      
        Sequence
        
## Monetization Ranked by What You Already Have

        
Density comes before every revenue decision on this list, which is unusual and is the whole argument for dispatch-led thinking.

      
      
        
| What has arrived | What starts earning | Why it works at this point |
| --- | --- | --- |
| A tight zone with riders in it | Delivery fee margin | Priced against local rider cost, measured per zone |
| A first restaurant taking orders | Commission on every order | Frozen at settlement, so the rate can be corrected later |
| Counter and phone trade | Commission on till orders too | The built-in till puts walk-ins in the same books |
| Orders per partner hour rising | Better margin on the same fee | Cycle-time data comes from timestamps you already have |
| Restaurants earning steadily | Subscription plans beside commission | A stored setting, and both can run together |
| A crowded listing page | Placement, then service charges | Position is worth something once there is competition for it |

      
      
Row four is the one no other model has. Your margin improving without any price changing, because the same fee now covers a cheaper run, is the payoff for treating dispatch as the product.

    
  

  
    
      
        The Alternative
        
## What Renting the Dispatch Layer Costs

        
Six costs of running deliveries on somebody else's platform. None of them appear on an invoice.

      
      
        **Efficiency you win, shared**Every improvement to assignment quality lands partly with the platform taking a cut of your delivery revenue. On the one line whose cost side you control, giving away a percentage of the upside removes most of the reason to do the operational work.
        **Measurement you cannot get at**If lateness and cycle time live in somebody else's reporting, you can read summaries and not question them. Named timestamps on your own orders are the difference between managing a fleet and being told how it did.
        **A rider app you cannot change**Your partners judge you daily on an application you cannot modify. When churn is high and the complaint is specific, having the source is the difference between fixing it this month and raising it as a feature request.
        **Assignment logic you cannot tune**How partners are chosen is the mechanism that decides your cost per delivery. Renting it means the single most important operational lever you have is set by somebody whose incentives are not yours.
        **Cash exposure you cannot bound**Ceilings enforced per partner and reconciled against collections are what keep float visible. Where the platform merely permits cash, the exposure is real, growing and invisible until a shift does not balance.
        **History that rewrites itself**Where commission is read live at report time instead of frozen at settlement, changing a rate changes closed months, and no restaurant can reconcile a payout statement against numbers that move.
      
      
Here the delivery application, the dispatch surface, the lifecycle timestamps, the cash controls and the disbursement scheduler all transfer with the source.

    
  

  
    
      
        Priority
        
## Which Lever to Switch On First

        
A launch order that assumes one tight zone, a handful of riders and no density yet.

      
      
        
| Stage | Turn on | Leave off |
| --- | --- | --- |
| Launch week | One tight zone, commission, a delivery fee you can defend | Membership, placement, service charges |
| Weeks two to six | The till, cash ceilings, one disbursement schedule | A second zone before the first is dense |
| Timestamps accumulating | Cycle-time review as a weekly habit | Guessing at lateness from complaints |
| Orders per partner hour rising | Delivery margin retuned, fee unchanged | Raising the fee to repair margin |
| Repeat customers visible | Membership, priced against repeat value | Waiving delivery for customers who order monthly |
| Restaurants earning steadily | Subscription plans, then placement | Selling position with four restaurants listed |

      
      
Row four is the discipline that separates operators. When margin is thin the instinct is to change a price; the platform exists so you can change the run instead.

    
  

  
    
      
        Operators
        
## Three Ways Operators Run This Platform

        
The same deployment with a different revenue emphasis, not three different builds.

      
      
        
          A
          
### The dense-city marketplace

          
One tightly drawn zone where density does the work. Delivery margin and commission carry the model, and the operational habit is watching orders per partner hour rather than watching the revenue line.

          
- A small area with enough restaurants beats a large one
- Cycle time reviewed weekly from the order timestamps
- Cash ceilings tuned per partner as the fleet settles

        
        
          B
          
### The delivery-as-a-service operator

          
A fleet carrying for restaurants that take their own orders, where the delivery fee is close to the whole business. Commission is secondary and dispatch efficiency is the entire margin, which makes the timestamps the most important thing in the platform.

          
- Delivery margin priced per zone against rider cost
- SLA reporting straight from named columns
- Proof of delivery matters commercially, not just operationally

        
        
          C
          
### The multi-category fleet

          
Restaurant orders at the two peaks, and groceries, pharmacy or parcels in the hours between them. The same riders, the same assignment surface and one demand curve instead of two spikes, which is the cheapest way to raise orders per partner hour.

          
- One fleet spread across several categories
- Peaks filled rather than staffed around
- Margins set per category as well as per zone

        
      
      
These are illustrative operator shapes rather than forecasts or observed results. Every rate, fee and plan in the model is one you set yourself.

    
  

  
    
      
        Mistakes
        
## Common Delivery Operator Mistakes

      
      
        
### Five that are expensive to undo

        
**Drawing the first zone generously.** The most common and the most expensive. A wide area looks like more market and behaves like less, because rider time between drops rises faster than order volume, and restaurants signed inside it are hard to un-sign.

        
**Raising the delivery fee to repair margin.** It reduces frequency, which reduces density, which raises the cost per delivery you were trying to fix. The fee is a demand lever, not a margin lever, and treating it as the latter is a spiral.

        
**Recruiting riders before restaurants.** Partners with nothing to deliver leave within a fortnight and tell everyone. Supply on both sides has to arrive close together, and the restaurant side is the one to lead with.

        
**Launching membership early.** Free delivery for your most frequent customers waives the fee on exactly the runs that were paying. It is a good line once you know what a weekly customer is worth over a quarter, and a quiet loss before that.

        
**Ignoring the timestamps for six months.** The data is there from the first delivery. Operators who start reading cycle time in month one improve; operators who wait for a reporting project spend that time guessing which part of the run is slow.

      
      
The first two are the ones we raise on day zero, because both are decided before a single delivery happens and both get harder to reverse every week afterwards.

    
  

  
    
      
        FAQ
        
## Frequently Asked Questions

      
      
        
          
            Why lead with delivery fee margin rather than commission?
            Because it is the only line whose cost side you also control. A commission percentage improves when you charge more, and charging more is what sends restaurants to the aggregator you are competing with. Delivery margin improves when assignment gets better, when the zone gets denser and when orders per partner hour rise, none of which asks anybody to pay you more. On a dispatch-led platform that distinction is the difference between a business that compounds and one that squeezes.
          
          
            How do I set the delivery fee?
            From your own rider cost per hour and the density inside the zone, rather than from what a competitor charges. Draw the area tightly first, run it for a few weeks, and read orders per partner hour from the named timestamps every order already writes. That figure divided into what you pay a rider for that hour gives you a real cost per delivery, and the fee is a decision about how much of it the customer carries. Pricing is set per zone, so a dense area never subsidizes a sparse one.
          
          
            What does the platform actually tell me about performance?
            Time-to-accept, time-to-ready, time-to-assign, time-to-pickup and time-to-door, on any order, from day one. Each transition writes its own named column on the order rather than overwriting a single status field, so cycle time and lateness are queries over data you already hold rather than an analytics project you commission later. That also means an SLA conversation with a restaurant, and a dispute with a partner, are settled from the same record.
          
        
        
          
            Can I run deliveries for restaurants that take their own orders?
            Yes, and it is one of the three common shapes for this platform. Delivery becomes close to the whole business, the delivery fee is close to the whole revenue, and dispatch efficiency is the entire margin. What makes it workable here is that the measurement ships with the data: the named timestamps give you SLA reporting to show the restaurants you carry for, and proof of delivery becomes a commercial artefact rather than only an operational one.
          
          
            Does carrying groceries or parcels help the economics?
            Usually yes, and for a specific reason. Restaurant demand arrives in two narrow windows a day, so a fleet sized for the peak is idle between them. Groceries, pharmacy lines and courier parcels run through the same catalogue, the same riders and the same assignment surface, which fills the hours rather than adding a second fleet. Since orders per partner hour is one of the three inputs to cost per delivery, filling the gaps improves the number without touching a single price.
          
          
            Does Miracuves take a share of delivery revenue?
            No. The price is $2,199 once, and nothing is charged per rider, per restaurant or per delivery. We do not sit between you and your processor, we cannot see your rates, and we take nothing from a payout run. That matters more on this model than on most, because the whole argument here is that operational improvement should land in your margin rather than being shared with the platform you rented.
          
        
      
    
  

  
    
    
      
        
## Model it against your rider cost, not a competitor's fee

Bring what an hour of rider time costs you and how tight your first zone can be. We will work the delivery margin from there and tell you which of the other five lines to leave off.

        [Talk to Our Team](https://miracuves.com/schedule-consultation/)[Full Overview](/grubhub-clone/)
      
    
  

  
    
      
        Explore
        
## Explore the Grubhub Clone

      
      
        [Overview](/grubhub-clone/)
        [Features](/grubhub-clone/features/)
        [Development Cost](/grubhub-clone/development-cost/)
        [Development Company](/grubhub-clone/development-company/)
        [Business Model](/grubhub-clone/business-model/)
      
    
  

  
    
    
      
        
## Every efficiency you win stays yours.

        
Six revenue lines built, one of them improving whenever your dispatch does, inside a platform you own outright with no percentage routed anywhere else.

        [Talk to Us →](https://miracuves.com/schedule-consultation/)
      
      
        
          **Written by the Miracuves Product Team**·
          Reviewed for accuracy·
          Last updated **September 10, 2026**
        
        
          Miracuves · Grubhub Clone Solution
          Revenue lines, rates and stated limitations cross-verified against the hub, 2026-09-10
        
      
    
  

				
				
				
				
						
					
			
						
				
					
  /* MIRACUVES - TRADEMARK / NON-AFFILIATION NOTICE (v3).
     Scoped under .mcv-tmn so it cannot collide with the hub connector (mcv-hubx-, mcv-hubxa-)
     or any block above it. Always the last block on the page, immediately before the footer.
     Structure is deliberate: one plain-language lead people actually read, then the three
     supporting positions split out so each is scannable rather than buried in a paragraph.
     Fonts are declared but not loaded: pages carrying the connector already have them, and the
     fallbacks are deliberate so this block never adds a render-blocking request. */
  .mcv-tmn{ font-family:'Plus Jakarta Sans',Arial,sans-serif; color:#191419; margin:0; padding:0; }
  .mcv-tmn *{ box-sizing:border-box; }
  .mcv-tmn-band{ background:#ffffff; padding:8px 0 76px; }
  .mcv-tmn-wrap{ max-width:1180px; margin:0 auto; padding:0 24px; }
  .mcv-tmn-box{ background:#faf8f8; border:1px solid rgba(11,11,16,0.13); border-left:4px solid #a70d2a; border-radius:12px; padding:34px 38px; box-shadow:0 1px 2px rgba(25,20,25,0.04), 0 10px 30px rgba(25,20,25,0.05); }
  .mcv-tmn-head{ display:flex; align-items:center; gap:11px; margin:0 0 18px; }
  .mcv-tmn-dot{ width:8px; height:8px; background:#a70d2a; transform:rotate(45deg); flex:0 0 auto; }
  .mcv-tmn .mcv-tmn-head span.mcv-tmn-kicker{ font-family:'JetBrains Mono',ui-monospace,monospace; font-size:13px; font-weight:700; letter-spacing:.2em; text-transform:uppercase; color:#a70d2a; }
  .mcv-tmn .mcv-tmn-box p.mcv-tmn-lead{ margin:0 0 24px; font-size:20px; line-height:1.5; font-weight:600; color:#191419; max-width:56ch; letter-spacing:-.01em; }
  .mcv-tmn .mcv-tmn-box b.mcv-tmn-brand{ color:#a70d2a; font-weight:700; }
  .mcv-tmn-cols{ display:grid; grid-template-columns:repeat(3,1fr); gap:26px 36px; padding-top:24px; border-top:1px solid rgba(11,11,16,0.11); }
  .mcv-tmn .mcv-tmn-col span.mcv-tmn-lbl{ display:block; font-family:'JetBrains Mono',ui-monospace,monospace; font-size:10.5px; font-weight:700; letter-spacing:.14em; text-transform:uppercase; color:#8a8085; margin:0 0 8px; }
  .mcv-tmn .mcv-tmn-col p{ margin:0; font-size:14px; line-height:1.7; color:#453d42; }
  .mcv-tmn-foot{ margin-top:26px; padding-top:18px; border-top:1px solid rgba(11,11,16,0.11); }
  .mcv-tmn .mcv-tmn-foot a{ font-family:'JetBrains Mono',ui-monospace,monospace; font-size:12px; font-weight:600; letter-spacing:.04em; color:#a70d2a; text-decoration:none; border-bottom:1px solid rgba(167,13,42,0.32); }
  .mcv-tmn .mcv-tmn-foot a:hover{ border-bottom-color:#a70d2a; }
  @media (max-width:900px){
    .mcv-tmn-cols{ grid-template-columns:1fr; gap:22px; }
    .mcv-tmn .mcv-tmn-box p.mcv-tmn-lead{ font-size:18px; }
  }
  @media (max-width:600px){
    .mcv-tmn-band{ padding:4px 0 48px; }
    .mcv-tmn-box{ padding:26px 22px; border-radius:10px; border-left-width:3px; }
    .mcv-tmn .mcv-tmn-box p.mcv-tmn-lead{ font-size:17px; line-height:1.45; margin-bottom:20px; }
    .mcv-tmn .mcv-tmn-head span.mcv-tmn-kicker{ font-size:12px; letter-spacing:.16em; }
  }

  
    
      
        Disclaimer
        
Miracuves is an independent software development company. We are not affiliated with, connected to, sponsored by, or endorsed by **Grubhub**.

        
          
            Why this name
            
“**Grubhub** Clone” is used descriptively. It is how the software industry refers to building a platform with functionality similar to Grubhub, and how clients search for it.

          
          
            Who built this
            
The entire design and codebase is built by our own team. The product contains no code, design, graphics, or content originating from the Grubhub website or applications.

          
          
            Trademarks
            
**Grubhub** and all other third-party names and marks are the property of their respective owners, referenced here solely to describe the category of software offered.

          
        
        [Read our full Legal Notice & Disclaimer →](/disclaimer/)
