When someone submits a form that has GoHighLevel selected under Form Settings → Integrations, ROASForm creates or updates the contact in your GoHighLevel location. The basics need no setup: the answers to your Email, Phone, and Name questions become the contact's email, phone, and name, and the contact source is set to ROASForm. Every other answer (budget, timeline, company size, website, address, the lead score, an uploaded file) only reaches GoHighLevel if you map that question to a GoHighLevel field. You do it once per question, and ROASForm fills the field on every submission after that.
GoHighLevel is connected under Integrations for this subaccount.
In the form, Form Settings → Integrations has Integration set to GoHighLevel. Nothing syncs until this is set, and the mapping panel shows "No CRM Connected" with a Connect CRM button.
The custom field already exists in GoHighLevel (Settings → Custom Fields in your location). ROASForm does not create fields for you.
ROASForm reads the answers to your Email, Phone, and Name questions by question type (a Text question titled exactly "Name" counts too) and stores them on the lead. On every sync, those values are written to the contact's standard Email, Phone, and Name fields in GoHighLevel, whether or not the questions are mapped. Phone numbers are converted to international format first. The contact also gets Source = ROASForm, plus the lead's timezone and country when known.
GoHighLevel needs only one of email or phone to create the contact, so your form can ask for either.
When you add an Email, Phone, Website, or Address question to a form that already has GoHighLevel selected under Form Settings → Integrations, ROASForm pre-fills the mapping to the matching standard contact field. Three things to know:
It only happens at the moment you add the question. Questions that were already in the form when you turned the integration on keep whatever mapping they had (usually none). Check them once and map by hand if needed.
Name questions are never pre-mapped. The name still syncs (see above); map it to First Name or Last Name only if you want to control the split yourself.
Website and Address are not part of the automatic lead sync. If one of those questions ends up unmapped, its answer is stored in ROASForm but is not sent to GoHighLevel until you map it.
Open the form and click the question you want to sync.
In the question settings on the right, find Map to CRM field and click Select CRM field...
Pick a field. The list has two groups: Compatible Fields (GoHighLevel's standard contact fields that fit this question type) and Custom Fields (every custom field in your location). Type in the search box to filter.
Save the form. From the next submission on, the answer is written to that field.
[Screenshot: question settings with the Map to CRM field dropdown open, showing Compatible Fields and Custom Fields]
A few rules worth knowing:
Email, phone, and name questions can only go to their matching standard field, or to any custom field. Every other question type can go anywhere.
One question, one field. If two questions point at the same field, the later answer wins.
To map an address in parts, turn on structured mapping on the Address question. You then get a separate picker for street, city, state, postal code, and country.
If your form uses scoring, you can push the final score onto the contact and use it in GoHighLevel workflows and smart lists:
Open Form Settings → Scoring.
Turn on Pass Score to CRM and choose the custom field to write it to.
Use a Number or Text custom field for the score. Monetary fields work too, but GoHighLevel clamps negative scores to 0 in them.
[Screenshot: Scoring settings with the Pass Score to CRM toggle on and a custom field selected]
A File Upload question can be mapped to a GoHighLevel file-upload custom field. The file is attached right after the contact is created. The first time you use this, the Integrations page may show a banner saying ROASForm needs new GoHighLevel permissions to sync file uploads. Click Reconnect there once and you are set; nothing else about your integration changes.
ROASForm shapes each answer to the field type it is going into, so GoHighLevel accepts it:
Phone numbers are sent in international format (+1...).
Dates are normalized for Date fields.
Number and Monetary fields get a real number.
If an answer cannot be converted (for example text going into a Number field), that one field is skipped and the rest of the contact still syncs. Pick a Text field if you are unsure.
If a mapped field shows a Needs re-map badge, the field it pointed to no longer exists in the connected GoHighLevel location. The usual causes:
The custom field was deleted or recreated in GoHighLevel.
The form was cloned into another subaccount, or the subaccount was reconnected to a different GoHighLevel location, and that location does not have the field.
Fix: click the mapping, pick the right field from the list, and save. Until you do, that one answer is not written (everything else keeps syncing). If you recreate a field in GoHighLevel with the same name, ROASForm usually picks it up again on its own and the warning disappears.
[Screenshot: a mapped question showing the Needs re-map badge]
Field lists are loaded when you open the form builder. If you just created a custom field in GoHighLevel, reload the builder and it will be there within about 30 seconds.
Submit a test lead, then open Integrations → Logs, click the Contact sync row, and look at the Request. Your mapped fields are listed under customFields with the values that were sent. If the row is red, the error message tells you which field GoHighLevel rejected.