Complaint form for customers who need to be heard

Updated 2026-10-30

A complaint in a public review hurts. The same complaint in your inbox gives you a chance to fix it. I would rather give an unhappy customer a clear place to explain, so I hear it first.

What should it ask?

Only what you need to look into it: who they are, which order, what happened, when, and what would put it right. A link box takes the place of photo uploads, because the form cannot take files.

What if the customer is angry or vague?

Give them room. The long text box lets them write freely, and a seriousness rating tells you whom to call first. A calm visitor can let their own AI organise the story. It asks "What happened?" Then "What would put this right?" Then "Have you contacted us before?" It shows the answers and sends only after a yes. See agent-fillable forms.

What do I do with it?

Sort the CSV by seriousness, reply, and write down the outcome. When one topic repeats, fix the process. Follow up with a customer satisfaction survey once it is settled. Faulty goods belong in a warranty claim form. Happy customers can use a referral form later. More ideas are in forms for Shopify stores and forms for consultants and accountants.

Questions

Can a complaint form hold evidence?

Not files. It takes a link to a photo, video or document that the customer stored elsewhere. Ask them to make the link viewable by you.

Should I promise a reply time?

Yes, if you can keep it. Put it in confirmation_message so the customer sees it after sending. The form does not email them, so you send the reply.

How do I spot repeat problems?

Download the CSV and count the topic column. If one topic keeps coming back, the cause is probably your process, not one unlucky customer.

Try the form

Live demo ยท nothing is saved

Tell us what went wrong

We are sorry something did not go well. Please tell us what happened. We will look into it and reply.

What is your complaint about? (required)

Write it as you would tell a friend. Dates, names and what was said all help.

Have you contacted us about this already?
How serious is this for you?

1 is a small annoyance and 5 is a serious problem.

What would put this right? (required)
How should we reply?

Or paste the JSON

Give this to your AI. It needs the AI Form API MCP server or an API key. It makes the form and sends you the link.

text
Create this form with the AI Form API create_form tool (or POST https://aiformapi.com/v1/forms with my API key). Then reply with the public_url.

{
  "title": "Tell us what went wrong",
  "description": "We are sorry something did not go well. Please tell us what happened. We will look into it and reply.",
  "fields": [
    {
      "id": "complainant_name",
      "label": "Your name",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "complainant_email",
      "label": "Email so we can reply",
      "type": "email",
      "required": true
    },
    {
      "id": "contact_phone",
      "label": "Phone, if you would rather talk",
      "type": "phone"
    },
    {
      "id": "order_reference",
      "label": "Order, booking or invoice number",
      "type": "short_text",
      "max_length": 100
    },
    {
      "id": "incident_date",
      "label": "When did it happen?",
      "type": "date"
    },
    {
      "id": "complaint_topic",
      "label": "What is your complaint about?",
      "type": "single_choice",
      "required": true,
      "options": [
        "Product quality",
        "Delivery",
        "Service or staff",
        "Billing or charges",
        "Something I was told",
        "Something else"
      ]
    },
    {
      "id": "what_happened",
      "label": "What happened?",
      "type": "long_text",
      "required": true,
      "help": "Write it as you would tell a friend. Dates, names and what was said all help.",
      "max_length": 3000
    },
    {
      "id": "personal_impact",
      "label": "How has it affected you?",
      "type": "long_text",
      "max_length": 1500
    },
    {
      "id": "already_contacted",
      "label": "Have you contacted us about this already?",
      "type": "single_choice",
      "options": [
        "No, this is the first time",
        "Yes, by email",
        "Yes, by phone",
        "Yes, in person"
      ]
    },
    {
      "id": "seriousness",
      "label": "How serious is this for you?",
      "type": "rating",
      "help": "1 is a small annoyance and 5 is a serious problem.",
      "min": 1,
      "max": 5
    },
    {
      "id": "put_right",
      "label": "What would put this right?",
      "type": "single_choice",
      "required": true,
      "options": [
        "An apology",
        "A replacement or repair",
        "A refund",
        "A change in how you work",
        "I just wanted you to know"
      ]
    },
    {
      "id": "evidence_link",
      "label": "A link to a photo, video or document",
      "type": "url",
      "help": "Store the file online and paste the link here."
    },
    {
      "id": "reply_method",
      "label": "How should we reply?",
      "type": "single_choice",
      "options": [
        "By email",
        "By phone"
      ]
    }
  ]
}

Or call the API

bash
curl -X POST https://aiformapi.com/v1/forms \
  -H "Authorization: Bearer $AIFORMAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Tell us what went wrong","description":"We are sorry something did not go well. Please tell us what happened. We will look into it and reply.","fields":[{"id":"complainant_name","label":"Your name","type":"short_text","required":true,"max_length":150},{"id":"complainant_email","label":"Email so we can reply","type":"email","required":true},{"id":"contact_phone","label":"Phone, if you would rather talk","type":"phone"},{"id":"order_reference","label":"Order, booking or invoice number","type":"short_text","max_length":100},{"id":"incident_date","label":"When did it happen?","type":"date"},{"id":"complaint_topic","label":"What is your complaint about?","type":"single_choice","required":true,"options":["Product quality","Delivery","Service or staff","Billing or charges","Something I was told","Something else"]},{"id":"what_happened","label":"What happened?","type":"long_text","required":true,"help":"Write it as you would tell a friend. Dates, names and what was said all help.","max_length":3000},{"id":"personal_impact","label":"How has it affected you?","type":"long_text","max_length":1500},{"id":"already_contacted","label":"Have you contacted us about this already?","type":"single_choice","options":["No, this is the first time","Yes, by email","Yes, by phone","Yes, in person"]},{"id":"seriousness","label":"How serious is this for you?","type":"rating","help":"1 is a small annoyance and 5 is a serious problem.","min":1,"max":5},{"id":"put_right","label":"What would put this right?","type":"single_choice","required":true,"options":["An apology","A replacement or repair","A refund","A change in how you work","I just wanted you to know"]},{"id":"evidence_link","label":"A link to a photo, video or document","type":"url","help":"Store the file online and paste the link here."},{"id":"reply_method","label":"How should we reply?","type":"single_choice","options":["By email","By phone"]}]}'

