How ackDB works

This page explains how ackDB structures data and how to think about storing and querying it.

1. Member, Company, and Person

At the top of ackDB's mental model are three objects. Keep them separate before thinking about how data connects them:

ackDB · top-level objectsMembertop-level objectyour internal teammaterep · csm · account owneroperates and owns recordsCompanytop-level objectone customer accountcustomer · prospectowns its event timelinePersontop-level objectone human identityrecognized across sourcespersists through company changes
Three objects, three questions: who on your team, which account, and which human. Their relationships come next.

A Member belongs to your own team. A Company is one account in your customer universe. A Person is one human, independent of where they work.

Member and Person are deliberately different. A sales representative or customer success manager is a Member because they operate and own records inside ackDB. The humans appearing in customer data are People, whose identities remain intact across sources and company changes.

A Contact is a Person's relationship with one Company. When that relationship is current, the Contact is active and carries company-specific context such as title and work email. If it ends, the Contact becomes former while the Person remains the same.

2. What is ackDB composed of?

Your customer activity is composed of three things:

  • Events say what happened.
  • Attributes say what is true now.
  • Identity links say which record the data belongs to.

Events make up source packs.

Events

An event is one timestamped fact from one source: a Slack message, a paid invoice, a booked meeting. Every event lands on exactly one Company, and is tied to a Contact when it involves a specific person. Events are append-only.

Here are two events shown as the useful details ackDB keeps together:

job changepersonJane DoecompanyBluebeamnew roleDirector of Regulatory AffairschangeNew companydateJun 15, 2026LinkedInlinkedin.com/in/janedoedomainbluebeam.comslack messagemessage“The Q4 pricing proposal is attached.”channel#acme-corpsenderjane.doeemailjane.doe@acme.comcompanyAcme · acme.comdateAug 11, 2026
Two events, shown as compact groups of the useful details ackDB keeps together.

Attributes

Attributes are current facts associated with one Company, Person, or Contact: lifecycle stage, location, owner. You can define your own attributes on each of them.

Identity links are external identifiers associated with a record: domain for a Company, linkedin_url for a Person, email_address for a Contact, and per-source ids such as stripe_customer_id. They keep the same company and the same human as one record across all events.

3. Source packs

A combination of events is called a source pack. It describes what one source can send: structure, not the customer records themselves.

Instead of designing and maintaining a custom pack for every source, use the pre-defined source packs, already structured for storage and querying in ackDB. Each event type declares:

  • Company-scoped data connects directly to a Company.
  • Person-scoped data connects to a Person and to the Company through that Person's Contact.

Either way, every event is company-scoped at the root: it always lands on a Company, and can also be tied to one of that Company's Contacts.