Unadhi Guides

Supplier bank details changed? A call-back sheet that checks every supplier's phone and email on file against the supplier's own website, and logs each change request before you pay

Updated 22 Oct 2026 · Disclosure: the contact details scraper linked below is an Unadhi product on the Apify Store. This guide is free, and the call-back log and checks work without it if you type the website details in by hand. Current Apify pricing is only on the Store page. This page has no affiliate links and nobody paid to be mentioned. This is general information, not legal or banking advice.

What you get: one Google Sheet that protects your supplier payments from "our bank details have changed" emails (called mandate fraud, payment diversion fraud or business email compromise). The suppliers tab has one row per supplier: the phone number and email you hold on file, next to the phone numbers and shared mailboxes the supplier publishes on its own website, with a plain-English flag on every row where they disagree (phone on file not on website, email on file is on a different domain, contact changed recently, website could not be read). You clean up those rows before a change request arrives. The change requests tab is the call-back log: every request to change bank details gets one row, and the verdict column says "Do not pay yet" until someone has called a number from your own records, read the details back, and a second person has approved. Formulas are below. The example rows are made up.

The finished sheet

suppliers tab (example rows are made up)

SupplierWebsite domainPhone on fileEmail on filePhones on supplier websitePhone checkEmail checkStatus
Northfield Packagingnorthfield-packaging.example+44 20 7946 0123accounts@northfield-packaging.example+442079460123 +442079460456On websiteSame domainReady
Bright Print Cobrightprint.example07700 900321brightprint.accounts@gmail.example+442079460789Not on websiteDifferent domainCheck before next payment
Coastline Freightcoastline-freight.example+44 20 7946 0999billing@coastline-freight.examplenot scraped (blocked-by-robots)Same domainCheck by hand

change requests tab (example row is made up)

ReceivedSupplierSender addressSender domainNumber calledWhere the number came fromDetails read backSecond approverVerdict
21/10/2026Bright Print Coaccounts@brightprlnt.exampleNot the supplier's domainDo not pay yet

The Bright Print row shows why the suppliers tab matters: its email on file is a free-mail address and its phone on file is a mobile that the supplier's website does not list. If a "new bank details" email comes from a look-alike domain (brightprlnt with an L instead of an i), the team should call the website-listed switchboard and ask for accounts, not the mobile on file, and certainly not a number in the email.

Who this is for

Small businesses that pay suppliers by bank transfer, and the bookkeepers, accountants and outsourced finance teams who run payments for them. UK police guidance says a request to change a supplier's bank account is unusual and should be treated with suspicion, and every official source below gives the same core rule: verify the change by calling the supplier on contact details you already hold, never on details in the request. That rule only works if the contact details you hold are right. NHS Counter Fraud guidance warns that fraudsters may first ask you to amend the contact details on file, as a step before the bank-detail change. This sheet checks your file against a second, independent source: what each supplier publishes on its own website.

Step 1: list your suppliers

Export your supplier list from your accounting software (most have a contacts or suppliers export to CSV) and paste it into a tab named suppliers with these headers in row 1:

ColHeaderWhat goes in it
ASupplierName as in your accounts
BWebsite domainThe supplier's own website, without https:// or www., for example northfield-packaging.example. Take it from a past invoice or contract you already trust, not from a new email.
CPhone on fileThe number your payments team would call today
DEmail on fileThe address remittances and invoices come from
EContact last changedDate the phone or email on file was last edited (blank if never)

Start with the suppliers you pay most, or most often. Those are the ones worth a fraudster's time.

Step 2: read each supplier's own website

With the contact details scraper

Open the Contact Details Scraper on the Apify Store, paste column B into the plain list field and run it with this input:

{
  "urls": ["northfield-packaging.example", "brightprint.example", "coastline-freight.example"],
  "maxPagesPerSite": 4,
  "checkEmailMx": true,
  "defaultCountry": "GB"
}

Export the run's dataset as CSV and import it into the same Google Sheet as a new tab named scrape (File → Import → Upload → Insert new sheet). Do not rename headers. You get columns such as domain, status, phones/0/phone, phones/1/phone, emails/0/email, emails/0/mxValid and phones/0/foundOn.

Free, by hand

For a handful of suppliers, open each website yourself (type the address; do not click a link in an email), copy the main phone number and accounts mailbox from the contact page into a scrape tab with the same three headers domain, phones/0/phone and emails/0/email, and the formulas below work unchanged.

