Skip to main content

Planning Center Check-ins Data Model

Complete reference for Planning Center Check-ins tables in Parable: events, event times, locations, check-ins, and how attendance records connect.

This document provides complete documentation of the Planning Center Check-ins data model in Parable, including all tables, fields, and relationships.

Overview

The Check-ins module contains 41 tables supporting attendance tracking, child safety, volunteer management, and event organization.

Visual Data Model

The diagram below shows the core entities and their relationships in the Check-ins module. Use it as a visual reference while exploring the detailed table definitions below.

Core Entity Relationships

Check-ins module data model

Open diagram in new tab →

Key Relationships Explained

Event & Time Structure:

  • EVENTs represent recurring check-in programs (Sunday School, Nursery, etc.)
  • EVENT_TIMEs are specific time slots when events occur
  • EVENT_PERIODs define date ranges when events are active
  • LOCATION_EVENT_TIME links locations to specific time slots

Check-in Flow:

  1. Person arrives at a LOCATION during an EVENT_TIME
  2. CHECKIN record created with security code
  3. Labels printed based on EVENT_LABEL and LOCATION_LABEL configurations
  4. PERSON_EVENT tracks long-term attendance patterns

Label System:

  • LABELs define printable tags (name tags, security labels, allergy alerts)
  • EVENT_LABEL determines which labels print for an event
  • LOCATION_LABEL determines which labels print at a location
  • Multiple label types can apply to single check-in

Security & Safety:

  • PASSes provide reusable check-in codes
  • Security codes generated per check-in for child pickup
  • STATIONs configure check-in kiosks and admin workstations
  • THEMEs customize check-in interface appearance

Headcount Tracking:

  • HEADCOUNT records aggregate attendance by type
  • ATTENDANCE_TYPE categorizes attendees (kids, volunteers, guests)
  • Tracked per EVENT_TIME for capacity planning

Generic Relationship Pattern:

  • Check-in groups via checkins_check_ins_relationships
  • Event associations via checkins_events_relationships

Query Requirements

Schema Prefix

IMPORTANT: All tables in the Planning Center Check-ins module are in the planning_center schema. You MUST prefix all table names with planning_center. in your queries.

✅ CORRECT: SELECT * FROM planning_center.checkins_check_ins ❌ INCORRECT: SELECT * FROM checkins_check_ins

Row Level Security (RLS)

This database uses Row Level Security (RLS) to automatically filter data based on:

  • tenant_organization_id: You only see data for your current organization
  • system_status: You only see 'active' records by default

DO NOT add these filters to your WHERE clause - they are applied automatically:

  • ❌ WHERE tenant_organization_id = 1 (unnecessary)
  • ❌ WHERE system_status = 'active' (unnecessary)

The RLS policies ensure you only access data you're authorized to see. Adding these filters is redundant and can negatively impact query speed.

Core Tables Overview

Primary Entity Tables

  • checkins_check_ins - Individual check-in records
  • checkins_people - People who check in
  • checkins_events - Event definitions (Sunday Service, Youth Group, etc.)
  • checkins_event_times - Specific instances of events
  • checkins_event_periods - Active check-in sessions
  • checkins_locations - Physical and logical locations
  • checkins_stations - Check-in kiosk stations
  • checkins_labels - Print labels for check-ins
  • checkins_headcounts - Manual attendance counts
  • checkins_check_in_times - Specific check-in time records

Supporting Entity Tables

  • checkins_attendance_types - Types of attendance tracking
  • checkins_check_in_groups - Groups of check-ins processed together
  • checkins_event_labels - Labels associated with events
  • checkins_location_event_periods - Location-specific period counts
  • checkins_location_event_times - Location-specific time counts
  • checkins_location_labels - Labels for locations
  • checkins_options - Label printing options
  • checkins_passes - Pass codes for check-ins
  • checkins_person_events - Person-event connections
  • checkins_themes - Visual themes for stations
  • checkins_organizations - Organization settings
  • checkins_integration_links - External system integrations

