oddly

What oddly catches in its own ad spend: the recursive marketing test.

Data 7 min read
Back to blog

If oddly's product cannot find real problems in oddly's own marketing spend, the product is not ready to find them in yours. The recursive test is the simplest credibility check available, and it surfaced three things this quarter that are worth writing down before the algorithm catches them again, the fix lands, and the case rotates out of the dataset.

Three concrete catches from the last 90 days of oddly's own paid spend, with the numbers, the algorithm call, and the resolution.

Catch 1: conversion tracking gap on the /pricing page

Setup: oddly runs paid spend driving traffic to /pricing for visitors at the consideration stage. The conversion event on /pricing is "started checkout" or "started onboard", served back to Meta and Google through server-side conversion APIs.

Algorithm flag: the conversion tracking diagnostic on the dashboard flagged that the Meta conversion API was firing 11 percent fewer conversions than the corresponding Google one for the same traffic window. The two should match within 2 to 3 percent (some discrepancy is expected due to attribution windows). 11 percent is structural.

Root cause: a deploy three weeks earlier had moved the /pricing page event hook from an inline script tag to a deferred bundle. The bundle was being blocked by a small percentage of users with strict ad blockers, but only on the Meta event firing path. The Google path was using a different bundle and was unaffected.

Resolution: server-side event was added back into the Meta path with a deduplication key on the customer's hashed email. The conversion gap closed within 7 days of the fix.

Lesson: even with a server-side API, a deploy that touches the client-side firing path can quietly skew attribution. The algorithm caught it because the cross-platform sanity check is built in. A merchant running this manually would have needed to notice that Meta CPM was rising without an obvious explanation, which is a much weaker signal.

Catch 2: retargeting overlap on the Operator audience

Setup: oddly's Meta retargeting audience targets visitors to /pricing, /faq, and the case study pages. The hypothesis is that these visitors are mid-funnel and the retargeting closes them.

Algorithm flag: the cross-channel reallocation algorithm flagged that branded Google search spend was at 19 percent of total blended spend, and Meta retargeting on the Operator audience was at 22 percent. The cohort median for marketing analytics platforms (a small cohort, but the only one available) suggests the combined retargeting plus branded surface should be under 30 percent of total spend, not 41 percent.

Root cause: the same warm audience was being retargeted on Meta and capturing the conversion on a branded Google click. Classic duplicate-purpose pattern.

Resolution: Meta retargeting was capped on a 7-day site-visit window instead of the previous 30-day window. Branded search caught the longer-window conversions and the overall blended ROAS improved from 2.4 to 2.9 within 21 days. The total spend held flat because the algorithm only ever proposes decreases on Meta; the reallocation was a cap, not a redirect.

Lesson: the duplicate-purpose pattern is not theoretical, it shows up on oddly's own marketing. The algorithm caught it because the benchmark cohort gave the comparator. Running this manually requires the operator to know the benchmark, which is the surface oddly is trying to commoditise.

Catch 3: content gap on myoddly.com that the algorithm could not solve

Setup: oddly's organic traffic comes from a mix of blog posts and comparison pages. The content-gap algorithm (ranked search-term aggregation across Google Search Console and competitor coverage) flagged three primary queries with thin coverage.

Algorithm flag: position 14 for "marketing intelligence shopify", position 23 for "marketing ops shopify", position 41 for "shopify reallocation tool". Top 5 capture moves the volume by 5 to 8x. Estimated incremental monthly clicks if all three move to top 5: 1,800 to 2,400.

Root cause: the blog has volume on Google Ads and Meta topics but thin coverage on the specific "marketing ops shopify" framing and the "reallocation tool" framing. The content moat is not yet wide enough.

Resolution: this is a marketing problem, not an algorithm problem. The algorithm cannot write the content; it surfaced the gap. The operator wrote three additional posts (this one included) addressing the gaps. Whether the move to top 5 lands within 60 days is a function of indexing speed and domain authority, not algorithmic action.

Lesson: the algorithm is a diagnostic, not a fix. It tells you where the gap is and the magnitude. The operator closes the gap. This is the right division of labour and it is the only one that survives more than a quarter.

What this means for any operator

If a product can find three real, fixable problems in its own founder's marketing inside 90 days, the product is doing work. If it cannot, it is a dashboard for vanity metrics.

The recursive test also reveals what the product cannot do. The content gap could not be closed by the algorithm. The conversion tracking gap was fixed by a developer, not by a recommendation card. The retargeting overlap was acted on by a human operator clicking a one-tap cap. The algorithm proposes; the operator decides. That division of labour is the entire product.

If oddly does not work for oddly, it does not work for you. The three catches above are the only useful credibility statement.

What oddly does about this

Connect your ad accounts on Watch tier free. The conversion tracking diagnostic, the duplicate-purpose detection, and the content-gap algorithm run on every connected account. The reallocation card and the content-gap deep dives unlock on Nudge and Steer. The numbers from our own brands are at /proof; the case studies cover the catches above in more depth.

See what oddly can find in your marketing data

The same diagnostics that caught these three gaps on oddly's own spend run on every connected account.

Start free
Back to blog