The core entities
Contacts
The people or organisations you engage — your supporters. Carry static attributes like age, gender, postcode, and acquisition source.
Offers / Content / Treatments
The things a contact can interact with — a mailing, a telemarketing call, an email, an appeal. The “what we sent”.
Responses
An interaction between a contact and an offer — a gift, a click, an open, a refusal. The “what happened”. Responses carry a timestamp and, for gifts, an amount.
Subscriptions
A standing agreement — a recurring gift / direct debit / standing order — with a start date and an optional end date (open-ended while active).
How the entities relate
A Contact receives an Offer; their reaction is a Response; if they commit to give regularly, that’s a Subscription. Models and analytics are built by combining these — for example:- DM propensity learns from Responses to past Offers, per Contact.
- Subscription churn learns from Subscriptions and their Responses (payments).
- Income concentration (analytics) aggregates gift Responses across Contacts.

Field categories
When you map a source, each column falls into one of these roles:| Category | Examples |
|---|---|
| IDs | ContactID, OfferID, ResponseID — the keys that link entities. |
| Attributes | age, gender, postcode, income index — descriptive fields. |
| Classes & types | offer type, content category, response type (gift / click / refusal). |
| Valid from | when a record became valid — lets Allyy reason about change over time. |
| Mandatory fields | required for an entity to be usable (e.g. subscription start date). |
| Optional fields | enrich an entity but aren’t required (e.g. subscription frequency). |