Relationship Tables

  • checkins_check_ins_relationships - Links check-ins to other entities
  • checkins_events_relationships - Links events to related entities
  • checkins_event_times_relationships - Links event times to events and locations
  • checkins_locations_relationships - Links locations to parents and events
  • checkins_attendance_types_relationships - Links attendance types to events
  • checkins_check_in_groups_relationships - Links check-in groups to check-ins and stations
  • checkins_check_in_times_relationships - Links check-in times to check-ins and locations
  • checkins_event_labels_relationships - Links event labels to events and labels
  • checkins_event_periods_relationships - Links event periods to events
  • checkins_headcounts_relationships - Links headcounts to attendance types and event times
  • checkins_integration_links_relationships - Links integration links to external entities
  • checkins_location_event_periods_relationships - Links location event periods to locations and periods
  • checkins_location_event_times_relationships - Links location event times to locations and event times
  • checkins_location_labels_relationships - Links location labels to labels and locations
  • checkins_options_relationships - Links options to labels
  • checkins_pass_relationships - Links passes to people
  • checkins_person_events_relationships - Links person events to people and events
  • checkins_people_relationships - Links people to related entities
  • checkins_stations_relationships - Links stations to themes and other entities

Table Definitions

checkins_check_ins

The main check-in record table that tracks individual check-ins.

ColumnTypeDescription
idUUIDInternal unique identifier
check_in_idVARCHAR(64)Planning Center check-in ID
first_nameVARCHAR(255)First name of person checking in
last_nameVARCHAR(255)Last name of person checking in
kindVARCHAR(64)Type: 'Regular', 'Guest', 'Volunteer'
one_time_guestBOOLEANTrue when the guest was checked in without creating a Planning Center person record — not a first-visit flag
security_codeVARCHAR(64)Security code for child pickup
numberINTEGERCheck-in number
medical_notesTEXTMedical information or allergies
emergency_contact_nameVARCHAR(255)Emergency contact name
emergency_contact_phone_numberVARCHAR(255)Emergency contact phone
created_atTIMESTAMPWhen check-in was created
updated_atTIMESTAMPLast update time
confirmed_atTIMESTAMPWhen check-in was confirmed
checked_out_atTIMESTAMPWhen person checked out
confirmedBOOLEANWhether check-in is confirmed
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status: 'active', 'transferring', 'stale'
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier
system_deleted_atTIMESTAMP WITH TIME ZONEWhen record was soft-deleted

Relationships (via checkins_check_ins_relationships):

  • relationship_type = 'Person' → links to checkins_people.person_id
  • relationship_type = 'Event' → links to checkins_events.event_id
  • relationship_type = 'EventTime' → links to checkins_event_times.event_time_id
  • relationship_type = 'EventPeriod' → links to checkins_event_periods.event_period_id
  • relationship_type = 'Location' → links to checkins_locations.location_id
  • relationship_type = 'CheckedInAt' → links to checkins_stations.station_id
  • relationship_type = 'CheckedInBy' → links to checkins_people.person_id
  • relationship_type = 'CheckedOutBy' → links to checkins_people.person_id
  • relationship_type = 'CheckInTime' → links to checkins_check_in_times.check_in_time_id

checkins_people

People who have checked in to events.

ColumnTypeDescription
idUUIDInternal unique identifier
person_idVARCHAR(64)Planning Center person ID
avatar_urlVARCHAR(2048)Avatar image URL
birthdateDATEDate of birth
check_in_countINTEGERTotal check-ins
childBOOLEANTrue if child
created_atTIMESTAMPWhen person was created
demographic_avatar_urlVARCHAR(2048)Demographic profile image URL
first_nameVARCHAR(255)First name
genderVARCHAR(64)Gender
gradeINTEGERSchool grade level
headcounterBOOLEANCan do headcounts
ignore_filtersBOOLEANIgnores event filters
last_checked_in_atTIMESTAMPLast check-in time
last_nameVARCHAR(255)Last name
medical_notesTEXTMedical information
middle_nameVARCHAR(255)Middle name
nameVARCHAR(255)Full name
name_prefixVARCHAR(64)Name prefix (Mr., Mrs., etc.)
name_suffixVARCHAR(64)Name suffix (Jr., Sr., etc.)
passed_background_checkBOOLEANBackground check status
permissionVARCHAR(50)Permission level
top_permissionVARCHAR(50)Highest permission level
updated_atTIMESTAMPLast update time
search_nameVARCHAR(255)Searchable name field
addressesJSONBAddress records
email_addressesJSONBEmail address records
phone_numbersJSONBPhone number records
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier
system_deleted_atTIMESTAMP WITH TIME ZONEWhen record was soft-deleted

