Podio: Preventing Duplicate Property Leads

Scott CostelloBlog, Podio, Tutorial 5 Comments

One issue that does not really have a perfect solution is preventing duplicate leads in an app.  I run into this problem on occasion with leads that come from my websites.  Also from time to time from leads lists that I import.  In this article I'll go over the possible solutions and the problems each one has.  

Just Match the Address

The concept of keeping duplicate leads out of your Podio App is simple one.  Any property with the same address as a current lead should not be entered.  Easy right?  You couldn't be more wrong!

While this is the ideal data point to try and match, it is possibly the most difficult.  The reason...the many different ways you can write an address.  Here is a quick example...

123 West Main St, South Bend, IN 010101

Now let's count how many different ways we can write that address.

  1. 123 West Main St, South Bend, IN 01010
  2. 123 W. Main St, South Bend, IN 01010
  3. 123 W Main Street, South Bend, IN 01010
  4. 123 West Main Street, South Bend, IN 01010
  5. 123 W Main St, South Bend, IN (no zip)
  6. 123 West Main St South Bend IN 01010 (no commas)
  7. 123 West Main St, South Bend IN, 01010 (no comma between city and state)
  8. 123 West Main St, South Bend, IN,01010 (comma between each part)
  9. 123 West Main St, South Bend, Indiana, 01010 (State spelled out)

I think you get the point, but I could think of another half dozen variations.  It is just crazy!  You simply can't depend on an exact match.

You may think about splitting up the address into it's parts (street, city, state and zip) and then either rebuilding it or something.  Problem here is that you won't know where the street address ends, the city begins or ends or the state begins or ends.  AND you can't depend on a comma separating each part like I demonstrated above.

Possible Solution

So there is a potential solution that could at least make matching addresses possible.  It does have some drawbacks, but as long as you aren't looking for 100% success rate this might work for you.

The Podio Location Field

The only way you can match an address is to make it consistent. I originally thought the Location field would be the perfect way to get this consistency.  However, if you don't select the google suggested address you won't get that "googled address format." 

The good news is that there is another solution, and that is using the Google Geocoding API.  By using the Globiflow Remote Post/Get Action this is possible.   You'll have to do some data scraping to pull out the address info you want but it is not hard.

To implement all this I like to create a staging app that will trigger the GlobiFlow flow that will check for duplicate leads.  Below I'll run through the setup and then show a video.

Podio Staging App

A staging app is always good for bringing in new leads into your system. I use a staging app for each source of leads.  This allows me to check the new lead out and tweak it before bringing it into my lead flow system. So we want all new leads to be placed here first.  This is just the minimum fields I would have.  You can feel free to add any other information you are going to want for you leads.


Address (location field): You can use just a straight up text field, but I like the location field because it provides address suggestions when typing and also a map.  

Status (Category field): Two options here that will let you know what has happened to this lead.  Has it been entered into your Lead Management app or is it a duplicate.

Lead Record (relationship field): This field will be updated (by the GF flow) with the link to the Lead that was either created new or is the duplicate record.

Podio Leads App

Here I'm just showing you the minimum fields you will need for your leads app. It really is only 2 fields and one of them is because globiflow's search action will not let you search on a Location Field.  You can add any number of fields that you might need to this app.  In my video you'll see that I have more.


Address (location field): This will contain the property's address.  Nothing special about this field, we just need it.

System Address (calculation field): This field is only needed because the GlobiFlow Search Action will not allow you to search a location field.  Though in reality it is Podio's API Filter command that doesn't allow it.  SO, we get around this by creating a calculation field that grabs the address from the location field.  

The formula to do this is...


GlobiFlow: Duplicate Check

Now that we have Podio all setup, we need to create the Flow that will check for duplicates.  Below I'll run down the general steps of this flow, then show you a screen shot of the entire thing.


This flow should be triggered when a new item is added to the Podio Staging App.

  1. Get Address information from Google GeoCoding API
  2. Pull out the address information from the Google Data
  3. Search your Leads App for a matching address
  4. Check to see if an addressed was found, meaning the new lead is a duplicate.
    1. If so, then Update the staging up item saying it is  a duplicate and with what.
  5. Check to see if there is no matching address, meaning it is not a duplicate.
    1. Create a new lead in the Lead Apps
    2. Update the Staging App saying a new lead was created and link to it.

Note: The "api" field you see I'm updating is just a testing field that I used to show the google information that is being pulled.

Below is the video that shows you how to setup the GlobiFlow flow that checks for duplicates.

As promised in the video, here is the code for pulling out the formatted address from the return Google Api Data.

preg_match_gf("/formatted_address\" : \"(.+)\"/mi",strip_tags_gf([(Variable) api]),1)

Getting your Google GeoCoding API Key

Here is the video on how to get your Google Geocoding API Key. Also here are the links you will need.

Google Api WebServices - https://developers.google.com/maps/web-services/

Google Console - https://console.cloud.google.com/apis/dashboard

Other Options

As you can see trying to match a property's address with existing addresses in your app is not a straight forward process.  While it works very well, you are dependent on Google Api.  There are a few other options, but each has their own issues.

Matching Phone Numbers

If each one of your leads in your Leads App has a contact with a phone number you could try and match that up.  Phone numbers do have different formats..

  • 999-555-5555
  • (999) 555-5555
  • 999.555.5555
  • 9995555555

Unlike addresses though it's fairly easy to strip the phone number down to 10 digits.

preg_match_gf("/[^0-9,.]/", "", "(999) 555-5555")

That would return 9995555555.


Matching Email Addresses

Much like phone numbers, this requires that you have a contact with and an email address for each lead. Though unlike phone numbers, email addresses are almost always consistent.  The only thing that can change is the uppercase and lowercase letters.  Of the Two methods I would prefer email address since everyone has one these days.


With these two methods though you will run into a problem if there is a single realtor (or seller) that is submitting multiple properties.  They will use the same Email or Phone Number.  So you will have to weigh the risks.

Final Thoughts

I am completely satisfied with how the Address matching works with using the Google Geocoding API and the Staging App. It works for me about 97% of the time.  The only failures are when a person doesn't enter in a valid address.  This causes Google to return no data on the property and thus causes the lead to be created.

Let me know if you have any questions, comments or suggestions on improving this method.

Scott Costello
Follow me

Comments 5

    1. Post
    1. Post

      Google API has 2 levels, Free and Pay. The free plan can be used up to a certain number of calls per day and your implementation can’t be behind a paywall where you charge users. If you do, then you have to pay…and it’s NOT cheap!

Leave a Reply

Your email address will not be published. Required fields are marked *