Registrations Data Model

Complete Schema Reference

This guide provides a comprehensive reference for all Planning Center Registrations tables available in Parable. Understanding this data model will help you write accurate queries and build meaningful reports for your event management needs.

Query Requirements

Schema Prefix

IMPORTANT: All tables in the Planning Center Registrations module are in the planning_center schema. You MUST prefix all table names with planning_center. in your queries. ✅ CORRECT: SELECT * FROM planning_center.registrations_signups ❌ INCORRECT: SELECT * FROM registrations_signups

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, making these filters redundant and potentially causing performance issues.

Entity Tables

registrations_signups

Event signup forms and their configuration.
ColumnTypeDescription
idUUIDParable’s unique identifier
signup_idVARCHAR(64)Planning Center’s signup ID
nameVARCHAR(255)Event name
descriptionTEXTEvent description
archivedBOOLEANWhether the signup is archived
open_atTIMESTAMPWhen registration opens
close_atTIMESTAMPWhen registration closes
logo_urlVARCHAR(2048)URL to event logo/image
new_registration_urlVARCHAR(2048)Direct link to registration form
created_atTIMESTAMPWhen signup was created
updated_atTIMESTAMPLast update time
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data sync status (active/transferring/stale)
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

registrations_attendees

Individual attendee records for events.
ColumnTypeDescription
idUUIDParable’s unique identifier
attendee_idVARCHAR(64)Planning Center’s attendee ID
activeBOOLEANWhether registration is active
canceledBOOLEANWhether registration was canceled
waitlistedBOOLEANWhether attendee is waitlisted
waitlisted_atTIMESTAMPWhen added to waitlist
created_atTIMESTAMPWhen attendee record was created
updated_atTIMESTAMPLast update time
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data sync status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

registrations_registrations

Registration submissions (minimal fields in current implementation).
ColumnTypeDescription
idUUIDParable’s unique identifier
registration_idVARCHAR(64)Planning Center’s registration ID
created_atTIMESTAMPWhen registration was created
updated_atTIMESTAMPLast update time
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data sync status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

registrations_categories

Event categories for grouping and filtering.
ColumnTypeDescription
idUUIDParable’s unique identifier
category_idVARCHAR(64)Planning Center’s category ID
nameVARCHAR(255)Category name
created_atTIMESTAMPWhen category was created
updated_atTIMESTAMPLast update time
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data sync status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

registrations_selection_types

Pricing tiers and registration options.
ColumnTypeDescription
idUUIDParable’s unique identifier
selection_type_idVARCHAR(64)Planning Center’s selection type ID
nameVARCHAR(255)Selection type name
price_centsINTEGERPrice in cents (divide by 100 for dollars)
publicly_availableBOOLEANWhether available to public
created_atTIMESTAMPWhen created
updated_atTIMESTAMPLast update time
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data sync status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

registrations_signup_locations

Event venues with geographic coordinates.
ColumnTypeDescription
idUUIDParable’s unique identifier
signup_location_idVARCHAR(64)Planning Center’s location ID
nameVARCHAR(255)Location name
formatted_addressVARCHAR(512)Short formatted address
full_formatted_addressVARCHAR(512)Complete formatted address
latitudeDOUBLE PRECISIONGeographic latitude
longitudeDOUBLE PRECISIONGeographic longitude
location_typeVARCHAR(50)Type of location
subpremiseVARCHAR(255)Room/unit number
urlVARCHAR(2048)URL for location info/maps
created_atTIMESTAMPWhen created
updated_atTIMESTAMPLast update time
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data sync status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

registrations_signup_times

Event date and time slots.
ColumnTypeDescription
idUUIDParable’s unique identifier
signup_time_idVARCHAR(64)Planning Center’s time ID
starts_atTIMESTAMPEvent start time
ends_atTIMESTAMPEvent end time
all_dayBOOLEANWhether this is an all-day event
created_atTIMESTAMPWhen created
updated_atTIMESTAMPLast update time
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data sync status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

registrations_emergency_contacts

Emergency contact information for attendees.
ColumnTypeDescription
idUUIDParable’s unique identifier
emergency_contact_idVARCHAR(64)Planning Center’s contact ID
nameVARCHAR(255)Contact name
phone_numberVARCHAR(255)Contact phone number
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data sync status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

registrations_people

Basic person information for registrations.
ColumnTypeDescription
idUUIDParable’s unique identifier
person_idVARCHAR(64)Planning Center’s person ID
first_nameVARCHAR(255)First name
last_nameVARCHAR(255)Last name
nameVARCHAR(255)Full name
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data sync status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

registrations_campuses

Church campus locations.
ColumnTypeDescription
idUUIDParable’s unique identifier
campus_idVARCHAR(64)Planning Center’s campus ID
nameVARCHAR(255)Campus name
created_atTIMESTAMPWhen created
updated_atTIMESTAMPLast update time
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data sync status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

registrations_organizations

Organization settings and configuration.
ColumnTypeDescription
idUUIDParable’s unique identifier
organization_idVARCHAR(64)Planning Center’s organization ID
nameVARCHAR(255)Organization name
created_atTIMESTAMPWhen created
updated_atTIMESTAMPLast update time
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data sync status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

