❌

Normal view

There are new articles available, click to refresh the page.
Today — 29 October 2026Coinmonks

How to Verify Someone Really Works for a Company: 13 Checks

29 October 2026 at 02:48

Scammers can copy a name, a logo and a job title in a minute. A few checks you can run yourself show whether a “support agent”, recruiter or business partner is real.

A message lands on Telegram: “Hi, I’m Daniel from the security team at your exchange. We saw a login from a new device. Please confirm your wallet so we can protect your funds.” The profile photo shows the company logo. The English is good. Daniel is patient, and he knows your username.

Daniel does not work at the exchange. He works for a scam crew, and the “confirm your wallet” link empties your wallet.

People reported losing $3.5 billion to imposter scams in 2025, and nearly $1 billion of that went to people pretending to be a business, according to the FTC’s June 2026 report. The FBI’s figure for crypto is bigger. Victims told its Internet Crime Complaint Center they lost $11.4 billion to crypto-related crime in 2025, more than half of all the losses it counted that year (IC3 2025 report).

A lot of those losses started the same way. Someone claimed to work for a company, and the victim took their word for it. Some victims did not know how to check. Others saw a familiar name, a logo and a confident tone, and felt no need.

The checks run from a 30-second test to reading the hidden part of an email. If you only have time for two, use the first and the tenth: both are free, and both are very hard for a scammer to fake.

The one rule behind every check

Never use the contact details a stranger gives you to check that stranger.

If “Daniel” sends you a phone number, a website or an email address and says “contact us here to confirm”, all three belong to Daniel. Calling the number he gave you only proves that Daniel answers his own phone.

Every check in this list works the same way. You find the company’s official channel yourself, from a source the stranger did not hand you. Then you ask that channel whether the person is real.

Why people skip the check

It looks official, so we assume it is. A logo, a job title and a company name take a minute to copy. Real staff photos sit on LinkedIn and on company “Team” pages for anyone to download.

They already know something about us. Your username, your last order or the exchange you use is often public, or leaked in a data breach. Knowing those details says nothing about who the sender is.

There is a clock. “Your account will be frozen in 30 minutes.” The deadline is there to stop you checking. A real company will still exist after you spend ten minutes confirming.

The more urgent the message, the slower you should move.

13 ways to check that someone works for a company

1. Contact the company yourself, through its official website

Type the company’s address into your browser by hand, or use a bookmark you saved earlier. Skip links in the message and skip search ads, because scammers buy ads for fake support pages. Find the support page or contact form and ask: “Someone called Daniel, Telegram @daniel_sec_team, says he works on your security team and contacted me today. Is that real?”

Example. A “recruiter” emails about a job at a well-known firm. You open the firm’s careers page from a bookmark. The role is not listed, and the HR address on the page is another one. The recruiter does not work for the firm.

The catch is speed. If support takes two days to reply, wait two days, and do nothing the stranger asks in the meantime.

2. Use the company’s own checking tool

Many crypto exchanges now run a page where you paste a username, email, phone number or link, and it tells you whether the contact is official. Three examples:

  • Binance Verify at binance.com/en/official-verification checks domains, email addresses, phone numbers and social handles, Telegram included. Binance says anyone who claims to work with Binance and cannot be confirmed there should be treated as untrusted.
  • OKX has a channel verification page in its Help Center. OKX says to type the “@” before a username, or the result can be wrong.
  • KuCoin runs an Official Verification Center at kucoin.com/cert. It checks emails, Telegram IDs, X accounts, websites and official wallet addresses.

Example. “Binance support” adds you on Telegram as @BinanceSupportDesk. You paste the handle into Binance Verify, and it comes back as not official. Block the account and report it.

Reach these tools by typing the exchange’s main address yourself and looking in its Help Center for “verify” or “official channel”. If the stranger sends you a link to a “checking tool”, that link is the trap.

A tool can confirm that an address belongs to the company. It cannot confirm that an email really came from that address, because the From line can be forged. Bybit’s own help page warns about this. For email, add check 5.

3. Ask them to message you from the company’s official X account

Ask the person to prove it on a channel only the company controls. Better still, contact that channel yourself. Here is a message you can send:

“Before I continue, please send me a DM from @ExampleExchange, the official account, confirming you work there and what this is about. Or I can DM that account and ask.”

A real employee will say “sure” or send you to the official support channel. A scammer will make excuses: “That account is for marketing only”, “our team can’t access it”, “this is confidential.” Each of those excuses means the person cannot prove it.

