Skip to main content
CallTools Integration

Setting up CallTools Integration

Kylie avatar
Written by Kylie
Updated over a month ago

The REISift + Calltools integration allows you to send records from your REISift account to CallTools (Professional and Business Plans). With our Business Plan, you can also receive information back, updating the records in REISift in real time as you call through them.

Outbound Integrations

To set up the integration for sending records to CallTools, log in to both your REISift account and CallTools.

Creating Your API Key

In your CallTools account select Integrations -> API Keys, then create a new API key.

Select the user who will be using the api key and leave the expiration date blank.



Copy the API key generated. You'll need this in the next steps.

Configuring

Go to the Settings -> Integrations section of your REISift account and select CallTools.

Under the Data Out section, select your silo. This will be the first part of the url when you log in to your CallTools account, for example: if your URL is "app.calltools," your silo is "app.calltools". Next, paste the api key you copied from CallTools and click Validate Key.

Sending Records

When sending records to CallTools, you can select to send to a bucket ID or a tag ID.

Creating the Bucket

To create a bucket, go to the Data -> Buckets section of your CallTools account. Click create bucket, enter the bucket name and save.

Next, Copy the bucket ID

Need more help with campaigns, buckets and tags? Please see CallTools Documentation Buckets & Live Filters

Filtering & Selecting Records to Send

From the Records page in REISift, filter and select the records you want to send. Here you can select any combination of filters to create your marketing campaigns.

Next, select the records and go to Send to -> Integrations.

Select Calltools V2.

Phone Type, Status, and Tags Selection

Your selections here determine which phone numbers will be sent to the integration.

For a new campaign, consider sending only phone numbers with no status, as long as your records are being updated appropriately, the No Status phone numbers should be anyone you have not reached yet.

If this is a follow up campaign to follow up with Not Interested's, consider selecting only the Correct phone status.

Optionally, you can select certain phone tags to include or exclude when sending.

Integration Destination

Enter the Bucket ID or Tag ID to send the records to.
​NOTE: When sending to a bucket it is also recommended to create and include a tag ID as this allows you to filter the data in CallTools.


Adding Tags

In the next step, you'll see auto tags for when and where the records are being sent.

Additionally, you can add any custom tags for specific tracking purposes, such as campaign names or call attempts.

Review and Send Contacts

Review the information to ensure accuracy.

If everything looks correct, click the "Send Contacts" button.

Checking the Transfer Status

The status of the transfer can be found under the Activity -> Predictive Dialer section of your account. Once the status shows complete, you should begin seeing the records in your CallTools account.

The amount of phone numbers sent is most likely going to be higher than the amount of records you selected because many records will have multiple phone numbers.

When sending records, we send 1 record per phone number. For example, if a contact has 3 phone numbers they will be sent 3 times, once for each number. This allows you to call and disposition each phone number. The reason being is it allows you to gather all possible correct phone numbers for the property. Having multiple correct numbers allows you to have multiple numbers to follow up with a prospect if they are not interested, or additional numbers if a lead becomes unresponsive.


Inbound Integrations

CallTools Inbound Integration allows you to receive data back from CallTools and update your records in real time as you call through them. This plan is only available for our Business plan users.

Calltools will set up the inbound integrations for you. For existing Calltools customers, reach out to the Calltools integrations team directly at integrations@calltools.com

Their integrations team will populate a template which uses HTTPS Requests and Automations. When you select a disposition in CallTools, this will send information back to REISift to automatically update your records.

Once the integration template is added in your Calltools account, copy the API key listed under the Settings -> Integrations -> Calltools DATA IN section of your REISift account.

Next, log in to your Calltools account and navigate to Integrations -> HTTPS Requests.

Select Edit on each request, and paste the API key from REISift in the section labeled "Insert API Token Here".

Check out the example below:

Recommended Dispositions

Disposition Name

Property Status in REISift

Phone Status in REISift

New Lead

New Lead

Correct

Not Interested

Not Interested

Correct

Property Sold

Sold

Correct

Property Listed

Listed

Correct

Wrong Number

Wrong

DNC Wrong

Wrong DNC

DNC Correct

Correct DNC

DNC Unknown

DNC

Miscellaneous Connectors:

A connector is a nice way to send some additional information to a phone number for example. If a new lead is send via disposition, maybe the lead was Spanish speaking and you wish to tag that phone number so your team knows this when following up.

Note: These connectors will update the Phone Tag in REISift. Phone tags are separate from Phone Statuses and are fully customizable.

Connector Name in Calltools

Phone Tag in REISift

Spanish Speaking

Spanish Speaking

Relative

Relative

Husband

Husband

Wife

Wife

Customizing Inbound Integration

The integration can be customized. If you’d like to update to a custom property status, send CallTools the name of the disposition you want to create and the property and/or phone status you want it to update.

