> ## Documentation Index
> Fetch the complete documentation index at: https://docs.deandesk.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Membership Management

> Manage institution-wide memberships — plans, imports, metadata, family groups, and entitlements.

<Info>
  **Institution-level feature** — managed from your institution dashboard at `deandesk.com/dashboard`. Memberships are scoped to your institution, not to individual schools. See [Institutions & Schools](/getting-started/institutions-and-schools) for how these levels relate.
</Info>

DeanDesk includes a full membership management system at the institution level. You can create membership plans, accept payments through Stripe, import members in bulk, track membership history, and use membership status to gate access to products and discounts across your schools.

## What is a membership?

A **Membership** represents a person's paid or manually-assigned membership in your institution. It is separate from — and sits alongside — the Identity and User account systems.

### How Membership, Identity, and User relate

```
Institution
  └── Identity (login credential — username, email, password)
        └── Membership (membership entitlement — plan, billing, status, metadata)
        └── User in School A (school profile — roles, courses, grades)
        └── User in School B (school profile — roles, courses, grades)
```

| Concept        | What it is                                                                                                                                                          | Scope            |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
| **Identity**   | A login account for your institution. Holds credentials (username, email, password) and institution-level roles.                                                    | Institution-wide |
| **User**       | A profile inside a specific school. Holds school-specific roles, course enrollments, grades, and billing. Created automatically when an Identity accesses a school. | Per school       |
| **Membership** | A membership entitlement tied to an Identity. Tracks the membership plan, billing status, term dates, contact info, and custom metadata.                            | Institution-wide |

An Identity can exist without a Membership (they are just an account holder). A Membership requires an Identity to be linked to — though during bulk import, memberships can be queued for Identities that don't exist yet and will be linked automatically when the Identity is created.

<Note>
  A person has **one Identity** per institution, **one Membership** per institution (at most), and **one User per school** they access. These are three separate records that work together.
</Note>

***

## Membership plans

Before you can add members, you need to create at least one membership plan. You can publish **multiple plans within the same tier** (e.g. a "Standard Family" and a "Supporter Family" plan), and each plan has its own pricing, features, and display order on the public landing page.

### Creating a plan

<Steps>
  <Step title="Open Membership settings">
    From your institution dashboard, go to **Memberships → Configuration**.
  </Step>

  <Step title="Choose a tier type">
    DeanDesk supports two tier types:

    | Tier           | What it includes                                                                                      |
    | -------------- | ----------------------------------------------------------------------------------------------------- |
    | **Individual** | A single-person membership                                                                            |
    | **Family**     | A membership that covers a primary member plus spouse and children (configurable max size, default 5) |

    You can create as many plans as you like within each tier. Plans are grouped by tier on the public membership landing page under **Individual Memberships** and **Family Memberships** headings.
  </Step>

  <Step title="Set pricing">
    Configure the pricing options you want to offer:

    * **Monthly price** — recurring charge every month
    * **Annual price** — recurring charge once per year

    You can enable one or both billing intervals.
  </Step>

  <Step title="Add plan details">
    Fill in the plan name, description, and optionally:

    * **Features** — a list of benefits shown to prospective members
    * **Terms** — terms and conditions members must accept when subscribing
    * **Policies** — free-text policy text shown alongside the plan
    * **Max family size** — for family plans, the maximum number of members (default 5, max 20)
    * **Display order** — controls the order plans appear in their tier section on the landing page
    * **Active toggle** — hide a plan from the landing page without deleting it
  </Step>

  <Step title="Save">
    Click **Save**. DeanDesk automatically creates the corresponding Stripe product and price objects in both your test and live environments.
  </Step>
</Steps>

<Tip>
  Use multiple plans within a tier to offer pricing variations like "Standard" vs "Supporter", or to surface special-event or seasonal plans without retiring your default plan.
</Tip>

### Membership term settings

Configure when your membership year starts and ends, and how to handle members who join mid-term.

<Steps>
  <Step title="Open Membership settings">
    Go to **Memberships → Settings** in the institution dashboard.
  </Step>

  <Step title="Set the annual term dates">
    Define the start and end of your membership year (e.g. January 1 through December 31, or September 1 through August 31).
  </Step>

  <Step title="Choose a late join policy">
    When someone signs up for an annual plan after the term has already started:

    | Policy         | What happens                                                                     |
    | -------------- | -------------------------------------------------------------------------------- |
    | **Full price** | The member pays the full annual amount regardless of when they join              |
    | **Prorated**   | The member pays a reduced amount based on the remaining time in the current term |
  </Step>
</Steps>

***

## Adding members

