← Builds
Your own data

Put every signal in one table

Every source for this client writes into the same place: one signal table where each row is linked to one company. On top of it sits a routing step and a human approval before anything sends.

Works ifYou run more than one signal source and want one view per account.

Built for · B2B SaaS · Europe
n8nPythonPrefectTrigger.devNeonHubSpot
Get the prompt for your coding agent

The system

~/builds/signal-layer
01Sources

Registries

Certs, targets, charters

Reports

Published PDFs

Competitors

Customers + engagers

Intent

Visits + profile views

Stage raw, per source
02Resolve

Once, at ingestion

One company per row

domainLinkedInnamefuzzyAIcreate
Neon
1,212 companies
One signal tabletype · company · source · date
03Approve

Human in the loop

Draft + context, a person sends

HubSpot
One view per account, every signal in it.

The signal

Everything that happened to an account, from any source, in one place.

Why it predicts a purchase

One signal is a hint. Three signals on the same company in the same month is a reason. You only see that if every source lands in the same table.

How it works

01

Stage raw, then bridge

Every source keeps its own raw table. A bridge step resolves each row to a company and writes one normalised signal: type, company, source URL, date.

02

Resolve once, audit always

Matching runs domain, LinkedIn, exact name, cleaned name, fuzzy, then an AI check, and every match stores which tier matched and why. You can always answer why a row landed on that company.

03

Route to a rep

Each account is routed to the pipeline a rep actually works, with every signal and its source in the note.

04

Pick the runtime for the job

Built in no-code first, moved to Python when a node silently returned zero rows, then to TypeScript jobs. Scheduled fan-out work earned the orchestrator. Scripts run by hand did not.

Build notes

  • Two reasons to move: a no-code node silently returned zero rows, and the hosted bill.
  • A migration claimed all flows were running. Only one of 14 had actually been triggered. Every flow was then run and checked by hand before merging.
  • Human approval stayed on purpose. The system drafts and explains, a person decides what goes out.
  • The profile-visit feed was mixing the agency owner's own LinkedIn visitors into the client's intent data. 18 of 41 signals were removed before they skewed anything.

Questions

What fields does every signal need?

Type, company, source URL and date. Everything else can live in an attributes column.

When is an orchestrator like Trigger.dev worth it?

For scheduled fan-out work with retries and dashboards. A script you run by hand does not need one.

More builds

All builds →
Your own data

Turn a vertical database into a 3-touch outbound engine

A vertical database already lists your buyers with contacts, and a founder will make the closing calls.

Open→
Your own data

Turn website visitors into qualified leads

You already identify companies visiting your site.

Open→
Your own data

Build lists from data you already own

You have a CRM or database you have never fully worked.

Open→

The next step

Let's get started.