Seven watches keep the list current
Each signal is one Crustdata watch. It checks every day and posts what changed to your webhook, so the list updates itself instead of waiting for a monthly pull. These are the exact request bodies, ready to send.
Run it on a client's accounts
The source code (top right) is a small Node app with no dependencies. Paste the client's named accounts into a text file, one name or domain a line, and run it with a Crustdata key. It pulls the same signals live and serves this page; "Your list" on the Named accounts page does the same from the browser.
CRUSTDATA_API_KEY=your_key node server.mjs --live --list accounts.txt
How the score works
An account's score is each signal's weight times the number of times it fired in the window, counting up to three of each. Change the weights on the Named accounts page and the list re-ranks at once.
Receive the webhooks
The same server is the receiver. Point each watch's notification at /webhooks/crustdata on your host. It checks the x-crustdata-signature header (HMAC-SHA256 of the timestamp and raw body, keyed by your API key), turns each delivery into the signals above, and keeps them in data/inbox.ndjson.
{"type": "leader", "company": "…", "person": "…", "title": "VP of Sales", …}
Add a signal of your own
Every signal is three small pieces: the query that finds it (crustdata.mjs), the rule that turns a record into a signal (feed.mjs, with its default weight), and the watch body that keeps it current (watches() in crustdata.mjs). Anything on a person, company or job record can be one: a new office, a tech stack change, a jump in followers.