Unadhi Guides

Office Christmas party venue sheet: nearby restaurants' and venues' events inboxes and phones, with quote per head, deposit and the date they hold it until

Updated 22 Oct 2026 · Disclosure: the contact scraper linked below is an Unadhi product on the Apify Store. This guide is free, and the sheet works with a CSV from any tool or by copying contacts by hand. Current Apify pricing is only on the Store page. This page has no affiliate links and nobody paid to be mentioned.

What you get: one Google Sheet for booking your team's Christmas or year-end party with one row per venue you might book (restaurants, pubs, hotels, function rooms): its website, the events or bookings inbox and phone it publishes on its own site, a ready wa.me link where it has one, the date you asked, the quote per head, the total for your headcount, the deposit and the date the venue needs an answer by. A Next step column (ask now / call / chase today / decide by ... / booked / no) and a compare tab that ranks the quotes inside your budget. Formulas are below. The example rows are made up.

The finished sheet

venues tab (example rows are made up)

VenueDomainInboxPhoneAsked onPer headMin spendTotalDepositHold untilNext step
Example Brasserieexample-brasserie.co.ukevents@example-brasserie.co.uk+4400000000012026-10-2045100013503002026-10-30decide by 2026-10-30
Sample Armssample-arms.co.ukinfo@sample-arms.co.uk+4400000000022026-10-15chase today
Demo Hoteldemo-hotel.co.uk+440000000003call
Test Kitchentest-kitchen.co.ukbook@test-kitchen.co.uk2026-10-2138150015005002026-11-02decide by 2026-11-02

Headcount 30 in these rows. Test Kitchen's total is its minimum spend, because 30 × 38 = 1,140 is below it.

Who this is for

Popular December dates go early, and most venues send their party menus to an events inbox rather than the general one. The slow part is finding that inbox for every venue and then comparing quotes that are written in different ways (per head, minimum spend, deposit, service charge). This sheet does both.

Step 1: list the venues (tab list)

Columns: A venue, B website. Start with ten to twenty places within easy travel of the office that can seat your group. In C2, turn the websites into domains:

=ARRAYFORMULA(IF(B2:B="",,LOWER(REGEXREPLACE(REGEXREPLACE(TRIM(B2:B),"^(https?://)?(www\.)?",""),"[/?#].*$",""))))

That turns https://www.Example-Brasserie.co.uk/christmas into example-brasserie.co.uk, the same form the scraper writes in its domain field, so it is the key the formulas join on. Venues with no website go straight to call.

Step 2: get each venue's public inbox and phone (tab scrape)

With the contact scraper

Open the Website Contact Scraper: Emails, Phones & WhatsApp on the Apify Store, paste column C into Websites or domains (plain list) and use this input (JSON tab):

{
  "urls": ["example-brasserie.co.uk", "sample-arms.co.uk", "demo-hotel.co.uk"],
  "maxPagesPerSite": 4,
  "defaultCountry": "GB",
  "checkEmailMx": true,
  "includePersonalEmails": false,
  "includePersonProfiles": false
}

When the run finishes, export the dataset as CSV, then in your sheet use File → Import → Upload, "Insert new sheet", and name the tab scrape. Keep the headers. Apify flattens lists into numbered columns such as emails/0/email, emails/1/email, phones/0/phone and socials/whatsapp/0/url; the formulas find them by header name, so column order does not matter.

Free, without the scraper

Make a scrape tab with the headers domain, status, emails/0/email, emails/1/email, phones/0/phone and socials/whatsapp/0/url, open each venue's contact or events page and type what you see, with ok in status. Slower, but the same formulas work.

Step 3: pick the events inbox, not the general one

A venue site often shows two or three addresses. Put the first two found in hidden helper columns M and N with this lookup (change only the header in quotes):

=IFERROR(INDEX(scrape!$A:$ZZ,
  MATCH($B2, INDEX(scrape!$A:$ZZ, 0, MATCH("domain", scrape!$1:$1, 0)), 0),
  MATCH("emails/0/email", scrape!$1:$1, 0)), "")

with emails/1/email in N. Then the Inbox in C2 prefers an address that looks like an events or bookings inbox:

=IF(REGEXMATCH(N2, "(?i)^(events?|party|parties|functions?|private|groups?|bookings?|reservations?)@"), N2, M2)

Phone in D2 uses the same lookup with phones/0/phone. For WhatsApp, look up socials/whatsapp/0/url in a column O. If C and D are both empty, check status in the table below.

Step 4: the quote columns

Type what each venue sends you: Asked on (E), Per head (F), Min spend (G, blank if none), Deposit (I) and Hold until (J, the date the venue holds the date for you). Put your headcount in a cell called Headcount (Data → Named ranges) and your budget in Budget.

Total in H2, the higher of per-head cost and minimum spend:

=IF(F2="", "", MAX(F2*Headcount, N(G2)))

If a venue adds a service charge, add a column P Service % and use =IF(F2="", "", MAX(F2*Headcount, N(G2))*(1+N(P2))) so quotes are compared like for like.

Next step in K2 (add column L Answer: booked, no or blank):

=IF(A2="", "",
 IF(L2="booked", "booked", IF(L2="no", "no",
 IF(E2="", IF(AND(C2="", D2=""), "call", "ask now"),
 IF(F2="", IF(TODAY()-E2>=3, "chase today", "wait"),
 IF(J2="", "ask how long they hold the date",
 IF(J2<TODAY(), "hold expired: ask again", "decide by " & TEXT(J2, "yyyy-mm-dd"))))))))

Three days is the chase point because December dates move fast; change it to suit.

Step 5: the compare tab

One formula lists every quoted venue inside budget, cheapest first:

=SORT(FILTER({venues!A2:A, venues!H2:H, venues!I2:I, venues!J2:J},
  venues!H2:H<>"", venues!H2:H<=Budget, venues!L2:L<>"no"), 2, TRUE)

Add =COUNTIF(venues!E2:E, "<>") for venues asked and =COUNT(venues!F2:F) for quotes received, so you can see when you have the three quotes you need to decide.

What the status values mean

statusMeaningWhat to do
okSite readUse the inbox or phone found
blocked-by-robotsThe site asks bots not to crawlOpen its events page yourself, or call
blocked-by-termsThe site's terms forbid scraping (clause quoted in error)Same
blocked-by-tos-listThe "website" is a platform page such as FacebookUse the platform's own message button, or call
blocked-by-site, rate-limited, failedHTTP 401/403/429, too many requests, or unreachableRetry later, or call

The enquiry that gets a full quote back

Ask for everything you need to compare in one message, so the venue answers once:

Subject: Christmas party enquiry: 30 people, Fri 11 Dec or Thu 17 Dec

Hello,

We're looking for a venue for our team Christmas party: about 30 people,
evening, Friday 11 December or Thursday 17 December (either works).
Could you send:

1. Your party menu and price per head
2. Any minimum spend, room hire or service charge
3. The deposit, and when the balance and final numbers are due
4. Your cancellation terms
5. How long you can hold the date for us

Thank you,
[Name], [Company], [phone]

This is a customer asking for a quote, not marketing, so it is fine to email a venue's published bookings inbox. Keep the sheet to what the booking needs and share it only with the people organising.

Check before you book

Partner programme opening soon

Partner programme opening soon: join the free waitlist. Planned terms are 50% of each referred sale (75% once you have 5+ paying customers), single level, paid through Gumroad only from revenue received.

Sources

Related

← All guides

Unadhi Guides are free, independent explainers. We correct errors as soon as we find them: write to mininglife7@gmail.com.