Skip to main content

Twenty Schema Verification Plan

Date: 2026-05-12 Purpose: Define the checks required to confirm the Lifehouse schema is correctly set up in Twenty CRM.


1. Automated Verification

The script verify_lifehouse_twenty_schema.py will perform the following checks via the Twenty API:

Object Existence

  • Check if the 9 custom objects exist and are reachable via REST:
    • locations
    • households
    • engagements
    • needs
    • offers
    • skills
    • consent-records
    • stakeholder-relationships
    • demographics

Idempotency Key Check

  • Confirm each custom object has a fieldworkExternalId field.
  • Confirm fieldworkExternalId is present on standard Person and Company objects.

Relation Field Check

  • Confirm householdId exists on Person.
  • Confirm locationId exists on Company.
  • Confirm locationId exists on households.
  • Confirm personId and householdId exist on engagements.

Select Field Check

  • Confirm consentStatus exists on Person.
  • Confirm outcome and inputSource exist on engagements.

2. Manual Verification (UI Check)

Verify the following in Settings → Data Model:

Uniqueness

  • fieldworkExternalId is marked as Unique on all custom objects.
  • fieldworkExternalId is marked as Unique on Person and Company.

Field Types

  • sourceCreatedAt and sourceUpdatedAt are DateTime fields.
  • contactCount is a Number field.
  • requiresFollowUp is a Boolean field.

Access Control

  • Demographics object access is restricted to appropriate roles only.

3. Success Criteria

The schema is considered Verified and Safe for Sync only if:

  1. All custom objects return HTTP 200 or 400 (if empty but existent) via REST.
  2. fieldworkExternalId is present on all mapped entities.
  3. No real Fieldwork data has been inserted during verification.
  4. All relation fields point to the correct object types.

4. Post-Verification Steps

  1. Review twenty_schema_verification.json generated by the script.
  2. If all automated checks pass, perform the manual UI checks.
  3. If both pass, proceed to build and dry-run the sync_worker.py.