Integrations / GoHighLevel

Connect GoHighLevel to Propera

Auto-underwrite every new GoHighLevel lead using a native workflow webhook, no Zapier or third-party tool required. When a contact is ready, GoHighLevel calls Propera and writes the ARV, comps, and Zillow links back onto the contact.

Loom walkthrough goes here (embed coming soon).

Overview

GoHighLevel's Custom Webhook workflow action can POST to Propera's API and, with Save response from this Webhook enabled, make Propera's JSON response available to later steps, which you map into custom fields on the contact. Fully native, no extra automation tool.

What you'll build

One workflow: trigger (tag or pipeline stage) → Custom Webhook (Propera) → Update Contact with the returned values.

Before you start

  • A Propera account on the Pro or Business plan, and a Propera API key (Step 1).
  • A GoHighLevel sub-account with custom fields for the address, property details, and the results (ARV, summary, notes).

Step 1 — Generate your Propera API key

In Propera, go to Account Settings → API Keys, click Generate API Key, name it (for example GoHighLevel), and copy it. It's shown only once.

Screenshot: the API Keys card in Account Settings.

Step 2 — Create a workflow with a "ready" trigger

In Automation, create a workflow triggered by a deliberate signal, for example a tag like Run ARV being added, or a contact entering a pipeline stage. That keeps the analysis from running before the contact's fields are filled in.

Step 3 — Add a Custom Webhook action

  • Method/URL: POST to https://getpropera.com/api/v1/arv
  • Headers: X-API-Key = your key, Content-Type = application/json
  • Body (JSON / custom data): map the contact's fields:
{
  "address": "{{contact.address}}",
  "property_type": "{{contact.property_type}}",
  "bedrooms": "{{contact.bedrooms}}",
  "bathrooms": "{{contact.bathrooms}}",
  "sqft": "{{contact.square_footage}}",
  "year_built": "{{contact.year_built}}",
  "comp_radius": "5"
}
Wrap the field tokens in quotes, including the numbers. If a contact field is empty when the workflow runs, an unquoted token would produce invalid JSON. Quoting keeps the body valid; Propera reads the numbers either way.

Enable Save response from this Webhook so the JSON comes back into the workflow. (See the GoHighLevel Custom Webhook docs.)

Custom Webhook is one of GoHighLevel's premium workflow actions, confirm premium workflow actions are available on your GoHighLevel plan.

Step 4 — Write the result back to the contact

Add an Update Contact action after the webhook and map the saved response values into custom fields: arv into your ARV field, summary_text into a summary field, run_url into a link field. On a failure response, write error into a notes field. Use the response's success value with an If/Else condition to choose which path runs.

Request fields

FieldValueRequired
addressThe contact's full address (street, city, state, ZIP). Any format works: Propera resolves it to a standard street, city, state and ZIP before running, and rejects it with ADDRESS_NOT_FOUND if it cannot.Always
property_typesfh, condo, townhouse, manufactured, or land (case-insensitive)Always
bedroomsNumber of bedroomsResidential
bathroomsNumber of bathroomsResidential
year_builtYear the property was builtResidential
sqftLiving area for residential, or lot size for landAlways
comp_radiusSearch radius in miles (residential up to 15, land up to 50)Always
lot_size_unitsqft or acresLand only
soft_errorstrue to receive every failure as HTTP 200 with success: false (the real status is returned in http_status). Use it when your automation tool stops the flow on a non-200 responseOptional

Response fields

FieldDescription
successtrue on success, false on failure (branch on this)
arvThe after-repair value estimate
arv_confidenceConfidence in the ARV (high / medium / low)
summary_textOne-line summary for a notes field
comp_countNumber of comparables used
price_per_sqftAverage price per square foot
run_urlLink to the saved run in Propera
normalized_addressThe address as Propera resolved it (street, city, state, ZIP). Write it back to the lead if you want the corrected version.
comps_textReady-to-paste plain-text list of every comp (one per paragraph, with Zillow links) for a multi-line custom field
arv_sourceverified when the comps were checked against public listing records, otherwise fast
errorOn failure, a human-readable reason
error_codeOn failure, a machine-readable code (see Troubleshooting)

Troubleshooting

error_codeWhat it meansFix
INSUFFICIENT_COMPSNot enough comps at that radiusWiden comp_radius (residential up to 15 mi, land up to 50 mi)
NO_USABLE_COMPSComps were found but none passed the filtersWiden comp_radius (residential up to 15 mi, land up to 50 mi)
ADDRESS_NOT_FOUNDPropera could not resolve the address it received. The error message names that addressFix the street number, city, state or ZIP on the contact and rerun; for rural roads try an alternate name
PLAN_NOT_ELIGIBLEYour plan doesn't include API accessUpgrade to Pro or Business
UNAUTHORIZEDThe API key is missing, wrong, or revokedCheck the X-API-Key header

Questions people ask

Do I need anything beyond GoHighLevel itself?

No. GoHighLevel's native outbound webhook action sends the request directly, so no middleware like Zapier or Make is required. You add the webhook as a workflow action and map the response back to custom fields.

Which Propera plans include API access?

Pro and Business. The webhook authenticates with an API key generated in your Propera account, and a Starter key returns a 403 on every call.

Does each workflow run use one of my monthly ARVs?

Yes. Every analysis draws one AI ARV from your plan's monthly allowance, and a 402 is returned once it is exhausted until the next billing cycle. Trigger the workflow on a qualifying stage or tag rather than on every new contact.

Where do I put the result once it comes back?

Map the response fields to custom fields on the contact or opportunity. The ARV, comparable sales and property links can all be written back, which is what makes the record useful to whoever picks up the call next.

What happens if the contact has no usable address?

The API returns a 422 with a message rather than an estimate, so the workflow step fails and nothing is written. Requiring a non-empty address field before the webhook action avoids burning an ARV on an unusable record.

Ready to auto-underwrite your GoHighLevel pipeline?

Generate your API key and build the workflow in minutes.

Get Started