For the complete documentation index, see llms.txt. This page is also available as Markdown.

Data Mart Changelog

A version-by-version record of changes to the PEARS data mart: tables, columns, types, and how data is populated.

This page records changes to the PEARS data mart in reverse chronological order: tables and columns added, deleted, or deprecated. It is written for the analysts and developers who query the data mart directly, so it names tables and columns exactly as they appear in the database.

Releases without data mart changes are not listed. The main Changelog links here from each release that has them. For the standing list of everything currently deprecated, with the dates each was marked and removed, see Deprecated Tables and Columns.

NOTE: This changelog covers 2026 releases and beyond only. The page was created in September 2026, and the entries below it were compiled from the schema history at that time, so some changes were not announced when they shipped.

Released

26.16.4

New Columns

From Reporting Year 2027, Youth Programming collects race and ethnicity as one combined question, in the same columns added to program_activity_demographic in 26.16.0. Records in earlier reporting periods leave the columns below empty and keep using the existing race and ethnicity columns, which are unchanged. A 2027 record saved before this release may hold only the existing race and ethnicity counts, with the columns below empty.

  1. program_activity_youth

    • race_ethnicity_one_american_indian_alaskan_native, race_ethnicity_one_asian, race_ethnicity_one_black, race_ethnicity_one_hawaiian_pacific_islander, race_ethnicity_one_hispanic_latino, race_ethnicity_one_middle_eastern_north_african, race_ethnicity_one_white — Number of youth reporting that category as their only race or ethnicity.

    • race_ethnicity_mult_american_indian_alaskan_native, race_ethnicity_mult_asian, race_ethnicity_mult_black, race_ethnicity_mult_hawaiian_pacific_islander, race_ethnicity_mult_hispanic_latino, race_ethnicity_mult_middle_eastern_north_african, race_ethnicity_mult_white — Number of youth reporting that category among two or more races or ethnicities.

    • race_ethnicity_two_or_more — Number of unique youth reporting two or more races or ethnicities.

    • race_ethnicity_prefer_not_to_respond — Number of youth who preferred not to report a race or ethnicity.

    • race_ethnicity_unknown — Number of youth whose race or ethnicity is unknown.

26.16.0

New Columns

From Reporting Year 2027, PEARS collects race and ethnicity as one combined question in place of the separate race and ethnicity questions. A record in a 2027-or-later reporting period populates the columns below and leaves the existing race and ethnicity columns empty; records in earlier reporting periods keep using the existing columns, which are unchanged.

  1. direct_contact

    • race_ethnicity_one_american_indian_alaskan_native, race_ethnicity_one_asian, race_ethnicity_one_black, race_ethnicity_one_hawaiian_pacific_islander, race_ethnicity_one_hispanic_latino, race_ethnicity_one_middle_eastern_north_african, race_ethnicity_one_white — Number of Direct Contacts reporting that category as their only race or ethnicity.

    • race_ethnicity_mult_american_indian_alaskan_native, race_ethnicity_mult_asian, race_ethnicity_mult_black, race_ethnicity_mult_hawaiian_pacific_islander, race_ethnicity_mult_hispanic_latino, race_ethnicity_mult_middle_eastern_north_african, race_ethnicity_mult_white — Number of Direct Contacts reporting that category among two or more races or ethnicities.

    • race_ethnicity_two_or_more — Number of Direct Contacts reporting two or more races or ethnicities.

    • race_ethnicity_prefer_not_to_respond — Number of Direct Contacts who preferred not to report their race or ethnicity.

    • race_ethnicity_unknown — Number of Direct Contacts whose race or ethnicity is unknown.

  2. program_activity_demographic

    • race_ethnicity_one_american_indian_alaskan_native, race_ethnicity_one_asian, race_ethnicity_one_black, race_ethnicity_one_hawaiian_pacific_islander, race_ethnicity_one_hispanic_latino, race_ethnicity_one_middle_eastern_north_african, race_ethnicity_one_white — Number of participants reporting that category as their only race or ethnicity.

    • race_ethnicity_mult_american_indian_alaskan_native, race_ethnicity_mult_asian, race_ethnicity_mult_black, race_ethnicity_mult_hawaiian_pacific_islander, race_ethnicity_mult_hispanic_latino, race_ethnicity_mult_middle_eastern_north_african, race_ethnicity_mult_white — Number of participants reporting that category among two or more races or ethnicities.

    • race_ethnicity_two_or_more — Number of unique participants reporting two or more races or ethnicities.

    • race_ethnicity_prefer_not_to_respond — Number of participants who preferred not to report a race or ethnicity.

    • race_ethnicity_unknown — Number of participants whose race or ethnicity is unknown.

  3. pse

    • reach_percent_race_ethnicity_american_indian_alaskan_native, reach_percent_race_ethnicity_asian, reach_percent_race_ethnicity_black, reach_percent_race_ethnicity_hawaiian_pacific_islander, reach_percent_race_ethnicity_hispanic_latino, reach_percent_race_ethnicity_middle_eastern_north_african, reach_percent_race_ethnicity_white — Percentage of the PSE site reach reported as that category.

    • reach_percent_race_ethnicity_two_or_more — Percentage of the PSE site reach reported as two or more races or ethnicities.

  4. quarterly_effort

    • race_ethnicity_one_american_indian_alaskan_native, race_ethnicity_one_asian, race_ethnicity_one_black, race_ethnicity_one_hawaiian_pacific_islander, race_ethnicity_one_hispanic_latino, race_ethnicity_one_middle_eastern_north_african, race_ethnicity_one_white — Number of contacts reporting that category as their only race or ethnicity.

    • race_ethnicity_two_or_more — Number of contacts reporting two or more races or ethnicities. Quarterly Efforts record the two-or-more total only, with no per-category multiple-selection columns.

    • race_ethnicity_prefer_not_to_respond — Number of contacts who preferred not to report their race or ethnicity.

    • race_ethnicity_unknown — Number of contacts whose race or ethnicity is unknown.

