---
title: Contacts and form submissions
slug: contacts
description: How Personizely stores widget form submissions: visitor profiles, when a visitor becomes a contact, profile fields, the per-widget CSV export and deletion.
docTags: 
createdAt: 2026-10-16T20:04:56.450Z
---

When a visitor submits a form or survey in a widget, Personizely saves the answers to that visitor's profile. A visitor becomes a **contact** the first time their profile gets an email address or a phone number. Contacts can be sent to your email, SMS and CRM tools with [Widget automations](docId\:J2UM-jhfDgQFopQlTvf_l), exported per widget as a CSV, used for targeting and personalization, and deleted on request.

**Available on:** all platforms.

## How it works

1. **The visitor submits a form or survey.** The values are [Form spam protection and email validation](docId\:KjsRVFmsQhMDvGZpG7MwY) and sent to Personizely.
2. **The values are saved to the visitor's profile**, one profile per visitor. Each form field maps to a profile field, either a default field (such as **Email** or **First name**) or one of your [Custom fields](docId\:km7iOXZLplGl8qZlK582W). Values from **Change field value** automations on the same element are saved with them.
3. **If the profile now has an email or phone number for the first time, the visitor becomes a contact.** Personizely records the sign-up date and the widget they signed up through, and adds 1 to that widget's **Contacts** count.
4. **Automations run**, for example adding the contact to a Klaviyo list, sending a webhook or an email alert.
5. **The new values are available right away** for [Dynamic text (personalization variables)](docId\:EEz3US75criNjfndB--uS) such as `{visitor.firstName}`, for prefilled form fields and for targeting on visitor fields.

## Profile fields

Default fields you can collect in forms and surveys:

| Group    | Fields                                                                                             |
| -------- | -------------------------------------------------------------------------------------------------- |
| Identity | Email, First name, Last name, Phone, Address, Birthdate, Bio                                       |
| Company  | Company name, Company title                                                                        |
| Consent  | Marketing consent - Email and SMS, Email marketing consent, SMS marketing consent, Privacy consent |

Profiles also hold fields Personizely fills automatically, such as UTM parameters, first visited page, referrer, country, city, region and zip code. These appear in exports.

Add your own fields in **Settings → Custom fields**. Types: text, number, textarea, email, tel, checkbox, select, radio, multiple choice and date. See [Custom fields](docId\:km7iOXZLplGl8qZlK582W).

## Export contacts

On the **Widgets** list, open a widget's **⋯** menu and choose **Export contacts**. You get a CSV of every contact who submitted a form in that widget.

| Column               | Content                                                                                                              |
| -------------------- | -------------------------------------------------------------------------------------------------------------------- |
| One column per field | Every default and custom field, with the contact's current value. Checkboxes are `Yes` or `No`; empty values are `-` |
| Sign up date         | When the visitor became a contact                                                                                    |
| Sign up widget name  | The widget through which they became a contact                                                                       |

- **Only contacts are included.** Visitors who submitted without giving an email or phone number, for example in a survey-only widget, aren't in the export.
- **Values are the profile as it is now**, not a log of each submission. If a contact later changed their name in another widget, the export shows the new name.
- **Sign up widget can be a different widget.** A visitor who first signed up through widget A and later submitted widget B appears in both exports, with widget A as the sign-up widget.
- The export covers all time; there's no date filter.

For survey answers per question, use the **Survey** card in the widget's report.

## Sending contacts to other tools

Contacts are usually synced to your marketing stack at the moment of submission, with automations on the form or survey:

- **Email and SMS platforms and CRMs**, such as Klaviyo, Mailchimp, Omnisend, Brevo, HubSpot, Attentive and Postscript: add to a list, apply tags, set properties. See [Integrations](docId\:YweYsNdyWfChY1Z9KMneN).
- **Shopify:** **Add customer** creates or updates a Shopify customer with tags (default tag "Personizely").
- **Wix:** add a contact or label to your Wix contacts.
- **Send webhook** posts the submission and the visitor's profile to your own endpoint. See [Send webhook automation](docId\:NIP9OJbhFD-xFFjDZSSe4).
- **Send alert** emails the submission to your team. See [Send alert automation](docId\:ZYDHIiX_iZ_GMBWvlhBH_).

Automations run once per submission. Submissions made before you added an automation aren't sent retroactively; export them as CSV instead.

## Deleting a contact

To delete a person's data, go to **Settings → GDPR**, search by email address and delete the contact. See [GDPR and data deletion](docId\:n9IY1MR4GVbcJYNY1ZR6G). Deleting in Personizely doesn't remove the person from tools you've synced them to.

## Behavior details and limitations

- **One profile per visitor, latest value wins.** If the same visitor submits two forms with different first names, the profile keeps the most recent one.
- **A visitor is identified by their browser.** The same person submitting on two devices can end up with two profiles unless you [Identifying visitors](docId\:Q2m71k4qe54obA5WmAvBT) from your own login.
- **The Contacts count is first-time sign-ups.** A visitor who was already a contact and submits again doesn't add to the widget's **Contacts**, but does add a submit.
- **Visitors can become contacts outside widgets**, for example when your code calls `ply.identifyVisitor()` with an email. They aren't counted for any widget and have no sign-up widget.
- **Phone numbers are stored in international format**, such as `+447911123456`.

## Examples

- **Weekly lead review:** export contacts from your list-building popup every Monday and import them into your CRM, or connect the CRM with an automation and skip the export.
- **Survey plus email:** a survey step followed by an email form. Both answers end up on the same profile, and the export shows them in one row.
- **Personalized follow-up:** after sign-up, a second step says "Thanks, \{visitor.firstName or 'friend'}!" using the value just submitted.

## Related

- [Form spam protection and email validation](docId\:KjsRVFmsQhMDvGZpG7MwY)
- [Form element](docId:_32XhaAm6KMwlL3_ZIH25)
- [Custom fields](docId\:km7iOXZLplGl8qZlK582W)
- [Visitor identity, sessions and storage](docId\:pQ7hXClMZqGdoDSHsUCZ5)
- [Integrations](docId\:YweYsNdyWfChY1Z9KMneN)
- [GDPR and data deletion](docId\:n9IY1MR4GVbcJYNY1ZR6G)
