Customer satisfaction survey for a recent purchase or visit

Updated 2026-10-30

After a purchase or a service, the customer moves on and you never hear how it went. I like to ask while they still remember. This is a client satisfaction survey you send as one link.

Before you send it

Decide what you are measuring: one purchase, one visit or one project. Say so in the form description, so every rating means the same thing. Send it soon after the service. Set close_at if you want a clean window.

While it is open

Customers rate the overall experience, quality, speed, helpfulness and ease on a scale of 1 to 5. Then they say what went well and what to fix first. A visitor's AI might ask "How satisfied are you overall?" Then "How quick was the delivery?" Then "What should we improve first?" It shows the answers and sends only after a yes. Read about agent-fillable forms.

After it closes

Download the CSV and average each rating column. The lowest one is your first fix, and the comments tell you why. Reply personally to anyone who opted in to contact. If a response is really a complaint, move it to a customer complaint form. Coaches can run the same ratings after a program, next to a coaching intake form.

More ideas are in forms for Ecommerce and Shopify stores, forms for consultants and accountants and forms for SaaS teams.

Questions

Is this the same as an NPS survey?

No. This asks how satisfied people were with one purchase or visit. An NPS survey asks how likely they are to recommend you. Use the nps template for that.

How do I work out a CSAT score?

Download the CSV. Count the overall ratings of 4 and 5, then divide by all the overall ratings. Average the other rating columns to find your weakest area.

Can I use it as a client satisfaction survey for services?

Yes. Change the words purchase or visit to project in the form title and description. The ratings and the two comment boxes work for service work too.

Try the form

Live demo ยท nothing is saved

How did we do?

Thank you for your recent order or visit. A few ratings and two short comments help us do better next time.

If you have one. It helps us find your visit or purchase.

Overall, how satisfied are you? (required)

1 is very unhappy and 5 is very happy.

How happy are you with the quality of what you got?
How quick was the service or delivery?
How helpful was the person you dealt with?
How easy was it to get what you needed?
Did it match what you expected? (required)
Will you buy from us again?
You may contact me about my answers

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": "How did we do?",
  "description": "Thank you for your recent order or visit. A few ratings and two short comments help us do better next time.",
  "fields": [
    {
      "id": "visit_reference",
      "label": "Order or reference number",
      "type": "short_text",
      "help": "If you have one. It helps us find your visit or purchase.",
      "max_length": 100
    },
    {
      "id": "overall_satisfaction",
      "label": "Overall, how satisfied are you?",
      "type": "rating",
      "required": true,
      "help": "1 is very unhappy and 5 is very happy.",
      "min": 1,
      "max": 5
    },
    {
      "id": "quality_score",
      "label": "How happy are you with the quality of what you got?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "speed_score",
      "label": "How quick was the service or delivery?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "helpfulness_score",
      "label": "How helpful was the person you dealt with?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "ease_score",
      "label": "How easy was it to get what you needed?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "met_expectations",
      "label": "Did it match what you expected?",
      "type": "single_choice",
      "required": true,
      "options": [
        "Better than I expected",
        "About what I expected",
        "Not quite what I expected"
      ]
    },
    {
      "id": "went_well",
      "label": "What went well?",
      "type": "long_text",
      "max_length": 1000
    },
    {
      "id": "fix_first",
      "label": "What should we improve first?",
      "type": "long_text",
      "max_length": 1000
    },
    {
      "id": "buy_again",
      "label": "Will you buy from us again?",
      "type": "single_choice",
      "options": [
        "Yes",
        "Maybe",
        "No"
      ]
    },
    {
      "id": "reply_ok",
      "label": "You may contact me about my answers",
      "type": "checkbox"
    },
    {
      "id": "reply_address",
      "label": "Email, if you would like a reply",
      "type": "email"
    }
  ]
}

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":"How did we do?","description":"Thank you for your recent order or visit. A few ratings and two short comments help us do better next time.","fields":[{"id":"visit_reference","label":"Order or reference number","type":"short_text","help":"If you have one. It helps us find your visit or purchase.","max_length":100},{"id":"overall_satisfaction","label":"Overall, how satisfied are you?","type":"rating","required":true,"help":"1 is very unhappy and 5 is very happy.","min":1,"max":5},{"id":"quality_score","label":"How happy are you with the quality of what you got?","type":"rating","min":1,"max":5},{"id":"speed_score","label":"How quick was the service or delivery?","type":"rating","min":1,"max":5},{"id":"helpfulness_score","label":"How helpful was the person you dealt with?","type":"rating","min":1,"max":5},{"id":"ease_score","label":"How easy was it to get what you needed?","type":"rating","min":1,"max":5},{"id":"met_expectations","label":"Did it match what you expected?","type":"single_choice","required":true,"options":["Better than I expected","About what I expected","Not quite what I expected"]},{"id":"went_well","label":"What went well?","type":"long_text","max_length":1000},{"id":"fix_first","label":"What should we improve first?","type":"long_text","max_length":1000},{"id":"buy_again","label":"Will you buy from us again?","type":"single_choice","options":["Yes","Maybe","No"]},{"id":"reply_ok","label":"You may contact me about my answers","type":"checkbox"},{"id":"reply_address","label":"Email, if you would like a reply","type":"email"}]}'

JSON definition

json
{
  "title": "How did we do?",
  "description": "Thank you for your recent order or visit. A few ratings and two short comments help us do better next time.",
  "fields": [
    {
      "id": "visit_reference",
      "label": "Order or reference number",
      "type": "short_text",
      "help": "If you have one. It helps us find your visit or purchase.",
      "max_length": 100
    },
    {
      "id": "overall_satisfaction",
      "label": "Overall, how satisfied are you?",
      "type": "rating",
      "required": true,
      "help": "1 is very unhappy and 5 is very happy.",
      "min": 1,
      "max": 5
    },
    {
      "id": "quality_score",
      "label": "How happy are you with the quality of what you got?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "speed_score",
      "label": "How quick was the service or delivery?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "helpfulness_score",
      "label": "How helpful was the person you dealt with?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "ease_score",
      "label": "How easy was it to get what you needed?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "met_expectations",
      "label": "Did it match what you expected?",
      "type": "single_choice",
      "required": true,
      "options": [
        "Better than I expected",
        "About what I expected",
        "Not quite what I expected"
      ]
    },
    {
      "id": "went_well",
      "label": "What went well?",
      "type": "long_text",
      "max_length": 1000
    },
    {
      "id": "fix_first",
      "label": "What should we improve first?",
      "type": "long_text",
      "max_length": 1000
    },
    {
      "id": "buy_again",
      "label": "Will you buy from us again?",
      "type": "single_choice",
      "options": [
        "Yes",
        "Maybe",
        "No"
      ]
    },
    {
      "id": "reply_ok",
      "label": "You may contact me about my answers",
      "type": "checkbox"
    },
    {
      "id": "reply_address",
      "label": "Email, if you would like a reply",
      "type": "email"
    }
  ]
}