Was hoping to get some help here on when a user who has ever been in our system signs-up.
Here is the user journey:
The result: A duplicate lead in Marketo (because Marketo will always regard the CRM as 100% source of truth).
So I was wondering what the correct way / best practices way is to capture UTMs and attribute to a campaign on signup?
Disclaimer: Our signup form cannot send the UTMs to salesforce as the way it interacts with the back-end prevents it from communicating with Salesforce. This is an architectural consequence that will not be solved.
Any help here would be emphatically appreciated!
Your subject line seems at odds with the actual question.
If you must create a person in CRM (via an intermediate app), and you also must create a person directly in Marketo before that person in the CRM has synced over, then there's no game you can play with query params/UTMs to solve for that.
It's clearly at odds with the Marketo-CRM sync model, which is that one (and only one) side creates the person, the other side receives the new person request, always in a predictable order.
The best practice is to ensure the person flows in a predictable, error-free way from one side or the other. Since you say there's critical data that's only present in the UTMs, and those are currently dropped in the app-to-CRM leg, then the natural flow would be to create the person in Marketo, sync to CRM, then have the CRM sync to the app.
If you absolutely can't make such a change, then you need a lead auto-merge solution, something like RingLead or homegrown code called using a Marketo webhook perhaps.