Table of Contents

Best Practices for Contact Profile Fields

Nathan Begbie Updated by Nathan Begbie

Overview

Contact profile fields allow you to store custom data about each contact in Turn.io. While profile fields are flexible and powerful, there are important limits and design patterns to understand before building services that rely heavily on them.

However, it is wise to think carefully through how many contact fields you want to use and why, as the number of fields increases, so does the burden of maintaining additional complexity. There are also limits to the number of contact fields allowed in Turn (see below).

Common Anti-Patterns

Creating Profile Fields Per Journey Step

Problem: Creating separate profile fields to track progress through each step of a journey (e.g., `quiz_1_answer`, `quiz_2_answer`, `quiz_3_answer`, ... `quiz_40_answer`).

If you have multiple journeys, each with 40+ tracking fields, you can quickly exhaust your profile field limit.

Why this happens: Teams want to:

- Resume users at the exact point they left off

- Track which steps have been completed

- Store individual responses for analytics

Multiple Journeys with Duplicated Field Patterns

When the same field structure is replicated across many journeys (e.g., journey_a_step_1, journey_a_step_2, journey_b_step_1, journey_b_step_2), the number of fields grows multiplicatively.

1/ Use a Single "Last Response" or "Progress" Field to Track Progress

Instead of tracking each step individually, store a single field that represents current progress:

last_completed_step: "module_3_quiz_2"

This allows resumption while using only one field per journey or course.

2. Use Write Results to Store Responses, Used in Further Analysis

If you need to store the answers to questions, use downloadable results, as discussed here

3. Use WhatsApp Flows for Quizzes

WhatsApp Flows are ideal for quiz-style interactions:

- The entire flow response can be stored as a single JSON payload

- Users can exit and return to flows (they resume at the last point)

- Reduces the need for multiple profile fields to track progress

4. Design with Limits in Mind

Before building:

1. Audit existing profile fields - Know how many slots you've already used

2. Plan your schema - Calculate the total fields your new service will need

3. Consider field reuse - Can generic fields like `current_progress` or `last_response` be reused across journeys?

When to Use Profile Fields

Profile fields are best suited for:

- Persistent contact attributes (name, language preference, region)

- Subscription/consent status (opted_in, last_consent_date)

- High-level progress tracking (onboarding_completed, tier)

- Segmentation data (user_type, cohort)

Profile fields are not ideal for:

- Storing every individual quiz response

- Tracking granular step-by-step journey progress

- Temporary or session-based data

Profile Field Limits

Important: There is a limit of 1,000 profile field "slots" per organization.

There is a maximum limit on the total number of custom profile fields you can create. The effective limit depends on the types of fields in your schema, because some field types require more internal storage than others:

Field Type

Internal fields used

STRING

2

LOCATION

3

BOOLEAN, DATETIME, ENUM, INTEGER FLOAT

1

Summary

Key takeaway: Design your contact schema with the 500-1000 field limit in mind. Don't just default to using contact profile fields - explore the tool best suited to your use case.

Was this article helpful?

Create and Use People Segments

Contact