Make sure you have the right official account. Open it from a link on the company’s own website, since search results can show copycat accounts. It should have years of posts and the follower count you would expect.

Then look for X’s affiliate badge. Companies that pay X to verify their brand can link their staff accounts. An affiliated employee shows a small copy of the company’s profile picture next to their name, and tapping it opens the company’s account. A plain blue tick on a personal account says nothing about employment, because anyone can buy one.

Official accounts do get hacked. If the official account suddenly DMs you first with a link, treat that as suspicious too. Most companies never start private conversations about your account.

4. Ask for an email from the company domain, then read that domain letter by letter

A real employee can email you from a work address in a minute. Ask for it. A recruiter or “partner” who only uses Gmail, Outlook.com, Telegram or WhatsApp fails this test.

Then read the address slowly. Say the real company is Example Exchange at example.com. Each of these addresses is fake:

  • support@examp1e.com (the digit 1 in place of the letter l)
  • hr@exarnple.com ("rn" looks like "m" in many fonts)
  • security@example-support.com (an extra word added to the name)
  • team@example.co (the wrong ending)
  • alerts@example.com.account-check.net (the real domain is account-check.net, read from the right)
  • help@exаmple.com (the "а" is a Cyrillic letter that looks the same as the Latin one)

Two more things to check in the same email:

  • The display name can say anything. “Example Exchange Security” might sit on top of x7k2@mail-ru.biz. Click or tap the name to see the real address.
  • The Reply-To can differ. An email can arrive from an address that looks right and still send your reply to a stranger. Hit reply and look at the “To” field before you type.

A correct domain is a good start. On its own it can still be forged, which is why check 5 comes next.

5. Check the email’s sign-in results (SPF, DKIM and DMARC)

Every email carries test results that show whether it really came from the domain in the From line. Your inbox runs these tests already. You just have to look.

In Gmail, open the email, click the three dots and choose “Show original”. In Outlook, open the message, then More actions, View, “View message source”. In Apple Mail, choose View, Message, Raw Source.

Find the line that starts with Authentication-Results. A real email from example.com looks like this:

dkim=pass header.d=example.com; spf=pass smtp.mailfrom=example.com; dmarc=pass header.from=example.com

In plain words:

  • SPF pass means the server that sent the email is on the domain’s approved list.
  • DKIM pass means the email carries the domain’s digital signature, and nobody changed the message on the way.
  • DMARC pass means at least one of those two tests passed for the same domain you see in the From line. This is the result to read first.

Warning signs: dmarc=fail, spf=fail, dkim=none, or a pass for some other domain, such as dkim=pass header.d=bulk-mailer-7.net on an email that claims to be from example.com.

Example. An email from “security@example.com” asks you to reset your password. Gmail’s “Show original” says dmarc=fail header.from=example.com. The From line is forged. Delete the email.

A DMARC pass means the email left a mail system the company approved. A hacked staff mailbox passes too, and forwarded emails sometimes fail SPF while being genuine. Treat the result as strong evidence and combine it with the other checks.

6. Paste the raw email into an AI chatbot and ask it to find the tricks

Raw email source is hard to read. A chatbot such as ChatGPT, Claude or Gemini can read it for you and point at the parts that look wrong.

  1. Open “Show original” (or “View message source”) as in check 5 and copy everything.
  2. Remove your own details first: your email address, name, phone number, account numbers and any codes. Replace each with “[removed]”.
  3. Paste the text into the chatbot with a prompt like this one.

“Below is the raw source of an email, including headers and HTML. I think it may be a phishing email pretending to be from example.com. Please check: (1) Do SPF, DKIM and DMARC pass, and for which domain? (2) Does the From address match the Return-Path and Reply-To? (3) List every link in the HTML and show where it really points, compared with the text shown to me. (4) Are any domains lookalikes of example.com? (5) Anything else suspicious? Quote the exact lines you rely on.”

AI is good at this job. It will catch a link whose visible text says https://example.com/login while the code behind it points to https://example-com.login-verify.app, and it spots lookalike domains and hidden text far faster than most people do.

Example. You paste a “your withdrawal is on hold” email. The chatbot lists four links. Three go to example.com. The “Release funds” button goes to a domain nobody at the company owns, and that button is the scam.

