For the complete documentation index, see llms.txt. This page is also available as Markdown.

๐Ÿ‘ฅContacts

Contacts is Ring Tonic's lightweight CRM. Every phone call and form submission your tracking generates can be matched to a contact, moved through a pipeline of stages, and tracked from first touch to closed-won revenue โ€” without leaving the platform.

The Kanban view, contact detail page, custom fields, and stage drag-and-drop are Agency plan features. The basic table view and individual contact details remain available on every plan.


The Pipeline

Every contact has a stage showing where they are in your funnel. Stages are forward-only by default โ€” a contact advances automatically (from phone calls, form submissions, or events sent from other tools), but only owners and admins can move one backward.

Order
Stage
Meaning

0

New

A contact exists but no event has been recorded

10

Contacted

An outbound or inbound interaction has happened

20

Form Submitted

The contact submitted a tracked form (via Form Submissions)

30

Qualified

AI auto-qualification or manual review marked the lead worth pursuing

40

Appointment Booked

A calendar event was created (typically from an outside tool)

50

Proposal Sent

A quote or proposal has been delivered

100

Won / Customer

Closed-won โ€” revenue recognized

200

Lost

Closed-lost

300

Unqualified

Excluded from the funnel (spam, wrong fit, etc.)

The terminal stages (Won, Customer, Lost, Unqualified) are mutually exclusive โ€” once a contact lands in one, it stops advancing automatically. (Won and Customer are both "won" outcomes and share the same place in the funnel order.) To move a contact out of a terminal stage you have to drag it there yourself, which only owners and admins can do.

Why fixed stages? Ring Tonic intentionally ships an opinionated stage set matching the call-tracking industry norm (CallRail, WhatConverts). This keeps funnel analytics consistent across workspaces. Workspace-customizable stages are a planned future enhancement.


Kanban View

The default view at Contacts is a horizontally-scrolling Kanban board with one column per pipeline stage.

Contacts Kanban board โ€” one column per pipeline stage, with counts and deal value

What each column shows:

  • Stage label (e.g. "Form Submitted") with a colored badge

  • Count of contacts currently in that stage

  • Total deal value โ€” the combined value of all contacts in the column

  • Up to 50 cards, most-recently-changed first

  • Load more at the bottom if more cards exist

Each card shows:

  • Contact name (or phone number if the name is blank)

  • Phone number, formatted for your workspace

  • Email, if known

  • "About X hours ago" โ€” when the contact last moved into this stage

Click a card to open the Contact Detail page.

Moving cards between stages

Drag any card onto a different column to change its stage. Three behaviors:

  • Forward move (e.g. Contacted โ†’ Qualified) โ€” instant, no confirmation. Any logged-in user can do this.

  • Backward move (e.g. Won โ†’ Qualified) โ€” owners and admins only, with an Undo toast. Other users get a permission error.

  • Same column โ€” nothing happens.

Moving a contact backward is recorded in its timeline as a manual change, and moving it out of Won or Lost automatically updates the matching won/lost close date.

Backward moves โ€” for developers

Forward and backward moves fire the contact.stage_changed webhook. Backward moves use the force_stage=true path and are logged with source: manual. See the API guide and Webhooks.


Table View

Click the Table toggle (top-right of the Kanban) to switch to a flat, sortable, filterable table โ€” handy for bulk operations or richer filtering.

Contacts table view โ€” sortable and filterable, with multi-select bulk actions
  • Sort by name, phone, last stage change, deal value, and more

  • Filter by stage, campaign, source, or date range

  • Multi-select for bulk actions (assign owner, archive, export CSV)

Ring Tonic remembers which view you used last.


Contact Detail

Click any card or row to open the full contact detail page.

Contact detail page โ€” header, stage, deal value, and the timeline / tabs
  • Contact name as the page title

  • Current Stage badge

  • Value โ€” the contact's deal value

  • Phone, email, and company (whichever are known)

Tabs

  • Timeline โ€” a chronological feed of everything tied to this contact:

    • Stage changes (showing where each one came from โ€” a manual edit, a call, a form, or an outside tool)

    • Form submissions

    • Calls (with a link to the call detail page)

    • Notes

    • Repeat events that didn't change anything (marked (ignored) โ€” see below)

  • Custom fields โ€” your workspace's custom fields (see Custom Fields)

  • Notes โ€” free-form team notes

  • Calls โ€” call history for this contact only

  • Forms โ€” form submissions for this contact, showing everything that was submitted

Why some events say "(ignored)"

When the same event happens twice (for example, the same visitor submits a form more than once), the first one moves the contact to the new stage. Later repeats still appear in the timeline but are marked (ignored), because the contact is already at that stage. This keeps a complete history without throwing off your pipeline counts.


