← Custom Builds Dashboard Workflows Custom Builds Community Billing
✦   Custom Build 05   ✦

The Automated
Booking System

A fully custom booking page that handles collections, payment plan math, promo codes, sales tax, and GHL routing -- completely automated. Clients pick their month, choose their collection, run their numbers, and pay. You never touch it.

Difficulty: Beginner to Intermediate
Requires: GoHighLevel + Payment Processor
Time to build: 1.5 to 2.5 hours
New cost: $0

This is the exact booking system that runs inside Moonlight and Lace Boudoir. When a client is ready to book, she lands on this page, picks her session month from your available dates, selects her collection, and chooses how she wants to pay.

If she chooses a payment plan, the system instantly calculates her weekly, bi-weekly, and monthly options based on her actual session date -- showing exact payment amounts, number of payments, and her final payoff date.

If she pays in full, she is routed automatically to the correct GHL payment link for her collection -- with or without sales tax applied based on her ZIP code, completely automatically.

Every piece of data she enters flows directly into her GHL contact record through a webhook. Her collection, plan type, installment schedule, promo code, tax flag -- all of it lands in GHL without you doing anything.

Feature Breakdown

Every Feature, Explained

Session Month Picker
Clients choose only from months you have marked available. When a month fills up, you remove it from a short list in your code. Done.
Collection Chooser
All your collections display with names and image investment amounts. Client selects one and everything else updates automatically.
Payment Plan Calculator
Based on session month and collection price, the system calculates real installment amounts for weekly, bi-weekly, and monthly plans -- including exact payoff dates.
Automatic Tax Detection
Client enters her ZIP code. System detects if she is in your state and adds the correct sales tax automatically. Out-of-state clients are never taxed.
Promo Code System
Dollar-off or percent-off codes apply to the image investment and recalculate all payment plan installments instantly. Session fee is never discounted.
Smart Payment Routing
Pay-in-full clients are sent to the exact GHL payment link for their collection. Tax or no tax applied automatically. Zero manual handling from you.
GHL Webhook Integration
Every field -- name, email, phone, collection, plan type, installment amounts, dates, promo code, tax flag -- fires into GHL the moment the client submits.
Fully Mobile Optimized
Every step of the booking flow works perfectly on a phone. Most clients will be booking from Instagram or a link you texted them.
What You Need

Accounts You Need to Have

Honest Cost Breakdown

Third Party Costs

This build uses tools you almost certainly already pay for. There are no new subscriptions required.

GoHighLevel

GHL Setup Walkthrough

Before you open the generator, get these pieces built inside GHL. The generator will ask for your webhook URL and payment links -- have them ready before you start the wizard.

Create Your Webhook Trigger

  • 01
    Go to Automation → Workflows and click + New Workflow → Start from Scratch
  • 02
    Click the trigger and select Inbound Webhook. GHL generates a unique URL. Copy it -- this is your webhook URL.
  • 03
    Do not publish the workflow yet. Add your actions first, test, then publish.
Keep Your Webhook URL Private

Anyone with this URL can send data into your GHL account. Do not share it publicly. It lives inside your HTML file on your site -- that is fine -- just do not post it anywhere.

Build Your Workflow Actions

After your first successful test submission, GHL will show all incoming data fields. Add a Create or Update Contact action and map every field to its matching custom field. Then add follow-up automations -- welcome email, lead tag, task, nurture sequence.

Publish After Testing

Build your workflow, run one test booking all the way through, verify every custom field populated correctly in GHL, then publish. Do not publish before testing.

GoHighLevel

Custom Fields to Create

Go to Settings → Custom Fields → Contacts → + Add Field for each of these. The key is auto-generated from the name you type -- double check it matches exactly.

Field Name (type this)Key (verify this)TypeStores
Preferred Session Monthpreferred_session_monthText"August 2026"
Prepayment Collectionprepayment_collectionTextCollection name she chose
Pay In Full Or Payment Planpay_in_full_or_payment_planText"pif" or "prepay"
Payments Process Weekly Biweekly Or Monthlypayments_process_weekly_biweekly_or_monthlyTextHer installment frequency
First Payment Datefirst_payment_dateDateDate of first installment
Final Payment Datefinal_payment_dateDateDate balance is paid off
First Payment Amountfirst_payment_amountNumberDollar amount, first installment
Final Payment Amountfinal_payment_amountNumberDollar amount, last installment
Promo Code Usedpromo_code_usedTextCode entered, blank if none
DiscountdiscountNumberDollar amount discounted
Contact Preferencecontact_preferenceTexttext / call / email
Tax Appliedtax_appliedText"Yes" or "No"
Sales Tax