Chatbots also make mistakes in both directions. An email that “looks fine” to a chatbot can still come from a hacked real account. Make it quote the lines it relies on, then check those lines yourself. Never paste passwords, seed phrases or one-time codes into any chatbot.

7. Hover over links and check when the domain was registered

Before you click anything, hover over the link on a computer, or press and hold it on a phone, to see the real address. Read the domain from the right, as in check 4.

Then look up when the domain was created. Paste it into the ICANN lookup and check the “Created” date. A company that has existed for ten years does not send security alerts from a domain registered last Tuesday.

Example. A “partnership manager” from a known crypto project emails from bd@exampleprotocol-team.com. ICANN lookup shows the domain was created nine days ago. The project's real site has used a different domain since 2021.

A brand-new domain is a strong warning sign. An old domain proves less, because some scam domains sit unused for months before they are used.

8. Check their LinkedIn the right way

A LinkedIn profile is easy to fake. A good fake still leaves gaps you can spot.

  • Look for LinkedIn’s workplace check. LinkedIn lets members confirm their current employer, most often with a code sent to their work email, and the result shows on the profile. It confirms the company only. The job title is unchecked, and only some companies support it so far.
  • Start from the company page. Open the company’s official LinkedIn page, go to its People tab and search for the name. Searching from the company side is harder to fool than clicking a profile someone sent you.
  • Read the history. Real profiles usually have years of posts, a work history that makes sense, and connections who also work at the company. Fake ones are often new, with a few hundred random connections and a headshot that looks too perfect.
  • Message the profile directly. Ask the LinkedIn account to confirm the chat you are having on Telegram or WhatsApp. Scammers often copy a real employee’s profile, and the real employee will reply confused.

A long history plus a workplace check is good evidence that the person exists and works there. It does not show that the person messaging you on another app is the same person, so always confirm on the profile itself.

9. Check the company’s team page, docs, GitHub and community admin lists

Many companies publish who speaks for them:

  • The Team or About page on the official website.
  • The docs or Help Center, which often list official support channels and say “we will never DM you first.”
  • The GitHub organization. Open github.com/the-company and look at public members. A developer who says they work there can usually be found in that list.
  • Telegram and Discord admin lists. Check the admin’s username, the part with the @, and ignore the display name. Anyone can set a display name to “Example Support | Admin”. OKX advises copying the username from the profile screen. If the “username” appears only in the bio, the account is probably fake.

Example. You post a question in a project’s Discord, and “Mod Alex” sends you a private message offering help. You check the server’s member list. The real Alex has a staff role and a different username. The account in your DMs joined the server yesterday.

Lists go stale when people leave, so when the stakes are high, confirm with check 1 as well.

10. Call back through the switchboard

If someone phones you from “the company”, hang up and call the number on the company’s website or on the back of your card. Ask to be put through to that person or department.

Example. “Your bank’s fraud team” calls and asks you to move savings to a “safe account”. You hang up and dial the number printed on your bank card. The bank has no record of the call. The FTC says bank impersonators caused the largest reported losses among business imposters in 2025, and these scams often end with victims persuaded to move money to “protect” it.

This check is hard to beat. Use another phone if you can, because some scams keep the line open after you hang up.

11. For crypto: ask for a signed message from a known wallet

Crypto has a check that nobody can fake without the private key. If a project or team member claims to control a wallet the project lists publicly, ask them to sign a message with it.

  1. Find the wallet address yourself, in the project’s official docs, website or official X account.
  2. Ask them to sign a message with today’s date and your name in it, such as: “I am Daniel from Example Protocol. Signed for Priya on 29 October 2026.” The date and your name stop them from reusing an old signature.
  3. Check the signature on Etherscan’s Verified Signatures page. BaseScan, Arbiscan and other Ethereum-style explorers have the same tool. Enter the address, the message and the signature, and see whether it is valid.

A valid signature proves the signer controls that wallet. Whether the wallet belongs to the project depends on where you found the address, which is why step 1 matters.

12. Don’t treat a video call as proof

Plenty of people still treat a video call as the final word. Since 2024 that has been a costly habit. In January 2024, a finance employee at the Hong Kong office of engineering firm Arup joined a video call with what looked like the company’s CFO and other colleagues. Every other face on the call was a deepfake. The employee made 15 transfers worth HK$200 million, about $25.6 million, before checking with the head office, Hong Kong police said. Arup later confirmed to CNN that fake voices and images were used.

