What you'll build
By the end of this guide, you'll have a fully digital pre-appointment system for your clinic. Patients fill out a two-page form covering their medical history, insurance details, and a signed digital consent — all before they walk in. The moment they submit, they receive a confirmation email with their completed intake as a PDF attachment, and your clinic gets an instant alert with the key details. Your admin team sees every appointment organized in a Kanban pipeline, with filtered views for follow-up cases, uninsured patients, and any declined consents — so nothing gets missed before appointment day.
When to use this
Your front desk still hands patients a clipboard and manually enters their information into a system
Patients sometimes arrive without completed consent forms, delaying their appointment
Your team has no central view of which patients need follow-up or have flagged insurance issues
You're running a clinic, therapy practice, or dental office and want intake to happen before — not at — the appointment
You need a timestamped digital consent record for every patient visit
Step-by-step
Part 1 — Build the intake form
This is where the patient experience starts. You'll create a two-page form — the first page collects medical and insurance information, the second captures the consent and e-signature. Use Magic Create to generate the form instantly from a prompt, then verify each field matches the table below.
1. Open Magic Create: From your Formaloo homepage, click Magic Create. You can upload a picture or PDF of an existing intake form, or describe your form in text. Paste this prompt in the text field:
"Build a two-page patient intake and consent form for a healthcare clinic. Page 1: patient name, date of birth, email, reason for visit, symptom duration, allergies, current medications, medical history, emergency contact name and number, health insurance yes/no (with conditional insurance provider and policy number fields if yes, and a notice block if no). Page 2: a consent text block, an agreement field (I agree / I do not agree) with a notice block if declined, a signature field, and a date field. Also include these admin-only fields: appointment date, appointment status (dropdown: Scheduled / Confirmed / Checked In / Completed / No-show / Cancelled), follow-up required (yes/no), assigned provider, and internal notes."
Then click Create.
2. Verify your fields: Your form should look like this — Magic Create will have generated most of it. Verify each field title and field ID matches exactly. Adjust any that don't.
Page 1 — Patient information
Field | Field ID | Type |
What's your full name? |
| Short text |
What's your date of birth? |
| Date |
What's your email address? |
| |
What brings you in today? |
| Long text |
How long have you had these symptoms? |
| Short text |
Do you have any known allergies? |
| Long text |
What medications are you currently taking? |
| Long text |
Do you have any existing medical conditions? |
| Long text |
Emergency contact full name |
| Short text |
Emergency contact number |
| Short text |
Do you have health insurance? |
| Single choice: Yes / No |
What is your insurance provider? |
| Short text |
What is your policy or member number? |
| Short text |
(Notice block) We currently only accept insured patients. Our team will reach out to discuss your options. |
| Description block |
Page 2 — Consent
Field | Field ID | Type |
(Consent text block — paste your clinic's legal consent language here) |
| Description block |
I have read and agree to the terms above |
| Single choice: I agree / I do not agree |
(Notice block) You must agree to proceed. Contact us if you have questions. |
| Description block |
Your signature |
| Signature |
Today's date |
| Date |
3. Publish your form: Once you've verified the fields, click Publish in the island bar at the top of the editor to make your form live.
📖 Learn more about admin-only fields in What are admin-only fields and how they help.
Part 2 — Add conditional logic
Now you'll wire up the fields that show or hide based on patient answers. Two rules control the conditional experience — one for the insurance block, one for the consent declined warning. Open Advanced logic in the settings panel on the right side of the form editor.
1. Open Advanced logic: In the form editor, click Advanced logic in the settings panel on the right side. Navigate to the Logic tab.
2. Open Magic Logic: In the top right corner of the Logic panel, click Magic Logic to open the Magic Logic pop-up.
3. Describe your logic rules: Paste this prompt in plain text:
"When 'Do you have health insurance?' is Yes, show 'What is your insurance provider?' and 'What is your policy or member number?'. When 'Do you have health insurance?' is No, show the notice block that says we only accept insured patients. Hide all three fields by default. When 'I have read and agree to the terms above' is 'I do not agree', show the declined consent notice block. Hide this notice by default."
Then click Generate Rules.
4. Review and approve: Magic Logic will preview the generated rules for you. Review each one — you can approve, redo, or cancel. Once you approve, the rules are applied for your final check. Make any manual adjustments if needed, then click Save in the top right corner.
📖 For a full walkthrough, see How to add advanced logic to your form.
Part 3 — Create the email templates
You'll create three email templates — one confirms the submission to the patient, one alerts your admin team, and one fires whenever the appointment status changes. Each uses an AI body prompt so the language feels personal and unique for every patient, not templated.
1. Open custom email templates: Click your profile icon in the top right, go to Apps and integrations, and select Custom email templates.
2. Create the patient confirmation template: Click Add new template. Name it "Patient intake received." Set the subject to:
Your intake form has been submitted — @patient_name
In the body, clear the default content, add an AI block, and paste this prompt:
Write a warm, minimal confirmation email to a patient named @patient_name who just submitted their intake and consent form at a healthcare clinic. Tell them we received everything and will be in touch shortly. Under 5 sentences. No filler, no corporate tone — feels human, calm, and reassuring. End with the clinic team sign-off only, no name. Output as clean HTML: white background, single centered column max-width 560px, Inter or system-ui font, one small muted heading, body text in #333, generous line-height. No images, no buttons. Subtle footer in #999 with clinic name placeholder.
Click Save.
📖 To learn how @field_id variables pull patient data into your emails, see How to dynamically pull form data into custom emails, PDFs, and AI prompts.
3. Create the admin alert template: Click Add new template. Name it "New patient intake submitted." Set the subject to:
New intake — @patient_name
Add an AI block and paste this prompt:
Write a concise internal alert email notifying the clinic admin that a new patient intake form was submitted. Include: patient name @patient_name, date of birth @date_of_birth, reason for visit @chief_complaint, insurance status @has_insurance. Scannable, factual, no fluff. End with a single line prompting them to log in and review. Output as clean HTML: white background, single centered column max-width 560px, patient details as a minimal data table — label in #999, value in #111, no borders. One CTA link styled as a small dark pill button. No decorative elements.
Click Save.
4. Create the status update template: Click Add new template. Name it "Appointment status update." Set the subject to:
Your appointment status — @patient_name
Add an AI block and paste this prompt:
Write a clean, minimal email notifying a patient named @patient_name that their appointment status has been updated to @appointment_status. If Confirmed, tone is warm and reassuring. If Cancelled or No-show, tone is empathetic and offers next steps. Under 4 sentences. No filler. Output as clean HTML: white background, single centered column max-width 560px, display the status value prominently — large, bold, colored text (green for Confirmed, red for Cancelled, amber for others). Muted footer in #999.
Click Save.
📖 For a full walkthrough, see How to create and send custom email templates.
Part 4 — Set up email notifications
Now wire each template to its trigger. Two emails fire on form submission — one to the patient, one to your admin. A third fires automatically whenever a clinic staff member updates the appointment status.
1. Open notification settings: In the form editor, click Notify in the settings panel on the right side.
2. Set up the admin notification: Turn on Receive email notification. Enter your clinic's admin email address. From the template selector, choose "New patient intake submitted" and click Publish.
3. Set up the patient confirmation: Click Send email to respondent. Turn on the Send email to respondent toggle. Select "Patient intake received" from the template dropdown and click Publish.
4. Attach the PDF to the patient confirmation: In the respondent email settings, find the attachment option and select the "Patient intake & consent record" PDF template (you'll create this in Part 5). Once attached, every patient receives their completed intake as a PDF with their confirmation email.
📖 See How to send custom PDFs with email notifications for the full setup.
5. Set up the status update email: In the form editor, open Advanced logic in the settings panel on the right side. Navigate to the On Update tab. Click Add rule. Set the condition to: when "Appointment status" is changed — then send email using the "Appointment status update" template to @email. Click Save.
Part 5 — Create the PDF template
This is the document your patients receive as an attachment — a clean, formatted record of their entire intake and consent. You'll paste a custom HTML template that pulls in all patient data automatically using field ID variables.
1. Open custom PDF templates: Click your profile icon, go to Apps and integrations, and select Custom PDF template.
2. Add a new template: Click Add new template. Name it "Patient intake & consent record."
3. Switch to HTML view: Toggle the editor to HTML view.
4. Paste the template code: Paste the full HTML code below. Every @field_id reference will automatically pull the corresponding patient answer into the generated PDF.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Patient Intake & Consent — @patient_name</title> <style> @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Inter', system-ui, sans-serif; background: #fff; color: #1a1a1a; font-size: 13px; line-height: 1.7; padding: 60px 72px; max-width: 760px; margin: 0 auto; } .header { display: flex; justify-content: space-between; align-items: flex-start; padding-bottom: 28px; border-bottom: 1.5px solid #e8e8e8; margin-bottom: 36px; } .header-left h1 { font-size: 20px; font-weight: 600; letter-spacing: -0.3px; color: #111; } .header-left p { font-size: 12px; color: #999; margin-top: 4px; } .header-right { text-align: right; } .doc-id { font-size: 11px; color: #bbb; letter-spacing: 0.5px; text-transform: uppercase; } .doc-date { font-size: 12px; color: #555; margin-top: 4px; } .section { margin-bottom: 32px; } .section-title { font-size: 10px; font-weight: 600; letter-spacing: 1.2px; text-transform: uppercase; color: #aaa; margin-bottom: 14px; } .field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 32px; } .field-grid.full { grid-template-columns: 1fr; } .field { border-bottom: 1px solid #f0f0f0; padding-bottom: 10px; } .field label { display: block; font-size: 10.5px; color: #999; margin-bottom: 3px; font-weight: 500; } .field value { display: block; font-size: 13px; color: #1a1a1a; } .divider { height: 1.5px; background: #f0f0f0; margin: 32px 0; } .consent-text { background: #f9f9f9; border-left: 3px solid #d0d0d0; padding: 16px 20px; font-size: 12px; color: #555; line-height: 1.8; border-radius: 0 4px 4px 0; margin-bottom: 24px; } .signature-block { display: grid; grid-template-columns: 2fr 1fr; gap: 32px; margin-top: 8px; } .sig-field label { display: block; font-size: 10.5px; color: #999; font-weight: 500; margin-bottom: 8px; } .sig-box { border-bottom: 1.5px solid #1a1a1a; height: 48px; display: flex; align-items: flex-end; padding-bottom: 6px; font-size: 22px; font-style: italic; color: #1a1a1a; font-family: Georgia, serif; } .date-box { border-bottom: 1.5px solid #1a1a1a; height: 48px; display: flex; align-items: flex-end; padding-bottom: 6px; font-size: 13px; color: #1a1a1a; } .badge { display: inline-block; padding: 3px 10px; border-radius: 20px; font-size: 11px; font-weight: 500; background: #f0f7f4; color: #2d7a5a; border: 1px solid #c5e4d6; } .footer { margin-top: 48px; padding-top: 20px; border-top: 1px solid #ebebeb; display: flex; justify-content: space-between; align-items: center; } .footer p { font-size: 10.5px; color: #bbb; } .footer .confidential { font-size: 10px; color: #ccc; letter-spacing: 0.5px; text-transform: uppercase; } </style> </head> <body> <div class="header"> <div class="header-left"> <h1>Patient Intake & Consent Form</h1> <p>Pre-appointment record — submitted digitally</p> </div> <div class="header-right"> <div class="doc-id">REF #@submission_id</div> <div class="doc-date">Submitted @consent_date</div> </div> </div> <div class="section"> <div class="section-title">Patient Information</div> <div class="field-grid"> <div class="field"><label>Full Name</label><value>@patient_name</value></div> <div class="field"><label>Date of Birth</label><value>@date_of_birth</value></div> <div class="field"><label>Email Address</label><value>@email</value></div> <div class="field"><label>Emergency Contact</label><value>@emergency_contact_name — @emergency_contact_number</value></div> </div> </div> <div class="section"> <div class="section-title">Clinical Information</div> <div class="field-grid full"> <div class="field"><label>Reason for Visit</label><value>@chief_complaint</value></div> <div class="field"><label>Duration of Symptoms</label><value>@symptom_duration</value></div> <div class="field"><label>Known Allergies</label><value>@allergies</value></div> <div class="field"><label>Current Medications</label><value>@current_medications</value></div> <div class="field"><label>Existing Medical Conditions</label><value>@medical_history</value></div> </div> </div> <div class="section"> <div class="section-title">Insurance</div> <div class="field-grid"> <div class="field"><label>Has Insurance</label><value>@has_insurance</value></div> <div class="field"><label>Insurance Provider</label><value>@insurance_provider</value></div> <div class="field"><label>Policy / Member Number</label><value>@policy_number</value></div> </div> </div> <div class="divider"></div> <div class="section"> <div class="section-title">Consent & Authorization</div> <div class="consent-text">@consent_text</div> <div class="field" style="margin-bottom: 24px;"> <label>Patient Agreement</label> <value><span class="badge">@consent_agreement</span></value> </div> <div class="signature-block"> <div class="sig-field"><label>Patient Signature</label><div class="sig-box">@signature</div></div> <div class="sig-field"><label>Date</label><div class="date-box">@consent_date</div></div> </div> </div> <div class="footer"> <p>This document was digitally submitted and is legally binding.</p> <span class="confidential">Confidential — Clinic Use Only</span> </div> </body> </html>5. Save the template: Click Save. Then go back to Part 4, step 4 to attach this template to your patient confirmation email.
What you now have
Your clinic runs a fully digital pre-appointment workflow — no paper, no clipboard, no manual data entry at the front desk. Every patient submits their intake and consent before they arrive, receives a PDF confirmation in their inbox, and your team gets an instant alert with the key clinical details. When your staff updates an appointment status, the patient is notified automatically. Your admin pipeline gives you instant visibility into every case — who's confirmed, who needs follow-up, who flagged an insurance issue, and who hasn't agreed to the consent terms — all from one place.
What's next
Turn this into a patient portal Let patients log in, track their appointment status in real time, and view their own intake record — without calling the clinic. Adding a portal to this project takes a few minutes and gives patients a branded self-service experience. → How to create a portal and manage users' access
Speed up repeat visits with a Memory Form For returning patients, a Memory Form auto-fills their name, email, and other details the moment they start a new intake — no re-entering the same information twice. Set it up once and it applies to every future submission. → How to create a Memory Form that auto-fills user details
Run an outreach campaign for uninsured patients Export your filtered list of uninsured patients and send them a targeted campaign with payment options or next steps — directly from Formaloo, without switching tools. → How to send an email campaign and collect data with AI agents
Ready-to-use templates
Patient intake & consent workflow for healthcare clinics — A ready-to-use two-page intake and consent form with conditional insurance logic, three AI-powered email templates, a PDF consent document, and an admin Kanban pipeline. Drop it in and replace the consent text block with your clinic's own language.
Learn more how-tos
Build a submission and review portal If your clinic needs a structured way for staff to review, annotate, and approve patient records — this guide builds a student submission and teacher review portal using the same logic. The pattern maps directly to a patient intake and clinician review workflow. → How to build a student submission and teacher review portal
Build a dual-approval request workflow If your clinic requires two sign-offs before confirming an appointment — for example, insurance verification and a specialist referral — this guide builds a two-stage admin approval workflow with automated routing and notifications. → How to build a dual-approval request workflow
Collect registrations with automated PDF confirmations If your clinic runs group sessions or wellness workshops alongside appointments, this guide shows how to collect registrations, cap attendance, and auto-send PDF confirmations — the same email and PDF pattern as this article. → How to collect event registrations, manage capacity, and send automated confirmations
Ready to build this?
💬 Get help from our concierge team Our team will help you set this up for your specific use case.
📅 Book a demo for Team/Enterprise setup See how teams use Formaloo at scale with advanced permissions and integrations.

