Opportunity & pipeline automation to decrease manual data entry and drive reporting efficiency
Supports multiple pipelines to automate updating opportunities in surgical and non-surgical pipelines
Automate Google review collection after appointments
Automate post-appointment follow-up
Automate patient retention campaigns for specific treatment and service types
Collect data for better patient/client segmentation
Automated birthday campaigns
Two-way sync to create patients in ModMed from Aesthetix CRM
Multi-location support with location-level routing
ModMed integration requires ModMed API access, which starts at $25 per provider paid directly to ModMed, plus a $149/month integration fee paid to Aesthetix CRM.
Clients will be required to provide all appointment types in a spreadsheet for Aesthetix CRM to properly set up the appointment categorization (see Appointment Categorization section below).
The customer will need to submit a request to practicesolutions@modmed.com for the Aesthetix CRM integration. The ModMed Practice Solutions team will manage the enablement process and provide the customer with instructions for generating API credentials, which they must then share with Aesthetix CRM for implementation.
Required credentials you must send to Aesthetix CRM:
Prefix URL for your practice
FHIR Username
FHIR Password
Aesthetix CRM will generate a unique API key for your account via ModMed Developer Support.
Unlike webhook-based integrations (such as Zenoti or PatientNow Pro), the ModMed integration is a polling integration. This means that every 5 minutes, we hit the ModMed API to check for modified changes to appointments, patients, and charges. When we detect a change (for example, an appointment status moving to "checked out"), we pull that data in and process it through our workflows.
Because this is polling-based rather than webhook-based, updates typically appear in Aesthetix CRM within 5 minutes of the action being taken in ModMed.
For multi-location practices, we pull location data from the ModMed API and map it to a ModMed Location custom field, ensuring contacts are properly attributed to the correct location.
What triggers it: An appointment is created or moves to a Pending or Confirmed status in ModMed (detected every 5 minutes via polling).
What happens:
We detect the modified appointment and pull the patient ID, provider ID, and location ID.
We make a GET Patient request to pull full patient data.
We format the email, phone number, and appointment date for our system.
We make a GET Location request to pull location details (critical for multi-location practices).
We make a GET Provider request to pull the provider name associated with the appointment.
For plastic surgery practices: We run appointment categorization to classify the appointment type into the correct category, which determines the pipeline and stage (see Appointment Categorization section below).
We create or update the contact in Aesthetix CRM and add them to the ModMed Appointments and Pipeline Update workflow.
Fields updated in Aesthetix CRM:
First Name, Last Name, Email, Phone
Next Visit Date
Next Visit Service
Appointment Category (for plastic surgery practices)
ModMed Appointment Date
ModMed Appointment Description
ModMed Appointment ID
ModMed Appointment Status
ModMed Appointment Type
ModMed Location
ModMed Patient ID
ModMed Provider
Workflow actions in Aesthetix CRM:
A contact note is added with appointment details. This is your audit trail for troubleshooting -- you can see which appointments came into the system and in what order.
The contact is routed through the Appointments and Pipeline Update workflow based on their appointment category and status (see Pipeline Logic section below).
Important: Next Visit Date uses a date-only format (e.g., 3/12/2026). We do not currently support time-based dates.
What triggers it: An appointment status changes to Fulfilled or Checked Out in ModMed (detected every 5 minutes via polling).
What happens:
The workflow is identical to the Pending & Confirmed flow in terms of data collection and appointment categorization.
The key difference is which date fields are updated: instead of Next Visit Date and Next Visit Service, we update Last Visit Date and Last Visit Service -- since this is a completed appointment.
We also update the ModMed Birthday field at checkout.
The contact is added to the same ModMed Appointments and Pipeline Update workflow for pipeline movement.
Additional fields updated (compared to Pending/Confirmed):
Last Visit Date (instead of Next Visit Date)
Last Visit Service (instead of Next Visit Service)
ModMed Birthday
What triggers it: An appointment status changes to Cancelled or No-Show in ModMed (detected every 5 minutes via polling).
What happens:
The workflow follows the same pattern as the other appointment status workflows.
The contact is added to the ModMed Appointments and Pipeline Update workflow, where they are routed to the Cancelled/No-Show stage of the appropriate pipeline.
What triggers it: A new patient is created or an existing patient is updated in ModMed (detected every 5 minutes via polling).
What happens:
We detect the change and create or update the contact in Aesthetix CRM.
No workflow is triggered -- this simply keeps the contact record in sync.
Fields updated in Aesthetix CRM:
First Name, Last Name, Email, Phone
Address information
ModMed Patient ID
This is a simple sync to keep patient demographics current between ModMed and Aesthetix CRM.
What triggers it: A patient charge with a status of "charged" is created in ModMed (detected every 5 minutes via polling).
Fields updated in Aesthetix CRM:
ModMed Charge Type
ModMed Transaction ID
Known Limitation -- No Payment Data: The charge data available through ModMed's API is not actual payment data. Because of this, most customers do not actively utilize this trigger for Patient Lifetime Value tracking. ModMed has indicated that a Payments API is in beta and has been for some time. Once the Payments API rolls out (hopefully in 2026), we will be able to bring in actual payment data, complete the Patient Lifetime Value tracking, and significantly deepen this integration.
What this means for you: Unlike our Zenoti or PatientNow Pro integrations, the ModMed integration currently cannot automatically track Patient Lifetime Value or update opportunity values based on payments. If accurate revenue attribution is critical, we recommend discussing supplementary reporting options with your Aesthetix CRM team.
What triggers it: A tag called ModMed-Create is added to a contact in Aesthetix CRM (either manually or via automation).
What happens:
The tag triggers a workflow in AX Connect that sends a create patient request to the ModMed API.
The patient is created in ModMed.
Required fields in Aesthetix CRM:
To successfully create a patient in ModMed, the contact must have all six of the following fields populated:
First Name
Last Name
Phone Number
Gender
Date of Birth (Birthday)
Note: ModMed may allow you to customize which fields are required on their side. Check with ModMed support if you need to adjust the requirements. However, all six fields listed above are required by our integration workflow by default.
For plastic surgery practices (and any practice using dual pipelines), the integration uses appointment categorization to route contacts to the correct pipeline and stage. This is critical to the integration working properly.
During integration setup, we pull all of your appointment types from the ModMed API and provide them to you in a Google Sheet. We do some initial categorization, but you must review and confirm every mapping before we finalize the integration. This step is critical -- incorrect categorization is the most common cause of contacts moving to the wrong pipeline stage.
Each appointment type is mapped to one of these appointment categories:
Surgical Consult
Surgical Appointment
Non-Surgical Consult
Non-Surgical Appointment
Pre-Op Appointment (no pipeline updates)
Post-Op Appointment (no pipeline updates)
Blocked (no pipeline updates)
Important: If you add new appointment types in ModMed after the initial setup, contact us to get them categorized. Uncategorized appointment types may not route correctly.
Surgical Pipeline:
Appointment Category | Status | Pipeline Stage |
Surgical Consult | Pending / Confirmed | Consult Booked |
Surgical Consult | Fulfilled / Checked Out | Consult Complete |
Surgical Consult | Cancelled / No-Show | Cancelled / No-Show |
Surgical Appointment | Pending / Confirmed | Surgery Scheduled |
Surgical Appointment | Fulfilled / Checked Out | Surgery Complete |
Surgical Appointment | Cancelled / No-Show | Cancelled / No-Show |
Non-Surgical Pipeline:
Appointment Category | Status | Pipeline Stage |
Non-Surgical Consult | Pending / Confirmed | Booked |
Non-Surgical Consult | Fulfilled / Checked Out | Patient |
Non-Surgical Consult | Cancelled / No-Show | Cancelled / No-Show |
Non-Surgical Appointment | Pending / Confirmed | Booked |
Non-Surgical Appointment | Fulfilled / Checked Out | Patient |
Non-Surgical Appointment | Cancelled / No-Show | Cancelled / No-Show |
The workflow also checks whether a contact is a lead or an existing patient:
Existing patients maintain a single "won" status throughout the pipeline as they move between stages.
New leads keep an open status until they check out, at which point they're moved to the appropriate completed/patient stage.
If a contact is in the wrong pipeline stage, check:
Contact Notes -- review the audit trail to see which appointments came in and in what order. Sometimes a cancellation is processed after a new booking, causing the contact to move backward.
Appointment Category -- verify the appointment type is mapped to the correct category. Incorrect categorization is the #1 cause of pipeline issues.
Appointment Status -- confirm the status in ModMed matches what you expect.
Aesthetix CRM does not currently expose the native Date of Birth field via API. To work around this, we create a custom field called ModMed Birthday and bring in the birthday data from ModMed into that field.
A dedicated Birthday workflow then copies the value from the ModMed Birthday custom field into the native Date of Birth field, keeping them in sync. This ensures that any birthday automations you've built in the CRM will work correctly using data from ModMed.
The Birthday workflow is triggered when a contact's appointment reaches the Fulfilled/Checked Out status.
Several workflows in your Aesthetix CRM account are hidden and locked. This is intentional -- these workflows contain the core integration logic, and modifications could break the integration. The locked workflows include:
ModMed Appointments and Pipeline Update
ModMed Birthday
If you need custom automation built on top of any of these, let us know and we can either unlock specific workflows or help you build triggers off of the tags and fields these workflows create.
All ModMed-specific fields are organized in a ModMed folder within your custom fields.
Custom Field Name | Type | Custom Value |
ModMed Appt Status | Text |
|
ModMed Appt Date | Date |
|
ModMed Appt Type | Text |
|
ModMed Appt Description | Text |
|
ModMed Appt ID | Text |
|
ModMed Birthday | Date |
|
ModMed Location | Text |
|
ModMed Provider | Text |
|
ModMed Patient ID | Text |
|
ModMed Charge Type | Text |
|
ModMed Transaction ID | Text |
|
In addition to the ModMed-specific fields above, the integration also updates these standard Aesthetix CRM fields:
Next Visit Date (on pending/confirmed appointments)
Next Visit Service (on pending/confirmed appointments)
Last Visit Date (on fulfilled/checked-out appointments)
Last Visit Service (on fulfilled/checked-out appointments)
Appointment Category (for plastic surgery practices)
First Name, Last Name, Email, Phone
Address information
This is a polling integration, not webhook-based. Updates appear in Aesthetix CRM within approximately 5 minutes of the action in ModMed, rather than the near-instant updates seen with webhook-based integrations.
Payment data is not currently available. ModMed's Payments API is in beta. Until it launches, we cannot track Patient Lifetime Value or update opportunity values based on actual payments. The Patient Charges trigger brings in charge data (not payment data), and most customers do not actively use it.
Appointment categorization is critical. Incorrect categorization is the most common cause of pipeline issues. Review the Google Sheet we provide during setup carefully, and contact us whenever you add new appointment types in ModMed.
Next Visit Date is date-only. We cannot store appointment times -- only the date (e.g., 3/12/2026).
Birthday requires a workaround. GoHighLevel's native Date of Birth field isn't accessible via API, so we use the ModMed Birthday custom field and a sync workflow to keep them aligned. Birthday data is updated when an appointment is fulfilled/checked out.
Two-way sync requires six fields. To create a patient in ModMed from Aesthetix CRM, the contact must have first name, last name, email, phone, gender, and date of birth populated before the ModMed-Create tag is applied.
Q: How do I know if the integration received an appointment? Check the contact's Notes tab. Every appointment event generates a note with the appointment details. If there's no note, we didn't receive the event. Since this is a polling integration, allow up to 5 minutes for the data to appear.
Q: Why is a contact in the wrong pipeline stage? The most common cause is incorrect appointment categorization. Check the contact's notes to see the appointment audit trail, then verify the appointment type is mapped to the correct category. Also check whether a cancellation was processed after a new booking -- this can cause a contact to appear to move backward.
Q: Why can't I see Patient Lifetime Value updating? ModMed's Payments API is currently in beta. Until it's available, we cannot track actual payment data. The Patient Charges trigger brings in charge information but not payment amounts.
Q: Why didn't a patient get created in ModMed after I added the ModMed-Create tag? Verify that all six required fields are populated: first name, last name, email, phone, gender, and date of birth. If any are missing, the creation will fail.
Q: How often does the integration sync? Every 5 minutes. This is a polling integration, so there is a short delay compared to webhook-based integrations.
Q: I added new appointment types in ModMed. What do I need to do? Contact Aesthetix CRM support so we can pull the new appointment types and add them to your categorization mapping. Until they're categorized, new appointment types may not route contacts to the correct pipeline stage.
Q: How does multi-location work? We pull location data from the ModMed API via a GET Location request and map it to the ModMed Location custom field. This ensures contacts are attributed to the correct location.