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.
When it does something
Section titled “When it does something”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”.
Configuration
Section titled “Configuration”| Field | Default | What it does |
|---|---|---|
| Email field | Detect automatically | Name the field when a form has more than one email address. Leave blank otherwise |
| Save the contact as | Lead | The lifecycle stage written onto the contact: lead, subscriber, customer or user |
| Suspicious submissions | Skip flagged submissions | Outright spam never reaches an automation. This decides what happens to submissions the scorer only flagged: skip them, or create the contact anyway |
How the email is found
Section titled “How the email is found”In order, the first match wins:
- The field you named in Email field, if its value is a valid email address.
- The first field whose input type is
emailwith a valid value. - The first field whose name is one of
email,e_mail,email_address,emailaddress,your_email,work_email,contact_email. - 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.
How the other answers become traits
Section titled “How the other answers become traits”| Trait | Recognised field names |
|---|---|
first_name | first_name, firstname, first, given_name, fname |
last_name | last_name, lastname, last, surname, family_name, lname |
phone | phone, phone_number, telephone, tel, mobile, mobile_number, cell, cellphone, contact_number |
company | company, company_name, business, business_name, organisation, organization |
job_title | job_title, jobtitle, role, position, occupation |
website | website, web_site, url, site |
country | country |
city | city, 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.
Linking to the session
Section titled “Linking to the session”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]”.
Example
Section titled “Example”A “Contact us” form with fields Name, Work email, Company, Phone and Message, and an automation:
WHEN a form is submitted: Contact usTHEN create a contact (email: detect automatically, save as: Lead, flagged: skip) post to Slack #inboundproduces 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.