Contacts and companies

Contacts and companies for MSPs: your own objects, typed properties you can filter and segment on, field-level permissions, and the incumbent IT provider.

Contacts and companies

A normal CRM gives you custom fields. This gives you control of them.

Every CRM stores contacts and companies, and most let you add fields. Three things here are not standard: you can define whole objects of your own rather than bolting extra fields onto a contact, properties are organized into groups so a record does not become a wall of inputs, and permissions go down to the individual field — so a salary, a margin or a personal note can exist on a record that half the company can open. Then a scheduled hygiene run tells you what is wrong with the data, and waits for a human.

How it works

What you can actually change

Three layers, from the shape of the data to who may see one field of it.

Objects, not just fields

Define your own object with its own records when the thing you track is not a contact, a company or a deal — a site, an asset, an agreement, a vehicle. Custom fields make you distort an existing record until it half-fits. A custom object does not.

Properties in groups, with permissions per field

Properties are grouped so a record reads as sections rather than as a form. Access is then set per field, not just per record: a role can be granted the record and refused one column of it. That is the control that makes a shared CRM usable in a business with commercially sensitive data on the same customers everybody works.

Hygiene that reports rather than rewrites

A scheduled pass scores completeness and raises findings, and each finding is accepted or dismissed by a person. Companies needing attention collect in a review queue. There is exactly one exception and it is switchable: a deal carrying no marketing source at all is claimed from its contact’s touchpoints when those name precisely one, and the repair is filed as a finding carrying the value applied. It only ever fills a field that is empty, and it is the only repair hygiene makes on its own.

In the product

The queue of what needs a human decision.

The company review queue in MADDOX: a list of companies with fewer than ten enriched employees awaiting review, each row showing employee count, industry, location, contacts and a fit column, with Mouth Of The Canyon Dental flagged as unreviewed.
permission_granularity: field hygiene_findings: accept or dismiss auto_edits: empty fields only Sample data — illustrative product UI, not a performance claim.

The mechanism

Properties you can select on, and the account’s current provider

A field you can store but not filter on is a note with extra steps. Custom properties here are typed, and the type is what makes them usable everywhere a list of people or companies is built.

Typed properties, filterable everywhere a list is built

A property is defined with a type — text, number, date, a single choice, several choices — and its values are stored as that type. That is what lets you ask for “companies whose services include managed IT” or “contacts whose contract ends this quarter” and get a real answer rather than a text search.

The same condition works in three places: the filters on the contact and company lists, campaign audiences, and the questions Ask Maddox answers about who is in which list and who could be worked next. All three go through one compiler, so a condition means the same thing on every screen, and the workspace boundary is enforced in that one place rather than re-implemented three times.

Saved as a segment that keeps itself current

A filter worth keeping becomes a dynamic segment: the conditions are saved, not the list, so a company that gains the property tomorrow is in the segment tomorrow without anybody re-running an export. Groups of conditions can be combined with and, or and not, and negation is applied to whole groups so a “not” never quietly escapes the rest of the filter.

Who supports their IT today

Every company carries a field for its incumbent IT provider — the firm you would be replacing. You can set it by hand, bring it in on an import and see it as a column in the company list. A value a person entered or imported is final; no automated pass overwrites it.

Workspaces running the IT audit module, which is off until a workspace turns it on, can also have it filled from the conversation where the buyer named their provider, with the sentence it came from attached. Elsewhere it is a field your team keeps, and it feeds the battle-card context on the deal.

Who it is for

For whoever owns the data, not just the deals

The people who feel this are the ones who inherited a database rather than started one.

  • An operations lead who has just migrated data and needs to know what is missing.
  • A business tracking something a contact record was never shaped for.
  • Any team where one field on a shared record should not be visible to everyone.
  • A marketer whose segments only work if job titles and industries are consistent.

Questions

The things people actually ask.

What is a custom object, exactly?

A record type you define, with its own records, rather than extra fields hung off a contact. If you track sites, assets or agreements, they become first-class things you can relate to contacts and companies instead of a text field somebody keeps up to date by hand.

How granular are permissions?

To the individual field. A role can be allowed a record and refused a specific property on it, which is a different and much more useful thing than hiding a whole object from a team who genuinely need most of it.

Will hygiene change my data?

Almost never, and where it does it is narrow and on the record. Completeness scoring and findings change nothing; a person accepts or dismisses each one. The single exception is marketing-source attribution: a deal with no source at all is claimed from its contact’s touchpoints when those name exactly one source, never over a value somebody typed, and every such repair is filed as a finding you can read with the value it applied. It is a setting, so it can be switched off.

Can I filter and segment on my own fields?

Yes. Custom properties are typed, so they work as filters on the contact and company lists, in campaign audiences and in Ask Maddox’s audience questions, and a filter can be saved as a dynamic segment that keeps itself current. Saved views, search and bulk actions are there too.

Where does enrichment fit?

Enrichment fills blanks from your own records, the company’s website and a labelled model inference. Hygiene tells you which blanks matter. They are deliberately separate: one proposes values, the other decides what is worth chasing.

Bring in your worst list.

The interesting test is not the clean data. It is what the review queue says about the rest.