← Custom Builds Dashboard Workflows Custom Builds Community Billing
← Custom Builds Dashboard Workflows Billing
✦   The Vault: Custom Builds   ✦

The Pre-Payment Plan Calculator

A custom calculator that sends your client's full payment plan directly into their GHL contact record. No manual entry. No forgotten details. In writing.

Before You Start

You will need Claude or ChatGPT alongside you for this build. You will also need a free Postman account at postman.com and access to your GoHighLevel account. Budget 2 to 3 hours for your first full setup.

This build has an Inbound Webhook trigger inside GHL which is a premium trigger. It costs a few cents every time it fires. Make sure you have LC Premium Actions credits loaded in your GHL account.

Section 01

What this system actually does

You fill out the calculator with your client's collection, deposit paid, discount, ZIP code, start date, and session date. You pick weekly, bi-weekly, or monthly. You click Calculate.

The calculator figures out how many payments they need, what each payment is, the full schedule with every date, and the cash option. You click Submit and it fires everything directly into their GHL contact record via webhook.

Why This Matters

When a client calls six weeks later and says "I thought we decided on $122.94 every other week, not every week..." you open her GHL contact and show her exactly what was submitted, when it was submitted, and what the full schedule says.

It is in writing. In her record. Timestamped. Done.

Every field... first payment date, final payment date, number of installments, frequency, amount per payment, full schedule, tax, deposit, total... goes into GHL as a custom field. That means it can pull into your contract automatically.

Section 02

Setting up your GHL Custom Fields

Before anything else you need to create 14 custom fields inside GHL. These fields live on the contact record and hold your payment plan data. When the calculator submits, it fills them in automatically.

What is a custom field?

A custom field is a container you create inside GHL to store specific information about a contact beyond the defaults like Name and Email. You name it, you create it, GHL stores it on that contact record forever. Things like final payment date, number of installments, the full payment schedule.

Your custom fields as they appear on a GHL contact record
GHL Custom Fields

How to create each field in GHL

  1. 01
    In GHL go to Settings → Custom Fields
  2. 02
    Click + Add Field
  3. 03
    Set the Field Type to Text for all 14 fields
  4. 04
    Give it the name exactly as listed below — spelling matters
  5. 05
    Click Save
  6. 06
    Repeat for every field in the list below — all 14

Create one field for each of the following. Use these exact names.

Total Payment
total_payment
Grand total including tax and all products selected
Deposit Total
deposit_total
Deposit amount already paid by the client
PA Tax 06
pa_tax_06
Pennsylvania sales tax (6%). Zero if outside PA
Discount
discount
Dollar or percentage discount applied
Number of Installments
number_of_installments
Total number of payments in the plan
Payments Process Weekly Biweekly or Monthly
payments_process_weekly_biweekly_or_monthly
Payment frequency selected for this client
First Payment Date
first_payment_date
Date the first installment is due
Final Payment Date
final_payment_date
Date the last installment is due
First Payment Amount
first_payment_amount
Dollar amount of the first installment
Final Payment Amount
final_payment_amount
Dollar amount of the final installment
Prepayment Collection
prepayment_collection
Collection or products selected in the calculator
Prepayment for Invoice
prepayment_for_invoice
Products formatted for invoice use
Session Fee
session_fee
Session fee entered in the client info modal
Payment Schedule
payment_schedule
Full formatted payment schedule with all dates and amounts
Section 03

Adding fields to your contract

Once the custom fields exist and the calculator is filling them, you can pull them directly into your GHL contract template using merge tags. The signed contract will show the exact payment plan that was agreed to.

GHL merge tags for your contract template
{{contact.total_payment}} {{contact.deposit_total}} {{contact.number_of_installments}} {{contact.payments_process_weekly_biweekly_or_monthly}} {{contact.first_payment_date}} {{contact.final_payment_date}} {{contact.first_payment_amount}} {{contact.final_payment_amount}} {{contact.prepayment_collection}} {{contact.payment_schedule}}
Example Contract Language