26.15.0

New Tables

The Partners module replaces the legacy partnership module with one ongoing record per partner organization, and Partner Reports cover a partner across one or more reporting periods.

  • Partner records: partner, partner_crm_person, partner_activity, partner_file

  • Module links and their contribution types: action_plan_partner, action_plan_partner_contribution, program_activity_partner, program_activity_partner_contribution, pse_partner, pse_partner_contribution, indirect_activity_partner, indirect_activity_partner_contribution, success_story_partner, success_story_partner_contribution, response_partner, response_partner_contribution

  • CRM interaction links: crm_interaction_partner, crm_interaction_action_plan

  • Partner reports: partner_report, partner_report_reporting_period, partner_report_program_area, partner_report_assessment, partner_report_accomplishment_lesson, partner_report_file

  • Activities selected onto a partner report: partner_report_partner_activity, partner_report_action_plan_partner, partner_report_program_activity_partner, partner_report_pse_partner, partner_report_indirect_activity_partner, partner_report_success_story_partner, partner_report_response_partner

New Columns

  1. action_plan

    • includes_evaluation — Whether the plan includes the situation assessment and outcome sections.

  2. crm_interaction

    • interaction_date — Date the interaction occurred.

    • interaction_time — Time of day the interaction occurred, when one was given.

    • site_id — The site associated with the interaction.

    • site_name — Name of that site.

  3. crm_person

    • external_organization_name — Free-text name of the external organization this person is affiliated with.

Deprecated Columns — Action Required

  1. crm_interaction

    • interaction_datetime — Use interaction_date and interaction_time, which are now the source of truth.

    • is_note_private — Superseded by record sharing.

  2. crm_person

    • site_id — Use external_organization_name.

26.14.0

Deleted Tables

These tables were previously announced as deprecated, and have now been deleted. Any query still referencing them will fail.

  • event_registration_invoice_item — Use event_registration_invoice_line.

  • event_registration_invoice_history — Use the payment ledger: payment_ledger_entry and payment_ledger_entry_line.

Deleted Columns

These columns were previously announced as deprecated, and have now been deleted. Any query still referencing them will fail.

  1. event_registration_invoice

    • payment_status_id — Use status_slug.

    • payment_status_name — Use status_slug.

    • event_discount_id — Use event_registration_invoice_line.event_discount_id.

    • response_json — Use payment_transaction.provider_response.

    • session_id — Use payment_transaction.provider_session_id.

    • transaction_id — Use payment_transaction.provider_transaction_id.

New Columns

  1. event

    • canceled_at — When the event was canceled. Replaces cancelled_at, matching the spelling used by event_registration.

    • canceled_by_user_id — The user who canceled the event. Replaces cancelled_by_user_id.

Deprecated Tables — Action Required

  • list_payment_status — Superseded by list_invoice_status, which carries the invoice lifecycle status the application now writes. Nothing in PEARS references these values any more, so the rows are frozen at their final values.

Deprecated Columns — Action Required

  1. event

    • cancelled_at — Use canceled_at.

    • cancelled_by_user_id — Use canceled_by_user_id.

26.13.0

New Tables

  • event_session_group — Breakout blocks: sets of concurrent sessions a registrant picks at most one of.