checkins_events

Recurring event definitions (e.g., "Sunday Service", "Youth Group").

ColumnTypeDescription
idUUIDInternal unique identifier
event_idVARCHAR(64)Planning Center event ID
nameVARCHAR(255)Event name
frequencyVARCHAR(64)How often event occurs
enable_services_integrationBOOLEANLinks to Services module
location_times_enabledBOOLEANUses location-specific times
pre_select_enabledBOOLEANPre-selection allowed
integration_keyVARCHAR(64)Integration identifier
app_sourceVARCHAR(255)Source application for the event
archived_atTIMESTAMPWhen event was archived
created_atTIMESTAMPWhen event was created
updated_atTIMESTAMPLast update time
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier
system_deleted_atTIMESTAMP WITH TIME ZONEWhen record was soft-deleted

checkins_event_times

Specific instances of events with start and end times.

ColumnTypeDescription
idUUIDInternal unique identifier
event_time_idVARCHAR(64)Planning Center event time ID
created_atTIMESTAMPWhen created
day_of_weekINTEGERDay of week (0-6)
guest_countINTEGERNumber of guests
hides_atTIMESTAMPWhen event time is hidden
hourINTEGERHour of day (0-23)
minuteINTEGERMinute of the hour
nameTEXTEvent time name
regular_countINTEGERNumber of regular attendees
shows_atTIMESTAMPWhen event time is shown
starts_atTIMESTAMPEvent start time
total_countINTEGERTotal attendance count
updated_atTIMESTAMPLast update
volunteer_countINTEGERNumber of volunteers
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Relationships (via checkins_event_times_relationships):

  • relationship_type = 'Event' → links to checkins_events.event_id

checkins_event_periods

Active check-in sessions for events.

ColumnTypeDescription
idUUIDInternal unique identifier
event_period_idVARCHAR(64)Planning Center event period ID
created_atTIMESTAMPWhen created
ends_atTIMESTAMPPeriod end time
guest_countINTEGERGuest count
noteTEXTPeriod notes
regular_countINTEGERRegular attendee count
starts_atTIMESTAMPPeriod start time
volunteer_countINTEGERVolunteer count
quantityINTEGERTotal quantity
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Relationships (via checkins_event_periods_relationships):

  • relationship_type = 'Event' → links to checkins_events.event_id

checkins_locations

Physical locations (rooms) and logical groupings.

ColumnTypeDescription
idUUIDInternal unique identifier
location_idVARCHAR(64)Planning Center location ID
nameVARCHAR(255)Location name
kindVARCHAR(255)'Location' for a physical room, 'Folder' for a grouping of locations
openedBOOLEANCurrently open for check-ins
child_or_adultVARCHAR(50)'C' (child) or 'A' (adult); empty when unset
genderVARCHAR(50)'M' or 'F' restriction; empty when unset
age_min_in_monthsINTEGERMinimum age in months
age_max_in_monthsINTEGERMaximum age in months
age_onDATEDate for age calculation
age_range_byVARCHAR(255)How age range is determined
grade_minINTEGERMinimum grade level
grade_maxINTEGERMaximum grade level
max_occupancyINTEGERRoom capacity; 0 when no limit has been set (never NULL)
min_volunteersINTEGERMinimum volunteers required; 0 when not configured (never NULL)
attendees_per_volunteerINTEGERRequired attendees-per-volunteer ratio; 0 when not configured (never NULL) — guard divisions with > 0
milestoneVARCHAR(255)Associated milestone
positionINTEGERSort order
effective_dateDATEWhen settings take effect
questionsTEXT[]Custom questions for check-in
created_atTIMESTAMPWhen created
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier
system_deleted_atTIMESTAMP WITH TIME ZONEWhen record was soft-deleted

Relationships (via checkins_locations_relationships):

  • relationship_type = 'Parent' → links to parent checkins_locations.location_id
  • relationship_type = 'Event' → links to checkins_events.event_id

checkins_stations

Check-in kiosk stations.

