Answers
Attribution has to live somewhere your CRM can see it. That somewhere is 10 custom fields on the contact record, and we do not create them until you say so.
vt_first_source, vt_first_medium, vt_first_campaign, vt_first_date, vt_last_source, vt_last_campaign, vt_gclid, vt_fbclid, vt_landing_page, vt_anon_id. They only ever hold which ad or source brought each contact. A new set starts empty; fields already in your CRM under these names are reused rather than recreated, and whatever they hold is kept and read.
3 more are attempted afterwards and only if your CRM has room: vt_last_date, vt_term, vt_content. They sharpen the reporting and nothing breaks without them, so a CRM that refuses them is not a problem.
Choose keep it read only and nothing is created. Contacts and revenue still sync in, dashboards and reports still work, calls and deals still land. What you lose is attribution capture: without somewhere to write the source, a new lead cannot carry the ad that earned them, so ROAS has nothing to attribute. Change your mind whenever you like; the card in Settings → Connections is the way back and the fields appear in seconds.
Disconnecting Keap leaves the fields alone by default, because most disconnects are a repair and those fields hold your own attribution history. If you are leaving for good, the Disconnect button opens a confirm with a checkbox that also deletes them. Be sure: deleting a field deletes its value on every contact, permanently, and we ask you twice before doing it.
HighLevel is different, and we will not pretend otherwise: their API gives an app no way to delete a custom field. On HighLevel the fields stay in your location when you disconnect, and only you can remove them from inside HighLevel.
Keap decides which tab a new contact field lands on at the moment it is created, and offers no way for an app to move one afterwards. If yours are not where you want them, moving them is a job for Keap's own field editor.
Keap keeps only the inputs that are on a form's definition, so a form nobody edited throws our hidden fields away and the lead arrives with no source. We cover that a second way: when somebody submits a form on your site, our script sends the email address they typed together with the attribution it tried to place, we hold the two for thirty minutes, and the moment Keap tells us the contact exists we write the attribution onto the record. Fields that already hold a first touch are left alone. The address is kept only for that half hour and only to make the match.