If a video call is part of the story, confirm through a second channel you found yourself: the company switchboard, the official X account or a work email you already confirmed with checks 4 and 5. Ask for a calendar invite sent from the company domain, and run check 5 on it.

13. Search their name, handle and domain with “scam”

Spend a minute on a web search:

  • "@daniel_sec_team" scam
  • "example-support.com"
  • "Example Exchange" recruiter scam

Also look for the company’s own warnings. Many companies publish lists of fake domains and copycat tricks on their blog or Help Center.

If others have reported the same handle or domain, you know it is a scam within a minute. An empty search proves nothing, because a new scam has no reports yet.

Requests that end the conversation, whoever is asking

Some requests are scams however well the person passes these 13 checks, because a hacked real account can pass every test. Nothing makes these requests safe:

  • Your seed phrase, recovery phrase or private key. No company ever needs it. Anyone who asks is stealing.
  • Your password or a one-time code from SMS, email or an authenticator app.
  • Remote access or screen sharing through AnyDesk, TeamViewer or a “support tool”.
  • Moving money to a “safe” or “secure” wallet or account to protect it.
  • Paying to receive money, such as a fee to unlock a withdrawal, a deposit to start a job, or “gas” to claim a prize.
  • Installing software for a job interview. Fake crypto recruiters ask candidates to install a “video call app” or run a coding test that carries malware.
  • Connecting your wallet to “verify” it, or signing a transaction you do not understand.

When you see one of these, stop. You don’t owe anyone a polite goodbye.

Three common scams, checked step by step

Scam 1: Fake exchange support on Telegram

The message. “@ExampleEx_Support” writes: “Your withdrawal is stuck. Connect your wallet at example-unlock.com to release it.”

The checks.

  1. Check 2: the exchange’s checking tool says the handle is not official.
  2. Check 7: ICANN lookup shows example-unlock.com was created this month.
  3. The requests list: “connect your wallet to release funds” is on it.

Verdict. Scam. Block the account and report it to the exchange and to Telegram.

Scam 2: A recruiter from a crypto firm

The message. A LinkedIn profile titled “Senior Talent Partner at Example Labs” offers $180,000 for a remote developer role. The next step is a “technical test”: download a code repository and run it on your laptop.

The checks.

  1. Check 4: you ask for an email from @examplelabs.com. The reply comes from a Gmail account, “because of internal policy”.
  2. Check 8: nobody with that name appears on Example Labs’ LinkedIn People tab, and the profile is four months old.
  3. Check 1: Example Labs’ careers page lists no such role.
  4. The requests list: running unknown code from a stranger is on it.

Verdict. Scam. If you already ran the code, treat the laptop as compromised. Move any crypto to a new wallet created on a clean device, and change your passwords from that device.

Scam 3: A “partnership” email to a small project

The message. “Hi, I lead business development at Example Exchange. We’d like to list your token. Please sign the attached agreement and pay the $15,000 listing deposit.”

The checks.

  1. Check 5: “Show original” says dmarc=pass header.from=example-exchange-listing.com. The email really came from that domain, and that domain belongs to someone else.
  2. Check 3: you DM the exchange’s official X account. The exchange replies that it never asks for listing deposits by email and does not know this person.
  3. Check 2: the exchange’s checking tool does not recognize the address.

Verdict. Scam. The email passed DMARC for its own lookalike domain, which is why reading the domain letter by letter (check 4) comes before the header check.

A checklist you can save

Before you share anything, pay anything or click anything:

  • I found the company’s contact details myself. This person did not give them to me.
  • I asked the company, through that channel, whether this person is real.
  • I checked the handle or email in the company’s checking tool, if it has one.
  • I read the email domain letter by letter, from the right.
  • “Show original” shows dmarc=pass for the company's real domain.
  • I checked where every link really goes, by hovering or with AI.
  • The domain is more than a few months old.
  • Their LinkedIn, team page or GitHub matches, and I searched from the company’s side.
  • Nobody asked for a seed phrase, code, password, remote access, a fee or a software install.
  • I am not rushing because someone told me to.

If any line fails, stop and confirm through a channel you found yourself.

If you already replied or paid