ColumnTypeDescription
idUUIDInternal unique identifier
station_idVARCHAR(64)Planning Center station ID
created_atTIMESTAMPWhen created
input_typeTEXTInput method
input_type_optionsTEXTInput configuration
modeINTEGERStation mode
nameTEXTStation name
timeout_secondsINTEGERSession timeout in seconds
check_in_countINTEGERNumber of check-ins at this station
closes_atTIMESTAMPWhen station closes
next_shows_atTIMESTAMPWhen station next becomes visible
onlineBOOLEANWhether station is online
open_for_check_inBOOLEANWhether station is accepting check-ins
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

checkins_labels

Print labels for check-ins.

ColumnTypeDescription
idUUIDInternal unique identifier
label_idVARCHAR(64)Planning Center label ID
created_atTIMESTAMPWhen created
nameVARCHAR(255)Label name
prints_forVARCHAR(255)Who gets this label
rollVARCHAR(255)Label roll type
updated_atTIMESTAMPLast update
xmlTEXTLabel XML definition
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

checkins_headcounts

Manual attendance counts.

ColumnTypeDescription
idUUIDInternal unique identifier
headcount_idVARCHAR(64)Planning Center headcount ID
totalINTEGERTotal count
updated_atTIMESTAMPWhen count was updated
created_atTIMESTAMPWhen count was created
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Relationships (via checkins_headcounts_relationships):

  • relationship_type = 'AttendanceType' → links to checkins_attendance_types.attendance_type_id
  • relationship_type = 'EventTime' → links to checkins_event_times.event_time_id
  • relationship_type = 'Location' → links to checkins_locations.location_id

checkins_check_in_times

Specific times when people checked into locations.

ColumnTypeDescription
idUUIDInternal unique identifier
check_in_time_idVARCHAR(64)Planning Center check-in time ID
kindVARCHAR(64)Type of check-in time
alertsJSONBAlert data for this check-in time
has_validatedBOOLEANWhether check-in time has been validated
services_integratedBOOLEANWhether linked to Services module
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Relationships (via checkins_check_in_times_relationships):

  • relationship_type = 'CheckIn' → links to checkins_check_ins.check_in_id
  • relationship_type = 'EventTime' → links to checkins_event_times.event_time_id
  • relationship_type = 'Location' → links to checkins_locations.location_id
  • relationship_type = 'PreCheck' → links to pre-check record

checkins_attendance_types

Types of attendance tracking for events.

ColumnTypeDescription
idUUIDInternal unique identifier
attendance_type_idVARCHAR(64)Planning Center attendance type ID
colorVARCHAR(255)Display color
created_atTIMESTAMPWhen created
attendance_limitINTEGERMaximum attendance
nameVARCHAR(64)Attendance type name
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Relationships (via checkins_attendance_types_relationships):

  • relationship_type = 'Event' → links to checkins_events.event_id

checkins_check_in_groups

Groups of check-ins processed together for printing labels.

ColumnTypeDescription
idUUIDInternal unique identifier
check_in_group_idVARCHAR(64)Planning Center check-in group ID
check_ins_countINTEGERNumber of check-ins in group
created_atTIMESTAMPWhen group was created
name_labels_countINTEGERNumber of name labels
print_statusVARCHAR(64)Printing status
security_labels_countINTEGERNumber of security labels
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Relationships (via checkins_check_in_groups_relationships):

  • relationship_type = 'CheckIn' → links to checkins_check_ins.check_in_id
  • relationship_type = 'EventPeriod' → links to checkins_event_periods.event_period_id
  • relationship_type = 'Station' → links to checkins_stations.station_id

checkins_event_labels

Labels associated with specific events.

ColumnTypeDescription
idUUIDInternal unique identifier
event_label_idVARCHAR(64)Planning Center event label ID
created_atTIMESTAMPWhen created
for_guestBOOLEANPrint for guests
for_regularBOOLEANPrint for regular attendees
for_volunteerBOOLEANPrint for volunteers
quantityINTEGERNumber of labels to print
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Relationships (via checkins_event_labels_relationships):

  • relationship_type = 'Event' → links to checkins_events.event_id
  • relationship_type = 'Label' → links to checkins_labels.label_id

checkins_location_event_periods

Location-specific attendance counts for event periods.

