- Freshsales web forms are built from CRM fields. There is no standalone “message” component. Create the field on the contact record first, then add it to the form.
- Map it before you need it. If your account converts leads to contacts, an unmapped lead field's data is lost at conversion, not delayed.
- Custom fields are capped by plan. If Add field is unavailable or a new field is missing from the form builder, the plan cap is the usual reason.
- A hidden field is not lead source tracking. It writes one default value for every submission on that form. Not what any individual visitor actually did.
- Freshsales' own Lead source field holds a single value, set once. The campaign, landing page and journey behind that value are a separate capture problem.
You are not missing a setting. That is if you have tried to add a free-text comments box to a Freshworks web form. And come up empty. Freshsales web forms are built from CRM fields. Every field on the form corresponds to a field on the contact, account or deal record. So there is no standalone “message” component of the kind some other form tools give you. Create the field first, then add it to the form.
A note on naming. Freshworks CRM, Freshsales and Freshsales Suite are the same product line at different points in its history. And support documentation exists under more than one of those names, with slightly different menu paths. If a label in your account reads differently from the steps below, look for the nearest equivalent.
Step 1: create the field on the contact record
Admin Settings > Leads, Contacts & Accounts > Contacts > Customize fields > Add field.
Choose a multi-line text field. A single-line field accepts the input but truncates it in the record view, which defeats the point of a comments box.
Give it a label you will want to read on the contact record for years. “Message” or “Enquiry details” both work. Leave it optional. Making it required will cost you submissions.
See Freshworks' own walkthrough for creating custom fields for contacts, accounts and deals.
Step 2: map it for lead conversion
This is the step that gets skipped, and skipping it loses data silently.
A custom field on the lead is not automatically the same field on the contact. That is if your account captures leads before converting them to contacts. Lead fields have to be mapped to the corresponding contact, account or deal field. So the information carries forward on conversion. Only similar field types can be mapped to each other, and a dropdown has to carry matching options on both sides.
Without the mapping, the comments someone typed sit on the lead record and vanish from the contact once it converts. And Freshworks is direct about this. Unmapped data is lost, not delayed. Set the mapping when you create the field, not later. A fix applied after the fact does not backfill records that already converted.
Step 3: add the field to the form
Admin Settings > Marketplace and Integrations > Web forms. Open the form, and drag the new field in from the available fields list. Then set it optional, and publish.
The submitted text lands directly on the field you created, wherever your contact layout places it.
If the field never appears in the form builder
Freshworks caps custom fields. And the cap depends on your plan and applies per entity. So contacts, accounts, deals and custom modules count separately. That ceiling is the likely cause, rather than anything you have done wrong. That is if Add field is greyed out. Or if your new field is missing from the form builder's list.
| Plan | Total custom fields per entity |
|---|---|
| Free | 0 |
| Growth | 150 |
| Pro | 250 |
| Enterprise | 630 |
Field type matters too. Within that total, text areas, dropdowns and lookups each carry their own smaller sub-limit. See Freshworks' current custom field limits for the full breakdown by field type. And check it directly, rather than assuming the numbers above have not moved since this was written.
The field type that does not work this way
Adding a field for information the visitor types is the easy case. Adding a field for information the visitor never sees is a different problem.
Suppose you want each enquiry to record which campaign brought it in. The obvious move is a hidden field on the form, carrying a default value. Freshsales supports exactly this. A field can be hidden from the visitor. Then auto-populated with a value you set when you build the form.
The catch is in that sentence. The value is a default for the whole form, so it is identical for every visitor who submits it. A hidden field set to “Website” records that the enquiry came through the website, which the submission already told you. It cannot distinguish the visitor who clicked a paid ad a fortnight ago. That visitor left, came back through a branded search and then enquired. That is from the one who typed your domain in directly this morning.
Freshsales' own Lead source field runs into the same ceiling from the other direction. It holds one value, set once, by a form default or a rep. Fine for a quick filter. Thin for a budget review. That is because it was never built to hold the campaign. Or the landing page, or the pages someone read on the way to submitting.
Filling those fields with real values
Lead Source is a first-party JavaScript snippet that records the visitor journey on your own site. That is the source, and the campaign behind it. Then the pages visited before the form was submitted. On submission that history goes to your dashboard. And from there to Freshsales through the Freshsales Suite Zapier connector. It is mapped into the Lead source field, and the campaign and landing page context your Zap exposes.
The practical difference from a hidden field is that the value is real for that specific submission. That is rather than a default shared by everyone who used the same form. And it sits against the individual contact record. So a named lead from months ago still shows the path they actually took.
It is form-agnostic. The tracking snippet captures the journey the same way whether the form is a Freshworks web form or Gravity Forms. Then Jotform, or custom HTML. That matters, if you are already at your Freshworks custom field cap. That is because you are not buying more field capacity to get better source data out of the forms you already have.
We build Lead Source, so treat that section as what it is. The walkthrough above stands on its own whether or not you ever use us. The full setup is on our Freshsales lead source tracking page. That includes the Zapier steps, and what we have and have not verified against the connector.
Set up Freshsales lead tracking free
Keeping the field clean once it exists
A free-text field or a Lead source picklist both drift the same way over time. Values pile up, and spellings multiply. Then a report that should show five channels shows twenty. That is a separate, later problem from the one this post solves. And we have written about fixing it in lead source normalization: clean up messy CRM values. Worth a look once the field has been live for a quarter or two.
how different CRMs handle lead source lays out the comparison side by side. That is if you run more than one CRM across a group. Or if you are choosing between Freshsales and something else for how source data actually behaves.