A clinic can use ChatGPT to analyse no-show rates by removing names, dates of birth, phone numbers and free text from an appointment export, uploading what is left, and asking for rates by weekday, time slot, appointment type and booking lead time. Then recount the totals by hand before acting on any figure.
The analysis is the easy part; the preparation is where clinics go wrong. A no-show spreadsheet straight from a booking system usually carries every identifier a patient has, and OpenAI does not offer a business associate agreement for ChatGPT Business, so the file you upload has to be one a stranger could read without learning who anyone is. The other common failure is the definition: in the worked example below, counting cancellations as no-shows turns a 22.5 per cent rate into 37.5 per cent.
Decide the question and the plan before you export
Start with one question that an owner or practice manager could act on. "Which appointments are most likely to be missed?" is a good one, because the answer points to a fix: send an extra reminder, double-book a certain slot, or ask for a confirmation reply on long-lead bookings. "Analyse our data" is not a question; it invites a pile of charts you cannot use.
Next, decide where the analysis will run. ChatGPT's data analysis can read an uploaded spreadsheet or CSV file, write and run Python code to calculate on it, and show tables or charts. OpenAI's help page asks for column headers in the first row, one record per row and no empty rows splitting the data, which the clean file below already meets. The tutorial on what ChatGPT can read, and what breaks covers file types and limits, which vary by plan and change often, so check the current limits on OpenAI's help pages before you plan around them.
The plan matters for patient data. OpenAI's business plans do not train on your content by default, but that is a privacy setting rather than a licence for health records. OpenAI's help centre says plainly that it does not offer a business associate agreement (BAA) for ChatGPT Business; its BAAs cover the API, sales-managed ChatGPT Enterprise and Edu accounts, and a separate flow for eligible individual clinicians on ChatGPT for Clinicians. That is exactly why you de-identify first: the safest file is one a stranger could read without learning who anyone is. If a clinician is weighing the individual route, whether the individual BAA covers your practice explains where it stops.

