Pour Friend

no inventory sources yet
local only

Where the money sits —

Program health

Value by category

Vendor concentration (top 8)

Pour cost watchlist est. COGS > 25%

spirits: 2 oz pour vs pour price · wine & beer: unit cost vs list price

House prep & ingredients —

Syrups, juices, cordials — anything made or broken down in-house. Just the item and its cost per ounce; it shows up in the drink-costing search tagged house prep. Each establishment keeps its own list.

Ingredient$ per oz

need the number? batch cost ÷ batch yield in oz (1 L = 33.8 oz, 750 ml = 25.4 oz)

Connected sources —

Each establishment can pull from any number of inventory sheets. The parser reads almost any layout — it finds the header row, figures out which columns are item, quantity, cost, size, pour price, vendor and category, and you can correct it in the mapping editor if it guesses wrong. Mappings are remembered per sheet.

Add from Google Drive

Sign in (top right), then paste the URL of any Google Sheet you can view. It will re-sync on demand.

Or upload a file

Works signed out. Excel (.xlsx) or CSV — drop it here or click to choose.

Drop an inventory file, or click to browse

Starter kit

New venue or messy spreadsheet? Start from the blank templates that ship with this console — inventory-template.xlsx and costing-template.xlsx. They use headers the parser recognizes instantly, but any sheet with item, quantity, and cost columns will work.

Your account

Advanced — fork this app under your own Google project

This copy is preconfigured: sign-in works out of the box on its registered domains. You only need the steps below if you're hosting your own fork and want it tied to your own Google Cloud project.

  1. Host the file at a real URL (sign-in can't run from a file:// path or chat preview).
  2. Go to console.cloud.google.com → create a project → APIs & Services.
  3. Enable the Google Sheets API and Google Drive API.
  4. Configure the OAuth consent screen (External; add your users as test users to start).
  5. Create Credentials → OAuth Client ID → Web application, with your URL under Authorized JavaScript origins.
  6. Paste the Client ID below — it overrides the built-in one on this device. Clear it to revert.

How your data is protected

  • No shared database. There is no server behind this app. Each account's establishments, menus, and mappings are saved to that user's own Google Drive, in a hidden application-data folder only this app can see. One user can never read another's data.
  • Google handles authentication. Sign-in uses Google's OAuth 2.0 — no passwords are created, stored, or transmitted by this app.
  • Least-privilege scopes. The app asks only for read access to spreadsheets and its own app-data folder. It cannot see your email contents, other Drive files, or anything it didn't create.
  • Tokens stay in memory. Access tokens are never written to disk and expire after about an hour; you re-approve silently on return.
  • Everything runs in your browser. Inventory data goes from Google's APIs straight to your screen. Nothing is sent to any third party.
  • Signed out = this device only. Without sign-in, work is stored locally on this device and labeled accordingly.
Honest limitations

Until you verify the OAuth consent screen with Google, users outside your test list will see an "unverified app" warning. A static page can't enforce roles or audit logs — if you later need shared team data with permissions, that's the point to add a small backend (or a Google Apps Script web app). And anyone with edit access to a connected Google Sheet can change the costs it feeds in, so guard the sheets themselves with Drive permissions.