We can update the following in REISift from Calltools:

  • Property Status

  • Phone Status

  • Phone Tag

  • Notes

  • Tag

  • List

Testing the Inbound Integrations

As long as the record exists in your REISift account, your records should be updating. You can test it by searching for a record you recently dispositioned in Calltools and going to the activity log within the record.

To access the activity log, open the record from your records page, scroll down below the map and click Activity Log.

Calltools events are logged as system updated the property or system added tags (or phone status if using this feature) Below is an example:


Troubleshooting

Events not being updated for records that are in both Calltools and your REISift account?

Confirm the property address and phone number exists in your REISift account. We can receive information from Calltools to update existing records.

Note: Error logs related to the automations can be found under Data -> Automations section in Calltools. Click the 3 dots under the logs section, then select Error Logs. This will provide some details about the error.

Seeing Error 400? This is typically related to the JSON. Double check the JSON and confirm it's correct. The last of the JSON must NOT include a comma.

401 Errors are usually related to the API key. Under HTTP requests, please make sure Api-Key is typed before the actual key and that the API key listed there matches the API key under the Settings -> Integrations -> Calltools Data IN section of your REISift account.



Setting up Inbound Integrations Yourself

Tech savvy and want to set up the integrations yourself? Read below to see how it's done.

The inbound integration can be set up in two ways: Connectors for your callers to select and HTTPS Requests and webhooks. With connectors, your callers will have an additional button to click in order to send the information to REISift. HTTPS Requests/webhooks allows you to skip this step so you can select the disposition, go straight to the post call wrap up and have your records updated automatically in REISift.

First Steps:

  1. Delete all Default Calltools Call dispositions

    1. DATA → DISPOSITIONS → Call Dispositions

  2. Create the following new Call Dispositions

    1. New Lead

    2. Not Interested

    3. Wrong Number

    4. DNC Unknown

    5. DNC Correct

    6. DNC Wrong

    7. Sold Property

    8. Listed Property

Second Steps:

  1. Navigate to DATA → Automations

  2. Create an Automation for Each of the above dispositions, just name them *de-activate” the automation and scroll down and save. We are just prepping all the ones we need to make.

  3. Click on the first automation and scrolls down to “Automation Trigger” and Select “Call Disposition”

  4. Next Navigate to “Automation Conditions” and select “ADD CONDITIONS SET”

  5. Select the blue + on the first field and then choose “Dispositions id (integer)” it will show “X choices” to the right signifying the amount of call dispositions you have available.
    a. the middle drop down should select “equals”
    b. the last far right field should be selected on which ever disposition
    automation you are currently making this for.

  6. Navigate to “Automation Actions” and select “ADD ACTION” and then “Webhook”

  7. Name the webhook the same name as your automation/dispositions name

  8. Click the blue + circle “Add HTTPS Response”

  9. Name the HTTPS Request the same name as automations/disposition/webhook name

  10. Fill in the following information

    1. REQUEST TYPE → POST

    2. CONTENT TYPE → JSON

    3. Click Add Header and enter the below information. where “REISIFT_CALLTOOLS_API_KEY” is equal to your REISift DATA IN API key under settings

    4. “Key” Field → AUTHORIZATION

    5. “Value” Field → Api-Key REISIFT_CALLTOOLS_API_KEY

  11. Copy the corresponding “JSON” from the below “6 Primary” that matches the disposition you are creating. IF you are doing a custom disposition you can use the JSON Payload Options below to create what trigger you wish.

    1. For Example New Lead would be:
      {
      "street":"{{%locals[contact][address]}}",
      "city":"{{%locals[contact][city]}}",
      "state":"{{%locals[contact][state]}}",
      "postal_code":"{{%locals[contact][zip_code]}}",
      "phone":"{{%locals[contact][home_phone_number]}}", "phone_status":"CORRECT",
      "status":"new_lead",
      "notes":"{{%locals[contact][last_note_text]}}"
      }

  12. Paste the JSON inside “Body (JSON)” and then click “Save” and then “Create"

  13. Test the automation by going to a contact and selecting a disposition and then going back to the automations page to watch for the trigger to update.

  14. After it updates and 0 errors — go to that record in REISIft and verify. If you get an error you can view the error logs by clicking the three dots on the right of the automation.

JSON Payload Options

*city, street, state, county, and postal_code (property info) are required
*Assigned_to often times is not used due to REISIft having internal sequences
*phone is required if using any phone_type , phone_status, phone_tag

{
"city": "{city}",
"street": "{address}",
"state": "{state}",
"county": "{county}",
"postal_code": "{zip_code}",
"phone": "{phone_number}",
"assigned_to": "REIsift user email",
"phone_type": <MOBILE, UNKNOWN, LANDLINE, VOIP>,
"phone_status": <UNKNOWN, CORRECT, CORRECT_DNC, WRONG, WRONG_DNC, DEAD, NO_ANSWER, DNC>
"phone_tag": <Any text>,
"notes": <Any text>,
"tag": "Tag 1",
"status": <new_lead, sold, not_interested, opt_out, listed, follow_up, prospecting, buyer, under_contract, or any other custom status>
}

