Hi @pauljlange —
First, I'd be curious about which CRM you're using. Some have a function that will handle the duplicate checking automatically when the contact is added. One example that comes to mind (since we work with it often) is Infusionsoft. Their standard Zapier integration actually allows you to configure duplicate checking and add or update the lead (depending upon whether it already exists or not) within one Zap step.
If the CRM you're working with doesn't have a capability like the one I described, it may allow you to run a "Search step" which you could use to check for the contact before proceeding. You could then use Paths to set up conditional logic for how to proceed based upon the results of the search step (i.e. Path A adds the contact if it wasn't found in the search step, Path B updates the contact if it was found).
If you always want to execute the same functions next, you could build one Zap to execute the next steps for each. This probably gets more to the heart of your question. Your "next steps" Zap should begin with a Webhook trigger, and then at the end of each of your Paths, use Webhooks by Zapier to send a webhook to the URL that is the Trigger Step for your "next steps" Zap. The webhook step at the end of each of your "paths" would need to pass appropriate data (e.g. Contact ID for your CRM plus any specific data points that your "next steps" Zap might need to refer to) which will then be received by the Webhook at beginning of the "next steps" Zap. From there, you can add whatever actions you need, and you don't need to worry about always maintaining multiple copies of the same steps.
You could also use a Google Sheet like you mentioned, but the Webhooks are a little cleaner — at least the way I look at it. You're not pushing data out of Zapier and then bringing it back in — at least not in as complex a manner.
I hope this makes sense! By all means let me know if I muddied the waters for you here. I'd be happy to clarify.
Cheers!