What is your goal?
Hi everyone,
I’m trying to build a Calendly → Airtable automation and would appreciate advice on the simplest architecture.
Goal:
When a Calendly booking comes in:
Search Airtable by Email OR Additional Email.
If found:
Update the existing contact.
If the booking email is new, append it to the Additional Email field (Long Text).
Do not duplicate emails.
If not found by email:
Search by Full Name.
If found by name:
Update the existing record and append the new email to Additional Email (if not already there).
If no match by email or full name:
Create a new contact.
What is the problem & what have you tried?
Current setup
Calendly → Watch Events
Airtable Search by Email/Additional Email
Router
Airtable Search by Full Name
Router
Update Record / Create Record
I’ve also built an if() + contains() expression to append emails only when they don’t already exist.
My questions
Is this the simplest architecture, or is there a cleaner way with fewer modules?
Is there a better method than using two Airtable Search modules and multiple routers?
Is appending emails to a Long Text field the recommended approach, or would you model this differently in Airtable?
If you were building this from scratch, how would you design it?
I’ve attached screenshots of my current scenario.
Thanks!
Screenshots (scenario flow, module settings, errors)
Your architecture is logical but you can
simplify it significantly with one change.
WHY YOUR CURRENT SETUP IS MORE COMPLEX
THAN IT NEEDS TO BE:
Two separate search modules with multiple
routers creates branching paths that are
hard to maintain. You can collapse this
into a single search + aggregator pattern.
CLEANER ARCHITECTURE:
Step 1: Calendly Watch Events triggers
the scenario on new booking
Step 2: Use ONE Airtable Search module
with a formula filter that checks BOTH
email AND additional email in a single
query using OR() like this:
OR({Email} = “{{email}}”,
FIND(“{{email}}”, {Additional Email}))
Step 3: Use a single Router with two
paths — Record Found / Record Not Found
Step 4: On Record Found path — use
Airtable Update Record with your
if() + contains() expression to append
email only if not already present
Step 5: On Record Not Found path —
add a second Search by Full Name,
then another router for Found/Not Found,
then Update or Create accordingly
This cuts your module count by 30% and
keeps all email logic in one place.
ON YOUR AIRTABLE DATA MODEL QUESTION:
Long Text for Additional Email works but
gets messy at scale. A cleaner approach
is a linked Emails table with one record
per email address linked to the contact —
makes deduplication much simpler with
native Airtable formulas instead of
string manipulation.
you can collapse this into one search instead of chaining duplicate search modules. in the airtable search use a formula filter that checks both fields at once, something like OR({Email}=‘calendly-email’, FIND(‘calendly-email’, {Additional Email})). that returns the record whether the match is in the primary email or buried in the additional-email text, so you don’t need separate searches.
then a router with two routes off it: found a record, go update. found nothing, second search by full name, route that one the same way, found = update, nothing = create.
for appending the new email without duplicating, before you write run an IF that checks whether the long-text already contains that email (FIND again), already there you skip, if not you set the field to old value plus a separator plus the new email.
keeps it to two search modules total and no duplicate emails. happy to sketch the exact setup if you want, the OR-formula search is the piece that makes it simpler.