Skip to content

Create a Contact

The contact action reads a form submission the way a person would: one answer is the email, some are contact details, the rest are worth keeping. It identifies the submitter as a Contact and links the session to them, so the anonymous visitor who just converted becomes someone you can name.

It is a native SnipForm action, not a third-party integration, and needs no connection or plan upgrade.

Only the “A form is submitted” trigger carries a submission. On any other trigger the action completes with the note “Nothing to identify - this trigger carries no form submission” and writes nothing. Likewise a Test run reports “Test run - no contact created”.

FieldDefaultWhat it does
Email fieldDetect automaticallyName the field when a form has more than one email address. Leave blank otherwise
Save the contact asLeadThe lifecycle stage written onto the contact: lead, subscriber, customer or user
Suspicious submissionsSkip flagged submissionsOutright spam never reaches an automation. This decides what happens to submissions the scorer only flagged: skip them, or create the contact anyway

In order, the first match wins:

  1. The field you named in Email field, if its value is a valid email address.
  2. The first field whose input type is email with a valid value.
  3. The first field whose name is one of email, e_mail, email_address, emailaddress, your_email, work_email, contact_email.
  4. Any field whose value is a valid email address.

No match means no contact; the run completes with “Skipped - no email address in the submission”.

Field names are normalised before matching: first_name, firstName, First Name and first-name are all the same field.

TraitRecognised field names
first_namefirst_name, firstname, first, given_name, fname
last_namelast_name, lastname, last, surname, family_name, lname
phonephone, phone_number, telephone, tel, mobile, mobile_number, cell, cellphone, contact_number
companycompany, company_name, business, business_name, organisation, organization
job_titlejob_title, jobtitle, role, position, occupation
websitewebsite, web_site, url, site
countrycountry
citycity, town

A single full-name field (name, full_name, fullname, your_name, contact_name) is split on the first space into first_name and last_name.

Every other answer of 200 characters or fewer is kept as a meta entry ({key, value}) on the contact. Longer answers are message bodies, not contact details; they stay on the submission and are not copied to the person.

Choice fields (select, radio, checkbox) contribute their plain selected values, not option markup.

The submitting session gets contact_id set, once. If the session was already identified (by signals.identify(), an earlier form, or the API), the contact is still created or updated but the session keeps its existing link, and the run notes “session was already identified”.

The outcome is recorded on the run: “Contact created: [email protected]” or “Contact updated: [email protected]”.

A “Contact us” form with fields Name, Work email, Company, Phone and Message, and an automation:

WHEN a form is submitted: Contact us
THEN create a contact (email: detect automatically, save as: Lead, flagged: skip)
post to Slack #inbound

produces a contact with email, first_name, last_name, company, phone, lifecycle_stage: lead, linked to the session that browsed your pricing page before submitting. The Message answer stays on the submission.

Contacts can also be created from the tracker with signals.identify() (Identify), from your backend with the Contacts API, and by the Shopify integration.