Custom Fields

Custom fields are your own typed fields that attach to every contact. They accept values from form submissions, the API, and manual edits.

Custom fields on a contact โ€” edit each typed field and click Save

Field types you can add:

Type
What it's for

Text

Free-form notes, IDs, statuses

Number

Lead scores, ticket counts, quantities

Date

Appointment dates, deadlines

Single Select

One choice from a fixed list (lead source, region)

Multi Select

Several choices from a list (tags, interests)

Boolean

A simple Yes/No toggle

URL

A link, e.g. a LinkedIn profile

Defining a custom field

  1. Go to Settings โ†’ Custom Fields

  2. Click Add custom field

  3. Choose a key (a lowercase identifier like lead_score โ€” it can't be changed after saving), a display label, and a type

  4. For Single Select / Multi Select, add the allowed options

  5. Mark Required if the field must be set on every contact (enforced on manual create/edit only; form submissions and API calls may leave it blank)

  6. Save

Editing custom field values on a contact

You edit custom fields one at a time, right where you see them. Open a contact โ€” either the quick-view panel (click a card or row) or the full detail page โ€” and go to the Custom fields section.

  1. Find the field you want to change and click its Edit control.

  2. An inline editor opens with the right kind of input โ€” a text, number, date, or link box; a dropdown for Single Select; checkboxes for Multi Select; or a Yes/No toggle.

  3. Make your change and click Save.

Each field saves on its own, so editing one never touches the others. Validation runs the moment you save (type, required, allowed options), and anything that needs fixing shows a message right on that field.


How Stages Get Set Automatically

Most of the time you won't move contacts by hand โ€” events do it for you.

Event
Sets stage to
Notes

Form submission matched by phone or email

Form Submitted

First submission only; later ones just add timeline entries

Phone call auto-qualified by AI

Qualified

Driven by your workspace's AI auto-qualification rules

An event sent via the Postback API

Whatever stage was sent

Used to connect outside tools (CRM, scheduler, automations)

Manual drag in the Kanban

Whatever column you dropped on

Owners/admins for backward moves

Stage advancement is forward-only by default. If a call or an outside event asks to move a contact backward, it's recorded in the timeline but the contact doesn't actually move. Only an owner or admin can move a contact backward (or a developer using the API's force option).


Won and Lost Tracking

Ring Tonic tracks Won and Lost separately so your analytics can compute close rates and lost-revenue baselines.

  • When a contact moves to Won, Ring Tonic records the close date and locks in the deal value โ€” keeping your close-rate and revenue reports accurate.

  • When a contact moves to Lost, it records the close date and keeps the deal value, so you can see how much potential revenue slipped away.

Funnel analytics in the Analytics section roll these up by source, campaign, and date range.


Plan Gating

Feature
Plan

Contact detail panel (quick-view)

All plans

Kanban view, full detail page, timeline, custom fields, stage drag

Agency

Auto-creating contacts from form submissions

Agency (via Form Submissions)

Creating/updating contacts via the API

Agency (via API)

If you open Contacts on a non-Agency plan, you'll see a pricing prompt. Existing contact records remain accessible via the table view and individual detail panels.


Common Questions

Can I import contacts from a CSV?

Yes โ€” Contacts โ†’ Add contact โ†’ Import from CSV. Required columns are name and at least one of phone or email. Custom field columns are matched automatically by their header to a custom field's key.

What happens to a contact's data if I archive a custom field?

The values are kept on the contact. The field just stops appearing in new contact forms and the Custom Fields tab. To bring it back, un-archive it from Settings โ†’ Custom Fields.

Can two workspaces share contacts?

No. Contacts are workspace-scoped. The same phone number can exist as a contact in multiple workspaces, but each workspace's funnel is independent.

How do duplicate contacts get merged?

Automatic merging isn't available yet. When a new call or form comes in, Ring Tonic matches it to an existing contact by checking, in order: a reference ID from your other tools, then phone number, then email. If a match is ambiguous, it doesn't guess โ€” it flags it so you can decide. A manual merge tool is on the roadmap.

Can I create custom stages?

Not yet โ€” the stages are a fixed set. Workspace-customizable stages are planned but not committed.

How are deleted contacts handled?

Deleted contacts are moved to the trash โ€” they disappear from the Kanban and table, but their identifiers (reference ID, phone, and email) stay reserved. If the same lead comes in again later, it's restored instead of creating a duplicate.


  • Form Submissions โ€” capture leads from a website

  • API โ€” push contacts and conversions programmatically

  • Analytics โ€” funnel chart and revenue-by-source reporting

  • Webhooks โ€” subscribe to contact.stage_changed and conversion.recorded

Last updated