New Columns

  1. event_registration

    • owner_user_id — The registered user. Differs from created_user_id when a staff member added the registration on the registrant's behalf.

    • waitlisted_at — When this registration joined the waitlist. Kept after it leaves the waitlist so the history survives.

    • invite_sent_at — When a registration invite was last sent to this waitlisted registration. Kept after promotion.

  2. event_registration_type

    • enable_waitlist — Whether a waitlist signup is offered once the registration capacity is met.

  3. event_session

    • event_session_group_id — The breakout block this session belongs to, or NULL for a standalone session.

    • order — The session's position within its breakout block.

26.12.0

New Columns

  1. crm_person

    • linkedin_link — Link to the person's LinkedIn profile.

Deprecated Columns — Action Required

  1. list_survey_use

    • description — Description of the survey use.

  2. site

    • state_abbreviation — Legacy two-letter USPS state abbreviation, kept as a mirror of state_code and populated for US sites only. Migrate to site.state_code.

26.11.0

New Tables

  • list_unit_type — Unit types managed by each organization. Units reference these to classify themselves.

  • payment_note — A staff-authored note about a payment collected outside the card processor, such as a check number or a grant reference.

New Columns

  1. start_at and end_at on the 34 list tables below — The availability window for an option: when it becomes available for selection, and the point after which it is not. A null value means no restriction at that end. Together they replace is_active, which is deprecated below.

    • list_age

    • list_assessment_approach

    • list_assessment_method

    • list_assessment_type

    • list_census_tract

    • list_communication_method

    • list_crisis

    • list_delivery_method

    • list_entity_type

    • list_ethnicity

    • list_form_element_type

    • list_gender

    • list_geographic_unit

    • list_indicator

    • list_intervention_channel

    • list_intervention_topic

    • list_invoice_status

    • list_jurisdiction

    • list_ledger_entry_type

    • list_market_channel

    • list_market_reach_source

    • list_market_segment

    • list_primary_topic

    • list_pse_change

    • list_question_type

    • list_question_widget

    • list_race

    • list_reach_source

    • list_registration_type

    • list_relationship_depth

    • list_sector_of_influence

    • list_setting

    • list_survey_module

    • list_survey_use

  2. order on the 12 list tables below — The option's position in the list as it is presented to users.

    • list_assessment_type

    • list_delivery_method

    • list_entity_type

    • list_form_element_type

    • list_indicator

    • list_intervention_channel

    • list_intervention_topic

    • list_question_type

    • list_relationship_depth

    • list_setting

    • list_survey_module

    • list_survey_use

  3. slug on the 6 list tables below — A short text key for the option, derived from its name.

    • list_entity_type

    • list_intervention_channel

    • list_intervention_topic

    • list_relationship_depth

    • list_setting

    • list_survey_use

  4. list_unit

    • unit_type_id — The unit type that classifies this unit, from list_unit_type.

  5. payment_ledger_entry

    • payment_note_id — The staff note recorded by the admin mark-as-paid flow, when there is one. NULL otherwise.

  6. site

    • postal_code — Postal code for the site, in any country.

    • country — ISO 3166-1 alpha-2 country code, such as US or JP.

    • state_code — Full ISO 3166-2 subdivision code for the state, province, or region, such as US-KS or GB-ENG. Country-agnostic and never truncated.

Deprecated Columns — Action Required

  1. is_active on the 26 list tables below — No longer maintained by the application. Use each table's start_at / end_at availability window instead.

    • list_age

    • list_assessment_approach

    • list_assessment_method

    • list_census_tract

    • list_communication_method

    • list_crisis

    • list_delivery_method

    • list_entity_type

    • list_ethnicity

    • list_form_element_type

    • list_gender

    • list_geographic_unit

    • list_intervention_channel

    • list_intervention_topic

    • list_jurisdiction

    • list_market_channel

    • list_market_reach_source

    • list_market_segment

    • list_primary_topic

    • list_question_type

    • list_question_widget

    • list_race

    • list_reach_source

    • list_registration_type

    • list_sector_of_influence

    • list_setting

  2. site

    • zip_code — Legacy US ZIP code, kept as a mirror of postal_code so existing warehouse pulls keep the column. Populated for US sites only and capped at 10 characters. Migrate to site.postal_code.

26.10.0

New Tables

  • user_viewable_user — Which other users' records each user is allowed to view.

  • user_editable_user — Which other users' records each user is allowed to edit.

  • user_viewable_unit — Which units' records each user is allowed to view.

  • user_viewable_program_area — Which program areas' records each user is allowed to view.