JSON definition

json
{
  "title": "Tell us what went wrong",
  "description": "We are sorry something did not go well. Please tell us what happened. We will look into it and reply.",
  "fields": [
    {
      "id": "complainant_name",
      "label": "Your name",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "complainant_email",
      "label": "Email so we can reply",
      "type": "email",
      "required": true
    },
    {
      "id": "contact_phone",
      "label": "Phone, if you would rather talk",
      "type": "phone"
    },
    {
      "id": "order_reference",
      "label": "Order, booking or invoice number",
      "type": "short_text",
      "max_length": 100
    },
    {
      "id": "incident_date",
      "label": "When did it happen?",
      "type": "date"
    },
    {
      "id": "complaint_topic",
      "label": "What is your complaint about?",
      "type": "single_choice",
      "required": true,
      "options": [
        "Product quality",
        "Delivery",
        "Service or staff",
        "Billing or charges",
        "Something I was told",
        "Something else"
      ]
    },
    {
      "id": "what_happened",
      "label": "What happened?",
      "type": "long_text",
      "required": true,
      "help": "Write it as you would tell a friend. Dates, names and what was said all help.",
      "max_length": 3000
    },
    {
      "id": "personal_impact",
      "label": "How has it affected you?",
      "type": "long_text",
      "max_length": 1500
    },
    {
      "id": "already_contacted",
      "label": "Have you contacted us about this already?",
      "type": "single_choice",
      "options": [
        "No, this is the first time",
        "Yes, by email",
        "Yes, by phone",
        "Yes, in person"
      ]
    },
    {
      "id": "seriousness",
      "label": "How serious is this for you?",
      "type": "rating",
      "help": "1 is a small annoyance and 5 is a serious problem.",
      "min": 1,
      "max": 5
    },
    {
      "id": "put_right",
      "label": "What would put this right?",
      "type": "single_choice",
      "required": true,
      "options": [
        "An apology",
        "A replacement or repair",
        "A refund",
        "A change in how you work",
        "I just wanted you to know"
      ]
    },
    {
      "id": "evidence_link",
      "label": "A link to a photo, video or document",
      "type": "url",
      "help": "Store the file online and paste the link here."
    },
    {
      "id": "reply_method",
      "label": "How should we reply?",
      "type": "single_choice",
      "options": [
        "By email",
        "By phone"
      ]
    }
  ]
}