Hey Dan,
In terms of organizing the tree: There's definitely more than one way to skin this cat, but here's how we do it.
First off, for pure channel reporting, every Lead Source has it's own First Touch Attribution (FTA) program that is solely intended to track success of those channels at a high level:
FTA membership is based on a
Segmentation. The Segmentation uses the Lead Source field and other rules for organic/direct leads so we bucket everyone as accurately as we can. There is a central campaign (in FTA Administration) that assigns leads to an FTA program based on segment, then each of the FTA programs above has a smart list that changes program status for leads who are its members.
To report on specific campaigns within those channels, as well as our various content and nurturing assets, we have Acquisition and Engagement Programs, of which there can be many.
Some of these programs are purely for tracking purposes (track membership/success only) while others are programs that "do stuff" and have assets, create tasks, send emails, etc.
For acquisition programs, membership is determined by a combo of different things but usually is keyed off a field we have called "Lead Source Notes" which populates from a querystring parameter and contains campaign-specific data.
Here's an example of the smart campaign that determines membership of one of our Direct Mail programs (this smart campaign lives within the DM program).
For success tracking, we have standardized program statuses for all channels which are tied to field called "Onboarding Stage". This field is controlled by a single Onboarding Nurturing program and tracks a lead from when they create a free account in our app until making their first purchase.
As that data value changes, all the other programs of which that lead is a member "listen" for it and then update the lead's program status in that program accordingly.
This ensures the lead's status stays up to date in all programs and makes maintainence easier.
Now there may be better ways to achieve your goals, but this gets the job done for us. It was a pain to set up so I would expect a bit of sweat before you arrive at attribution nirvana
🙂 Does this help at all with what you're trying to do?
Regarding your Trigger above:I'm not sure your trigger above is going to work since when a lead visits the page they are likely to be anonymous. So if someone comes to a page with the querystring "CID=social" then fills out a form, the trigger won't function retroactively.
I would suggest you capture the querystring to a field then use the data value change to trigger program membership upon registration.
Good luck!