ColumnTypeDescription
idUUIDInternal unique identifier
location_event_period_idVARCHAR(64)Planning Center location event period ID
created_atTIMESTAMPWhen created
guest_countINTEGERGuest count for this location
regular_countINTEGERRegular attendee count for this location
updated_atTIMESTAMPLast update
volunteer_countINTEGERVolunteer count for this location
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Relationships (via checkins_location_event_periods_relationships):

  • relationship_type = 'EventPeriod' → links to checkins_event_periods.event_period_id
  • relationship_type = 'Location' → links to checkins_locations.location_id

checkins_location_event_times

Location-specific attendance counts for event times.

ColumnTypeDescription
idUUIDInternal unique identifier
location_event_time_idVARCHAR(64)Planning Center location event time ID
created_atTIMESTAMPWhen created
guest_countINTEGERGuest count for this location
regular_countINTEGERRegular attendee count for this location
updated_atTIMESTAMPLast update
volunteer_countINTEGERVolunteer count for this location
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Relationships (via checkins_location_event_times_relationships):

  • relationship_type = 'EventTime' → links to checkins_event_times.event_time_id
  • relationship_type = 'Location' → links to checkins_locations.location_id

checkins_location_labels

Labels associated with specific locations.

ColumnTypeDescription
idUUIDInternal unique identifier
location_label_idVARCHAR(64)Planning Center location label ID
created_atTIMESTAMPWhen created
for_guestBOOLEANPrint for guests
for_regularBOOLEANPrint for regular attendees
for_volunteerBOOLEANPrint for volunteers
quantityINTEGERNumber of labels to print
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Relationships (via checkins_location_labels_relationships):

  • relationship_type = 'Label' → links to checkins_labels.label_id
  • relationship_type = 'Location' → links to checkins_locations.location_id

checkins_options

Label printing options and configurations.

ColumnTypeDescription
idUUIDInternal unique identifier
option_idVARCHAR(64)Planning Center option ID
bodyTEXTOption configuration body
created_atTIMESTAMPWhen created
quantityINTEGERQuantity setting
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Relationships (via checkins_options_relationships):

  • relationship_type = 'Label' → links to checkins_labels.label_id

checkins_passes

Pass codes for secure check-ins.

ColumnTypeDescription
idUUIDInternal unique identifier
pass_idVARCHAR(64)Planning Center pass ID
codeVARCHAR(255)Pass code
created_atTIMESTAMPWhen created
kindVARCHAR(255)Type of pass
send_toVARCHAR(255)Delivery destination for pass
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Relationships (via checkins_pass_relationships):

  • relationship_type = 'Person' → links to checkins_people.person_id

checkins_person_events

Connections between people and events they've attended.

ColumnTypeDescription
idUUIDInternal unique identifier
person_event_idVARCHAR(64)Planning Center person event ID
check_in_countINTEGERNumber of check-ins for this event
created_atTIMESTAMPWhen created
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Relationships (via checkins_person_events_relationships):

  • relationship_type = 'Event' → links to checkins_events.event_id
  • relationship_type = 'Person' → links to checkins_people.person_id
  • relationship_type = 'FirstCheckIn' → links to checkins_check_ins.check_in_id
  • relationship_type = 'LastCheckIn' → links to checkins_check_ins.check_in_id

checkins_themes

Visual themes for check-in stations.

ColumnTypeDescription
idUUIDInternal unique identifier
theme_idVARCHAR(64)Planning Center theme ID
background_colorTEXTBackground color
colorTEXTPrimary color
created_atTIMESTAMPWhen created
image_thumbnailTEXTThumbnail image URL
modeTEXTTheme mode
nameTEXTTheme name
text_colorTEXTText color
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

checkins_organizations

Organization settings and configuration.

ColumnTypeDescription
idUUIDInternal unique identifier
organization_idVARCHAR(64)Planning Center organization ID
avatar_urlVARCHAR(2048)Organization avatar URL
created_atTIMESTAMPWhen created
daily_check_insINTEGERDaily check-in count
date_format_patternVARCHAR(64)Date format pattern
nameVARCHAR(255)Organization name
time_zoneVARCHAR(64)Organization time zone
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Links to external systems and integrations.

ColumnTypeDescription
idUUIDInternal unique identifier
integration_link_idVARCHAR(64)Planning Center integration link ID
remote_appTEXTRemote application name
remote_gidTEXTRemote global ID
remote_idTEXTRemote ID
remote_typeTEXTRemote type
sync_future_assignment_typesBOOLEANSync future assignments
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
system_integration_idINTEGERIntegration source identifier