Understanding Sales Tax

Sales tax rules for photography vary significantly by state. Confirm your obligations with your accountant before configuring this.

We Are Not Accountants

The information below is general guidance only. Your state's rules are specific to your situation. Always confirm with a licensed CPA who understands your state's photography and digital product tax laws.

Scenario A — Images Only

Some states tax the image investment but not the session fee, because the session fee is treated as a service retainer. This is how Pennsylvania works. Select "Image investment only" in the generator.

Scenario C — No Tax

Some states do not require tax on photography or digital delivery at all. Set your tax rate to 0 in the generator and no tax is ever applied.

Scenario B — Full Total

Some states tax the entire transaction including the session fee. If your state treats the full photography package as a taxable sale, select "Full session total" in the generator.

Digital Products

If you deliver digital images (not physical prints), some states treat this differently. Tell your accountant specifically that you deliver digital files.

How Tax Works in the Booking Page

The client enters her ZIP code. The system checks if she is in your state. If yes, tax is calculated and shown as a line item. She is automatically routed to the correct payment link -- with or without tax -- based on her ZIP. You never have to figure out which link to send.

The Tool

Using the Generator

The generator is a 7-step wizard. It collects your studio details and outputs your fully customized booking page code. Here is exactly what each step asks for.

Step 1 — Studio Details

Studio name, your name, location, state code, session fee amount and link, and your sales tax configuration.

Step 2 — Collections

One card per collection. Name, image investment price, PIF payment link, PIF+tax link, and whether it is plan-eligible.

Step 3 — Payment Plan Rules

Booking window, minimum installment amount, plan threshold, which plan types you offer, and your PIF deadline before session day.

Step 4 — Available Months

A rolling 18-month calendar. Click the months you are currently booking. Clients can only choose from what you select.

Step 5 — Promo Codes

Optional. Add active discount codes -- fixed dollar or percentage. You can always add more directly in the code later.

Step 6 — GHL Setup

Full GHL walkthrough built into the wizard. Custom field table, payment link instructions, and where to paste your webhook URL.

Open the Generator →
Going Live

Deploying Your Booking Page

  • 01
    On the final generator step, click Download .html File. Your file is named with your studio name automatically.
  • 02
    Netlify: Drag your HTML file into your Netlify site's deploy dropzone. Live in seconds.
  • 03
    GHL Funnel: Sites → Funnels → new page → code editor → paste your HTML.
  • 04
    Squarespace / ShowIt: Use a custom code block or HTML page. Search "[platform] custom HTML page" for their specific steps.
  • 05
    Submit a test booking yourself before sharing the link. Use a real email, go all the way through, and verify your GHL contact record shows every field populated correctly.
After You Go Live

Editing Your Code Later

Option 1 — Come Back to the Generator (Recommended)

Return to the generator within 21 days, update your answers, and regenerate. Your 21-day save resets every time you generate. Download the new file and re-upload it to wherever it is hosted.

Option 2 — Edit the File Directly (Faster for Small Changes)

Open your HTML file in any text editor. Near the very top, find the section labeled // ── STUDIO CONFIG. Change the values inside that section, save, and re-upload. You are not writing code -- just changing numbers and text inside a clearly labeled block.

Before You Share the Link

Pre-Launch Checklist

Check every single one of these before your booking page goes live.

GHL webhook URL is in your HTML fileIf it still says YOUR_GHL_WEBHOOK_URL_HERE the form will not work
All 12 custom fields created in GHLSettings → Custom Fields → Contacts -- field keys must match exactly
One product per collection created in GHLImage investment only -- no session fee included
Tax-version products created (if you charge tax)One additional product per collection with the tax-included price
PIF payment link per collection (no-tax version)Payments → Payment Links -- one-time payment, attached to each product
PIF payment link per collection (with-tax version, if applicable)
Session fee payment link createdWhat payment plan clients click to pay their retainer and hold their date
Every payment link tested in a private browser tab
GHL workflow published (not in draft)Must be active or no booking data will process
All custom fields mapped inside the GHL workflow
Test booking submitted and verified in GHLAll custom fields populated, correct payment link appeared, contact created
Booking page tested on mobileOpen the link on your phone and tap through the entire flow
Open the Generator →
← Back to All Builds