"Client has selected {{contact.prepayment_collection}} with a total investment of {{contact.total_payment}}. A deposit of {{contact.deposit_total}} has been received. The remaining balance will be paid in {{contact.number_of_installments}} installments of {{contact.first_payment_amount}} each, processed {{contact.payments_process_weekly_biweekly_or_monthly}}, beginning {{contact.first_payment_date}} and completing {{contact.final_payment_date}}."

GHL replaces every tag with real data from the contact record when the contract sends. Susie Q signs a contract that has her actual payment plan in writing.

Section 04

Creating the Inbound Webhook

⚠ This trigger costs money

The Inbound Webhook is a premium trigger inside GHL automations. Every time it fires it costs a few cents, billed through your GHL LC Premium Actions balance. Make sure you have credits loaded. It is not expensive for normal studio use but it is not free.

The Inbound Webhook is what lets the calculator talk to GHL. When you click Submit in the calculator, it sends all payment plan data to a URL that GHL gives you. GHL receives that data and writes it into the contact record.

  1. 01
    In GHL go to Automations → Create Workflow
  2. 02
    Name it something like Pre-Payment Calculator Webhook
  3. 03
    Click Add Trigger and search for Inbound Webhook
  4. 04
    GHL generates a unique webhook URL. Copy this URL. You need it in Postman and inside the calculator code
  5. 05
    Add an action: Update Contact Field — map each incoming field key to its matching custom field
  6. 06
    Save and click Publish — not just Save. An unpublished workflow will not receive data
The Inbound Webhook trigger inside GHL Automations
GHL Inbound Webhook trigger
Linking the contact field inside the webhook action
GHL contact field webhook link
Section 05

Setting up Postman

Postman looks terrifying. It is not.

Postman is a free tool that lets you send test data to a URL to confirm everything is working before you use it on a real client. Think of it as a test fire. You send fake data to your GHL webhook, GHL receives it, and you check that your custom fields fill in on a test contact.

Go to postman.com and create a free account. You do not need a paid plan. Ever.

What Postman looks like — POST request with raw JSON body
Postman POST request

Step by step inside Postman

  1. 01
    Open Postman and click New → HTTP Request
  2. 02
    Change the method from GET to POST using the dropdown on the left
  3. 03
    Paste your GHL Webhook URL into the URL bar
  4. 04
    Click the Body tab, select Raw, and change the dropdown to JSON
  5. 05
    Paste the test JSON below into the body area
  6. 06
    Click Send — look for a 200 OK response at the bottom
  7. 07
    Open GHL and find your test contact — all 14 custom fields should now be filled in
Paste this into Postman body to test — replace email with a real contact
{ "email": "testclient@yourstudio.com", "first_name": "Test", "last_name": "Client", "phone": "5550000000", "postal_code": "17268", "total_payment": "4200.00", "deposit_total": "500.00", "pa_tax_06": "222.64", "discount": "0.00", "number_of_installments": 8, "payments_process_weekly_biweekly_or_monthly": "bi-weekly", "first_payment_date": "January 15, 2026", "final_payment_date": "March 25, 2026", "first_payment_amount": "462.50", "final_payment_amount": "462.50", "session_fee": "0.00", "prepayment_collection": "LUSH Collection", "prepayment_for_invoice": "LUSH Collection", "payment_schedule": "01 — January 15, 2026 — $462.50" }
Not getting a 200 OK?

Check the URL. Make sure you copied the full webhook URL from GHL including https://.

Check the JSON. A missing comma, extra bracket, or mismatched quote will error. Paste your JSON into Claude or ChatGPT and ask it to check for syntax errors.

Check GHL. The workflow must be Published, not just Saved. An unpublished workflow will not receive webhook data.

Section 06

The calculator code

The calculator HTML file is available to download from the sidebar. It is the exact calculator used in a real working studio. Here is what to customize before using it.

