UK Business Email Finder — MX-Checked B2B Leads
Pricing
from $5.00 / 1,000 business contact with emails
UK Business Email Finder — MX-Checked B2B Leads
UK business email finder: MX-checked email, phone and website by city and category, from OpenStreetMap. Pay per lead with an email.
Pricing
from $5.00 / 1,000 business contact with emails
Rating
0.0
(0)
Developer
Mohammed Samaan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
12 days ago
Last modified
Categories
Share
UK Business Email Finder
Find real business emails for UK companies: this actor takes UK business names and their websites from OpenStreetMap, visits each company website, and extracts the contact emails published there - every email tagged valid / invalid with an MX check.
Great for B2B outreach, agency prospecting, supplier lists and CRM imports across London, Manchester, Birmingham, Leeds, Glasgow and the rest of the UK.
What you get
Each dataset row contains:
| Field | Description |
|---|---|
name | Business name |
category | Type of business (restaurant, cafe, clinic, shop, office, ...) |
email | Contact email found on the business's own website |
emailStatus | valid / invalid - based on an MX lookup of the email domain |
phone | Business phone number, when available |
website | The company website that was scanned |
city | Region searched |
collectedAt | Date collected |
How it works
- Queries the OpenStreetMap Overpass API (free, public) for UK businesses in your chosen region.
- Picks businesses that have their own website (social media links like Facebook/Instagram are skipped - no emails live there).
- Opens each website (homepage + one contact/about page) and extracts email addresses.
- Runs an MX check on every email domain and tags it valid / invalid.
- Deduplicates by email and saves results.
Websites are scanned 8 at a time with a short stagger between different hosts, so a large run finishes in minutes; the run also stops cleanly before its own timeout instead of being killed mid-way.
Input
| Field | Type | Default | Description |
|---|---|---|---|
| Region / city (required) | select | london | london, manchester, birmingham, leeds, glasgow, england, scotland, wales, northern-ireland |
| Business category | string | - | Optional filter, e.g. restaurant, cafe, clinic, school, dentist, estate_agent |
| Max websites to visit | integer | 50 | How many company websites to open and scan |
| Verify emails (MX check) | boolean | true | Tag each email valid / invalid |
| Only rows with email | boolean | true | Drop businesses with no email found |
Example input
{"region": "london","category": "cafe","maxSites": 50,"verifyEmails": true,"onlyWithEmail": true}
Example output
{"name": "The Monmouth Coffee Company","category": "cafe","email": "hello@monmouthcoffee.co.uk","emailStatus": "valid","phone": "+44 20 7379 6955","website": "https://www.monmouthcoffee.co.uk/","city": "London","collectedAt": "2026-09-20"}
Tips
- Not every business publishes an email on its website - typically 10-40% of scanned sites yield an email. That is normal and why we only charge for rows that have one.
- Filter by
emailStatus: "valid"before outreach to remove dead domains. - Use the category filter to build targeted lists (e.g. only cafes, only estate agents).
- City searches give focused lists; whole-country searches (england, scotland) sample broadly.
- Re-run monthly to refresh and grow the list.
FAQ
Does an email marked valid mean it will reach the inbox?
No. The check only asks the email's domain whether it publishes mail-server (MX) records. It does not test whether a specific mailbox exists, and it does not detect catch-all domains or predict bounces. Treat valid as "the domain can receive mail", nothing more.
Where do the emails come from? From the business's own website: the homepage plus one contact/about page, and the email tag on its OpenStreetMap entry when there is one. Nothing is guessed or generated.
What are the possible emailStatus values?
valid (the domain has MX records) or invalid (no MX records, or the DNS lookup failed). It is empty when you turn off "Verify emails".
Am I charged for rows marked invalid?
Yes. The charge is one event per delivered row that contains an email, whatever its MX status. Filter on emailStatus after the run, or switch "Verify emails" on to see it. Rows with no email are not charged.
Can I look up one specific company? No. You choose an area and an optional category; the actor lists businesses in that area that have a website. It does not search by company name.
What is the contactName field?
The owner, founder or principal, only when the website clearly names one. It is empty otherwise and is never invented.
Can I run several areas in one run? Yes, put more than one value in the area list. Areas are interleaved so the "Max websites to visit" cap is spread across all of them.
Errors and limits
- Unknown area value: it is not rejected. The actor silently falls back to London, so check the
citycolumn of your results if you call it through the API. - Category: lower-cased, and anything other than letters and underscores is removed. It must equal an OpenStreetMap tag value (for example
dentist,restaurant). A category that matches nothing returns zero businesses and an empty dataset; the run still ends as succeeded. - Empty results are not an error. The run finishes normally with an empty dataset when no business in the area has a website, none of the sites show an email, or the source was unavailable (see next point). The log line "No businesses returned for ..." tells you which.
- OpenStreetMap (Overpass) errors: the actor tries up to 5 public Overpass servers, in two passes, with a 120 s timeout per request and a 300 s budget per area. A server that errors, times out or answers empty is skipped and the next one is tried. If every server fails, that area contributes nothing and the run continues with the other areas. Re-run later if you suspect the source was busy.
- Size cap: at most 800 businesses with a website are fetched per area per run, so very large areas without a category filter are a sample, not a full census. Split by category to get more.
- Website errors: each site gets a 20 s timeout for the homepage and 15 s for the contact page. Non-200 responses, non-HTML responses, timeouts and blocked sites are skipped without a retry, and cost nothing. Social-media links and government/military sites are skipped.
- Stopping rules: the run stops when "Max websites to visit" rows have been delivered, when 3 times that many sites have been tried, when the candidate list runs out, or about 2 minutes before the run's own timeout. In the last case it ends as succeeded with the rows already collected (a log warning says so).
- Partial results: rows are saved one by one as they are found, so a stopped or limited run keeps everything delivered so far. If a single row cannot be saved it is skipped (with a log warning) and not charged.
- Charging on failure: a row is charged only after it has been saved to the dataset. If you set a maximum charge per run, the actor stops cleanly when it is reached. Skipped sites, empty areas and rows without an email are not charged. The Apify actor-start event applies to every run.
- Duplicates: an email is delivered once per run, even if several businesses list it.
- Area labels: the
cityvalue comes from the business's OpenStreetMap address tag when it has one, otherwise from the area you searched. Search areas are rough rectangles that overlap, so a business near a border can carry a neighbouring area's label. - Notion output: if the optional Notion step fails, the dataset is still delivered and the reason is logged.
Pricing
Pay per event: $0.005 per row that contains an email ($5 per 1,000 rows). Businesses with no email found cost you nothing. Apify's own actor-start event (currently $0.00005) also applies to each run.
Disclaimer
This actor collects only publicly visible contact information from public business websites, with rate limiting. Please respect applicable privacy laws (e.g. UK GDPR / PECR) when using the data for outreach.
Send results to Notion (new, Sep 2026)
Authorize Notion once in Apify Console → Settings → API & Integrations → MCP connectors (choose Notion, sign in). Then pick that connector in Notion connector and paste the link of any Notion page in Notion page to create the table in. The first run creates a table inside that page and fills it with the business leads (up to 500 rows per run; the full set is always in the dataset). To keep adding to the same table on later runs, paste the table ID from the log into Existing Notion table ID. This Actor never sees your Notion login: Apify's connector proxy holds it. If the Notion step fails, your dataset results are still delivered and the reason is logged.
Use it from an AI agent (MCP)
Add this Actor to any MCP client (Claude, Cursor, VS Code) with one URL:
https://mcp.apify.com?tools=leadharbor/uk-business-email-finder
Or call it through the Apify API with an input like this:
{"regions": ["london"],"category": "clinic","maxSites": 25}
Returns one row per UK business: MX-checked email, phone and website. Results land in the run's default dataset (JSON, CSV or Excel). No login or API key is needed for the sites it reads, and pay-per-event pricing works with Apify's x402 agent payments.
API usage
Run it from your own code with an Apify API token. The input below is this actor's prefilled example.
curl (runs the actor and returns the dataset items):
curl -X POST "https://api.apify.com/v2/acts/leadharbor~uk-business-email-finder/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"regions": ["london"],"category": "clinic","maxSites": 25,"verifyEmails": true,"onlyWithEmail": true}'
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("leadharbor/uk-business-email-finder").call(run_input={"regions": ["london"],"category": "clinic","maxSites": 25,"verifyEmails": True,"onlyWithEmail": True})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Changelog
28 Sep 2026 — Category examples corrected (use real OpenStreetMap tags); optional Notion output; MCP agent section. Plus 5 public example tasks with their own pages.
More from leadharbor
- Google Maps MX-Checked Email Scraper
- YouTube Video Scraper
- Airbnb Listings Scraper
- E-commerce Price & Restock Monitor
- App Store Review Monitor
- Local Review Booster
- Website Contact Extractor
- Bulk Email Verifier
- USA Business Email Finder
- UAE Business Email Finder
- UAE Property Broker Contacts
- LinkedIn Jobs Scraper
Using this actor? A quick review helps other buyers find it: uk-business-email-finder
New output fields (Sep 2026)
| Field | What it is |
|---|---|
contactName, contactRole | The owner / founder / principal when the website clearly names one (e.g. "Dr Adil Sarwar, Founder"). An AI model only selects among names that appear on the site — it never invents one. Empty when the site doesn't name anyone. |
siteLooksOutdated, siteCopyrightYear | Copyright year in the footer; true when it is 3+ years old — a common sign of a neglected site. |
siteMobileFriendly | Whether the homepage declares a mobile viewport. |
siteHasAnalytics, siteHasFacebookPixel, siteCms | Google Analytics / Tag Manager present, Meta pixel present, and the site builder (WordPress, Wix, Squarespace, Shopify, Webflow). |
When a site lists several emails, the returned email is the business's own main inbox — form placeholders
(example@mysite.com, you@company.com), platform addresses and jobs inboxes are no longer picked.
Related actors
- Disposable Email & Domain Checker — Flags throwaway and free-provider email domains using 5 merged public lists. $0.30 per 1,000 checks.
- Domain Trust Check — 0-100 trust score for a domain from domain age, SSL, SPF/DKIM/DMARC and disposable-domain lists. $2.50 per 1,000 domains.
- Bulk Email Verifier — Verifies email addresses: syntax, MX, disposable and role flags, and a 0-100 score. $0.50 per 1,000.
- USA Business Email Finder — MX-checked business emails for US companies.
- Website Technology Detector — Detects the CMS, frameworks, analytics and 100+ other technologies a website uses from its homepage. $9 per 1,000 sites.