A patient satisfaction survey you can send after each visit

Updated 2026-10-30

Patients rarely tell the practice what went wrong. They tell their friends. I would rather ask once, kindly, and read the answers in one list. Below is how I would run it, from the first week to the review.

Before the form opens

Decide who gets the link: everyone after a visit, or one clinic day a week. Pick a close date for the review period. Share the link in a follow-up message from your own system.

While it is open

Patients rate how easy booking was, how long they waited, how well they were heard and how clear the explanation was. They rate the front desk too, since that is the first and last face they see. One score asks how likely they are to recommend you.

A patient's AI would ask "How easy was it to get an appointment?" Then "How well did the clinician listen?" Then "What should we improve first?" It shows all answers and sends only after a yes. See agent-fillable forms.

After it closes

Download the CSV. Read the improve_first column before the scores. Start with one change and tell patients what you did.

Check your local privacy rules before collecting health data. This is a form, not medical advice. A patient referral form and a new patient registration form cover the steps around a visit. More in forms for clinics.

Questions

How do I turn the recommend score into one number?

Download the CSV and read the recommend_score column. Count the 9 and 10 answers as promoters and the 0 to 6 answers as detractors, then subtract the share of detractors.

Should patients write about their treatment here?

No. The form asks them to leave out medical details, because it is a feedback survey and not a care channel. Keep clinical questions on the phone or in your own system.

Can I stop answers after a review period?

Yes. Set close_at to the end of your review window. Set max_responses if you want to stop after a set number of replies.

Try the form

Live demo ยท nothing is saved

How was your visit with us?

Your feedback helps us look after the next patient better. Please leave out medical details. For anything urgent, call the clinic.

What kind of visit was it?
How easy was it to get an appointment?
How long did you wait to be seen?
How well did the clinician listen to you?
How clearly was your care explained?
How helpful was the front desk?
How likely are you to recommend us to a friend? (required)

0 is not at all likely, 10 is extremely likely.

You may contact me about this 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": "How was your visit with us?",
  "description": "Your feedback helps us look after the next patient better. Please leave out medical details. For anything urgent, call the clinic.",
  "fields": [
    {
      "id": "visit_date",
      "label": "When was your visit?",
      "type": "date",
      "required": true
    },
    {
      "id": "visit_reason",
      "label": "What kind of visit was it?",
      "type": "single_choice",
      "options": [
        "Check-up",
        "Follow-up",
        "Urgent visit",
        "Test or procedure",
        "Phone or video visit"
      ]
    },
    {
      "id": "booking_ease",
      "label": "How easy was it to get an appointment?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "waiting_time",
      "label": "How long did you wait to be seen?",
      "type": "single_choice",
      "options": [
        "No wait",
        "A few minutes",
        "Longer than expected",
        "Much too long"
      ]
    },
    {
      "id": "listening_rating",
      "label": "How well did the clinician listen to you?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "explanation_rating",
      "label": "How clearly was your care explained?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "front_desk_rating",
      "label": "How helpful was the front desk?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "recommend_score",
      "label": "How likely are you to recommend us to a friend?",
      "type": "rating",
      "required": true,
      "help": "0 is not at all likely, 10 is extremely likely.",
      "min": 0,
      "max": 10
    },
    {
      "id": "went_well",
      "label": "What went well?",
      "type": "long_text",
      "max_length": 1000
    },
    {
      "id": "improve_first",
      "label": "What should we improve first?",
      "type": "long_text",
      "max_length": 1000
    },
    {
      "id": "may_contact",
      "label": "You may contact me about this reply",
      "type": "checkbox"
    },
    {
      "id": "contact_email",
      "label": "Email, only 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 was your visit with us?","description":"Your feedback helps us look after the next patient better. Please leave out medical details. For anything urgent, call the clinic.","fields":[{"id":"visit_date","label":"When was your visit?","type":"date","required":true},{"id":"visit_reason","label":"What kind of visit was it?","type":"single_choice","options":["Check-up","Follow-up","Urgent visit","Test or procedure","Phone or video visit"]},{"id":"booking_ease","label":"How easy was it to get an appointment?","type":"rating","min":1,"max":5},{"id":"waiting_time","label":"How long did you wait to be seen?","type":"single_choice","options":["No wait","A few minutes","Longer than expected","Much too long"]},{"id":"listening_rating","label":"How well did the clinician listen to you?","type":"rating","min":1,"max":5},{"id":"explanation_rating","label":"How clearly was your care explained?","type":"rating","min":1,"max":5},{"id":"front_desk_rating","label":"How helpful was the front desk?","type":"rating","min":1,"max":5},{"id":"recommend_score","label":"How likely are you to recommend us to a friend?","type":"rating","required":true,"help":"0 is not at all likely, 10 is extremely likely.","min":0,"max":10},{"id":"went_well","label":"What went well?","type":"long_text","max_length":1000},{"id":"improve_first","label":"What should we improve first?","type":"long_text","max_length":1000},{"id":"may_contact","label":"You may contact me about this reply","type":"checkbox"},{"id":"contact_email","label":"Email, only if you would like a reply","type":"email"}]}'

JSON definition

json
{
  "title": "How was your visit with us?",
  "description": "Your feedback helps us look after the next patient better. Please leave out medical details. For anything urgent, call the clinic.",
  "fields": [
    {
      "id": "visit_date",
      "label": "When was your visit?",
      "type": "date",
      "required": true
    },
    {
      "id": "visit_reason",
      "label": "What kind of visit was it?",
      "type": "single_choice",
      "options": [
        "Check-up",
        "Follow-up",
        "Urgent visit",
        "Test or procedure",
        "Phone or video visit"
      ]
    },
    {
      "id": "booking_ease",
      "label": "How easy was it to get an appointment?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "waiting_time",
      "label": "How long did you wait to be seen?",
      "type": "single_choice",
      "options": [
        "No wait",
        "A few minutes",
        "Longer than expected",
        "Much too long"
      ]
    },
    {
      "id": "listening_rating",
      "label": "How well did the clinician listen to you?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "explanation_rating",
      "label": "How clearly was your care explained?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "front_desk_rating",
      "label": "How helpful was the front desk?",
      "type": "rating",
      "min": 1,
      "max": 5
    },
    {
      "id": "recommend_score",
      "label": "How likely are you to recommend us to a friend?",
      "type": "rating",
      "required": true,
      "help": "0 is not at all likely, 10 is extremely likely.",
      "min": 0,
      "max": 10
    },
    {
      "id": "went_well",
      "label": "What went well?",
      "type": "long_text",
      "max_length": 1000
    },
    {
      "id": "improve_first",
      "label": "What should we improve first?",
      "type": "long_text",
      "max_length": 1000
    },
    {
      "id": "may_contact",
      "label": "You may contact me about this reply",
      "type": "checkbox"
    },
    {
      "id": "contact_email",
      "label": "Email, only if you would like a reply",
      "type": "email"
    }
  ]
}