← All work

Flexible-workspace B2B company · 2025–26

Score velocity tracking

Daily snapshots of every account score, with alerts on how fast a score moves rather than how high it sits.

14K+ companies snapshotted daily
Diagram: Score velocity tracking

The problem

Account scores showed where a company stood, not where it was heading. A company at 18 that was at 5 last week is hotter than one sitting at 35 for months. Reps had no way to see that.

What I built

  • Daily snapshot. A morning job pulls scores for 14,000+ companies from the CRM and stores them in Postgres.
  • Change detection gate. If nothing moved, the run exits in under a second. That happened on 13 of 14 days.
  • Delta query. Compares each score with its last different value, not with yesterday.
  • Four alert tiers. From large jumps on already-strong accounts down to a monthly roll-up of slower movers. Urgent alerts post to Slack right away. The rest go in a digest.
  • CRM writeback. Four custom properties written back for the companies that moved.
  • Monthly compaction to keep the snapshot table small.

Design decisions

  • Comparing against the last different score handles signals that refresh every two weeks, with no code change.
  • Absolute change instead of percent. Near zero, percentages are meaningless.
  • Write back only the movers, about 50 to 200 companies, not all 14,000. That protects the API quota.
  • Postgres instead of spreadsheets. 14,000 rows a day would hit spreadsheet limits within weeks.

Result

Sales sees who is heating up before they pick up the phone, with no manual monitoring. On go-live it surfaced several large jumps across target accounts.

← All work