Personal CRM’s are one of the only apps that people actually consider building themselves rather than look for an existing solution. As the co-founder of a Personal CRM app, I’ve always found this very interesting.
We’re mostly competing against homebuilt apps.
Many of our existing customers actually started off by building a relationship manager for themselves using Airtable, Coda or Notion.
In this article, I will try to re-build our app using No-code tools!
Building a calendar integration with Airtable
Airtable famously offers a Personal CRM template to their users so I started there. You can see their template here. I realised soon that this would not work for a few reasons:
- Airtable doesn’t offer a Gmail integration.
- There is far too much (Companies I’d like to work for, Cities, Calendar view, …). I don’t want my Personal CRM to do everything poorly, rather just a few things very well.
- It doesn’t sync back in time.
Despite the Gmail limitation, I wanted to give them a try as they offered a calendar integration. So I created an automation to import GCalendar interactions to my new Airtable.
Here are the steps:
- Create a new Interactions table with the following rows: Date, email, & name.
- Connect your GCalendar account
- Set up the following calendar trigger:
When an event is created
- Set up the following action:
- And match data from the calendar event to the rows. … and run a test to see if it works!
Nice! As you can see, data appeared but all the attendees to the meeting are in the same box, whereas I would have wanted them to be in separate boxes. This is because we’re doing No-Code.
Funnily, this problem reminded me of when I actually built the calendar integration for our own personal relationship management app. If this was in python, I would have created a simple
for loop to iterate through the attendees, but this is not going to work here.
Unfortunately, this means that I won’t be able to reproduce Nat.app’s calendar integration in Airtable. But calendar events are a hard thing because one calendar event can have 0 to 100 attendees.
Let’s instead try to build a Gmail integration using Zapier + Airtable. Email data is nicer because there is always a single sender.
Building a Gmail integration using Zapier + Airtable
Zapier offers an integration with both Airtable and Gmail, so I can use it as a bridge between the two apps I want to integrate.
Because the behaviour in the case of a sent email is different than a received email, I will need to create two Zaps:
- Received an Email
- Sent an Email
Everything is straight forward this time, I connect the dots:
And finally, test the integration in Airtable:
This time, the data is correct!
Now that my Gmail interactions are flowing in correctly, it’s time to use this data to build up the actual tables that show me my contacts and who I’m losing touch with.
Fun fact, our actual infrastructure works similarly
Zapier pricing makes the Personal CRM impossible
On the free plan, Zapier allows 100 Gmail messages to be imported by month, after a quick check, I realised that I get around 1’500 emails per month, which puts me on the 40$/mo plan.
When you add the Zap for the calendar integration as well as a Zap to keep in Sync with Google Contacts, you land somewhere between their 50/mo and 90/mo plan.
Though considering that you still need to build everything around it, and you still haven’t paid for Airtable.
Historical integration is not an option
In addition to the above-mentioned issues, all of the options that I explored above don’t offer a history sync, which means that even if you manage to get the automation running, it will only start working from now on and all your past email & calendar data won’t be accessible.
This is a major drawback as most of us have years of useful data already available.
Don’t try to build your own Personal CRM if you want automations This is the basic summary of this experiment. The only way to make a homemade personal CRM work is to input all the data manually.
If you want instead to rely on automated data entry solutions, try out our app for example: nat.app