Unadhi Guides

Corporate gift order prospect sheet for small gift makers: each company's purchase, HR or admin inbox, an order-by date and a follow-up tracker for Christmas and New Year

Updated 26 Oct 2026 · Disclosure: the website contact scraper linked below is an Unadhi product on the Apify Store. This guide is free, and the sheet also works if you copy inboxes from company contact pages 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 a small corporate gift business (gift boxes, sweets, cakes, hampers, printed merchandise) with one row per company you want to offer Christmas or New Year gifts to. Each row shows the best shared inbox the company publishes on its own website (purchase or procurement first, then HR, admin or office, then a general inbox), the company phone and WhatsApp link if listed, a Next step column, an Order by date worked back from your own delivery date and lead time, a follow-up date and a Send? column that stops you writing to anyone who said no. Formulas are below. The example rows are made up.

The finished sheet

gifts tab (example rows are made up)

DomainStatusBest inboxInbox typeNext stepDeliver byOrder byPitched onFollow up onSend?
acmetech.exampleokprocurement@acmetech.examplePurchaseSend offer to purchase inbox18 Dec 20264 Dec 20262 Nov 20269 Nov 2026Wait
brightclinic.exampleokhr@brightclinic.exampleHRSend offer to HR inbox (staff gifts)18 Dec 20264 Dec 2026Ready
riverlogistics.exampleokinfo@riverlogistics.exampleGeneralGeneral inbox: ask who buys staff or client gifts18 Dec 20264 Dec 2026Ready
bigbank.exampleblocked-by-termsSkipped: open the site's contact page yourself18 Dec 20264 Dec 2026Ready
studiojane.exampleokhello@studiojane.exampleGeneralGeneral inbox: ask who buys staff or client gifts18 Dec 20264 Dec 2026NO: UK sole trader, consent first

Lead time in the example is 10 working days; use your own. Christmas Day 2026 and New Year's Day 2027 are both Fridays, so many offices hand out gifts in the week before.

Who this is for

It is not for buying a mass email list. A short list of companies near you that you can actually deliver to gets more replies, and it keeps each message relevant.

Step 1: list the companies in a tab named sites

ColumnWhat to put
A CompanyName, for example "Acme Tech"
B WebsiteThe homepage, for example https://www.acmetech.example
C TypeCorporate (a company, LLP or other body with its own legal identity) or Sole trader (a one-person business or an ordinary partnership). This matters for UK companies in Step 5.
D Staff (approx.)Optional. A rough headcount helps you size the offer (for example a box per employee).

Put two settings at the top of a tab named settings: in B1 your deliver-by date (for example 18/12/2026) and in B2 your lead time in working days (how long you need from a confirmed order to delivery, for example 10).

Step 2: run the contact scraper on the websites

Open the website contact scraper on the Apify Store and paste column B into urls (one per line). What it does with the default settings, as written in the Actor's input schema and code on 26 October 2026:

When the run finishes, export the dataset as CSV, then in your sheet use File → Import → Upload, "Insert new sheet", and rename it scrape. Nested fields become headers like emails/0/email, emails/1/email, phones/0/phone and socials/whatsapp/0/url, so the formulas below find columns by header name, not by position.

Free route

For 10 or 20 companies, open each website's contact page and copy the inboxes into a scrape tab with the headers domain, status (type ok) and emails/0/email, emails/1/email and so on. The formulas work the same.

Step 3: build the gifts tab

Create a tab named gifts, put these headers in row 1 and these formulas in row 2, and fill down as many rows as scrape has.

ColHeaderFormula (row 2)
ADomain=IFERROR(INDEX(scrape!$A2:$ZZ2, MATCH("domain", scrape!$A$1:$ZZ$1, 0)), "")
BStatus=IFERROR(INDEX(scrape!$A2:$ZZ2, MATCH("status", scrape!$A$1:$ZZ$1, 0)), "")
CAll inboxes=IFERROR(TEXTJOIN(", ", TRUE, FILTER(scrape!$A2:$ZZ2, REGEXMATCH(scrape!$A$1:$ZZ$1, "^emails/\d+/email$"))), "")
DPurchase inbox=IFERROR(REGEXEXTRACT(", "&C2, ", ((?:purchase|procurement|tenders)(?:[.\-_][a-z0-9]+)?@[^,]+)"), "")
EHR / admin inbox=IFERROR(REGEXEXTRACT(", "&C2, ", ((?:hr|admin|office|corporate|events|reception)(?:[.\-_][a-z0-9]+)?@[^,]+)"), "")
FGeneral inbox=IFERROR(REGEXEXTRACT(", "&C2, ", ((?:info|contact|hello|enquiry|enquiries|mail|general)(?:[.\-_][a-z0-9]+)?@[^,]+)"), "")
GBest inbox=IF(D2<>"", D2, IF(E2<>"", E2, F2))
HInbox type=IF(D2<>"", "Purchase", IF(REGEXMATCH(E2, "^hr"), "HR", IF(E2<>"", "Admin", IF(F2<>"", "General", ""))))
IPhone=IFERROR(INDEX(scrape!$A2:$ZZ2, MATCH("phones/0/phone", scrape!$A$1:$ZZ$1, 0)), "")
JWhatsApp=IFERROR(INDEX(scrape!$A2:$ZZ2, MATCH("socials/whatsapp/0/url", scrape!$A$1:$ZZ$1, 0)), "")
KNamed inboxes dropped=IFERROR(INDEX(scrape!$A2:$ZZ2, MATCH("personalEmailsDropped", scrape!$A$1:$ZZ$1, 0)), 0)
LNext step=IFS(B2<>"ok", "Skipped ("&B2&"): open the site's contact page yourself", H2="Purchase", "Send offer to purchase inbox", H2="HR", "Send offer to HR inbox (staff gifts)", H2="Admin", "Send offer to admin inbox", H2="General", "General inbox: ask who buys staff or client gifts", I2<>"", "No inbox found: call the office number", TRUE, "No inbox found: use the site's contact form")
MType=IFERROR(INDEX(sites!$C:$C, MATCH("*"&A2&"*", sites!$B:$B, 0)), "")
NDeliver by=settings!$B$1 (overwrite on any row where the company asks for a different date)
OOrder by=IF(N2="", "", WORKDAY(N2, -settings!$B$2))
PPitched onType the date you sent the offer
QFollow up on=IF(P2="", "", MIN(WORKDAY(P2, 5), WORKDAY(O2, -3)))
RReplyType: Ordered / Sample asked / Not this year / No
SDo not contactType Y the moment anyone asks you to stop or replies "No"
TSend?=IFS(S2="Y", "NO: do not contact", M2="Sole trader", "NO: UK sole trader, consent first", R2<>"", "Done: "&R2, AND(O2<>"", TODAY()>O2), "Too late for this date", P2="", "Ready", TODAY()>=Q2, "Send one follow-up", TRUE, "Wait")

Notes on the formulas:

Step 4: the plan tab

Add a tab named plan. In A1: =QUERY(gifts!A2:T, "select T, count(A) where A is not null group by T order by count(A) desc label T 'Send?', count(A) 'Companies'", 0). Filter gifts on column T to Ready and work those rows first, sorted by Order by.

A short offer that works: what the gift is (with one photo or a link to it), price per box at two or three quantities, the last order date from column O, delivery area, and one line saying they can reply "no" and you will not write again.

Step 5: check before you send

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.