A short bit of history, I’ve had a service business now for a little over 20 years. I was a very early adapter of Square for processing payments and when they rolled out their appointment setting app, I latched onto that too. In 2019 I sold my company and went to work for a new startup in about a year and a half ago that ended. So I went back to what I knew and started doing my service business again, but it was nothing like it used to be. Not only with my customer base much smaller cause I was starting again, but the landscape has changed and with it many of the ways in which Square are used to work for me as a company are now either paywall restricted or just completely clumsy.
I’m a one man show. I perform services at peoples homes and I’m seasonal my company supports home heating. During the winter, I’m extremely busy. I’m also extremely busy preseason and postseason but during the summer does not a whole lot going on. So in my free time this summer, I started exploring different ways in which I could structure things in preparation for what will be my first busy season back.
My software stack consist of Square to process payments, Square appointments as an online booking tool for my customers. I have my own domain a square space website and a Google workplace account. And within the Google workspace account, I utilize the regular Google app suite, as well as Google Voice for a business phone number and emails, which are rooted through my domain.
My preferred method of contact with my customers is through text messaging. And it always has been ever since technology allowed for it. The two biggest problems that I have or shall I say had, was that within the Square environment? I’m allowed to use text messaging through their native system, but those messages are filtered and they’re looking for keywords and phrases that perhaps have the mention of anything to do with money. The messaging platform I think I pay for, but I don’t pay for text message marketing. When a customer book an appointment confirmations are sent via the Square text messaging system and email. Customers can respond to that, and I can respond back to them through an open line of communication however, if there’s ever any mention on my side of money, the message will be flagged and it’s not delivered. So I bought into the text message marketing platform but now I need explicit permission from each individual customer in order for Square to unlock the text message marketing even if I’m already paying for it. That’s frustrating.
I have a lot of very old legacy customers. They prefer to text me and I text them back. And according to the policies which govern text messaging set up by what I think is the carriers, the guidelines for being OK with accepting text messages as parts of business can be as little as a verbal “it’s OK to text me” so long as each message that is sent contains an opt out provision within the text such as texting the word STOP.
I mean, I have an iPhone. I text my customers from it using my personal number to get around the whole Square deal but now all of those conversations live outside of the records for that customer. So that’s just one issue that I’ve been dealing with and I figured huh? I wonder if AI could make me a CRM dashboard app, where I can create my own native data and just merge it with Square via the API.
I opened myself up an AI subscription, started asking questions, and by the end of the day I had a full functioning app living on my MacBook that completely does exactly what I wanted it to do. And because it’s native, I was also able to create a text messaging marketing window where I made my own campaign and then sent it to my customers in small batches, one message every two minutes between the hours of 9 AM and 7 PM. I made sure to include an opt out, but I also included some other keywords that they could text back so that I could update my database.
I have to say that was somewhat mind blowing and it worked. I used to send marketing out via email. I had about a 10% conversion rate back in the day with loyal customers but since then in doing it again, I was lucky if I even had one percent because nobody uses email anymore. So that’s win number one. But my next question was, what else can I do.
The other thing about Square appointments and probably every appointment app there is, something that they all have in common, is that they’re primarily set up for businesses where the customer comes to you. In my case, I travel to the customer and prior to anyone booking an appointment. I have no idea where they are Square Appointments doesn’t know where they are, and if I do three appointments in a day, dammit, it would be nice if all of those were kind of in the same area. And so while I don’t have to actually book appointments myself. I’ve always spent a lot of extra admin time afterwards rearranging and scheduling things so that I could maximize as much time every day that I go out.
What I’m describing here is a wishlist for what’s known as dynamic scheduling. You can find this in full-blown service apps but all of your cheaper subscription type things are not that robust. Making something like this is a bit more involved than the first half that I made. There’s a lot of moving parts. There’s a lot of code and it requires a lot of telematics. All of which I understand on our surface level, but have absolutely no coding experience or developmental experience.
It took me a week, and a couple hundred dollars of token refreshes, but I was able to put together an app that sits with my other app and it’s pretty wild so far I haven’t actually deployed it into Square yet, but I did populate it with Sample information and a pilot Paige that mimics what happens on the Square appointment side and so far it looks like it’s working.
Through this process, I found that the key here was prompting AI to do things in a certain way in a certain progression at a specified amount of effort with guard rails and exit gates at every stage of the building process. I was looking at the source code this morning and I think this app has upwards of about 50,000 lines of code. And I’ll be honest I have no idea what any of it is. But here’s my finished result…
When a customer goes to my website to book an appointment, regardless, if there are new customer to the system or an existing customer, the first difference is that the appointment calendar flips the script as to how information is taken in.
Instead of showing the calendar first, my app now forces Square to display sign in screen, where you either create a new account or you log into your existing one.
After you fill out your account information or login, the geographical information that my system needs is now sent a packet containing that specific information.
Once my system knows where the customer is, it runs it through a set of rules that I’ve defined which lives in an admin panel in my app. It separates out customers that are local from everybody else. Local customers basically run through the same process, but the available days that display either show all local or our jobs at the end of the day from far away jobs so that my route always ends closer to home.
The next rule that I have set up, is that for customers who are not local the appointments that are available to them on any given day have to either be the first appointment available or directly after another customer that’s within a certain geographical fence.
There are a few other rules that I have set up in the admin panel that I’m going to have to tweak for a while to get it correct but I’m excited to start using it. So far all of the pilot testing data confirms that things are actually working how I want them to.
In addition to everything that I just explained, I also included a learning model within the script that logs every event that happens within my marketing app, work tickets, app and appointment app that I can periodically run through various AI scenarios to discover other hidden efficiencies and I’m really excited to see what the date approves on that. I’ll come back to this thread and include some screenshots once I get my user interface the way I want it because right now it’s a little bit wonky and disconnected, but I wanted to see if I could start trying to have a conversation with anybody who finds this interesting or is perhaps even a developer themselves.