Act in this order:

  1. Stop all contact. Do not send “one last” payment to unlock the first one. Fake “recovery” offers usually follow, often from the same crew.
  2. Secure your accounts from a device you trust. Change passwords, reset two-factor authentication and log out of other sessions.
  3. Move your crypto to a new wallet with a new seed phrase if you shared the old phrase or connected your wallet to a site. Revoke token approvals you do not recognize.
  4. Tell the real company through its official support. The company can freeze accounts and warn other users.
  5. Report it. In the US, use reportfraud.ftc.gov and the FBI’s ic3.gov. In the UK, use Report Fraud. Elsewhere, contact your national police cyber-crime unit.

FAQ

How can I verify if someone works for a company?

Contact the company through a channel you found yourself, such as its official website or official X account, and ask whether the person works there. Back that up with the company’s checking tool if it has one, a work email from the real domain that passes DMARC, and LinkedIn’s workplace check.

Can a verified X account be fake?

Yes. Anyone can buy a blue checkmark, and it says nothing about employment. On X, staff linked to a verified company show an affiliate badge, a small copy of the company’s logo next to their name. Official accounts can still be hacked, so pair the badge with a second check.

Is an email from the company’s domain always safe?

No. The From address can be forged, which is why you check for dmarc=pass in the raw headers. A real staff mailbox can also be hacked, and a hacked mailbox passes every check. If the email asks for anything on the requests list, treat it as a scam even when the headers pass.

Can AI tell me if an email is a scam?

AI is very good at reading raw email source and finding fake links, lookalike domains and failed SPF, DKIM or DMARC results. It still makes mistakes. Use it to point at the suspicious lines, check those lines yourself, and remove your personal details before you paste.

Will a real company ever message me first on Telegram or WhatsApp?

Most large crypto exchanges say their staff will not start private chats about your account and will never ask for funds, passwords or codes. Check the company’s Help Center for its own policy, and treat any unprompted private message as unconfirmed until you check it.

What is the safest way to check a recruiter?

Ask for an email from the company domain, find the role on the company’s own careers page, and search the recruiter’s name on the company’s LinkedIn People tab. Never pay a fee, buy equipment through the recruiter, or install software as part of an interview.

What should I do if someone fails these checks?

Stop replying, block the account, and report it to the real company and to the platform where you met. If you shared anything or sent money, follow the steps under “If you already replied or paid”.

Gaurav Agarwal writes about crypto security and on-chain investigations. If a scam message reached you that these checks did not cover, describe it in the comments, without personal details, and I will add a check for it.


How to Verify Someone Really Works for a Company: 13 Checks was originally published in Coinmonks on Medium, where people are continuing the conversation by highlighting and responding to this story.

Before yesterdayCoinmonks

BDK’s Electrum txid check took 171 days to ship, and 5 of the 9 crates using it can’t get it

19 October 2026 at 02:24

The fix is one comparison. Only bdk_electrum 0.24.1 has it, there’s no fixed 0.23, and LDK Node shipped on 0.23 eight hours later

In BDK’s Electrum client, the loop that gathers fee data for a wallet has a comment on line 588 of the 0.23.2 source that says exactly what it should do:

let prev_tx = self.fetch_tx(outpoint.txid)?;
// Ensure server returns the expected txout.
let txout = prev_tx
.output
.get(vout as usize)

The only check under that comment is that output number vout exists. Nothing checks that prev_tx is the transaction the wallet asked for. fetch_tx sends a txid to the Electrum server, takes back whatever transaction the server returns and caches it under the txid it asked for. The output then goes into a map keyed by the outpoint the wallet asked about, and that map is where BDK gets input values when it works out the fee on a transaction whose inputs the wallet doesn’t own.

So for a parent the wallet doesn’t already hold, a server could answer with any transaction that has enough outputs, and its amount would become that input’s value in the wallet’s fee numbers. That’s as far as I can follow it in the code. fetch_tx also serves the wallet’s own history, and I haven’t traced what a swapped transaction does on that path, or run any of this against a server that lies.

Code from the published crates. Left, bdk_electrum 0.23.2: fetch_tx at line 71 asks the server for a txid and caches whatever comes back under that txid; fetch_prev_txout at line 588, under the comment Ensure server returns the expected txout, only checks that the output index exists, then stores the output under the outpoint the wallet asked about, which feeds fee calculation. Right, 0.24.1 lines 85 to 90: compute the txid of the returned transaction and return an error if it differs.
bdk_electrum 0.23.2 against 0.24.1: where the server’s answer was trusted, and the check that 0.24.1 adds.

One comparison, merged in April

The fix is six lines in fetch_tx: compute the txid of what came back and return an error if it isn’t the one requested. It was merged to master on 24 April as PR 2188.