New Columns

  1. program_activity_survey

    • response_url — Public URL for submitting responses to this survey. NULL when responses are aggregated, since aggregate-response surveys are not publicly shareable.

  2. user

    • external_id — An identifier for the user carried over from an external system.

26.9.0

New Tables

The payment system was rebuilt around an append-only ledger. An invoice keeps its current state, and every charge, refund, and void is recorded as its own entry.

  • event_registration_invoice_line — One row per billed item or applied discount on an invoice. Fees are positive lines, and early-bird and promo discounts are their own negative lines.

  • payment_transaction — One row per provider charge or refund attempt. A refund points at the original charge through refunded_transaction_id. Offline cash and check payments make no provider call.

  • payment_ledger_entry — Append-only record of every money movement against an invoice. The entries for an invoice sum to the amount collected.

  • payment_ledger_entry_line — The accounting split of a ledger entry, one signed row per invoice line, fee detail, and registration.

  • list_invoice_status — Lifecycle statuses for an invoice, referenced by event_registration_invoice.status_slug.

  • list_payment_transaction_status — Statuses for a single charge or refund attempt, referenced by payment_transaction.status_slug.

  • list_ledger_entry_type — The accounting movement a ledger entry records, referenced by payment_ledger_entry.ledger_entry_type_slug.

New Columns

  1. event_registration_invoice

    • status_slug — Lifecycle status of the invoice, a text foreign key to list_invoice_status.slug: open, paid, no_charge, discarded, refunded, or voided.

    • superseded_by_id — The invoice that replaced this one, set when an invoice is discarded or superseded in a partial-payment chain.

Deprecated Tables — Action Required

  • event_registration_invoice_item — Renamed to event_registration_invoice_line, which adds a refunded amount and carries early-bird and promo discounts as their own negative lines.

  • event_registration_invoice_history — Superseded by the payment ledger. Charges, refunds, and voids are now recorded in payment_ledger_entry.

Deprecated Columns — Action Required

  1. event_registration_invoice

    • payment_status_id — Use status_slug.

    • payment_status_name — Use status_slug.

    • event_discount_id — The promo discount now lives on event_registration_invoice_line.event_discount_id.

    • response_json — Moved to payment_transaction.provider_response.

    • session_id — Moved to payment_transaction.provider_session_id.

    • transaction_id — Moved to payment_transaction.provider_transaction_id.

26.7.0

New Columns

  1. user

    • last_seen_at — The user's most recent authenticated activity in PEARS, refreshed at most once every five minutes.

26.6.0

New Columns

  1. event_payment_method

    • is_public_use_only — Whether the payment method is shown only on public registration forms and hidden from Manage Registrations.

  2. list_payment_method

    • is_public_use_only — Whether the payment method is shown only on public registration forms and hidden from Manage Registrations.

26.5.0

New Columns

  1. event

    • is_internal — Whether the event is internal to the organization.

26.4.0

Deleted Columns

These columns were removed in this release. Any query still referencing them will fail.

  1. event_registration

    • name — The registrant's name is now split across first_name and last_name.

New Columns

  1. event_registration

    • first_name — First name of the registrant.

    • last_name — Last name of the registrant.

26.3.0

New Columns

  1. indirect_activity

    • number_of_volunteers — The number of volunteers involved in the activity.

    • total_volunteer_hours — The total volunteer hours contributed to the activity.

26.1.0

New Tables

  • list_program_area_reporting_period — Maps program areas to reporting periods, recording which program areas were available to users in each reporting period.

New Columns

  1. list_payment_status

    • description — A brief explanation of what the status means, such as "Invoice created, payment not yet attempted".

25.11.0

Deleted Columns

These columns were removed in this release. Any query still referencing them will fail.

  1. action_plan_id on the tables below — Each of these modules can now be linked to more than one action plan, so the single foreign key was replaced by a mapping table named after the module. Join through coalition_action_plan, indirect_activity_action_plan, and so on.

    • coalition

    • indirect_activity

    • partnership

    • pse

    • social_marketing

    • success_story

New Tables

  • coalition_action_plan — Maps coalitions to action plans. A coalition can be linked to multiple action plans.

  • indirect_activity_action_plan — Maps indirect activities to the action plans they are linked to.

  • partnership_action_plan — Maps partnerships to action plans. A partnership can be linked to multiple action plans.

  • pse_action_plan — Maps PSE site activities to the action plans they are linked to.

  • social_marketing_action_plan — Maps social marketing campaigns to the action plans they support.

  • success_story_action_plan — Maps success stories to the action plans they are associated with.

25.9.4

New Tables

  • event_registration_invoice_history — The history of an event registration invoice. The invoice's current state stays in event_registration_invoice.

