Skip to content
Marketing Automation

Marketing Event Tracking Setup and Troubleshooting

Signups recorded in one tool never showed up in campaign reports. The funnel numbers didn't add up, so nobody trusted the metrics enough to act on them.

Industry

Small marketing team at a growing online business

Role

Systems consultant — tracking audit, webhook rebuild, verification tooling

Impact

The team went from arguing about which number was right to reading one trusted event log. Tracking issues now surface in minutes instead of at the end of a campaign.

01 - Problem

The problem

The team ran paid and organic campaigns into a Typeform signup flow, but the numbers never reconciled. Signups visible inside Typeform were missing from campaign reports; other days the reports showed more conversions than actual submissions. Every reporting cycle became a debate about which tool was lying, and decisions were made on gut feel.

The cause was structural, not one bug. Tracking had been bolted on in pieces over time, so the same signup could travel two paths into reporting — or none. The fix wasn't more automation on top; it was getting the data flow right underneath. The tracking had to be mapped, simplified, and made verifiable first.

02 - System Flow

How the system moves

  1. Signup submitted

    Typeform form completed

  2. Webhook fires

    Single Typeform webhook path

  3. Payload checked

    Event ID and required fields

  4. Duplicates filtered

    Dedupe against logged event IDs

  5. Event logged

    Google Sheets event log

  6. Verification view updates

    Real-time arrival tab

  7. Reports reconcile

    Counts match across tools

03 - Build

What I built

End-to-end tracking audit

I traced a single signup from Typeform submission to final report, documenting every hop. That surfaced the real problems: a legacy integration silently dropped events when a payload field was empty, and a forgotten connection re-sent the same signups, inflating counts on some days. The audit produced a map of every event path — the basis for what to keep and what to kill.

Rebuilt webhook tracking flow

I tore out the overlapping integrations and rebuilt on one webhook path: Typeform fires on submission, the payload is validated, and the event lands in a structured Google Sheets log with a unique event ID, timestamp, campaign source, and form name. Deduplication happens at entry, so retries and double-fires can't inflate the numbers. One path in, one log, one source of truth.

Live verification sheet

Trust needed more than a correct pipeline — the team had to see it working. I added a verification tab showing events arrive in real time, with status flags for missing fields and a daily count to check against Typeform's own numbers. It doubles as a lightweight reporting dashboard, handed over with a short runbook on each column and what to do when a count looks off.

04 - Impact

Business impact

  • Campaign numbers reconcile across tools, so the team stopped debating reports and started acting on the data.

  • Tracking problems surface in minutes on the verification sheet instead of weeks later when a report looks wrong.

  • What used to take an afternoon of cross-checking exports per campaign is now a glance at one event log.

  • The documented event map and runbook let the team diagnose most tracking issues themselves.

05 - Edge Cases

What had to be handled

  • Webhook retries and double-fires: every event carries a unique ID and is deduplicated at entry, so a re-sent payload updates the existing row instead of creating a second signup.

  • Test and internal submissions: entries matching internal email patterns or a test flag are logged but marked excluded, so they stay visible without polluting campaign counts.

  • Missing or malformed payload fields: the event is captured rather than dropped and flagged on the verification sheet — silently discarding incomplete events was a root cause of the missing signups.

  • Missed events during an outage: a daily count against Typeform's submission totals catches any gap, with a documented re-sync step in the runbook.

06 - Improvements

What I would improve next

  • Move the event log from Google Sheets to a proper database as volume grows, keeping the sheet as the team-facing view on top.

  • Add an automated alert when daily event volume drops well below the usual range, so a broken webhook gets noticed without anyone checking the sheet.

  • Extend tracking beyond the signup into activation and purchase, so the same trusted log covers the full funnel.