Master isn’t what gets published, though. bdk_electrum 0.24.0 came out on 8 May without the check; I diffed the published sources, and its fetch_tx is the same as 0.23.2’s. The backport, PR 2228, was merged on 16 June into a branch called release/chain-0.23.x, and that name nearly caught me out. I read it as the 0.23 line getting the fix. It’s the release branch for bdk_chain 0.23, and bdk_electrum’s 0.24 releases come off it. The fix sat merged there for 118 days, until 0.24.1 was published on 12 October at 05:29 UTC, 171 days after it first landed.

Timeline from April to October 2026. 24 April, PR 2188 merged to master. 8 May, bdk_electrum 0.24.0 published without the check. 16 June, PR 2228 backported to release/chain-0.23.x. 12 October 05:29 UTC, 0.24.1 published with the check. 12 October 13:53 UTC, LDK Node 0.7.1 published, still requiring bdk_electrum 0.23. No 0.23 release after 0.23.2 of September 2025.
From merge to release: 171 days, 118 of them merged on the branch that 0.24.1 was cut from.

Who can’t take it

Cargo treats 0.23 and 0.24 as incompatible, the way it treats any minor bump before 1.0. A crate that asks for bdk_electrum 0.23 gets 0.23.2 at most, and no 0.23 release has the check. Moving to 0.24 also moves electrum-client from 0.24 to 0.25, so it takes an edit to the manifest, and cargo update won’t do it.

crates.io lists 11 crates that depend on bdk_electrum. Two use it only in tests. Of the other nine, five ask for 0.23 and four for 0.24. LDK Node is one of the five. Its 0.7.1 release came out at 13:53 UTC on 12 October, eight hours and 24 minutes after 0.24.1, still on bdk_electrum 0.23, and it asks for previous outputs in both its sync and its full scan. It does fill the client’s cache from its own wallet first, so parents it already holds never go to the server. fedimint-ldk-node 0.7.0 asks for 0.23 too. LDK Node’s main branch has moved to 0.24.0, which resolves to 0.24.1 on a fresh lockfile, so its next release should carry the check.

A table of crates.io dependents, latest version of each. Asking for 0.23, which has no fixed release: ldk-node 0.7.1, fedimint-ldk-node 0.7.0, emvault-electrum 0.10.0, Hash_Pool and zk_coinjoin_lib. Asking for 0.24, which resolves to 0.24.1: bdk-cli 4.0.0, cdk-bdk 0.18.2, agent-first-pay 0.11.0 and hledger-btc-core 0.1.0. Two more, bdk_wallet and bdk-reserves, use it only in tests.
The nine crates on crates.io that depend on bdk_electrum outside tests, by the version they ask for.

Downloads tell it from the other side. On 13 October, the first full day 0.24.1 existed, crates.io counted 2,050 downloads of bdk_electrum, and 530 were 0.24.1. 799 were 0.23.2, the last of the line that has no fix. Downloads are CI runs and mirrors as much as people, so I wouldn’t read them as users, but they’re the only count there is.

Stacked daily bars from 30 September to 14 October 2026. Before 12 October every download is a version without the check. On 13 October, 530 of 2,050 downloads were 0.24.1 and 1,520 were older versions, 799 of them 0.23.2. 14 October is a partial day.
Daily crates.io downloads of bdk_electrum, split by whether the version has the txid check. 14 October is partial.

The case where any of this matters is a node pointed at an Electrum server somebody else runs. I don’t know of a way to count LDK Node deployments set up like that. Until LDK Node ships a release on 0.24, the apps built on it can’t get the check without patching LDK Node itself.


BDK’s Electrum txid check took 171 days to ship, and 5 of the 9 crates using it can’t get it was originally published in Coinmonks on Medium, where people are continuing the conversation by highlighting and responding to this story.

Your Payment Page Is Probably Breaking the Law. Here’s the PCI DSS Mistake Nobody Tells You About

19 October 2026 at 02:23

If you take card payments, even five a day, read this before your bank emails you first.

The mistake is simple. You think your payment provider takes care of PCI DSS for you.

It doesn’t. Some of it, sure. But if your checkout page looks like most checkout pages, a big chunk of the responsibility is still sitting on your desk.

[Add two or three sentences of your own here. A time you or a client assumed “Stripe handles it” and found out otherwise. Real beats polished.]

I’ll get to the gap in a second. First, the title.

