Skip to content

Form builders form response notifications

Parse form response emails

Most form builders can email you each response. Point that notification at a mailhooks.cc address and this layout reads the answers by their labels, so the response reaches a webhook, a sheet or a chat as fields.

Use this layoutFree plan included: 2 layouts per endpoint.
The email
From
Forms <notifications@forms.example>
Subject
New response: Contact us
You have a new response to Contact us.

Name: Jane Doe
Email: jane@example.com
Company: Acme
Message: Could you send a quote for 20 seats?
What your endpoint delivers
{
  "parsed": {
    "status": "matched",
    "layout": {
      "id": "form-responses",
      "name": "Form responses"
    },
    "fields": {
      "form": "Contact us",
      "name": "Jane Doe",
      "email": "jane@example.com",
      "company": "Acme",
      "message": "Could you send a quote for 20 seats?"
    },
    "lineItems": []
  }
}

The layout

It matches the email by its subject, reads each field with an RE2 pattern. Edit any of it in the endpoint's settings, where the preview tries it on an email you captured as you type.

{
  "id": "form-responses",
  "name": "Form responses",
  "match": {
    "conditions": [
      {
        "field": "email",
        "name": "subject",
        "op": "contains",
        "value": "response"
      }
    ]
  },
  "fields": [
    {
      "name": "form",
      "from": "subject",
      "pattern": "response:[ \\t]*([^\\r\\n]+)"
    },
    {
      "name": "name",
      "from": "text",
      "pattern": "(?m)^Name:[ \\t]*([^\\r\\n]+)"
    },
    {
      "name": "email",
      "from": "text",
      "pattern": "(?m)^Email:\\s*(\\S+)"
    },
    {
      "name": "company",
      "from": "text",
      "pattern": "(?m)^Company:[ \\t]*([^\\r\\n]+)"
    },
    {
      "name": "message",
      "from": "text",
      "pattern": "(?m)^Message:[ \\t]*([^\\r\\n]+)"
    }
  ]
}

More senders