Every affiliate deal introduced a new file layout, a new delivery method, and a new set of business rules. A single reader click could trigger several payouts, for example when the reader engaged with multiple brands or when a revenue-share deal paid differently depending on the product chosen. Refunds arrived as negative revenue. Some click IDs came back malformed. Without a consistent way to join partner payouts to on-site behavior, the client’s teams could not reliably answer the questions that drive spend: which pages, placements, and traffic channels generate revenue, and which paid campaigns earn back what they cost.
The pressure was rising. Across digital publishing, search traffic was contracting and advertising budgets were tightening, which made every affiliate dollar matter more. Paid search bidding needed conversion revenue fed back to the ad platforms to optimize. The lifecycle marketing team needed conversion events to retarget readers. Integrating partners one at a time with limited in-house capacity meant each new partnership added to a backlog rather than to revenue visibility.
Zimetrics joined the client’s data organization as a dedicated data warehouse and BI engineering team, working alongside its in-house developers. The first assignment was a single revenue attribution report for the insurance vertical. Rather than treating it as a one-off dashboard, Zimetrics used it to set the pattern every later partner would follow: the click ID generated when a reader leaves the site becomes the key that joins GA4 behavior to partner payouts in Google BigQuery.
Each partner then moves through the same five-stage path: ingest the raw conversion data, map it to the client’s internal values, model it for reporting, model it as events for lifecycle marketing, and model it for paid search automation. Partners whose data includes personal information go through legal review before ingestion.
Zimetrics also challenged assumptions that would have skewed the numbers. The business initially asked for negative revenue to be ignored; the team’s analysis showed that dropping refunds left revenue inconsistent, so negative values were retained. Where one click produced several payouts, revenue was summed by partner and product rather than de-duplicated away. Clicks without a valid ID were labeled UNKNOWN and reported in a separate view instead of being discarded, so reported totals stay complete.
To keep pace with a steady stream of new partners without growing the team in step, Zimetrics built Claude into the team’s daily work inside the client-provided Cursor editor, writing its own rules on what Claude may assume and a human engineer accountable for every change that reaches production
Zimetrics engineers work with Anthropic’s Claude Opus and Sonnet models inside Cursor, the AI code editor the client provided, using Claude for coding, analysis, and debugging. Every task starts with a plan before any code is written. When a new partner arrives, engineers ask Claude to draft the ingestion pipeline from the existing code base and its conventions; an engineer then verifies it, tests it, and deploys it manually. The team estimates a new partner pipeline now takes about three days to build, down from about ten.
Rules as guardrails: Team-defined rules, enforced at the editor level, tell Claude not to assume anything, to read the code base first, and to follow the team’s coding conventions. A security rule file is attached to every session, credentials live in a secret manager, and code is checked for hardcoded values.
Connected context: Through MCP servers, Claude queries BigQuery directly, so engineers can ask how many records a partner feed ingested yesterday and get the answer in three to five minutes instead of about twenty in the BigQuery console. Jira is connected the same way, so Claude can check whether code up for review meets the ticket’s acceptance criteria.
Accountable review: Automated AI code review in Cursor runs alongside manual review, and reviewers expect every developer to explain the code they submit, whoever drafted it.
GA4 event data streams into BigQuery. Partner data is loaded through Python loaders and Fivetran, and dbt models turn both sources into fact and dimension tables, with dbt’s built-in tests checking data quality on every run. Apache Airflow orchestrates the dbt models, BigQuery jobs, and www.zimetrics.com | 6 notifications. To stay stable as partners change their feeds, models fail on unexpected schema changes rather than write inconsistent data downstream, and re-runs delete and repopulate a date range so results are repeatable
Intermediate event layer: An unnested GA4 events table sits between raw and modeled data, cutting GA4 processing time by about 20%.
Partner loader rebuild: The shared loader was rebuilt for modularity, logging, and extensibility, delivering a 60 to 75% performance gain.
Security readiness: The team completed SOC 2 readiness groundwork for the warehouse and strengthened authentication on its ETL connections.
Clean conversion data does not stop at the warehouse. Hightouch sends click-level revenue back to Google Ads so bidding algorithms optimize toward campaigns that earn revenue, not just clicks, and Blueshift receives conversion events for email, SMS, and ad retargeting. For one insurance partner, Zimetrics integrated Everflow in place of GA-based click tracking, which was losing about 30% of click data. Everflow now verifies revenue from BigQuery against event data before it reaches Google Ads.
Zimetrics designed a data QA guardrail framework that checks partner feeds daily and alerts the relevant stakeholders when data is missing or out of pattern. Adoption took a real incident. When a weekend change by one of the client’s product teams caused a revenue dip, the framework caught it and sent the alert, but it went unread until the following week. After that review, the client’s teams began treating the alerts as operational signals, and Zimetrics redesigned the alert content around their feedback. Issues that once sat unnoticed for two to four days are now picked up and acted on daily.