Relationship Tables

registrations_signup_relationships

Links signups to related entities (categories, campuses, locations, times).
ColumnTypeDescription
idUUIDParable’s unique identifier
signup_idVARCHAR(64)Parent signup ID
relationship_typeVARCHAR(50)Type of relationship (category, campus, etc.)
relationship_idVARCHAR(64)ID of related entity
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data sync status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
Relationship Types:
  • category - Links to registrations_categories
  • campus - Links to registrations_campuses
  • signup_location - Links to registrations_signup_locations
  • signup_time - Links to registrations_signup_times

registrations_registration_relationships

Links registrations to related entities.
ColumnTypeDescription
idUUIDParable’s unique identifier
registration_idVARCHAR(64)Parent registration ID
relationship_typeVARCHAR(50)Type of relationship
relationship_idVARCHAR(64)ID of related entity
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data sync status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
Relationship Types:
  • signup - Links to registrations_signups
  • person - Links to registrations_people

registrations_attendee_relationships

Links attendees to related entities.
ColumnTypeDescription
idUUIDParable’s unique identifier
attendee_idVARCHAR(64)Parent attendee ID
relationship_typeVARCHAR(50)Type of relationship
relationship_idVARCHAR(64)ID of related entity
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data sync status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
Relationship Types:
  • signup - Links to registrations_signups
  • registration - Links to registrations_registrations
  • emergency_contact - Links to registrations_emergency_contacts

System Fields

All tables include these system fields for data management:
  • system_status - Tracks data lifecycle:
    • transferring - Data being synced from Planning Center
    • active - Current, queryable data
    • stale - Outdated data pending removal
  • tenant_organization_id - Ensures data isolation between organizations
  • system_created_at - When Parable first received this record
  • system_updated_at - Last sync timestamp

Row Level Security

All tables implement Row Level Security (RLS) policies that:
  1. Filter data to only show active records
  2. Restrict access to the authenticated organization’s data
  3. Ensure complete data isolation between tenants

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: Cost and fee columns are stored in cents - divide by 100.0 for display
  4. Registration Status Flags: Use booleans like archived, canceled, and waitlisted to control visibility instead of relying on system_status
  5. Direct ID Columns: Core tables like registrations_signups expose direct ID columns for performance-critical joins

Common Mistakes to Avoid

  1. Missing Schema Prefix
    • FROM registrations_signups
    • FROM planning_center.registrations_signups
  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 registrations_attendees a ON ...
    • JOIN planning_center.registrations_attendees a ON ...
  4. Skipping Currency Conversion
    • SELECT total_cost_cents as total_cost
    • SELECT total_cost_cents / 100.0 as total_cost

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 registration status flags when relevant
    • Consider CTEs for complex aggregations
    • Use direct ID columns when available instead of relationship tables

Best Practices

  1. Always join through relationship tables - Relationship tables capture many-to-many links between events and related entities
  2. Trust RLS policies - Skip manual tenant_organization_id or system_status filters
  3. Use Planning Center IDs for lookups - The *_id fields (e.g., signup_id)
  4. Consider NULL values - Many fields may be NULL if not provided by Planning Center
  5. Handle timestamps properly - All timestamps are stored in UTC

Example: Complete Event Details Query

-- Get full event details with all related data
SELECT 
    s.signup_id,
    s.name as event_name,
    s.description,
    s.open_at,
    s.close_at,
    cat.name as category,
    camp.name as campus,
    loc.name as location_name,
    loc.full_formatted_address,
    tim.starts_at as event_start,
    tim.ends_at as event_end,
    tim.all_day
FROM planning_center.registrations_signups s
-- Join category
LEFT JOIN planning_center.registrations_signup_relationships sr_cat
    ON sr_cat.signup_id = s.signup_id 
    AND sr_cat.relationship_type = 'category'
LEFT JOIN planning_center.registrations_categories cat
    ON cat.category_id = sr_cat.relationship_id
-- Join campus
LEFT JOIN planning_center.registrations_signup_relationships sr_camp
    ON sr_camp.signup_id = s.signup_id 
    AND sr_camp.relationship_type = 'campus'
LEFT JOIN planning_center.registrations_campuses camp
    ON camp.campus_id = sr_camp.relationship_id
-- Join location
LEFT JOIN planning_center.registrations_signup_relationships sr_loc
    ON sr_loc.signup_id = s.signup_id 
    AND sr_loc.relationship_type = 'signup_location'
LEFT JOIN planning_center.registrations_signup_locations loc
    ON loc.signup_location_id = sr_loc.relationship_id
-- Join time
LEFT JOIN planning_center.registrations_signup_relationships sr_tim
    ON sr_tim.signup_id = s.signup_id 
    AND sr_tim.relationship_type = 'signup_time'
LEFT JOIN planning_center.registrations_signup_times tim
    ON tim.signup_time_id = sr_tim.relationship_id
WHERE s.archived = false
ORDER BY tim.starts_at DESC;
This query demonstrates how to properly join multiple related entities through the relationship tables to get complete event information.