Step 3: the check columns on the suppliers tab

Add these headers in F1 to J1 and the formulas in row 2, then copy down.

F2 (Phones on supplier website):
=IF(B2="", "", IFERROR(LET(h, scrape!$A$1:$ZZ$1,
   r, MATCH(LOWER(B2), INDEX(scrape!$A$2:$ZZ, 0, MATCH("domain", h, 0)), 0),
   st, INDEX(scrape!$A$2:$ZZ, r, MATCH("status", h, 0)),
   p, TEXTJOIN(" ", TRUE, FILTER(INDEX(scrape!$A$2:$ZZ, r, 0), REGEXMATCH(h, "^phones/\d+/phone$"))),
   IF(AND(st<>"", st<>"ok"), "not scraped ("&st&")", p)), "not scraped"))

G2 (Mailboxes on supplier website):
=IF(B2="", "", IFERROR(LET(h, scrape!$A$1:$ZZ$1,
   r, MATCH(LOWER(B2), INDEX(scrape!$A$2:$ZZ, 0, MATCH("domain", h, 0)), 0),
   TEXTJOIN(" ", TRUE, FILTER(INDEX(scrape!$A$2:$ZZ, r, 0), REGEXMATCH(h, "^emails/\d+/email$")))), ""))

H2 (Phone check):
=IF(OR(C2="", F2="", LEFT(F2, 11)="not scraped"), "",
   IF(REGEXMATCH(REGEXREPLACE(F2, "[^0-9 ]", ""), RIGHT(REGEXREPLACE(C2, "[^0-9]", ""), 9)),
      "On website", "Not on website"))

I2 (Email check):
=IF(OR(D2="", B2=""), "", IF(REGEXMATCH(LOWER(D2), "@([a-z0-9-]+\.)*"&REGEXREPLACE(LOWER(B2), "\.", "\\.")&"$"),
   "Same domain", "Different domain"))

J2 (Status):
=IF(A2="", "", IF(LEFT(F2, 11)="not scraped", "Check by hand",
   IF(OR(H2="Not on website", I2="Different domain", AND(E2<>"", TODAY()-E2<=90)),
      "Check before next payment", IF(H2="", "Check by hand", "Ready"))))

Step 4: the change requests tab (the call-back log)

Every request to change a supplier's bank details, or to pay a new account, gets one row before anything is changed in your accounting or banking software. Headers in row 1:

ColHeaderEntry
AReceivedDate
BSupplierExactly as in the suppliers tab (use a drop-down: Data → Data validation → Dropdown from a range → suppliers!A2:A)
CSender addressThe full address the request came from (open the sender details; display names can be faked)
DSender domainFormula below
ENumber calledThe number you rang
FWhere the number came fromDrop-down: Our records (suppliers tab), Supplier website, typed in by us, The request itself
GDetails read backDrop-down Yes / No: you read the old and the new account details back to the supplier on the call, and they confirmed the change
HSecond approverName or initials of a second person who approved the change
ITest payment confirmedFor large payments: Yes once a small first payment has been confirmed by the supplier, or N/A
JVerdictFormula below
D2: =IF(C2="", "", LET(d, LOWER(REGEXEXTRACT(C2, "@(.+)$")),
      w, LOWER(IFERROR(VLOOKUP(B2, suppliers!$A:$B, 2, FALSE), "")),
      IF(w="", "Supplier not in list",
         IF(REGEXMATCH(d, "(^|\.)"&REGEXREPLACE(w, "\.", "\\.")&"$"), "Supplier's domain", "Not the supplier's domain"))))

J2: =IF(A2="", "",
      IF(F2="The request itself", "Stop: call a number from your records",
      IF(AND(E2<>"", OR(F2="Our records (suppliers tab)", F2="Supplier website, typed in by us"),
             G2="Yes", H2<>"", I2<>""), "OK to change", "Do not pay yet")))

If money has already gone

Call your bank straight away and ask them to contact the receiving bank and try to recall the payment. Then report it: in the UK to Report Fraud on 0300 123 2040 or online; in the US to the FBI's IC3 at ic3.gov; elsewhere to your national police cyber-crime or fraud reporting service. Note the time of each call in the change requests tab.

Honest notes

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.