New Columns

  1. event_registration_invoice

    • payment_status_name — The name of the payment status, denormalized for easier reporting.

25.8.0

New Columns

  1. list_accounting_code

    • organization_id — The organization this accounting code belongs to. The list is now scoped per organization.

  2. list_payment_method

    • organization_id — The organization this payment method belongs to. The list is now scoped per organization.

25.6.13

Deleted Columns

These columns were removed in this release. Any query still referencing them will fail.

  1. event_fee_detail

    • event_registration_invoice_item_id — The table no longer describes a single invoice line. An invoice line carries its own fee reference and amount on event_registration_invoice_item.

    • amount_before_discount — Replaced by a single amount.

    • discount_amount — Replaced by a single amount.

New Columns

  1. event_fee_detail

    • accounting_code_id — The accounting code this portion of the fee is allocated to.

    • amount — The amount allocated to that accounting code.

25.5.0

Deleted Columns

These columns were removed in this release. Any query still referencing them will fail.

  1. action_plan_outcome

    • is_state_approved — Removed with the move to explicit multi-state action plans. An outcome that came from another plan now carries source_action_plan_id.

New Columns

  1. action_plan

    • multi_state_action_plan_id — The multi-state action plan this plan is linked to, when there is one.

  2. action_plan_outcome

    • source_action_plan_id — The action plan this outcome originated from.

  3. event

    • status — The event's current status.

    • cancelled_at — When the event was cancelled.

    • cancelled_by_user_id — The user who cancelled it.

    • cancellation_reason — The reason given for cancelling it.

  4. event_registration

    • status — Status of the registration: incomplete, complete, or canceled.

    • canceled_at — When the registration was canceled.

    • canceled_by_user_id — The user who canceled it.

    • cancellation_reason — The reason given for canceling it.

25.4.3

Deleted Columns

These columns were removed in this release. Any query still referencing them will fail.

  1. event_discount

    • num_redemptions — The stored redemption count is no longer maintained. Count the event_registration_invoice_item rows carrying the discount's id instead.

25.1.0

Deleted Columns

These columns were removed in this release. Any query still referencing them will fail.

  1. action_plan_outcome_indicator

    • survey_question_id — Renamed to survey_survey_question_id.

  2. action_plan_report_outcome_indicator

    • action_plan_outcome_survey_question_id — Renamed to survey_survey_question_id.

  3. contract

    • state_served_id — Renamed to served_state_id.

  4. crm_person

    • email — Email addresses moved to their own table. Read crm_person_email, which carries one row per address.

  5. crm_person_race

    • person_id — Renamed to crm_person_id.

  6. event_registration

    • event_form_id — Use event_registration_type_id.

New Tables

  • crm_person_email — Email addresses associated with a CRM person, one row per address, with the primary address flagged.

New Columns

  1. action_plan_outcome_indicator

    • survey_survey_question_id — Renamed from survey_question_id.

  2. action_plan_report_outcome_indicator

    • survey_survey_question_id — Renamed from action_plan_outcome_survey_question_id.

  3. contract

    • served_state_id — Renamed from state_served_id.

  4. crm_person_race

    • crm_person_id — Renamed from person_id.

  5. event_registration

    • event_registration_type_id — The registration type chosen for this registration, replacing the former event form reference.

25.0.2

New Columns

  1. survey_response_survey_question

    • response_count — The number of times this answer was selected or provided. Greater than 1 only for aggregated responses.

25.0.0

Deleted Tables

These tables were removed in this release. Any query still referencing them will fail.

  • event_fee_event_session_fee — Removed in the event accounting rework. Session fees are now their own records in event_session_fee, tied to registration types through event_session_fee_event_registration_type.

Deleted Columns

These columns were removed in this release. Any query still referencing them will fail.

  1. event_registration_invoice_item

    • event_fee_event_session_fee_id — Use event_session_fee_id.

    • description — The line's label remains in name, and its fee and discount breakdown is now in event_fee_detail.

New Tables

  • event_fee_detail — The accounting breakdown of an invoice line: the fee it came from, the amount before discount, the discount applied, the taxable amount, and the accounting code.

  • event_session_fee — A fee attached to an individual event session.

  • event_session_fee_event_registration_type — Links a session fee to the registration types it applies to.

New Columns

  1. event_additional_fee

    • not_discountable_amount — The portion of the fee that discounts cannot be applied to.

  2. event_fee

    • not_discountable_amount — The portion of the fee that discounts cannot be applied to.

  3. event_registration_invoice_item

    • event_registration_id — The registration this invoice line belongs to.

    • event_session_fee_id — The session fee this invoice line charges for.

Last updated