Custom Solution · 2026
Ad Spend and Attribution
Where the sign-ups came from, and what each one cost
The module that answers the only question anyone actually asks about advertising: did it work. Google and Meta spend joined to the sign-ups those clicks produced, with cost per acquisition and return on spend coming out of the same table rather than out of two dashboards that disagree.

- Channels attributed
- 4Channels attributed
- Ads change set
- Two-phaseAds change set
- Cohort maturity
- 14 daysCohort maturity
The problem
Ad platforms report on themselves. Google claims the conversion, Meta claims the same one, and between them they have sold the business more customers than it has. Anything that settles the argument has to attribute the sign-up on the business's own side, from data the business owns.
What got built
Attribution starts in edge middleware: click ids and utm parameters land in a first-party cookie scoped to the registrable domain, so a visit survives the hop from the marketing site to the app. When a new account is provisioned, that snapshot is written onto the organization with a derived channel key, and every figure downstream groups on it. Capture is last non-direct touch, which is how the ad platforms attribute their own clicks, so at least the comparison is like for like.
Details worth naming
- A first-party cookie written at the edge, scoped so the marketing-site to app hop does not lose the click.
- Conversion rates read from a mature cohort only, at least fourteen days old, so this week's trials do not drag the average down.
- Demo accounts, seeded rows, and the internal organization are excluded from every figure on the page.
- The Google Ads audit runs in two phases: one pass reads the account and writes a proposed change set to a file, a second applies exactly that file. Nothing is re-derived at apply time, so a stale file applies stale changes rather than quietly doing something else.
- Server-side conversions through the Meta Conversions API, so the signal reaches the ad account whether or not the browser pixel fired.
- Estimates are labelled as estimates. The module does not mirror the payment processor's invoice history, and it does not pretend to.
Next project
The CMS Block
One newsroom, installed in three sites
The next thing your business runs on starts here.
Tell us what it needs to do. Within a day you will have a straight answer on what it takes to build, what it costs to run, and what we would cut. If the honest answer is that you do not need to build anything, that is the answer you get.
Or skip the form entirely. hello@pinelandtech.com reaches a person, not a queue.