# Campaign in CRM

Local use of Campaign (mirror) in the CRM.

[Shared definition and source fields](/systems/core/campaign).

Core owns the campaign objective, audience, dates and lifecycle. CRM reads the 16-field Sync - Campaign contract and adds Deals (Campaign) plus six readiness helpers. Deals (Campaign) is the inverse of Deal.Campaign°: it lists the Deals that came from the campaign, and those Deals are the campaign's results. The verified sync is automatic and one-way; consumer editing is off, new source fields are not included automatically, and deleted source rows are retained. Retire in Core with deletedAt; hard deletion may leave a stale mirror.

## Local usage

| Field | Storage | Current configuration |
| --- | --- | --- |
| CRM Campaign Check | Formula | Calculated; see rules below. |
| Deals (Campaign) | Linked records | [Deal](/systems/crm/entity-deal); inverse of Campaign° on the Deal. Lists the Deals linked to this campaign; edit the link on the Deal |
| CRM Accountable ID | Lookup | Via Accountable (Organization)* → CRM Record ID |
| CRM Membership Company ID | Lookup | Via Accountable (Membership)* → CRM Business Unit ID |
| CRM Membership Status | Lookup | Via Accountable (Membership)* → Membership Status |
| CRM Organization Count | Linked record count | Via Accountable (Organization)* |
| CRM Membership Count | Linked record count | Via Accountable (Membership)* |

## Local rules

### CRM Campaign Check

```text
IF(NOT({coreId}),"⚠ Missing campaign UUID. ","") & IF(NOT({Description*}),"⚠ Complete objective in Core. ","") & IF(NOT({Audience Definition*}),"⚠ Complete audience in Core. ","") & IF({CRM Organization Count}!=1,"⚠ Select one campaign organization in Core. ","") & IF({CRM Membership Count}!=1,"⚠ Select one campaign membership in Core. ","") & IF(ARRAYJOIN({CRM Membership Status})!="Active","⚠ Campaign membership must be active. ","") & IF(AND({CRM Accountable ID},ARRAYJOIN({CRM Accountable ID})!=ARRAYJOIN({CRM Membership Company ID})),"⚠ Campaign membership company mismatch. ","") & IF(NOT({Start Date*}),"⚠ Set campaign start in Core. ","") & IF(AND({End Date°},{Start Date*},{End Date°}<{Start Date*}),"⚠ Campaign end precedes start. ","") & IF({deletedAt},"⚠ Campaign retired. ","")
```

## Maintenance

Correct shared facts at their owning source and local links in CRM. A table name or field description alone does not verify sync direction, field mapping, refresh interval or API write support. Campaign has a separately verified contract; do not generalize it to the other mirrors.

[Domain boundaries](/systems/crm/architecture) · [All entities](/systems/crm/entities)