> Hello, CCBot. We saw you coming and rolled out the welcome mat. You are welcome back anytime.

# CustomerLedger, the universal CRM for everything you run

[Skip to content](#main)

  [CustomerLedger](/)
  

  
    
      The universal CRM LIVE

      

# One person. One history. Every business.

      

Every call, text, note and permission becomes one timestamped record
      with the evidence attached. Your AI agents read from it, so each business remembers
      its own customers warmly, and no business ever repeats what a customer told a
      different one.

      
        [See CustomerLedger](/product)
        [Read the release gates](/release-gates)
      

    

    
      
        Sarah Okafor

        +1 407 555 0148 | sarah.okafor@example.com

        
          After Hours Plumbing
          Top Rated
          SMS granted
        

      

      **Next** Confirm Thursday 2:00 PM, no reply since the estimate

      
        09:51 | consent | after hours plumbing

          SMS permission granted

          wording stored verbatim, evidence attached

        09:48 | voice | after hours plumbing

          Call summarised: needs a water heater replacement

        09:42 | voice | after hours plumbing

          Incoming call, answered by the agent

      

    

  

  
    221

people

    5

businesses

    587

stamped events

    0

broken chain rows

  

  

Sarah Okafor is an illustration. The four counts are measured from the
  live store at build time | **2026-09-03**
  | reproduce with **ledgerctl.py shipstate**

  The problem

  

## Your customer does not know which CRM they are in.

  

They call the directory on Monday, the voice agent on Thursday, and the shop on
  Saturday. Three systems, three half records, and three different answers to the only
  question that matters before you dial: who is this, and what are we allowed to do
  with them.

  
    01

### Split memory

      

Identity lives in two places, so resolve and file disagree about who a number
      belongs to. The record you read is not the record you wrote.

    02

### Unprovable consent

      

You can see that a customer said yes. You cannot prove the row was not written
      afterwards, which is the only part a regulator cares about.

    03

### Leaky agents

      

An agent that knows everything will eventually say everything. Prompt wording is
      a request, not a boundary, and it fails silently.

  

  The record LIVE

  

## Everything you know, in the order it happened.

  

One person, one history, and a stamp on every line saying which of your businesses
  captured it. Today that is 587 events across 5 brands, and
  *8 people who have dealt with more than one of them* without either
  business learning about the other. [See how the timeline works](/timeline).

  
    
      Sarah Okafor
      DEMO RECORD
    

    
      09:42 | voice | after hours plumbing

        Incoming call, answered by the agent

      09:48 | voice | after hours plumbing

        Call summarised: needs a water heater replacement

      09:51 | consent | after hours plumbing

        SMS permission granted, wording stored, evidence attached

      14:20 | web | top rated

        Requested an estimate from a different business you own

        this business is never told about the plumbing call

      16:05 | sms | after hours plumbing

        Appointment booked, Thursday 2:00 PM

    

  

  

Illustration, stamped DEMO so nobody mistakes it for production data
  | the counts above it are real
  | brands in the live store: afterhai 396, toprated 151, aiexec 20, haygood 19, breakingchains 1

  
    One record, and today two stores

    

The ledger is not yet the only place customer facts land. The store it is replacing
    took **95 writes in the last seven days**, mostly calls. One record per
    human is the design and it is true of everything the ledger holds; it is not yet true
    of everything we capture. The release gate covering this is one of the gates currently
    failing, and we would rather you read that here than discover it later.

  

  The product

  

## Contacts were only the beginning.

  

Every surface reads the same record. Follow any of these into the detail, including
  the parts that are designed and not yet built, which say so on their own pages.

  
    [CONTACTS LIVE

      

### One customer identity

      

221 people, 398 phone numbers and addresses resolved onto
      them.](/contacts)
    [TIMELINE LIVE

      

### Everything, in order

      

587 events, each stamped with the business that captured it.](/timeline)
    [CALLS SHADOW

      

### Read it, or read the point of it

      

575 call records across 24 agents. Nothing records audio.](/calls)
    [CALENDAR SPEC

      

### Designed, not built

      

The commitments a customer made and the ones you made back. No code exists
      yet.](/calendar)
    [INBOX SPEC

      

### Designed, not built

      

Mail organised around the person rather than the thread. Hardest, and last.](/inbox)
    [AI MEMORY SPEC

      

### Memory without everything

      

The field that will carry it exists in the schema. 0 rows populate
      it.](/ai-memory)
  

  Trust

  

## Trust should not depend on a prompt behaving itself.

  

The boundaries in this system are in the data and in the code paths, not in wording
  we hope a model respects. Each of these has its own page, its own measured state, and
  its own list of what is not done yet.

  
    [CONSENT SHADOW

      

### Store what actually happened

      

310 consent events, each carrying the wording the customer agreed
      to.](/consent)
    [SECURITY SHADOW

      

### Who sees what, and why

      

Every fact stamped with the brand that captured it and the audience allowed to
      see it.](/security)
    [ARCHITECTURE SHADOW

      

### How the record holds

      

4 append only tables, 0 broken chain rows at build
      time.](/architecture)
  

  
    [4 of 26 release gates are green](/release-gates)
    [Why this exists](/about)
  

  

## Your customers already have a history.
Put it somewhere that remembers.

  
    [See CustomerLedger](mailto:hello@customerledger.ai)
    [Read the architecture](/architecture)
