Keep the TAM up to date
Freshness, automation, opt-outs and data protection.

A TAM starts ageing the day you finish it. To keep it usable, give each field a refresh cadence per tier, re-check contact data just before you use it, and run every send against an opt-out list. That routine fits in a few hours a month once it is set up.
The data protection part of this chapter is general information and points you to the official sources. It won’t replace a review of your own setup by counsel.
Throughout, say your TAM holds 6,400 accounts: 300 in Tier A, 900 in Tier B and 5,200 in Tier C, in the schema from the previous chapter. These volumes are illustrative.
Refresh each field at its own pace
Refreshing everything on the same date wastes money on fields that barely move and leaves the fast-moving ones stale.
| Field | Tier A | Tier B | Tier C | Refreshed from |
|---|---|---|---|---|
| Company status (active, ceased) | Monthly | Monthly | Monthly | Official registry |
| Headcount, industry | Monthly | Quarterly | Yearly | Registry, company page |
| Technology, if you score on it | Quarterly | Twice a year | Skip | Website detection |
| Contact still in post | Before each campaign | Before each campaign | Don’t store contacts yet | Profile re-enrichment |
| Email validity | Before each send | Before each send | Don’t store contacts yet | Verification |
| Fit score, tier | After each refresh | After each refresh | After each refresh | Your own formula |
Leaving Tier C without contacts saves refresh costs and means you hold less personal data on people you may never write to.
Published decay rates for B2B data vary too widely to plan on, so measure yours. Each quarter, take a random sample of 100 contacts and check how many are still in the same job at the same company, and track bounces per campaign. That rate tells you whether your cadence is right.
This query gives you the work queue:
SELECT domain, tier, enriched_at
FROM companies
WHERE status = 'active'
AND enriched_at < CURRENT_DATE - CASE tier
WHEN 'A' THEN INTERVAL '1 month'
WHEN 'B' THEN INTERVAL '3 months'
ELSE INTERVAL '12 months'
END
ORDER BY tier, enriched_at;
In a sheet, compute a due date column per row and filter on it:
=IF(H2="A", EDATE(J2, 1), IF(H2="B", EDATE(J2, 3), EDATE(J2, 12)))
Track companies entering and leaving the market
A market moves on both sides. Companies get created, grow into your range, close, or get bought. For France, the Sirene stock files are free and published monthly, so you can rerun your query from the sizing chapter and compare with your table on SIREN.
| Change detected | What to do |
|---|---|
| New company matching your filters | Add it, enrich it, score it |
| Headcount band now in range | Add it, and log a headcount_band_up signal |
Company ceased (administrative status C) |
Set status to ceased, keep the company row, delete its contacts |
| Domain redirects to another company | Check for an acquisition, then merge under the surviving key |
| Website down over two checks | Flag it for a manual look before removing it |
Keep ceased companies as rows with a status. If you delete them, the next import will bring them back as new accounts.
Automate the recurring runs
Automate once you have done a cycle by hand and know what a good result looks like.
With Derrick (I co-founded it, so take that into account), the refresh is a re-run of the same actions on the rows that are due. Filter your stale rows, run Enrich Companies on the LinkedIn URL or domain column, at 1 credit per company, then run Email Verification on the addresses of the next campaign, at 1 credit per email. Find Duplicates is free and adds a column flagging repeats after each new import. For account-level changes between refreshes, Signal watches a list in the background, as covered in the signals chapter.
At the volumes above, company refreshes come to 12,400 credits a year: 3,600 for Tier A (300 × 12), 3,600 for Tier B (900 × 4) and 5,200 for Tier C.
Two things stay on your side. Derrick doesn’t write back to your CRM by itself, so the results still move by export or through a job you write against the API, and scheduling is up to that job or your automation tool. No provider gets every value right either, so a sample check stays in the routine. Without any tool, the same cycle works with the registry file for companies, manual checks on Tier A contacts, and a verification service of your choice before each send.
Build the opt-out list before the first send
The suppression list is the one table that overrides all the others. It has to be in place before your first campaign, and every tool has to go through it.
- Collect from every place people can say no: unsubscribe links, replies, LinkedIn messages, calls, forms, emails to your support address.
- Add entries the same day. Whoever receives the request writes it in, or a sync from the sending tool does.
- Store an email for a person, and a domain only when a whole company asked.
- Store only what you need to honor the request, and keep it when you delete the contact. Ask counsel how to hold it.
- Check against it at import time and again at send time, since a contact can arrive through a new list months later.
The check before any export to a sending tool:
SELECT c.*
FROM contacts c
WHERE c.email IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM suppression s
WHERE s.match_value IN (lower(c.email), c.domain)
);
In a sheet, with the email in C and the domain in D, keep only rows returning 0:
=COUNTIF(suppression!A:A, LOWER(C2)) + COUNTIF(suppression!A:A, D2)
Enrichment tools generally don’t hold your opt-outs, Derrick included, so run this filter before you push a list to a sending tool.
Data protection: what to document and who to ask
Treat this section as a list of questions for your counsel. It isn’t legal advice, and nothing in this guide says that a given collection or prospecting practice is allowed. The rules depend on your country, your recipients’ countries and the channel, and they change.
In the EU, the GDPR covers personal data, and a professional email or a name attached to a job title counts as personal data. For France, the reference is the CNIL. It has a GDPR toolkit in English, and its pages in French on electronic prospecting and phone prospecting set out the regulator’s current position, which differs between individuals and professionals. In other EU countries, go to your national authority, which you can find through the European Data Protection Board. Outside the EU, check your local regulator.
Check each source’s terms of use as well. That applies to every website, directory and platform you collect from, LinkedIn included, and to any tool that reads them, Derrick included.
Write the answers down in a single document, with counsel:
| Question | What to write down | Owner |
|---|---|---|
| Why do we hold this data, and on what legal basis? | Purpose and basis, per data category | Founder, counsel |
| How do people learn we hold their data and where it came from? | The notice, and when it reaches them | Counsel, marketing |
| Do the terms of each source allow this use? | Per-source review, dated | Data owner, counsel |
| Which columns do we need? | The list, and the columns to delete | Data owner |
| How long do we keep a contact with no interaction? | A retention period, and the purge job | Founder, counsel |
| Who answers access, objection and erasure requests? | A named person, a process, a deadline | Support lead |
| Which vendors process this data, and where? | List of processors and contracts | Founder, counsel |
Once the retention period is set, the purge is one more line in the routine. Delete the contact row, keep the suppression entry, and log the run.
The monthly routine
| Step | Time | Output |
|---|---|---|
| Rerun the registry query and compare | 30 min | Rows added, ceased rows flagged |
| Run the stale queue by tier | 30 min | enriched_at updated |
| Recompute fit and tiers | 15 min | Accounts moved between tiers |
| Update the suppression list from every channel | 15 min | Requests applied, with dates |
| Purge contacts past the retention period | 15 min | Deleted count in the log |
| Quarterly: sample 100 contacts | 1 hour | Decay rate, cadence adjusted |
Those times are a rough guide, and the first cycle will take longer. Put one person’s name on the routine, since a shared task on a maintenance job ends up undone.
Your next step: create the suppression table today and fill it from your existing tools. Then book a first session with counsel using the questions above, and put the monthly routine in someone’s calendar before you launch your first segment.