Custom fields
Add the details your business actually asks about, like account type, city, renewal month or order reference, and they stay on the contact rather than in a colleague's memory.
Every conversation carries a record: the fields your team fills in, the labels that sort it, the files you swapped and every note anyone left.
Start free trial7 days free · No credit card · Cancel anytime

A WhatsApp number on its own remembers a name and a phone number. Everything else your team knows about a customer usually ends up in someone's head, a spreadsheet, or a tool nobody opens. Here it sits against the conversation, one click from the reply you are writing.
Team note · Invoices go to accounts, never to this number.
order-4471.pdf· 82 KB
size-chart.png· 240 KB
Nobody wants to spend a week keying four thousand customers into a new tool, and you do not have to. A record appears the first time somebody messages you, and the spreadsheet you already keep lands on top of those records instead of beside them. The number is what matches them, so the same customer never turns up twice.
Your own software is the third way in: create and update the same records over the REST API, or let a webhook do it the moment an order changes on your side. See the developer tools
Six things hang off a contact. Together they are the answer to "who is this and what happened last time".
Add the details your business actually asks about, like account type, city, renewal month or order reference, and they stay on the contact rather than in a colleague's memory.
Markers you invent yourself, such as stage, source, territory or priority, and pin to a contact. One person can wear several, and narrowing the inbox down to a label takes a click.
Plain text that never leaves the inbox: what you promised, who has to approve it, how badly the last delivery went. Written for whoever opens the chat next.
Documents and images from the thread stay with the contact, so last quarter's quote is where you would look for it instead of somewhere in the scrollback.
Who is handling this person, and which team they belong to. Assignment moves with the record, so a reply never lands on nobody.
Every message ever exchanged on the number, in one place. The history is the record, so scroll it or search it.
Teams reach for the wrong one constantly, then wonder why a segment is empty. The short version: labels group, notes explain, fields describe.
| Aspect | Labels | Team notes | Custom fields |
|---|---|---|---|
| In one line | A marker you invented, used for sorting. | A private comment for your team. | A named value on the contact. |
| Who reads it | Your team. Never the customer. | Your team. Never the customer. | Your team. Never the customer. |
| Where it shows | On the chat row and the contact panel. | In the thread, styled so nobody mistakes it for a reply. | In the contact panel, under its own name. |
| Reach for it when | You want to find this group again later. | The next person needs context before they answer. | The value is different for every contact. |
| Filters and audiences | Yes, for filtering the inbox and building a send list. | No. Notes are context, not criteria. | Yes, and the value can go into the message itself. |
A CRM that only one person keeps up is a diary. This one is shared from the start: every agent works the same records, departments decide who handles what, and permissions decide who may change it. Hand a chat over and the context goes with the chat.
Nothing retyped, nothing re-explained, nothing lost between two people.
The point of tidy records is what you can do with them. Filter the list by any label or field value, send to exactly that group as a campaign, and let the field values write the personal part of each message. The tidying you did in the inbox is the targeting you get in the campaign.
Most teams reading this already run a CRM, an ERP, or a spreadsheet that has outlasted two of them. Nothing here asks you to move off it. The work is split by what each side can actually know.
None of it exists anywhere until somebody has the conversation, which is why it belongs where the conversation happens.
Copying any of that over here would leave you with two answers to the same question, and one of them wrong by Friday.
Neither side gets retyped into the other: read and write the contact store over the REST API, and let webhooks push what changed as it changes. The phone number is the key both halves already share. See how that works
The contact store is part of the API, not a screen bolted on top of it. Search it by phone number, read a record, update its fields from your backend, and subscribe to webhooks so an order or a signup on your side lands on the right contact without anyone opening the inbox.
# Look one record up by its number
curl -G https://api.wali.chat/v1/chat/$DEVICE/contacts \
-H "Authorization: $WALI_TOKEN" \
-d "phone=+14155550142"[ {"id": "6a1f…c7", "phone": "+14155550142" } ]Contacts, message history and received files are held per plan. These are the live limits, the same ones the pricing table shows.
| Limit | Professional | Business | Enterprise |
|---|---|---|---|
| Contacts stored | 5,000 | 20,000 | Unlimited |
| Stored messages | 50,000 | 150,000 | 500,000 |
| Chat history retention | 270 days | 730 days | 2,190 days |
| Received files retention | 120 days | 365 days | 1,095 days |
Every plan includes the contacts CRM. Compare all features
No. The contact list builds itself out of the conversations you are already having, and one inbound message is enough to create a record. Importing is there for the list you already keep, not a step you have to clear first.
Yes. Beyond name and number you define the fields, name them yourself, and fill them in from the chat panel or over the API. They stay on the contact and you can filter and personalise messages with them afterwards.
No. Notes and labels live only inside the inbox, which means they are never sent to WhatsApp and never appear on anybody's phone. Whatever you write on a record stays between the people who open the chat.
Documents and images exchanged in the thread stay with the record. How long received files are kept depends on the plan, and the storage table on this page shows the retention for each one.
Yes. Filter the contact list by labels or field values, then send to exactly that selection as a campaign. Every message is assembled from the values on that individual record. The campaigns page walks through scheduling and delivery reporting.
Yes. The REST API lists and searches the contact store and updates records, and webhooks push inbound events to your endpoint as they happen, so your database and the contact panel describe the same customer.
No, and you should not. Keep your system of record for orders, invoices and the pipeline; this holds what the conversation produced, which is the thread, the notes, the labels and the files. The REST API and webhooks keep both sides describing the same customer, matched on the phone number, so nothing has to be retyped from one into the other.
Join 5,000+ teams already using WaliChat to grow faster.