Overview
Make (formerly Integromat) calls Propera's HTTP API with its built-in HTTP module, so there's no app to install on Propera's side. A free Make account supports multi-step scenarios and routers, so you can branch on success vs. failure without paying.
What you'll build
One scenario: CRM trigger → HTTP "Make a request" (Propera) → Router → CRM update (one route for success, one for failure).
Before you start
- A Propera account on the Pro or Business plan, and a Propera API key (Step 1).
- A Make account (the free tier works for moderate volume).
- Your CRM connected to Make.
Step 1 — Generate your Propera API key
In Propera, go to Account Settings → API Keys, click Generate API Key, name it (for example Make), and copy it. It's shown only once.
Step 2 — Add a trigger from your CRM
Start a new scenario and add your CRM as the first module (watch new/updated records), or a "Custom webhook" the CRM posts to. Use a deliberate "ready" signal (a status field set to Run ARV, or a filter that requires the key fields) so it doesn't run on half-entered leads.
Step 3 — Add the HTTP "Make a request" module
- URL:
https://getpropera.com/api/v1/arv - Method:
POST - Headers:
X-API-Key= your key, andContent-Type=application/json - Body type: Raw, content type JSON, with the lead's fields mapped in:
{
"address": "{{ lead address }}",
"property_type": "sfh",
"bedrooms": {{ beds }},
"bathrooms": {{ baths }},
"sqft": {{ sqft }},
"year_built": {{ year }},
"comp_radius": 5
}
Turn on Parse response so Propera's JSON fields become mappable in later modules.
(See Make's help docs for the HTTP module.)
Step 4 — Route the result back to your CRM
Add a Router after the HTTP module:
- Route A (filter
success = true): your CRM "Update a record", mappingarv,summary_text, andrun_url. - Route B (filter
success = false): your CRM "Update a record", writingerrorinto a notes/error field.
Request fields
| Field | Value | Required |
|---|---|---|
address | The lead'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_type | sfh, condo, townhouse, manufactured, or land (case-insensitive) | Always |
bedrooms | Number of bedrooms | Residential |
bathrooms | Number of bathrooms | Residential |
sqft | Living area for residential, or lot size for land | Always |
year_built | Year the property was built | Residential |
comp_radius | Search radius in miles (residential up to 15, land up to 50) | Always |
lot_size_unit | sqft or acres | Land only |
soft_errors | true 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 response | Optional |
Response fields
| Field | Description |
|---|---|
success | true on success, false on failure (branch on this) |
arv | The estimated ARV |
arv_confidence | high, medium, or low |
summary_text | One-line summary for a notes field |
comp_count | Number of comparables used |
comps_radius_miles | The search radius used, in miles |
price_per_sqft | Average price per square foot |
run_url | Link to view the full run in Propera |
normalized_address | The address as Propera resolved it (street, city, state, ZIP). Write it back to the lead if you want the corrected version. |
comps | Array of comps (address, price, sqft, beds, baths, price_per_sqft, distance_mi, sold_date, verification, condition, zillow_url) |
comps_text | Ready-to-paste plain-text list of every comp (one per paragraph, with Zillow links) for a single text field |
arv_source | verified when the comps were checked against public listing records, otherwise fast |
error | On failure, a human-readable reason |
error_code | On failure, a machine-readable code (see Troubleshooting) |
Troubleshooting
| error_code | What it means | Fix |
|---|---|---|
INSUFFICIENT_COMPS | Not enough comps at that radius | Widen comp_radius (residential up to 15 mi, land up to 50 mi) |
NO_USABLE_COMPS | Comps were found but none passed the filters | Widen comp_radius (residential up to 15 mi, land up to 50 mi) |
ADDRESS_NOT_FOUND | Propera could not resolve the address it received. The error message names that address | Fix the street number, city, state or ZIP on the record and rerun; for rural roads try an alternate name |
PLAN_NOT_ELIGIBLE | Your plan doesn't include API access | Upgrade to Pro or Business |
UNAUTHORIZED | The API key is missing, wrong, or revoked | Check the X-API-Key header |
Questions people ask
Which Propera plans include API access?
Pro and Business. The scenario authenticates with an API key from your account, and a Starter key returns a 403 on every call. Confirm the plan before building the scenario rather than after.
Does Make's free tier cover this?
For most lead volumes, yes. A single underwriting call is one HTTP module operation plus whatever your trigger and write-back steps use, so the operation count per lead is small. The binding constraint is usually your Propera monthly ARV allowance rather than Make's operations.
Does each scenario run use one of my monthly ARVs?
Yes. Every completed analysis draws one AI ARV from your plan's monthly allowance. When the allowance is exhausted the API returns 402 and the module errors until the limit resets on your next billing cycle.
How do I avoid underwriting leads that are not ready?
Add a Make filter before the HTTP module. Requiring a non-empty address is the minimum useful filter; a lead-status or tag condition is better. Each run costs an ARV, so filtering is about your allowance rather than only about tidiness.
What does the scenario do when an address fails to match?
The API returns a 422 with a message and no estimate, so the module errors rather than writing an empty or wrong value into your record. Missing street numbers are the usual cause.
Ready to auto-underwrite your pipeline?
Generate your API key and connect your CRM in minutes.
Get Started