Relationship Tables

All relationship tables share this common structure, with the entity ID column named after the parent entity:

ColumnTypeDescription
idUUIDInternal unique identifier
<entity>_idVARCHAR(64)Parent entity ID (e.g., check_in_id, event_id)
relationship_typeVARCHAR(50)Type of relationship
relationship_idVARCHAR(64)ID of related entity
tenant_organization_idINTEGEROrganization identifier
system_integration_idINTEGERIntegration source identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen created
system_updated_atTIMESTAMPLast update

checkins_check_ins_relationships

Links check-ins to people, events, locations, and other entities.

Parent ID column: check_in_id

Common relationship types:

  • Person - Links to checkins_people
  • Event - Links to checkins_events
  • EventTime - Links to checkins_event_times
  • EventPeriod - Links to checkins_event_periods
  • Location - Links to checkins_locations

checkins_events_relationships

Links events to other entities.

Parent ID column: event_id

checkins_locations_relationships

Links locations to parent locations and events.

Parent ID column: location_id

Common relationship types:

  • Parent - Links to parent checkins_locations
  • Event - Links to checkins_events

checkins_event_times_relationships

Links event times to events and locations.

Parent ID column: event_time_id

checkins_attendance_types_relationships

Links attendance types to events and other entities.

Parent ID column: attendance_type_id

checkins_check_in_groups_relationships

Links check-in groups to check-ins, event periods, and stations.

Parent ID column: checkin_group_id

checkins_check_in_times_relationships

Links check-in times to check-ins, event times, and locations.

Parent ID column: check_in_time_id

checkins_event_labels_relationships

Links event labels to events and labels.

Parent ID column: event_label_id

checkins_event_periods_relationships

Links event periods to events.

Parent ID column: event_period_id

checkins_headcounts_relationships

Links headcounts to attendance types, event times, and locations.

Parent ID column: headcount_id

Links integration links to external entities.

Parent ID column: integration_link_id

checkins_location_event_periods_relationships

Links location event periods to locations and event periods.

Parent ID column: location_event_period_id

checkins_location_event_times_relationships

Links location event times to locations and event times.

Parent ID column: location_event_time_id

checkins_location_labels_relationships

Links location labels to labels and locations.

Parent ID column: location_label_id

checkins_options_relationships

Links options to labels.

Parent ID column: option_id

checkins_pass_relationships

Links passes to people.

Parent ID column: pass_id

checkins_person_events_relationships

Links person events to people, events, and check-ins.

Parent ID column: person_event_id

checkins_people_relationships

Links people to related entities.

Parent ID column: person_id

checkins_stations_relationships

Links stations to themes and other entities.

Parent ID column: station_id

System Fields

All tables include these system fields for data management:

  • tenant_organization_id - Multi-tenant organization identifier
  • system_status - Data lifecycle status:
    • transferring - Being imported from Planning Center
    • active - Current active data
    • stale - Marked for removal
  • system_created_at - When record was created in Parable
  • system_updated_at - When record was last updated in Parable

Common Query Patterns

Joining Check-ins to People

SELECT
    c.*,
    p.first_name,
    p.last_name,
    p.birthdate
FROM planning_center.checkins_check_ins c
JOIN planning_center.checkins_check_ins_relationships cr
    ON c.check_in_id = cr.check_in_id
    AND cr.relationship_type = 'Person'
JOIN planning_center.checkins_people p
    ON cr.relationship_id = p.person_id;

Joining Check-ins to Locations

SELECT
    c.*,
    l.name as location_name,
    l.max_occupancy
FROM planning_center.checkins_check_ins c
JOIN planning_center.checkins_check_ins_relationships cr
    ON c.check_in_id = cr.check_in_id
    AND cr.relationship_type = 'Location'
JOIN planning_center.checkins_locations l
    ON cr.relationship_id = l.location_id;

Finding Location Hierarchy

Note: checkins_locations has no parent_id column. Parent relationships are stored in checkins_locations_relationships with relationship_type = 'Parent'.