The 6 Primary Dispositions to Create

Create the Following HTTPS Requests:

NEW LEAD

{
"street":"{{%locals[contact][address]}}",
"city":"{{%locals[contact][city]}}",
"state":"{{%locals[contact][state]}}",

"postal_code":"{{%locals[contact][zip_code]}}",

"phone":"{{%locals[contact][home_phone_number]}}",

"phone_status":"CORRECT",

"status":"new_lead",

"notes":"{{%locals[contact][last_note_text]}}"

}

NOT INTERESTED

{

"street":"{{%locals[contact][address]}}",

"city":"{{%locals[contact][city]}}",

"state":"{{%locals[contact][state]}}",

"postal_code":"{{%locals[contact][zip_code]}}",

"phone":"{{%locals[contact][home_phone_number]}}",

"phone_status":"CORRECT",

"status":"not_interested"

}

PROPERTY SOLD

{
"street":"{{%locals[contact][address]}}",

"city":"{{%locals[contact][city]}}",

"state":"{{%locals[contact][state]}}",

"postal_code":"{{%locals[contact][zip_code]}}",

"phone":"{{%locals[contact][home_phone_number]}}",

"phone_status":"CORRECT",

"status":"sold"

}

PROPERTY LISTED

{

"street":"{{%locals[contact][address]}}",

"city":"{{%locals[contact][city]}}",

"state":"{{%locals[contact][state]}}",

"postal_code":"{{%locals[contact][zip_code]}}",

"phone":"{{%locals[contact][home_phone_number]}}",

"phone_status":"CORRECT",

"status":"listed"

}

WRONG NUMBER

{

"street":"{{%locals[contact][address]}}",

"city":"{{%locals[contact][city]}}",

"state":"{{%locals[contact][state]}}",

"postal_code":"{{%locals[contact][zip_code]}}",

"phone":"{{%locals[contact][home_phone_number]}}",

"phone_status":"WRONG"

}

DNC WRONG

{
"street":"{{%locals[contact][address]}}",

"city":"{{%locals[contact][city]}}",

"state":"{{%locals[contact][state]}}",

"postal_code":"{{%locals[contact][zip_code]}}",

"phone":"{{%locals[contact][home_phone_number]}}",

"phone_status":"WRONG_DNC"

}

DNC CORRECT

{

"street":"{{%locals[contact][address]}}",

"city":"{{%locals[contact][city]}}",

"state":"{{%locals[contact][state]}}",

"postal_code":"{{%locals[contact][zip_code]}}",

"phone":"{{%locals[contact][home_phone_number]}}", "phone_status":"CORRECT_DNC"

}

DNC UNKNOWN

{

"street":"{{%locals[contact][address]}}",

"city":"{{%locals[contact][city]}}",

"state":"{{%locals[contact][state]}}",

"postal_code":"{{%locals[contact][zip_code]}}",

"phone":"{{%locals[contact][home_phone_number]}}",

"phone_status":"DNC"

}


Using Connectors to send Misc. information

A connector is a nice way to send some additional information to a phone number for example. If a new lead is send via disposition, maybe the lead was Spanish speaking and you wish to tag that phone number so your team knows this when following up.

Spanish Speaking

{

"street":"{{%locals[contact][address]}}",

"city":"{{%locals[contact][city]}}",

"state":"{{%locals[contact][state]}}",

"postal_code":"{{%locals[contact][zip_code]}}",

"phone":"{{%locals[contact][home_phone_number]}}",

"phone_tag":"Spanish Speaking"

}

Relative

{

"street":"{{%locals[contact][address]}}",

"city":"{{%locals[contact][city]}}",

"state":"{{%locals[contact][state]}}",

"postal_code":"{{%locals[contact][zip_code]}}",

"phone":"{{%locals[contact][home_phone_number]}}",

"phone_tag":"Relative"

}

Wife

{

"street":"{{%locals[contact][address]}}",

"city":"{{%locals[contact][city]}}",

"state":"{{%locals[contact][state]}}",

"postal_code":"{{%locals[contact][zip_code]}}",

"phone":"{{%locals[contact][home_phone_number]}}",

"phone_tag":"Wife"

}

Husband

{

"street":"{{%locals[contact][address]}}",

"city":"{{%locals[contact][city]}}",

"state":"{{%locals[contact][state]}}",

"postal_code":"{{%locals[contact][zip_code]}}",

"phone":"{{%locals[contact][home_phone_number]}}",

"phone_tag":"Husband"

}


Related Trainings


Did this answer your question?