Image Generated by ChatGpt

Is it actually illegal?

Mostly no, and I’d rather say so now than have someone say it for me in the comments.

PCI DSS isn’t a federal law. The card brands wrote it, and you agreed to it when you signed your merchant agreement, probably without reading page nine. Break it and your bank can fine you, raise your fees, or close your account.

But a few US states have pulled PCI DSS into their own law. Nevada is the best known. Minnesota and Washington have versions too. And after a breach, nobody asks whether the standard was legally binding. They ask whether you followed it. A lawyer on the other side will enjoy that question.

So “breaking the law” is a little strong, and “breaking your contract” is accurate nearly everywhere. Either way, you don’t want to be there.

Who’s living on your checkout page?

Open your checkout page. Right-click, view source, and search for “script.”

Go on. I’ll wait.

Analytics. A chat widget. Maybe a heatmap tool somebody trialled once. A font library. A retargeting pixel from a campaign in 2022 that nobody turned off. Every one of those is code written by a stranger, running in the same window where your customer types a card number.

Attackers love this. It’s called web skimming, and you’ll also see the name Magecart. They don’t bother attacking your bank. They compromise one small third-party script, add a few lines of JavaScript, and copy card details as people type. Your site looks fine. Your processor sees normal transactions. It can go on for weeks.

This is the gap. Your provider secures its side. It has no control over the fifteen scripts you invited onto your side.

What changed, and why old blog posts will mislead you

The old version, 3.2.1, was retired in March 2024. Version 4.0 replaced it, and a batch of requirements that started out as “best practice” became mandatory on March 31, 2025. The current release, 4.0.1, only clarifies wording. It doesn’t relax anything.

Two of the new rules hit online sellers hardest.

Requirement 6.4.3 says you need an inventory of every script on your payment pages. You have to confirm each is authorized and write down why it’s there.

Requirement 11.6.1 says you need a way to detect unauthorized changes to those pages and be alerted when something shifts.

So if nobody on your team can name every script on your checkout, you have a compliance problem and a security problem. They happen to be the same problem, which is almost funny.

What it costs when it goes wrong

The card brands don’t bill you directly. They penalize your acquiring bank, and the bank passes it along, usually with a little extra for its trouble. Figures commonly reported run from about $5,000 to $100,000 a month of non-compliance, depending on your size and how long it drags on.

That’s the fine. A real breach is its own bill: forensic investigators, reissuing cards, lawyers, notifying customers, and the quiet loss of people who just stop buying from you.

Target in 2013 is the example everyone uses, because it’s true. Attackers got in through a third-party vendor (an HVAC contractor, of all things) and left with around 40 million payment card records. A company that size absorbs it. A small shop usually can’t.

What to do this week

None of this is glamorous. That’s sort of the point.

Start by asking your bank or processor which Self-Assessment Questionnaire applies to you. It depends on how card data touches your business, and plenty of merchants fill out the wrong one. They end up compliant on paper and exposed in practice.

Then shrink your scope. If you use a fully hosted payment page or tokenization, card numbers never touch your servers, and that’s less for you to secure and explain. Do an audit of your payment page scripts while you’re at it, and delete anything that isn’t earning its spot. Your heatmap tool doesn’t need to sit next to the card field.

Never store the CVV after authorization. Ever. Turn on multi-factor authentication for any account that can reach card data. If you’re required to run quarterly external scans, use an Approved Scanning Vendor and put the dates in your calendar, because PCI DSS is yearly, not once and done.

And write a security policy. One page is fine. One page your team has read beats sixty pages nobody opened.

The honest takeaway

I don’t think PCI DSS exists to make your life miserable, though it can feel that way around audit time. It exists because card fraud is automated and endless, and small merchants are favorite targets because they assume nobody’s watching.

The businesses that stay out of trouble mostly aren’t the ones with big security budgets. They just ask three dull questions early. What touches card data? Who has access to it? What’s running on my checkout page?

Ask them this week. Your future self will be grateful, and so will your bank.

Do you know which SAQ applies to your business? Tell me in the comments. [Add your own honest answer here.]

This is general information, not legal or compliance advice. Confirm your requirements with your acquiring bank or a Qualified Security Assessor.


Your Payment Page Is Probably Breaking the Law. Here’s the PCI DSS Mistake Nobody Tells You About was originally published in Coinmonks on Medium, where people are continuing the conversation by highlighting and responding to this story.

❌
❌