#The challenge
This company sells into a segment where intent is unusually visible in public: prospects publicly signal where they are in a formal certification process, and that signal shows up in public sources long before they talk to a vendor. None of that was reaching the sales floor. Reps worked an undifferentiated list with no reason to call. There was no signal infrastructure of any kind, and the CRM had no properties in which a signal could even be stored.
#The approach
Build the account universe from public sources before buying a list
Two of the seven projects pull the population directly from public sources — a public industry registry and a public procurement dataset — rather than starting from a purchased list. When the buyer population is publicly listed somewhere, that listing is a better universe than any commercial database.
Fix the wrong-buyer filter — the ICP was the downstream supplier, not the top-level counterparty
The first pass off the procurement data returned the top-level counterparty on each record rather than the downstream supplier, which was the wrong buyer entirely; the client caught it on review of the sample list. The filter was rebuilt to isolate the downstream companies, using company name as the join key because the public source publishes records but no company domain or website — that missing domain is the single biggest practical limitation of the source and forces name-based matching with all its fuzziness. Several filtering passes brought the result to roughly 95% clean, and the residual error was stated to the client rather than smoothed over.
Watch the registry for change instead of re-pulling it
A change-detection workflow monitors the registry for newly listed companies and pushes alerts, rather than re-running a full extract on a schedule. It was built on a self-hosted open-source automation tool deployed on the client's own server so the client owns the runtime and the credentials from day one — the handover was designed in, not bolted on.
Monitor social for intent language, then dedupe at the person level
A monitoring project captures companies whose staff post publicly about the topic the vendor sells around. The failure mode surfaced fast: people who post frequently get captured repeatedly, so the same individual arrived multiple times in the sheet distributed to SDRs. Person-level uniqueness had to be added as an explicit step — a monitoring feed is a stream of events, and turning it into a target list requires a deduplication layer that a static list build never needs.
Score signals and carry the evidence with the score
Each signal contributes one point to a rolling score field on the record, with a companion summary field that carries the actual evidence — the URL of the post or the job listing that triggered it. A score with no evidence behind it gets ignored by reps within a week; a score with a clickable reason gets used.
Route to reps where the reps already work
Round-robin assignment runs in the enrichment platform and writes to a live-syncing shared sheet. This was chosen over channel-based alerting specifically because it only required rep names to stand up, where the alternative needed per-rep identifiers — the cheapest routing that actually gets used beats the better one that stalls on setup.
Control enrichment credits at the decision points
Automatic enrichment on the social-monitoring path was deliberately paused so SDRs could manually qualify a company before any enrichment spend landed on it. Separately, the client challenged whether a per-company AI research check should be running across thousands of rows at all, and the gating logic was tightened in response. Both are the same discipline: enrichment cost belongs behind a qualification gate, not in front of it.
Give the signals a permanent home in the CRM
New contact- and company-level properties were specified and explicitly approved by the client before the build, so the signal score, the signal summary and the registry-status booleans had somewhere durable to live. Where the client already had a suitable boolean property, it was reused and populated from the registry project rather than duplicated.
Close out with enablement, not with a dependency
The engagement ended with a packaged documentation and enablement guide covering all seven projects plus screen-recorded walkthroughs, so the client's own team could edit target job titles, enrich companies and contacts on demand and push to the CRM without coming back to us.
#Outcomes
Seven signal and enrichment projects delivered
All seven delivered within roughly ten weeks, with a documentation and enablement pack plus video walkthroughs handed over at close.
A cleaned buyer universe filtered out of a public dataset
The downstream-supplier population was filtered out of a much larger base of public records at roughly 95% precision on the buyer-type split, with the residual error rate published rather than hidden.
Signals live in the CRM as first-class properties
Signal score, evidence summary and registry-status flags stored as approved contact and company properties rather than in a spreadsheet.
Enriched contacts delivered for rep quality testing before scale-up
A small first batch of enriched contacts with email and phone was delivered specifically so SDRs could judge list quality and finalise target job titles before the enrichment was run at volume.