The Complete Excel Course with AI Integration
From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.
By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner
Buy nowStrip the export: what to delete, generalise and keep
Open the export in a spreadsheet and sort the columns into three piles. Do this on a copy, never the original, and save the clean copy under a new name with "clean" in it.
| Column in the export | Action | Why |
|---|---|---|
| Patient name, ID, insurance or national number | Delete | Direct identifiers; the analysis never needs them |
| Date of birth | Replace with an age band (for example 18-39, 40-64, 65+) | Exact dates are identifying; bands still show patterns |
| Phone, email, home address | Delete | Contact details are identifiers |
| Appointment date and time | Replace with weekday, AM or PM, and a week number | Exact date and time can single out one person |
| Clinician name | Replace with a code (C1, C2) | Needed for comparison, not by name |
| Reason for visit or notes | Delete, or reduce to New, Follow-up, Review | Free text is the riskiest field |
| Status (attended, DNA, cancelled) | Keep | This is what you are measuring |
| Booking lead time | Calculate in days, then bin (0-2, 3-7, 8+) | A strong predictor; the bin hides the dates |
The lead time calculation is worth doing before you delete the dates: subtract the booking date from the appointment date in a helper column, bin it, then delete both date columns. In most spreadsheets that is a one-line formula plus a lookup. If your system already has "days booked ahead", use it.
Small groups can still identify people
De-identified is not the same as anonymous. If your clinic has one clinician who sees paediatric cases on Thursdays, a row saying "C3, Thu, AM, Review" may point to one family. Check for any combination that appears fewer than five times and either merge it into a wider group (for example "Other clinicians") or drop it from the file. A quick test: sort by every remaining column in turn and look for rows that stand out. If your team needs a longer method, how to anonymise client data before you paste it into AI goes through it step by step.
A worked example with a 40-row practice file
To see the method end to end, here is a tiny, invented file. It has 40 booked appointments over four weeks, with columns for a row code (not a patient ID), week, weekday, slot, type, lead time bin and status. In your clinic you would have hundreds or thousands of rows; 40 keeps the checking visible.
row,week,day,slot,type,lead,status
A001,W1,Mon,AM,Follow-up,0-2,Cancelled
A002,W1,Tue,AM,Review,0-2,Cancelled
A003,W1,Wed,AM,Review,0-2,DNA
A004,W1,Thu,AM,Follow-up,3-7,DNA
A005,W1,Fri,AM,New,8+,Attended
A006,W1,Mon,PM,New,0-2,Attended
A007,W1,Tue,PM,New,8+,Cancelled
A008,W1,Wed,PM,New,0-2,Attended
A009,W1,Thu,PM,Follow-up,0-2,Attended
A010,W1,Fri,PM,Review,8+,DNA
A011,W2,Mon,AM,Review,8+,Attended
A012,W2,Tue,AM,Review,8+,DNA
A013,W2,Wed,AM,New,8+,DNA
A014,W2,Thu,AM,Review,8+,Attended
A015,W2,Fri,AM,Review,3-7,Attended
A016,W2,Mon,PM,New,8+,Attended
A017,W2,Tue,PM,Follow-up,8+,Attended
A018,W2,Wed,PM,Follow-up,3-7,Cancelled
A019,W2,Thu,PM,Review,3-7,Attended
A020,W2,Fri,PM,Follow-up,3-7,DNA
A021,W3,Mon,AM,Review,0-2,Attended
A022,W3,Tue,AM,Follow-up,3-7,Attended
A023,W3,Wed,AM,Review,3-7,DNA
A024,W3,Thu,AM,New,3-7,Attended
A025,W3,Fri,AM,New,8+,Attended
A026,W3,Mon,PM,Review,3-7,Attended
A027,W3,Tue,PM,Review,3-7,DNA
A028,W3,Wed,PM,Follow-up,3-7,Attended
A029,W3,Thu,PM,New,0-2,Attended
A030,W3,Fri,PM,New,3-7,Attended
A031,W4,Mon,AM,New,0-2,Attended
A032,W4,Tue,AM,New,3-7,Attended
A033,W4,Wed,AM,Follow-up,3-7,Attended
A034,W4,Thu,AM,New,0-2,DNA
A035,W4,Fri,AM,New,0-2,Cancelled
A036,W4,Mon,PM,Review,0-2,Cancelled
A037,W4,Tue,PM,Follow-up,8+,Attended
A038,W4,Wed,PM,New,8+,Attended
A039,W4,Thu,PM,Review,8+,Attended
A040,W4,Fri,PM,Review,8+,Attended
"DNA" means did not attend: the patient neither came nor cancelled. Count it in the status column and nothing else. Save the sample as a CSV (comma-separated values, a plain-text table that every spreadsheet can open) and upload it to a ChatGPT chat on the plan your clinic uses.
The prompt, with the definition spelled out
I have attached a de-identified appointment export for a small clinic
(40 rows, 4 weeks). Columns: row, week, day, slot (AM/PM), type
(New/Follow-up/Review), lead (days booked ahead, binned), status.
Definition: a no-show is status = DNA. Cancelled appointments are NOT
no-shows. No-show rate = DNA / all rows.
Please:
1. Show the totals for Attended, DNA and Cancelled, and the overall rate.
2. Show the no-show count, number of appointments and rate by day, slot,
type and lead time, each in its own table.
3. Say which group has the highest rate AND how many appointments it
contains, and tell me if any group is too small to trust.
4. Do not give causes. List the Python or formula logic you used.
The line "do not give causes" matters. Left alone, the assistant will write confident explanations such as "patients booked far ahead forget" that the data cannot support.
What a good answer looks like
For the sample file, the totals should come out at 25 attended, 9 DNA and 6 cancelled, so the overall no-show rate is 9 of 40, or 22.5 per cent. By weekday: Monday 0 of 8, Tuesday 2 of 8, Wednesday 3 of 8, Thursday 2 of 8, Friday 2 of 8. By slot: morning 6 of 20 (30 per cent), afternoon 3 of 20 (15 per cent). By type: New 2 of 15, Follow-up 2 of 10, Review 5 of 15. By lead: 0-2 days 2 of 12, 3-7 days 4 of 14, 8+ days 3 of 14.
A good assistant will also flag that every weekday group has just eight appointments, and that Monday's zero or Wednesday's 38 per cent are the sort of swing one patient causes. It should say that the morning-versus-afternoon gap of 6 against 3 is the only pattern even worth a second look, and that 40 rows are not enough to act on it. Honest caution is the right answer here. If it says "Wednesday mornings are your problem, so double-book them", ask for the counts again and push back.
Check the totals by hand before you trust anything
ChatGPT's data analysis runs code, which makes it usually accurate at counting, but you still verify, because a wrong filter or a misread column produces smooth, confident, wrong tables. Three checks take ten minutes.
- Add up the groups. Each table's counts must sum to the file's total: 8 + 8 + 8 + 8 + 8 = 40 for weekday, 20 + 20 = 40 for slot, 15 + 10 + 15 = 40 for type, 12 + 14 + 14 = 40 for lead. If a table sums to 39, a row was dropped, possibly for a blank cell.
- Recount one cell in the spreadsheet. Use a COUNTIFS formula: with the practice file's columns in A to G,
=COUNTIFS(G:G,"DNA",D:D,"AM")returns 6, the morning no-shows, and the assistant's table should say the same. This takes a minute and tells you whether the assistant filtered correctly. The ChatGPT and Excel guide shows how to do this kind of cross-check. - Test the definition. Change one row in your own copy from DNA to Attended, re-upload and see that the DNA total drops by one. If it did not, the assistant is not reading the column you think it is.
Also open the file and look at row counts and column headers in the assistant's first reply. If it says it read 38 rows, find out which two were skipped before going further.
Realistic mistakes and how they show up
- Cancellations counted as no-shows. The no-show rate jumps from 22.5 to 37.5 per cent (15 of 40) and a manager starts planning around the wrong problem. Spot it by asking the assistant to list the distinct values it found in the status column.
- The wrong denominator. Some clinics measure DNA against attended-plus-DNA only, giving 9 of 34, or 26.5 per cent. That is a fair definition too, and it is fine, provided you use the same one every month and say so in the report.
- A hidden duplicate. A rebooked appointment appears twice, once cancelled and once attended. Ask the assistant to report any rows with identical week, day, slot and type, and look at them yourself.
- Dates parsed wrongly. A column of day-month dates read as month-day produces nonsense weekdays. This is another reason to convert to weekday and week number before you upload.
- An identifier left behind. A "notes" column you forgot, with names inside. Run a find for a few common surnames and for "@" and digits sequences before you upload.
Follow-up prompts that go one level deeper
Once the first tables check out, a second round of questions is where the analysis pays for itself. Keep them in the same chat, so the file and the definition stay in view, and ask for one thing at a time.
Combine two columns, and make the assistant show its sample sizes
Now cross-tabulate type by lead time. For each of the nine cells show
DNA count, appointments, and rate. Mark any cell with fewer than 8
appointments as "too few". Do not rank the cells until you have done that.
On a real six-month file this is where an interesting result tends to appear, for example New patients booked 8 or more days ahead at 19 per cent while follow-ups in the same bin sit at 7. On the 40-row practice file the nine cells hold between two and six appointments each, so a good assistant will mark all nine "too few". That is a correct, useful answer, and it shows why you need volume. Do not rewrite the prompt until the assistant produces a ranking. The honest finding is that the file is too small.
Ask for a chart, then read it like a sceptic
Ask for one bar chart of no-show rate by lead-time bin, with the count of appointments printed above each bar. OpenAI's help page says bar charts are among the types that can be switched to an interactive view, which is handy when you present it. The counts above the bars stop a tall bar built on six appointments from persuading anyone. If the chart arrives without them, ask again. A chart that is easy to read in a staff meeting is worth the extra minute.
Ask what else the file could not answer
List three questions about no-shows that this file cannot answer
because of missing columns, and what column I would need to add
(without adding identifiers).
Typical answers: whether the patient had a reminder text (add a Yes/No column), whether it was a first-ever visit (add New patient Yes/No), and the booking channel (phone, online, front desk). These are the columns worth adding to your next export, and none identifies a person.
Cleaning one row, before and after
One more example, because the clean-up is the part people rush. Here is one invented row as it might come out of a booking system, and as it should look when it goes into the file.
Before:
2026-02-03 10:15, [patient name], DOB 1981-03-14, [mobile number], Dr [surname],
"Chemo review, anxious, wheelchair access", booked 2026-01-20, DNA
After:
B114, W3, Tue, AM, C2, 40-64, Review, 8+, DNA
Check what happened to each part. The name, birth date, phone and notes are gone. The date became a week and weekday, the time became AM, the clinician became a code, the age band replaced the birth date, the reason became a type, and the 14 days between booking and appointment became a lead-time bin. If you add an age band column to the practice file, remember to check the groups do not become too small. Nothing remains that you could look up to find the person, and everything the question needs is still there.
Write that before-and-after on a card next to whoever does the clean-up. It is the one-page training aid that makes the rest of the monthly routine safe, especially when someone covers for the usual person.
A realistic month: from export to action
Now scale it up with an illustrative clinic. Say a four-clinician practice exports six months of data: 1,850 booked appointments, 148 DNAs, 214 cancellations. The overall no-show rate is 148 / 1,850, or 8.0 per cent. ChatGPT's tables show the rate at 5 per cent for appointments booked 0-2 days ahead, 8 per cent for 3-7 days and 14 per cent for 8 or more days, which is 140 appointments in that last bin, so 20 no-shows. The group is big enough to take seriously.
The owner tries one change: patients booked 8 or more days ahead get a text two days before asking for a reply to confirm, and unconfirmed slots are released for waiting-list patients the day before. The next three months show the 8+ group's rate at 9 per cent against 14. If each missed slot costs the clinic $60 in lost revenue, the six-month cost of the 8+ no-shows was about $1,200, and the improvement over a further six months might recover roughly $420 on that group (five points of 140 appointments is seven slots at $60). A modest saving, but it came from one question, one clean file and one cheap experiment, and the same approach works on the other bins. These figures are invented to show the method; your own export will tell you your numbers.
Also notice what was not claimed. The data did not say why long-lead patients miss appointments. The clinic guessed forgetfulness, tested a reminder, and measured. For systems that automate reminders and check-in, see how dental practices use AI for recalls and reminders, which covers that side.
A monthly routine that takes thirty minutes
Once the first run works, repeat it. The routine below keeps the work small and the data clean.
- Export last month's appointments from the booking system on the first working day.
- Run the clean-up steps in a saved spreadsheet template (a tab with the formulas for weekday, slot, lead bin and clinician code, so you paste new rows into it and the identifiers drop away).
- Upload the clean file to a new chat with your saved prompt, including the definition line.
- Run the three checks above, saving a one-line note of the totals.
- Paste the summary into a one-page note with the month, the total rate, the biggest group with its count, and one action to try. Keep it in a shared folder, not in the chat.
- Delete the chat and the uploaded file once you have the note, and keep your clean spreadsheet only.
Keep a running table of monthly rates. A single month is noisy, so compare each month with the previous three, and only change a process when the pattern has appeared twice. If you want a fuller training layer for staff who will do the clean-up, four short sessions for clinic staff include a spreadsheet de-identification exercise very close to this one.
Where this analysis stops
ChatGPT shows where the misses cluster. It does not tell you who will miss the next appointment, and you should not build a list of "likely no-shows" and treat those patients differently without careful thought: some patients miss appointments because of illness, caring duties or transport, and a prediction can become an unfair label. Use the findings to change the process for everyone in a group, such as a confirmation text for all long-lead bookings, not to single out individuals. And keep clinical judgement out of it entirely: the file contains no clinical data and the answer should not trigger clinical decisions.
If the booking system can already produce a no-show report, start there. The reason to use ChatGPT is the questions the standard report does not answer, such as lead time by appointment type, and the speed of trying a new cut.
Questions before you upload an appointment export
Is a de-identified export safe to upload to ChatGPT?
Safer, not automatically safe. Removing names, dates of birth and phone numbers helps, but a rare condition plus an exact date can still point to one person. Keep only the columns the question needs, generalise the rest, and follow your clinic's rule on what counts as de-identified.
Does ChatGPT Business have a BAA?
No. OpenAI's help centre says it does not offer a business associate agreement for ChatGPT Business. It offers BAAs for the API, for sales-managed ChatGPT Enterprise and Edu accounts, and for eligible individual clinicians through ChatGPT for Clinicians. On Business, upload de-identified data only.
How many appointments do I need for the patterns to mean anything?
A few hundred is a reasonable start, and a few thousand is better. With 40 rows, one patient moves a percentage by more than two points. Look at the counts next to each percentage and treat small groups as hints to test, not findings.
Why do my numbers differ from ChatGPT's?
Usually the definition. Check whether cancelled and rescheduled slots were counted as no-shows, whether the denominator is all booked slots or only slots that were not cancelled, and whether duplicates were removed. Agree one definition, put it in the prompt and recheck.
Can ChatGPT tell me why patients don't turn up?
No. It can show when and for whom no-shows cluster. The reasons need a short call or text to a sample of patients, or a question on your booking form. Treat the data as the place to look, not the explanation.
Further reads
- How to Cut Salon No-Shows With AI Reminders and Deposits — How another appointment business cuts no-shows with reminders and deposits.
- AI Booking Systems for Appointment Businesses: What to Check — What to check in a booking system before relying on its reminders.
- AI Chatbot for Physio Clinics: First-Visit Questions and Booking Hand-Offs — Booking hand-offs for a clinic with first-visit questions.
- AI for Urgent Care: Wait-Time Texts, Check-In and Staff Hand-Offs — Text messages and check-in flows that reduce walk-away patients.
- Patient Data and AI: A Confidentiality Checklist for Small Practices — A confidentiality checklist for the whole practice, beyond this one file.
- How to Analyse Customer Feedback Surveys With AI — Ask patients why, once the data tells you where to look.
- Is It Safe to Put Customer Data Into ChatGPT? — The general rules for customer data in ChatGPT, beyond patient files.
- Restaurant No-Shows: Deposit Rules by Party Size, AI Confirmations — Set deposit and card-hold rules from your own no-show log by party size, then use AI for policy wording, reminder texts, reply sorting and waitlist offers.
- AI Marketing Automation for Doctors: Recall, Reminder and Review Flows — Build recall, reminder and review-request flows in the practice software you already own, with consent, opt-outs and a worked month of numbers.
- AI Tools for Dairy Farming: Analyse Milk and DHI Records in ChatGPT — Load DHI test-day and bulk tank records into ChatGPT, get a ranked list of cows and trends to check, and learn what your vet must confirm.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: OpenAI help centre (Getting a Business Associate Agreement for the OpenAI API; Data analysis with ChatGPT), OpenAI business data privacy page, checked 4 November 2026. The example data is invented for illustration.