How we count
Every count is the number of records that match an audience on one dataset version. This page explains each rule behind the number, so you can check it.
A count in MyDataHub by Emailmovers is the number of records matching an audience definition on one immutable dataset version, exact for paid callers and rounded for anonymous ones. It is the same number in the app, the REST API and the MCP server, and it carries an id that replays it for 12 months.
The full count is 1,605,275 named business contacts at active UK companies, as of 26 September 2026. MyDataHub opens on premium records: an active company, a LinkedIn profile and contact validation within the last 12 months. Everything else is one toggle away, and the full figure always shows beside the premium one. Nothing is resolved silently, and every default is a visible toggle.
How does a count go from every contact to named managers?
The default landing count is a funnel of four steps, each cumulative on the one before. It shows how many records sit at active companies, how many have an email, how many have a named email and how many of those are at manager level or above.
| Step | Filter added to the step above | Contacts, 26 September 2026 |
|---|---|---|
| 1. Contacts at active companies | Company status is active | 9,028,587 |
| 2. With an email | Has an email | 1,660,190 |
| 3. With a named email | Email type is a named person, not info@ | 1,605,275 |
| 4. Manager level and above | Job level is Manager or above (Owner, Partner, CxO, Chair, VP, Director, Senior manager, Manager) | 1,277,443 |
Each filter is added to the one above it. Counted through MyDataHub on 26 September 2026.
The 26 September 2026 figures show why the headline is "named business contacts" and not "contacts". Most of the 9 million contacts at active companies have no email, so the funnel narrows to the people you can write to by name.
What is an audience definition?
Every count starts from one JSON document, in the namespace mydatahub.audience/1. A brief compiles into it, a saved audience stores it and an agent sends it, so a person and an agent who describe the same audience get the same count.
| Operator | Applies to | Meaning |
|---|---|---|
all, any, not | Groups | AND, OR and negation, nested to any depth |
in | Coded fields | One of the listed codes |
between, gte, lte | Banded and ranked fields | An inclusive range, or a bound over an ordered code list |
matches | Job title | A keyword match with expansion sets and a mode: contains, starts_with or exact |
within_radius | Location | A resolved centre plus a radius of 1 to 100 miles |
in_list | Hashed email, domain, company number or title term | Membership of an uploaded suppression list |
since | Date fields | Within the last N days |
This definition describes marketing managers and above at manufacturing companies with 50 or more staff within 20 miles of Leeds.
{
"schema": "mydatahub.audience/1",
"dataset": "uk_contacts",
"dataset_version": "2026-W40",
"where": {
"all": [
{
"field": "contact.title",
"op": "matches",
"terms": ["marketing manager"],
"mode": "contains",
"expand": ["plural_singular", "department_synonyms", "ampersand_and", "abbreviations"]
},
{
"field": "contact.job_level_rank",
"op": "in",
"values": [1, 2, 3, 4, 5, 6, 8, 9]
},
{
"field": "company.sic_2007",
"op": "in",
"values": ["C"]
},
{
"field": "company.employee_band",
"op": "gte",
"value": "50-99"
},
{
"field": "site.location",
"op": "within_radius",
"centre": {
"place": "Leeds",
"code": "E08000035"
},
"radius_miles": 20
}
]
},
"email_policy": {
"min_deliverability_score": 70,
"allow_catch_all": false
},
"dedupe": "none"
} The server fills every default it applies, canonicalises the definition and returns the effective version with the count. Older schema versions are upgraded by a pure function, so an audience saved today still compiles in two years.
Which defaults does the engine apply?
Five defaults keep a count honest, and each one shows what it removes. You can switch any of them off, and the count then shows the difference.
| Default | Applied unless you change it | Shown as |
|---|---|---|
| Active companies | Company status is active | A toggle with the dissolved and insolvent count |
| Named emails | Email type is named | A toggle with the role address count (info@, sales@) |
| Corporate subscribers | Sole traders and ordinary partnerships are left out of email audiences | A toggle with the individual subscriber count |
| No registered numbers | Numbers a screen found TPS or CTPS registered are left out when a phone is requested; numbers not screened stay in | A toggle with the registered count |
| Your suppressions | Every account list is applied | The records removed, per list |
How does title expansion work?
Title expansion is data, not code: a titles dictionary and a synonyms table keyed by expansion set. There are five sets, and the default mode, contains, matches a term anywhere in a title.
- plural_singular: manager, managers.
- department_synonyms: HR, Human Resources, People; IT, Information Technology.
- ampersand_and: Sales & Marketing, Sales and Marketing.
- abbreviations: CEO, Chief Executive Officer; MD, Managing Director.
- permutations: Marketing Director, Director of Marketing.
Mode starts_with narrows a match, and exact takes a verbatim list with no expansion. Other tools hide expansion behind a single toggle. We return the expanded list with a count for each term, and removing a term writes an explicit exclusion into the definition, so the edited count stays reproducible when the dictionary changes.
Per-term counts are contacts at active companies, not the count inside your audience. Three bundles resolve to filters and show what they contain.
| Bundle | Resolves to | Note |
|---|---|---|
sdm | Job levels 1 to 6, Owner to Director | Senior decision makers |
manager_and_above | Job levels 1 to 6, 8 and 9 | Leaves out Company secretary, rank 7 |
How do the 13 job levels work?
Every contact has one of 13 ranked levels, and "and above" means every level up to the one you choose. The ladder starts at 1 for Owner and ends at 13 for Volunteer.
Company secretary sits at rank 7, between Director and Senior manager. It is left out of manager_and_above, which matches the live manager-and-above count of 26 September 2026.
How does geography work?
Every site carries codes for region, county, local authority, ward and statistical areas from the ONS Postcode Directory, which is released quarterly under the Open Government Licence. The legacy list of 20 regions had both "England London" and "England Greater London", and both now map to one London region.
London keeps its 33 boroughs, including the City of London, and Yorkshire (North, South and West Yorkshire and the East Riding) is a named set. The Channel Islands and the Isle of Man are a Crown Dependencies set.
How does a radius search work?
A radius query resolves its centre first. If a name is ambiguous, you get the candidates and are asked, never given a silent choice. The count then keeps the sites inside an exact distance test and reports the centre used and the postcodes matched. A radius of 1 to 100 miles is allowed, and a radius under 5 miles needs a free account.
What are Total, New to you and Emailable?
Three headline views sit on every count. Contacts and companies come back together, so one call can say "contacts at companies".
- Total is every record that matches your filters.
- New to you removes records from earlier orders and from your CRM overlap check. It is available when you are signed in.
- Emailable is a named email scoring 70 or more at a corporate subscriber.
What do breakdowns show?
A breakdown splits a count by up to three fields, such as industry by seniority by region, as one grouped query. It returns the top 50 cells per field plus an "other" bucket, capped at 5,000 cells and 200 KB.
Charts always come with a text summary and a data table, so the numbers are readable without the picture.
How do suppressions and objections change a count?
Your suppression lists apply to every count you run, and each count shows how many records every list removed. Lists hold hashes, never the original emails.
Objections and erasure requests do not wait for the weekly build. A same-day overlay removes them from every count, and a replay of an earlier count reports how many records were removed since.
How do we stop counts identifying people?
We use the suppress-and-round practice used for UK statistical outputs. The rules below apply to the numbers on this site.
| Rule | What it does |
|---|---|
| Small cells | A breakdown cell under 10 reads "under 10", never a value |
| Rounding | Anonymous and trial callers see counts rounded to the nearest 5, so two counts cannot be subtracted to reveal one company |
| Secondary suppression | In cross-tabs, extra cells are hidden so totals cannot be differenced |
| Exact counts | Only authenticated paid callers see exact figures, because the exact count is what they buy |
| Single-company counts | These need an account and are logged |
| Samples | Masked server side, none when the count is under 25, drawn from a seed fixed per audience, and a title held by fewer than 10 people is withheld |
How can you reproduce a count?
A count id is cnt_ plus the first 20 characters of a hash over the canonical form of the effective definition, the dataset version and the engine rules version. The same definition from chips, REST or MCP therefore gets one id.
Dataset versions are immutable weekly builds, named like 2026-W40. The last 52 stay in the serving store, so any count id re-runs exactly for 12 months. GET /v1/counts/{id} returns the effective definition, the compiled plan with every expanded term and resolved centre, the pinned versions, the three views and the breakdowns.
Which quality signals come with every count?
| Signal | How it is computed | Where it appears |
|---|---|---|
| Email coverage | Records with a named email divided by the count | The headline stat |
| Verified in the last 90 days | Share of emails with a provider result of ok in the last 90 days, with the measurement date | The headline stat |
| Deliverability score distribution | Good (70 to 100), risky (40 to 69) and poor (under 40) | The breakdown card |
| Average days since verification | The mean age of the latest verification event | The count response and the validation report |
| Phone coverage and TPS screen date | Share with a validated number, and the version's TPS and CTPS screen date | When a phone is requested |
What can a count not tell you?
A count is a number on a date. It changes with each Monday build, and an anonymous count is rounded. It counts records, so it cannot say how many people will read, reply or buy.
A count also cannot tell you that an address will not bounce. It can tell you when the address was last verified and what the deliverability score is, and those are the figures to trust.
Frequently asked questions
Is a MyDataHub count exact?
A paid caller sees the exact count. An anonymous visitor sees counts rounded to the nearest 5, with any cell under 10 shown as "under 10", so that two counts cannot be subtracted to reveal one company.
Why does the same audience give the same number every time?
A count is tied to one immutable dataset version and one set of engine rules, and its id is a hash of both with the effective definition. Rerunning the id re-counts the same data.
Does the count include companies that no longer trade?
Not by default. Company status defaults to active, and the count shows how many dissolved and insolvent companies you would add by switching the default off.
What happens to my count if someone objects to marketing?
The objection reaches the serving copy the same day through an overlay that is subtracted from every count, so a rerun reports how many records were removed since.