[YOUR LOGO URL]
Upload your logo to GHL Filesafe or R2 and paste the public URL here
[YOUR GHL WEBHOOK URL]
Find the fetch() line near the bottom and replace the URL with yours from GHL
[YOUR STUDIO NAME]
Appears in the print summary footer and PDF export
[YOUR STUDIO ADDRESS]
Your studio address for the print footer
[YOUR PHONE]
Your studio phone number for the print footer
Collections dropdown
Replace the example collections and prices with your own in the select dropdown
[YOUR INQUIRY CALENDAR URL]
Your GHL calendar booking link for inquiry session redirects
[YOUR CONTENT CALL CALENDAR URL]
Your GHL calendar link for content call redirects after submit
Hand it to Claude or ChatGPT

Paste the full HTML into Claude and say:

Help me customize this calculator. My logo URL is [url], my webhook URL is [url], my studio name is [name], my address is [address], my phone is [phone]. My collections are: [list them with prices]. Update all of these and show me the finished code.

It will do every replacement for you in one shot.

Section 07

Putting it in a GHL Funnel

The calculator is a single HTML file. The cleanest way to host it inside GHL is on a funnel page with a custom code element. This keeps it in your GHL account, behind your own domain, and only accessible to you.

  1. 01
    In GHL go to Sites → Funnels → New Funnel
  2. 02
    Name it something like Pre-Payment Calculator (Internal)
  3. 03
    Create one step and one page
  4. 04
    Open the page builder, delete all existing elements, add a Custom Code element
  5. 05
    Paste your entire calculator HTML into that code element
  6. 06
    Save and publish the funnel page — copy the URL
Keep This Page Private

This calculator is for your use only. Do not share the URL publicly. It has your webhook URL baked in and fires directly into your GHL account. Treat it like a password.

Section 08

Adding it to your GHL Dashboard

Pin your calculator as a widget on your GHL dashboard so you can open it in one click during any client conversation or sales call.

  1. 01
    In GHL go to your Dashboard
  2. 02
    Click Add Widget in the top right
  3. 03
    Select iFrame or Custom HTML Widget
  4. 04
    Paste your calculator funnel URL
  5. 05
    Resize to a comfortable size and save
Section 09

Calendar reroute after submit

After you click Submit and the webhook fires, the calculator automatically redirects you to a booking calendar. This is useful for setting the next appointment immediately after finalizing a payment plan.

In the calculator code find this section near the bottom and replace both URLs with your real GHL calendar booking links:

Find this in the calculator code and update both URLs
if(redirect === 'inquiry_session') window.location.href = '[YOUR INQUIRY CALENDAR URL]'; else window.location.href = '[YOUR CONTENT CALL CALENDAR URL]';

Find your calendar links in GHL under Calendars → your calendar → Share Link. If you only use one calendar, set both URLs to the same link.

Section 10

How to use Claude or ChatGPT

You will need Claude or ChatGPT for this build. Here are the exact prompts for each stage.

Customizing the calculator code
I need you to customize this calculator. Replace the logo with [your logo URL]. Replace the webhook URL with [your webhook URL]. Change the studio name to [your name], address to [your address], phone to [your phone]. Replace the collections dropdown with: [list your collections and prices]. Remove Pennsylvania tax references since I am not in PA. Update both calendar redirect URLs to [your calendar URL].
Generating your Postman JSON
Look at the submitClient function in this code. What exact JSON body do I need to send from Postman to test this webhook? Give me a complete example with realistic fake data.
Troubleshooting a webhook that is not working
My GHL Inbound Webhook is not updating contact fields. Here is my webhook URL: [url]. Here is the JSON I am sending from Postman: [paste JSON]. Here is what I have set up in the GHL workflow action: [describe it]. What is wrong and how do I fix it?
Getting contract merge tags
I have these custom fields in GHL: [list your field names]. Write me a paragraph of contract language that uses GHL merge tags for each field, explaining the client's payment plan in a professional way.
The bottom line

Every time you hit a wall — something is not working, a field is not mapping, a JSON error is showing — describe the problem to Claude or ChatGPT in plain English. Tell it what you did, what you expected, and what happened. It will tell you what is wrong and how to fix it.

You do not need to be a developer. You need to be willing to ask questions and follow directions.

↑   Back to top