Your audience

Contacts

Your brand's saved contact list — how people get onto it, what RCSync records about them, and why being on the list is not the same as being reachable.

What the contact list is

Contacts are the people your brand has collected: everyone you've imported, plus everyone who has opted in over time. The list is scoped to your brand — the same person who opted in to two different brands on RCSync is two separate contacts, and neither brand can see the other's.

The list grows on its own. Every opt-in — a keyword reply, an opt-in through your own system — adds the person to it, so you don't need to re-upload a list to keep it current.

How people get onto it

  • Import — a CSV or XLSX you upload. See below.
  • Opt-in keyword — someone replies with your START keyword.
  • Your own system — an opt-in sent through the open-campaign API.
  • Connected data — a synced customer roster, where you've connected one.
  • Added by hand — a single contact created in the app.

An opt-out never creates a contact. Someone who texts STOP without being on your list has asked to hear less from you; adding them to your database in response would be the wrong answer. Their opt-out is still recorded, and still suppresses them.

Importing a list

Upload a CSV or XLSX on Contacts → Import. RCSync reads the header row, matches the columns it recognizes — phone, email, first name, and any custom field you've declared — and then shows you what it found before importing anything: every column, three real values from your file, and what it intends to do with it. Change anything that's wrong and confirm.

A column RCSync doesn't recognize arrives set to Don't import this column, and you can turn it into a field right there — the type is guessed from the values (a column of numbers becomes a number, a short repeating list becomes a fixed set of choices) and you can correct it. There is no need to declare fields before you upload.

  • Nothing is written until you confirm. An upload you walk away from waits under Recent imports as “needs review”; you can reopen it or discard it, and discarding imports nobody.
  • Columns you leave unmapped are ignored, not stored. A spreadsheet's internal notes don't silently become customer data.
  • Existing contacts are updated, not duplicated. Someone already on your list is matched by phone (or by email, for an email-only row) and the file's values are merged onto them: new fields are added, fields the file doesn't mention are left alone, and a blank cell erases nothing. Uploading a file of just phone numbers and one new column is a supported way to add that column to contacts you already have.
  • Large files are processed in the background. The page shows progress; you can leave and come back.
  • Rejected rows are reported with their row number and the reason — an unparseable number, a missing identifier.

Limits

  • Up to 250,000 rows per file. Split anything larger.
  • Up to 25 MB per file.
  • CSV and XLSX only.

What RCSync records

For each contact: the phone number and/or email address, an optional first name, how they were added, when they were added, when they were last active, any tags, and any custom fields you declare.

Contact phone numbers and email addresses are stored in a readable form so you can search a partial number and build audiences by area code. This is a deliberate difference from campaign audience uploads and suppression lists, which are encrypted or hashed — see Audiences → data handling.

The contact list itself shows masked identifiers — a name where you have one, otherwise the last four digits of the number or a shortened address. The full number or address appears on a contact's own page, which you open one person at a time, and in the CSV export. A list on a shared screen therefore isn't a wall of customer phone numbers.

Those identifiers live for as long as the contact does. Deleting a contact removes them with the record, immediately — there is no soft-deleted copy left behind.

Engagement history

Each contact carries a running history of what they've done: messages sent to them, delivered, opened, replied to, and engaged with — where engagement is counted both as a total and broken out into link clicks and chip taps, so an audience can ask for the narrow thing (“clicked a link”) rather than only the broad one. It comes from the same events behind your campaign analytics, so a contact's numbers and a campaign's report always agree.

Tags

Tags are your own labels — vip, store-atlanta, winback-2026 — and they exist so you can build an audience out of a group only you could define. A tag says nothing about consent.

  • One contact — open them and edit the tags on their page.
  • Many at once — tick rows on the contact list and use Tag; with a page fully ticked you can tag everything matching the current search or segment, which is how a tag gets applied to a whole imported list.

Adding and removing are separate boxes in the bulk dialog, because the contacts you selected each have their own tags: the only coherent bulk operations are “give everyone this” and “take this off everyone”. Applying a tag twice leaves one copy, and up to ten tags fit on a contact.

Deleting contacts

Delete one contact from their own page, or several at once from the list: tick the rows you want and use Delete. When every row on the page is ticked you can also select everything matching the current search or segment, which is how you clear a list that runs to thousands of rows without paging through it.

Either way you type DELETE to confirm, the same as elsewhere in RCSync, and the deletion is recorded in the audit log.

How long contacts are kept

Forever, by default. Your contact list is your own asset, so unlike delivery events and uploaded campaign lists it doesn't age out unless you ask it to. In Settings you can set an inactivity window instead — a contact with no message, engagement, or opt-in activity for that long is removed.

Contacts removed by that window are deleted the same way a contact you delete by hand is — the record and its identifiers go. Neither one deletes consent records: an opt-out keeps suppressing that person whether or not they're on your list. See Deleting contacts.

Custom fields

Declare the fields you want to store — a loyalty tier, a store, a signup date — and they become available as import columns and as audience conditions. Each field has a type (text, number, date, yes/no, or a fixed set of choices) so the audience builder can offer the right comparisons.

Add them on Contacts → Custom fields, or straight from a column while confirming an import. Naming a field gives it a key — the header your spreadsheet needs to use for that column — shown as you type. Pick Number for anything you want to compare with “more than” or “less than”, like a lifetime value or an order count; a field stored as text can only be matched exactly or by “contains”.

The key is fixed once declared, because imports and saved audiences both refer to it. Removing a field takes it out of the import matcher and the audience builder but keeps the values already on your contacts — it retires a declaration, it doesn't erase data.