Skip to main content
Import contacts in bulk using CSV files. The import process validates numbers, normalizes formats, and handles duplicates automatically.

CSV Format

Required Column

Optional Columns

Custom fields are set via the API’s custom_fields object when creating or updating contacts, not via CSV columns. See the API reference for details.
Providing consent_date preserves the original opt-in date for contacts you collected outside of Trackly (e.g. migrated from another platform or a legacy form). This is part of the TCPA consent evidence trail — see Opt-In Tool Data & Retention for how Trackly records consent for opt-ins captured through the platform.

Example CSV

Import Process

Contacts can be imported via CSV through the dashboard or the bulk API endpoint.
The import supports a dry-run mode (dryRun: true, enabled by default) that validates all rows without persisting, so you can preview results before committing.

Phone Number Normalization

The import process automatically handles various phone number formats: Numbers are assumed to be US (+1) unless they include a country code.

Duplicate Handling

When importing contacts that already exist:

Import Limits

The import endpoint accepts up to 5,000 contacts per request.

Import Validation

Each contact is validated during import:

Validation Rules

Import Report

After import, you receive a report showing:
skipped counts only active opt-out refusals. duplicate covers both in-file repeats and the race-condition case where a concurrent importer already added the contact to this list between your upload and ours.

Triggering Welcome Journeys

When creating contacts via the API, set use_journeys: true on individual contacts to enroll them in active welcome journeys for the list.

Best Practices

Clean your CSV before importing. Remove obviously invalid numbers and test a small batch first.
Establish custom field naming conventions (e.g., source, campaign, cohort) and use them consistently across imports.
Always include a source custom field indicating where contacts came from. This helps with attribution and analysis.
Opted-out contacts cannot be resubscribed via import. This is by design for compliance.

Troubleshooting

Large imports can take time to start. Wait a few minutes. If still stuck, check file encoding (use UTF-8).
Check the skip reasons in the report. Common issues: invalid format, numbers already opted-out, landlines.
Ensure custom fields are passed in the custom_fields object when using the API. See the API reference for the correct format.
If numbers are non-US, include the full E.164 format with country code in the CSV.

Common Pitfalls

Common causes for import row failures:
  • Phone number format: Numbers must be in E.164 format (e.g., +14155551234). Numbers without the + prefix or country code are rejected.
  • Duplicate phone numbers: If the same phone number appears multiple times in your CSV, only the first occurrence is imported. Subsequent duplicates are skipped.
  • File encoding: CSV files must be UTF-8 encoded. Files saved with Windows-1252 or other encodings may produce garbled characters or parsing errors.
  • Column mapping: Ensure your CSV headers match the expected field names. Unrecognized columns are silently ignored.
  • Row limit: Each CSV import supports up to 5,000 rows. Split larger files into batches.

Next Steps

Custom Fields

Organize imported contacts

Audiences

Segment your contacts

Journeys

Automate onboarding