Prospect
Add a Prospect
Section titled “Add a Prospect”Through the API
Section titled “Through the API”Prospect data must be nested under the client
key in the json body.
PUT /api/v2/clients/<client_id>
Section titled “PUT /api/v2/clients/<client_id>”Edit a limited number of fields on a specified company prospect.
Accepted PUT Parameters
Section titled “Accepted PUT Parameters”status
- String value representing new prospect status
- Choices are
lead
,toured
,applicant
,resident
, andnot-a-prospect
application
- Optional. Details about the prospect’s application if they are being set to
applicant
orresident
status. If not setting to one of those statuses, leave this key out of the payload. - Application object keys: *
unit_id
- The Funnel unit id for the unit that the prospect has applied for.
lease_start_date
YYYY-MM-DD
formatted date that the prospect’s lease starts.
lease_end_date
YYYY-MM-DD
formatted date that the prospect’s lease expires.
application_submitted_date
YYYY-MM-DD
formatted date that the prospect’s application was submitted
application_price
- The rent price the prospect is applying with.
closed_date
YYYY-MM-DD
formatted date that the prospect was closed.
- Optional. Details about the prospect’s application if they are being set to
Example request body for status change:
{ "status": "toured"}
Example request body for status change to applicant:
{ "status": "applicant" "application": { "unit_id": 123, "lease_start_date": "2020-06-01", "lease_end_date": "2020-05-31", "application_submitted_date": "2020-05-20", "application_price": "1200.00" }}
Example response body: 200
success
{ "data": { "client": { "id": 111, "group": 20, "broker_email": "", "broker_phone": "", "broker_name": " ", "people": [ { "first_name": "Lara", "last_name": "Smith", "preferred_name": "", "email": "lara.smith@outlook.com", "phone_1": "555-777-5555", "phone_2": "", "id": 27, "is_primary": true, "email_updates_opt_in": 10, "sms_opted_in": 10, "move_out_date": null } ], "move_in_date": null, "client_referral": "None", "campaign_info": "None", "layout": "", "price_floor": null, "price_ceiling": null, "discovery_source": null, "status": "Applicant", "active_live_chat_id": null, "sms_opted_in": 10 } }}
Example response body: 400
error
If the provided data in the application fields is not valid, a 400
error response will be returned.
{ "errors": { "application": { "unit_id": "missing or invalid data", "lease_start_date": "missing or invalid data", "application_submitted_date": "missing or invalid data" } }}
If the provided status
choice is not valid, a 400
error response will be returned. This error will be in an array of strings.
{ "errors": { "status": ["missing or invalid data"] }}
POST /api/v2/clients
Section titled “POST /api/v2/clients”Create a prospect record in Funnel. Note that in order for Funnel to properly ingest prospects and associate them with teams and properties, the following fields are required: first_name, last_name, email, group.
Accepted POST Parameters
Section titled “Accepted POST Parameters”people
- List of objects representing people associated with this prospect record.
- Person object keys:
first_name
- String field for first name
last_name
- String field for last name
email
- String field for email
phone_1
- String field for phone number
phone_2
- Additional phone number field
is_primary
- Boolean field indicating whether or not person is primary prospect contact
move_in_date
- Prospect’s desired move in date in format YYYY-MM-DD
layout
- Array of layout choices
- Choices are:
- 80 - Loft
- 10 - Studio
- 20 - 1 BR
- 30 - 2 BR
- 40 - 3 BR
- 50 - 4+ BR
price_floor
- Number value representing lowest dollar value the prospect would like to pay
price_ceiling
- Number value representing highest dollar value the prospect would like to pay
notes
- Free text field for prospect-sourced information
group
- Number value provided by Funnel representing the group id the prospect should be assigned to. Please contact us at support@funnelleasing.com to get your group id and more details.
broker_company
- String field for broker company if representing prospect
broker_email
- String field for broker email if representing prospect
broker_first_name
- String field for broker first name if representing prospect
broker_last_name
- String field for broker last name if representing prospect
broker_phone
- String field for broker name if representing prospect
client_referral
- String field for prospect referral source (up to 255 characters)
campaign_id
- Campaign Identifier (up to 255 characters)
campaign_info
- Optional string. Use this parameter to pass a value to Funnel for marketing attribution. To assign a lead source to a prospect, set the value to a string that matches the name of your campaign as entered in Funnel under marketing settings. The value must match exactly (case sensitive). If also using Funnel’s DNI script, the value of this parameter can be pulled from local storage of the browser and sent via the form.
community
- Number value representing the Funnel Community id a prospect is inquiring about
building
- Number value representing the Funnel Building id a prospect is inquiring about
unit
- Number value representing the Funnel unit id a prospect is inquiring about
NOTE: You should only pass one of three community
/building
/unit
, otherwise you will get a validation error.
discovery_source
- String value representing the way the prospect says they discovered your property. This can be entered manually by a prospect on a contact form, guest card, or tour scheduler and is typically presented as the question: “How did you hear about us?” (defaults to null if choice does not match)
- To retrieve the list of available sources, see Discovery Sources
lead_source
- Integer or String value representing the way the prospect became a lead for your property (defaults to null if choice does not match)
- To retrieve the list of available sources, see Discovery Sources.
- To send an integer value, it will need to match an ID on your list of available discovery sources.
- To send a string value, it will need to match a name on your list of available discovery sources.
device
- String value indicating the type of device the lead was on when captured.
- Choices are:
- 10 - Phone
- 20 - Tablet
- 30 - Desktop
- 40 - Other
- or blank if unknown
source_type
- String value indicating whether the recorded lead originated from a paid marketing campaign or from an organic, non-paid initiative.
- Choices are
paid
,organic
, or blank if unknown
sms_opted_in
- String value indicating whether the recorded lead has opted in to receiving SMS communication. The available choices are:
'marketing-enabled'
: This prospect has opted into receiving all communication including automated marketing messages'marketing-disabled'
: This prospect has opted into receiving communications, but not opted into receiving automated marketing messages. This is the default setting.'all-sms-disabled'
: This will disable the prospect from receiving any SMS communications. This setting can be updated via the Funnel app. Use this if you want to temporarily disable SMS communication with the prospect- ‘
client-opted-out'
: The prospect has explicitly opted out of communication. This setting cannot be updated unless the prospect submits their information again. Use this if you want to permamently disable all SMS communication with the prospect.
request_sms
- Boolean value which will create an event declaring the prospect requested a sms, set the client’s preference for sms, and enable virtual agent for that client if all other factors are satisfied (for instance
sms_opted_in
)
- Boolean value which will create an event declaring the prospect requested a sms, set the client’s preference for sms, and enable virtual agent for that client if all other factors are satisfied (for instance
Example request body:
{ "client": { "people": [ { "first_name": "John", "last_name": "Doe", "email": "johndoe@example.com", "phone_1": "5101234567", "phone_2": "", "is_primary": true }, { "first_name": "Jane", "last_name": "Doe", "email": "janedoe@example.com", "phone_1": "", "phone_2": "", "is_primary": false } ], "move_in_date": "1970-01-01", "layout": [ "studio", "1br" ], "price_floor": 1500, "price_ceiling": 2500, "notes": "looking for affordable neighborhood with bars and restaurants", "group": 12, "broker_company": "Jerry Company", "broker_email": "jerry@seinfeld.com", "broker_first_name": "Jerry", "broker_last_name": "Seinfeld", "broker_phone": "4101230987", "client_referral": "Company Website", "campaign_id": "Test-Campaign", "campaign_info": "GooglePPC", "unit": 5309, "device": "phone", "source_type": "organic" }}
Example response body: 200
success
{ "data": { "client": { "id": 123, "group": 30, "broker_email": "", "broker_phone": "", "broker_name": "", "people": [ { "first_name": "Lara", "last_name": "Smith", "preferred_name": "", "email": "lara.smith@outlook.com", "phone_1": "", "phone_2": "", "id": 111, "is_primary": true, "email_updates_opt_in": 10, "sms_opted_in": 10, "move_out_date": null } ], "move_in_date": null, "client_referral": "None", "campaign_info": "None", "layout": "", "price_floor": null, "price_ceiling": null, "discovery_source": null, "status": "Prospect", "active_live_chat_id": null, "sms_opted_in": 10 } }}
Example response body: 400
error
If the provided data is not valid, a 400
error response will be returned. These errors will be in an array of strings.
{ "errors": { "client": { "group": [ "Invalid choice." ] } }}
If the required data is missing, a 400
error response will be returned. These errors will be in an array of strings.
{ "errors": { "client": { "people": ["Missing data for required field."] } }}
Through the lead capture widget
Section titled “Through the lead capture widget”To embed the widget into your website, simply paste the provided code, which should look like this:
<script src="https://integrations.nestio.com/contact-widget/v1/integration.js" id="nestio-lead-capture-frame"></script> <script type="text/javascript"> NestioLeadCapture({ "type": "lead_capture", "key": "FUNNEL_API_KEY_HERE", "group": 9, "color": "74FFE7" }); </script>
The parameters you can set are:
key
- Required - The company API key, this will be provided by Funnel.group
- Required - The ID of the Funnel group that will be used for the widget. This group what users are assigned the lead.color
- The brand color which will be used in certain places on the widget, such as submit buttons and header text. This should be 6 digit hex code.campaignInfo
- Optional string. When not using Funnel’s DNI Script, use this parameter to pass a value to Funnel for marketing attribution. In that case, to correctly assign a lead source, set the value to a string that matches the name of your campaign as entered in Funnel under marketing settings. The value must match exactly (case sensitive). When using the DNI Script, the value of this parameter will be saved on the notes section of the guest card.onComplete
- A callback that is executed after the widget form is submitted. This is useful for manually triggering analytics events such as with Google Tags Manager.submitLabel
- Label that displays on the submit button on the client info form. Defaults to ‘Request Information’.unit
- ID of Funnel Unit that the client will be associated within Funnel.buttonTextColor
- Used to change the color of the text on the submit button of the widget. This should be 6 digit hex code.textColor
- Used to change the color of the headers for each field on the widget, First Name, Last Name, etc. This should be 6 digit hex code.
Via Email parsing
Section titled “Via Email parsing”Supported formats
Section titled “Supported formats”Prospect details can be embedded inside an email using one of the following formats:
Hidden div
Section titled “Hidden div”Insert a hidden <div>
HTML element into the email body. This div must have the id prospect-details
. To hide this element add the below CSS as an inline style using the style
attribute: display: none;
. The element text content must be the lead as a single JSON object.
HTML comment
Section titled “HTML comment”Insert an HTML comment into the email body. This HTML comment must start with the string PROSPECT =
followed by the lead as a single JSON object.
Examples
Section titled “Examples”Hidden div
Section titled “Hidden div” <div style="display: none;" id="prospect-details"> { "name": "Johnny Example", "email": "johnny@example.com", "phone": "567-567-5678", "minPrice": "$1000", "maxPrice": "$2000", "moveInDate": "2025-06-07", "layouts": ["1BED", "STUDIO"], "notes": "Do you allow pets?", "unit": "82021", "sms_opt_in": "true" } </div>
HTML comment
Section titled “HTML comment” <!-- PROSPECT = { "name": "Johnny Example", "email": "johnny@example.com", "phone": "567-567-5678", "minPrice": "$1000", "maxPrice": "$2000", "moveInDate": "2025-06-07", "layouts": ["1BED", "STUDIO"], "notes": "Do you allow pets?", "unit": "82021", "sms_opt_in": "true" } -->
Technical details for developers
Section titled “Technical details for developers”This section covers technical details meant to help developers integrate with prospect email forwarding.
Use inline CSS for hidden div
Section titled “Use inline CSS for hidden div”Important CSS style must be inlined, as <style>
tags are stripped by most email service providers. So the following <div>
will be displayed by most email service providers.
Warning! Do NOT use a CSS class to hide the div. Do NOT do the following:
<style> .hidden { display: none; } </style> <div class="hidden" id="prospect-details"> { ... } </div>
JSON prospect schema
Section titled “JSON prospect schema”Key
Value type
Is required
string
Yes
string
Yes
string
No
string
No
string
No
ISO 8601 date string
No
array of strings
No
string
No
string
No
[sms_opt_in]
bool
No
The full name of the prospect.
The email address of the prospect.
The phone number of the prospect.
Min price
Section titled “Min price”The minimum price the prospect is willing to pay.
Max price
Section titled “Max price”The maximum price the prospect is willing to pay.
Move-in date
Section titled “Move-in date”The date the prospect wants to move in. Move-in date must be a date in ISO 8601 format: YYYY-MM-DD
Layouts
Section titled “Layouts”The property layouts of interest to the prospect. Layouts is a JSON array of strings. Supported layouts:
"STUDIO"
"1BED"
"2BED"
"3BED"
"4BED"
"5BED"
"6BED_OR_MORE"
A string that will be used as the lead’s ‘message’
A string representing the unit number the prospect is referencing.
SMS Opt-in
Section titled “SMS Opt-in”A bool representing the prospect’s sms opt-in response.