WITH RECURSIVE location_tree AS (
    -- Top-level locations: those with no Parent relationship entry
    SELECT
        l.location_id,
        l.name,
        NULL::varchar AS parent_location_id,
        0 AS level
    FROM planning_center.checkins_locations l
    WHERE NOT EXISTS (
        SELECT 1
        FROM planning_center.checkins_locations_relationships lr
        WHERE lr.location_id = l.location_id
          AND lr.relationship_type = 'Parent'
    )

    UNION ALL

    SELECT
        l.location_id,
        l.name,
        lt.location_id AS parent_location_id,
        lt.level + 1
    FROM planning_center.checkins_locations l
    JOIN planning_center.checkins_locations_relationships lr
        ON l.location_id = lr.location_id
        AND lr.relationship_type = 'Parent'
    JOIN location_tree lt ON lr.relationship_id = lt.location_id
)
SELECT * FROM location_tree;

Data Integrity Rules

  1. Schema Qualification: Always use planning_center. prefix for all table references
  2. Row Level Security: RLS automatically handles multi-tenancy and status filtering - do not add manual filters
  3. Monetary Values: Any fee or purchase columns are stored in cents - divide by 100.0 for display
  4. Check-in Status Flags: Use fields like confirmed_at and checked_out_at on checkins_check_ins to determine check-in state
  5. Relationship Tables: Core entity tables (like checkins_check_ins, checkins_event_times, checkins_locations) do not have direct FK columns. Use the corresponding *_relationships table to navigate associations (e.g., checkins_check_ins_relationships, checkins_event_times_relationships, checkins_locations_relationships)

Common Mistakes to Avoid

  1. Missing Schema Prefix

    • ❌ FROM checkins_check_ins
    • ✅ FROM planning_center.checkins_check_ins
  2. Adding Redundant RLS Filters

    • ❌ WHERE tenant_organization_id = 1 AND system_status = 'active'
    • ✅ Trust RLS to handle this automatically
  3. Joining Without Schema

    • ❌ JOIN checkins_locations l ON ...
    • ✅ JOIN planning_center.checkins_locations l ON ...
  4. Skipping Currency Conversion

    • ❌ SELECT fee_cents as fee
    • ✅ SELECT fee_cents / 100.0 as fee

Performance Considerations

  1. Indexes: All tables have optimized indexes on:

    • Primary keys and entity IDs
    • Join columns and foreign keys
    • Date columns for time-based queries
  2. Query Optimization:

    • Always use the planning_center. schema prefix
    • RLS handles tenant and status filtering automatically
    • Filter by event period or location status when relevant
    • Consider using CTEs for complex hierarchical queries
    • Join through the *_relationships tables — entity tables carry no foreign-key columns

Next Steps

On this page

OverviewVisual Data ModelCore Entity RelationshipsKey Relationships ExplainedQuery RequirementsSchema PrefixRow Level Security (RLS)Core Tables OverviewPrimary Entity TablesSupporting Entity TablesRelationship TablesTable Definitionscheckins_check_inscheckins_peoplecheckins_eventscheckins_event_timescheckins_event_periodscheckins_locationscheckins_stationscheckins_labelscheckins_headcountscheckins_check_in_timescheckins_attendance_typescheckins_check_in_groupscheckins_event_labelscheckins_location_event_periodscheckins_location_event_timescheckins_location_labelscheckins_optionscheckins_passescheckins_person_eventscheckins_themescheckins_organizationscheckins_integration_linksRelationship Tablescheckins_check_ins_relationshipscheckins_events_relationshipscheckins_locations_relationshipscheckins_event_times_relationshipscheckins_attendance_types_relationshipscheckins_check_in_groups_relationshipscheckins_check_in_times_relationshipscheckins_event_labels_relationshipscheckins_event_periods_relationshipscheckins_headcounts_relationshipscheckins_integration_links_relationshipscheckins_location_event_periods_relationshipscheckins_location_event_times_relationshipscheckins_location_labels_relationshipscheckins_options_relationshipscheckins_pass_relationshipscheckins_person_events_relationshipscheckins_people_relationshipscheckins_stations_relationshipsSystem FieldsCommon Query PatternsJoining Check-ins to PeopleJoining Check-ins to LocationsFinding Location HierarchyData Integrity RulesCommon Mistakes to AvoidPerformance ConsiderationsNext Steps