Finding business brokers is nearly as fractured as the small business market. There are many directories but no definitive directory. Further, some directories include real estate brokers, and other potential intermediaries. Trying to form a list becomes somewhat challenging as none of the directories have export or download capabilities. The list of directories I found are below.
Business Broker Directories
There are probably others, but I couldn’t find another that was not behind a paywall. If you know of one, let me know in the comments.
It seems to me that the Interexo is the most comprehensive list, although it might not be the most up-to-date. If you have ever tried to capture a large list, what you realize quickly is that copy and paste could take days or weeks of mindless work. Maybe that’s your idea of fun, but it’s one of those things that I can’t stand, as mentioned in my weaknesses. What I found was that through website scraping and crawling you could capture this data automatically.
Figuring out how to scrape, or whom to pay on Upwork to do the scraping, led me to the conclusion that either paying ~$400 per directory or learning the tools to be able to scrape them myself.
I figured I might need this skill if I proceed to proprietary search, aka off market businesses. Also, I want to scrape and cross compare several of the lists to end up with an extensive list. I chose to try the DIY route. After many frustrating hours trying a few of the web browser extensions. I was ready to hire someone. I reached out to a friend with Perl experience to see if he was interested. He offered to do it for free. Meanwhile, one night I got the bug and decided to try one more time with browser extensions. I found this YouTube Video and after numerous tries I managed to make it work. The tool used is called Web Scraper, and it’s a Chrome extension. It was slow but worked. So, I changed the power settings on my laptop to make it not go to sleep and let it run overnight.
When I woke up, I had ~8500 brokers in a spreadsheet. This was spectacular, and I was ready to claim victory, but I decided to spot checked the data. I found an error in my scraping as I had not crawled through all the pages but only the ones with direct links. For example, if the page count looked like this:
< page 1, 2, 3, 4, 5, 6, 7, ... 10, 11 >
I got all but pages 8 and 9. I solved this issue and ran it again. Several hours later, I had an extensive list of 13,453 brokers. Victory, or well, almost. This time I forgot to get one of the fields, so one more time, and I had one directory scraped.
The list still needed some parsing and cleanup. So, I used functions inside the LibreOffice Calc, which in this case are the same as Excel, to parse and cleanup the data. I still have some work to do to remove duplicates, as some brokers have multiple listings in this directory. This will also be a problem when I combine it with the other directories.
If you feel like you are getting a good value with my blog, please share it with others and help it grow.
Notes on Parsing Spreadsheets for the really bored
I had a column containing multiple things such as city, state, zip, and I wanted them separated. So, I selected that column, went to the Data Menu, and select text to columns and then chose a deliminator, and it divided that column. Note that I first added extra columns to put that data in, or it would have overwritten the columns to the right.
I had a column that contains some entries that are, for example, email and others that are phone numbers, as shown below. It was supposed to only be email but due to the location on the page the web scraper put some phone numbers into this column.
I used this function to separate them.
=IF(ISNUMBER(SEARCH("@",I2)),I2,"")
The SEARCH function first searches for the @ symbol and if it exists, then it returns the location of where in the string from the left it is. If it does not exist, it returns #VALUE!. So for the top email, it would return a 5. Then the ISNUMBER function determines if the SEARCH function result is a number, and if it returns a True. Lastly, the IF function determines if it is True or False. If True it returns the first value, in this case the email address, and if False it returns and null string “”.
Use the reverse of above to extract the phone numbers in another column
=IF(ISNUMBER(SEARCH("@",I2)),””,I2)
So, here if an @ symbol is present it returns a null string “” otherwise it returns the value, in this case a phone number
Now I had two columns, some each with phone numbers that the other column did not have, as shown below.
So, I combined them using this function
=IF(ISNUMBER(SEARCH("null",K3)),J3,K3)
Basically, this just finds if null is in the main column at the right and if its there, it uses the other columns’ data. This will not work for all data sets, but did the trick for me.
Now, importantly, I copied all these columns with functions and pasted them with paste special as values only to the same column. This was important because I wanted to delete all the extra columns and end up only with the good ones.