There are three ways to add members: self-service signup, manual activation, and bulk import.

### Self-service signup

Members can purchase a membership themselves from your institution portal.

1. The member visits your institution's portal and clicks to join.
2. They see the available plans with pricing (including prorated amounts if applicable).
3. They select a plan and billing interval, enter payment details, and accept the terms.
4. Stripe processes the payment and DeanDesk creates the membership automatically.
5. The member receives a confirmation email for their purchase.

### Manual activation

Admins can activate memberships on behalf of individuals — useful for members who pay in person, sign up over the phone, or receive complimentary memberships. Go to **Memberships → Members** and click **Manual Activate** to open a four-step wizard.

<Steps>
  <Step title="Identity">
    Pick the identity the membership belongs to. Search for an existing identity, or create a new account for the member — a built-in duplicate search helps you avoid creating a second record for someone who already exists.
  </Step>

  <Step title="Details">
    Fill in the member's name, email, phone, address, and spouse details.
  </Step>

  <Step title="Payment">
    Choose how the membership is paid:

    | Option                  | When to use it                                                                                                       |
    | ----------------------- | -------------------------------------------------------------------------------------------------------------------- |
    | **External source**     | The payment already happened outside DeanDesk — record it as **Cash**, **Venmo**, **Zelle**, **Check**, or **Other** |
    | **Process payment now** | Charge a saved or new card or bank account. Payments settle in your institution's connected Stripe account.          |

    Payment source is searchable on the Members page and is one of the filters in the [custom report builder](#custom-report-builder).
  </Step>

  <Step title="Membership">
    Choose the membership plan and tier, set the referral source, add an internal note, and fill in any custom fields. Review the summary, then click **Process and Activate**.
  </Step>
</Steps>

When the wizard creates a new identity, the member receives an account email — "Your DeanDesk account for \[your institution]" — with the login URL and a temporary password to change on first sign-in.

### Bulk import

Import hundreds or thousands of members at once using the **Bulk Import** wizard. The wizard walks you through column mapping, validation, and execution, and tracks every import as a job you can revisit and retry.

<Steps>
  <Step title="Open Bulk Import">
    Go to **Memberships → Bulk Import** in the institution dashboard.
  </Step>

  <Step title="Upload your CSV">
    Upload a CSV containing your member rows. The wizard parses the file and shows the headers it detected.
  </Step>

  <Step title="Map your columns">
    Match each CSV column to a DeanDesk field (email, first name, last name, plan, dates, custom metadata fields, etc.). Click **Auto-Map** to have DeanDesk match columns by name automatically — you can then adjust any mappings that didn't resolve correctly.
  </Step>

  <Step title="Validate">
    Run validation. The wizard reports any rows that have missing required fields, invalid emails, unknown plan IDs, or metadata values that don't match the schema. Fix issues in your source file and re-upload, or proceed with the valid rows only.
  </Step>

  <Step title="Execute the import">
    Run the import. DeanDesk processes each record:

    * **If the Identity exists**: creates the membership immediately
    * **If the Identity doesn't exist yet**: queues as a pending member
    * **If the person already has an active membership**: skipped
  </Step>

  <Step title="Review the job">
    Each import is saved as a job in **Memberships → Bulk Import**. Open a job to see row-level results — created, queued, skipped, failed — with the failure reason for each row. You can retry failed rows after fixing your source data.
  </Step>
</Steps>

### Historical backfill from an import

Once a bulk import job has completed, you can use it as the source for a **historical backfill** — converting the imported rows into historical membership periods on existing member profiles. This is useful when you import a snapshot of a prior membership year and want to keep it as a closed historical period rather than an active membership.

<Steps>
  <Step title="Open the completed import">
    On **Memberships → Bulk Import**, click into a completed job.
  </Step>

  <Step title="Open the Historical Backfill panel">
    Scroll to the **Historical Backfill** card on the job detail page.
  </Step>

  <Step title="Pick the target plan and year">
    Select the live membership plan and the membership year you want to attribute the rows to.
  </Step>

  <Step title="Run the backfill">
    DeanDesk creates a historical period on each member's profile, scoped to this import job. Re-running the backfill is safe — only rows that haven't been backfilled yet are processed.
  </Step>
</Steps>

<Note>
  Backfill is scoped per-import-job, so different imports can be attributed to different plans and years without interfering with each other.
</Note>

### Awaiting-login members

When a membership is created for someone whose Identity doesn't exist yet, it is saved as an **awaiting-login** member. The Members page has tabs that segment the list:

| Tab                     | What it shows                                                           |
| ----------------------- | ----------------------------------------------------------------------- |
| **All current**         | Every active membership, regardless of login state                      |
| **Members with logins** | Current memberships linked to an Identity that has signed in            |
| **Awaiting logins**     | Memberships waiting on the person to create an Identity                 |
| **Historical**          | Past membership periods (see [Membership history](#membership-history)) |

Awaiting-login records are automatically linked when the person registers:

* When a new Identity is created (via signup or invitation), DeanDesk checks for any awaiting records that match the email or username.
* If a match is found, the membership is created and linked to the new Identity automatically.
* You can also manually trigger a sync or link individual awaiting records from the **Awaiting logins** tab.

### Member detail page

Clicking a row in any Members tab opens a dedicated detail page at `/dashboard/memberships/members/[kind]/[id]` (where *kind* is `current`, `awaiting-login`, or `historical`). The page is organized into tabs — **Overview**, **Manage**, **Payments**, **Timeline**, and **Connect** — with panels like **Membership Snapshot**, **Membership Actions**, **Payment History**, and **Custom Member Fields**. Awaiting-login and historical members show their saved import snapshot.

Across the tabs you can:

* Re-link the membership to a different Identity
* Edit contact info, address, payment source, referral source, and custom metadata
* Edit spouse details on the membership
* Change the plan or billing interval
* View transaction history
* Add or edit history periods (historical members)
* Merge duplicate profiles when the same person appears more than once
* Manually change membership status

<Note>
  Plan upgrades are prorated and charged immediately. Downgrades and credits apply to the member's next invoice.
</Note>

#### Household and spouse

The **Household and Spouse** panel on the member detail page shows the member's family group, the number of active members in it, and the spouse's name, email, phone, and linked identity.

***

## Membership metadata

Custom metadata fields let you store institution-specific information on each membership — volunteer roles, committee assignments, t-shirt sizes, dietary restrictions, or anything else your organization needs to track.

### Configuring metadata fields

<Steps>
  <Step title="Open metadata settings">
    Go to **Memberships → Metadata** in the institution dashboard.
  </Step>

  <Step title="Add a field">
    Click **Add Field** and configure:

    | Setting           | What it controls                                                          |
    | ----------------- | ------------------------------------------------------------------------- |
    | **Field name**    | The unique identifier for the field (used in imports and APIs)            |
    | **Field label**   | The display name shown to admins and in reports                           |
    | **Field type**    | The data type — see table below                                           |
    | **Required**      | Whether the field must be filled in when creating or editing a membership |
    | **Options**       | For select and multiselect types, the list of allowed values              |
    | **Default value** | A default value pre-filled for new memberships                            |
    | **Description**   | Help text shown to admins                                                 |
  </Step>
</Steps>

### Supported field types

| Type            | Description                  | Example                                   |
| --------------- | ---------------------------- | ----------------------------------------- |
| **Text**        | Short text input             | "Board Member", "Room 204"                |
| **Textarea**    | Long text input              | Notes, special requests                   |
| **Number**      | Numeric value                | Years of membership, age                  |
| **Date**        | Date picker                  | Join date, certification expiry           |
| **Boolean**     | Yes/No toggle                | "Volunteer?", "Newsletter opt-in"         |
| **Select**      | Single choice from a list    | "Committee: Finance / Education / Events" |
| **Multiselect** | Multiple choices from a list | "Interests: Sports, Arts, Technology"     |

### Where metadata appears

* **Member list and detail views** in the institution dashboard
* **Bulk import** — metadata values can be included in import data and are validated against the schema
* **Reports** — custom metadata columns are included when exporting membership reports as CSV
* **Discount rules** — metadata fields can be used as conditions in rule-based discounts (see [Membership entitlements](#membership-entitlements) below)

***

## Referral source tracking

To understand where new members come from, you can configure a **Referral Source** dropdown that appears during membership signup.

<Steps>
  <Step title="Define your referral options">
    In **Memberships → Configuration**, add the referral options you want to track (e.g. "School admissions", "Friend referral", "Social media", "Newsletter", "Event").
  </Step>

  <Step title="Members select on signup">
    The dropdown is shown during the signup flow. The selected option is saved on the membership record.
  </Step>

  <Step title="Report on referral channels">
    Referral source is included as a column in the bulk export and in custom reports, so you can see which acquisition channels are driving signups.
  </Step>
</Steps>

## Demographic sync

Memberships can store demographic data on each member — useful for community reporting, grant applications, and program eligibility. Demographic fields collected during signup or import are synced into the membership record automatically.

<Note>
  Demographic data is institution-private. It is never exposed to schools or appears in public-facing surfaces.
</Note>

## Family memberships

When a member subscribes to the **Family** tier, DeanDesk creates a family group that the primary member can manage.

### Family roles

| Role                 | Who                                                    | How they're added                               |
| -------------------- | ------------------------------------------------------ | ----------------------------------------------- |
| **Primary**          | The account holder who purchased the family membership | Automatically assigned                          |
| **Spouse**           | The primary member's partner                           | Invited by email — must accept the invite       |
| **Child (13+)**      | A child aged 13 or older                               | Invited by email — must accept the invite       |
| **Child (under 13)** | A child under 13                                       | Listed by name only (no email/account required) |

### Adding family members

The primary member (or an admin) can invite family members from the membership portal:

1. Click **Invite Family Member** and choose the role (spouse or child).
2. For spouse and children 13+, enter their email. DeanDesk creates an Identity for them if one doesn't exist and sends an invitation email.
3. For children under 13, enter their name only — they are listed on the family group without an account.
4. Invited members accept the invitation by signing in and confirming.

The family group size is capped by the plan's **max family size** setting.

***

## Membership entitlements

Membership status can be used to control access and pricing across your schools.

### Members-only products

When creating or editing a tuition product, you can set its **access** to **Members Only**. When a product is marked as members-only:

* Only users with a valid, active membership at the institution level can select and purchase it.
* Users without a membership see the product but are blocked from enrolling with a message indicating a membership is required.
* Admins can always bypass this restriction.

This is configured on the product's `tuitionAccess` setting (set to `members_only` instead of `all`).

<Tip>
  Use members-only products to offer exclusive tuition rates, premium courses, or special programs that are only available to paying members of your institution.
</Tip>

### Membership-based discounts

The [discount rule engine](/finance/discounts) can evaluate a user's membership status when deciding whether to apply a discount. Two membership-related fields are available as discount rule conditions:

| Field                     | Type                         | What it checks                                                                |
| ------------------------- | ---------------------------- | ----------------------------------------------------------------------------- |
| **Has Active Membership** | Boolean                      | Whether the user's Identity has a valid, active membership at the institution |
| **Membership Tier**       | Select (individual / family) | The tier type of the user's active membership                                 |

This lets you create discounts like:

* "10% off all tuition for active members"
* "Family plan members get \$50 off per child enrollment"
* "\$25 discount for anyone with an active membership"

These fields are evaluated automatically — you don't need to tag users manually. DeanDesk checks the user's linked Identity and current membership status in real time when the discount rules are evaluated.

***

## Membership history

DeanDesk maintains a historical record of all membership periods — both current DeanDesk-managed memberships and imported historical data.

### Historical profiles

Each person gets a **history profile** that tracks all their membership periods across time. This is useful for:

* Tracking long-term membership tenure for members who joined before you started using DeanDesk
* Importing records from a previous membership system
* Maintaining a complete audit trail of membership activity

### Importing historical data

Use the historical import to load past membership periods. Each imported record includes:

* The member's email (used to match or create a profile)
* The period's start and end dates
* An import label (e.g. "2022-2023 Membership Year")
* Plan name, tier type, and any metadata

Historical profiles are automatically linked to existing Identities when a matching email is found. If multiple profiles exist for the same person (e.g. from separate imports with different email addresses), you can merge them.

### Active membership sync

When a member subscribes or renews through Stripe, DeanDesk automatically adds a period to their history profile. This keeps the historical record up to date without manual intervention.

***

## Membership reports

The **Reports** workspace at **Memberships → Reports** lets you preview and download canned reports, or build a custom report with the filters you need.

### Canned reports

| Report                 | What it includes                                                       |
| ---------------------- | ---------------------------------------------------------------------- |
| **Active Members**     | All currently valid memberships with contact info and metadata         |
| **Manual Memberships** | Memberships created manually (not through Stripe)                      |
| **DeanDesk Billing**   | Stripe-backed memberships with subscription details and revenue        |
| **Expiring Soon**      | Memberships approaching their end date — useful for retention outreach |

### Custom report builder

Build a report tailored to a specific question by filtering on:

| Filter                    | Values                                                      |
| ------------------------- | ----------------------------------------------------------- |
| **Status**                | Active, expired, cancelled, pending                         |
| **Tier**                  | Individual, family                                          |
| **Plan**                  | Any of your published plans                                 |
| **Payment source**        | DeanDesk (Stripe), Cash, Venmo, Zelle, Check, Other         |
| **Days until expiration** | Numeric range — surface members expiring in the next N days |

Preview results in the dashboard, then download as CSV. Reports include all standard fields plus any custom metadata columns you've configured.
