Apify Store has a lot of email verifiers. The biggest ones I found had between 400 and 1,400 users in the last 30 days, at about $0.90 per thousand addresses. They answer one question: does this mailbox exist?
None of them answered the question I kept running into: am I allowed to send a first marketing email to it?
That answer depends on the country of the person you are writing to. Germany, Spain and Italy want consent before the first email, even to a company address. The US allows it, but wants a postal address and an opt-out in every message. Sweden protects people and not companies. Slovakia and Slovenia care whether the company published the address itself.
I had already read those laws for 31 countries for a free web checker. This week I turned the same rules into an Apify Actor: Cold Email Law Checker.
What it does
You give it a lead list. It adds a verdict to every row:
-
law_verdict:ok,cond(only in specific cases),consentorunknown -
law_reason: one sentence on why -
law_mustInclude: what the email itself has to contain, such as an opt-out or a postal address -
law_lawSource: a link to the law or the regulator -
law_checked: the date I checked that country
Your own columns stay, so you can filter the dataset and keep only the rows you may email.
Three ways to feed it
- The output of another Actor run. Pick the dataset of your lead scraper. Nested fields like
location.countryare found automatically. - A CSV link.
- A JSON list of addresses or objects.
It works out which field is the email, which is the country and which says where the address came from. You can name them yourself if it guesses wrong.
Two details that change the verdict
Use the person's country, not the company's. The rules follow the recipient. A German employee of a US company is a German recipient. When a row has both, the checker prefers the person's location.
Say where the address came from. In Canada, Australia, the Netherlands, Slovakia and Slovenia the answer depends on whether the company published the address itself. Add a source column: published, or vendor for anything a tool found or guessed. Values like apollo or hunter count as vendor.
How I checked it
The Actor and the web checker share one rules file, generated from the same data, so they cannot drift apart. The tests run an example export through the Actor and compare every verdict with what the website says for the same rows. Running the example input before launch caught a bug, and now there is a test for it: the Actor looked for the source column only in the first row, so a Slovak address published on the company's own site got the wrong verdict whenever the first lead had no source.
On my laptop it checks 20,000 leads in about four and a half seconds. On Apify the first runs took one to two seconds.
Limits
This is a research summary, not legal advice. It covers the first unsolicited marketing email to a business recipient. GDPR applies on top whenever an address identifies a person. Every verdict links to its source so you can check it, and if you know one of these laws better than I do, open an issue on GitHub and I will fix it.
It is free while I find out whether people use it.


