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
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)
| Venue | Domain | Inbox | Phone | Asked on | Per head | Min spend | Total | Deposit | Hold until | Next step |
|---|---|---|---|---|---|---|---|---|---|---|
| Example Brasserie | example-brasserie.co.uk | events@example-brasserie.co.uk | +440000000001 | 2026-10-20 | 45 | 1000 | 1350 | 300 | 2026-10-30 | decide by 2026-10-30 |
| Sample Arms | sample-arms.co.uk | info@sample-arms.co.uk | +440000000002 | 2026-10-15 | chase today | |||||
| Demo Hotel | demo-hotel.co.uk | +440000000003 | call | |||||||
| Test Kitchen | test-kitchen.co.uk | book@test-kitchen.co.uk | 2026-10-21 | 38 | 1500 | 1500 | 500 | 2026-11-02 | decide 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
- Office managers, HR and team leads booking a December party or team dinner for 15 to 100 people.
- Small business owners who want three real quotes before paying a deposit.
- Party committees where several people ring venues and nobody knows who has already asked.
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
}
- Set
defaultCountryto your own country (GB, IN, US, DE...) so local phone numbers without a country code are read correctly. - Keep
includePersonalEmailsandincludePersonProfilesoff. You want the venue's shared events or bookings inbox, not a named person. - Four pages per site (homepage plus the most contact-like pages) is the default and usually finds the events page. You pay only for pages actually fetched; sites skipped because of robots.txt or their terms are not charged.
- Found the venues with a Google Maps scrape on Apify? Put that run's dataset ID in Enrich an Apify dataset (
datasetId) instead of the plain list. The scraper reads each item's website and copies fields such as the venue name and address intosourceItems.
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
| status | Meaning | What to do |
|---|---|---|
ok | Site read | Use the inbox or phone found |
blocked-by-robots | The site asks bots not to crawl | Open its events page yourself, or call |
blocked-by-terms | The site's terms forbid scraping (clause quoted in error) | Same |
blocked-by-tos-list | The "website" is a platform page such as Facebook | Use the platform's own message button, or call |
blocked-by-site, rate-limited, failed | HTTP 401/403/429, too many requests, or unreachable | Retry 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]
- Give two dates. Venues that are full on one often have the other.
- Ask how long they will hold the date. That is the date in Hold until, and it keeps you from losing a good quote while you wait for others.
- Read the cancellation terms before paying a deposit, and check the deposit policy if headcount might drop.
- When you book, tell the venues you did not choose. It frees their date and is good manners for next year.
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
- You have at least three quotes, compared on Total (with minimum spend and service charge), not per head alone.
- The chosen venue's hold date has not passed.
- Deposit, balance due date, final numbers date and cancellation terms are written in the row.
- Dietary needs and access needs for your group have been sent to the venue.
- Venues you did not choose have been told.
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
- Contact scraper input and output fields (
urls,datasetId,maxPagesPerSite,defaultCountry,checkEmailMx,includePersonalEmails,includePersonProfiles;domain,status,emails,phones,socials,sourceItems): Apify Store page (input schema and README)
Related
- Local sponsor and raffle prize ask sheet
- Add emails and phones to a Google Maps scrape
- Get a business website's WhatsApp and social links
Unadhi Guides are free, independent explainers. We correct errors as soon as we find them: write to mininglife7@gmail.com.