This is part 1 of the Flywheel litepaper. Part 2 can be found here.
Humans have advertised since they were able to write and print words.
The walls of Pompeii, a Roman city destroyed by the eruption of Mt. Vesuvius in 79 AD, featured political ads urging passers-by to ‘elect Marcus Epidius Sabinus senior magistrate with judicial power, a most worthy young man’ (among other often more vulgar pronouncements). Thomas Caxton, who brought the printing press to the British Isles, printed an ecclesiastical guide to the Christian calendar Ordinale ad usum Sarum in 1476, immediately followed by an advertisement announcing where it could be bought.
Thus far Web3 has homebrewed various advertising-like channels to grow users: airdrops, which leverage permissionless sending to buy loyalty and user attention; quests, which incentivize users to perform transactions; NFT mints, which, like early Facebook likes, are a fleeting, low-friction ways to express brand affinity. Much is made of these channels’ ability to pay both users and creators for their actions.
Such novel schemes however—leaving aside their actual marketing efficacy1—disregard the real utility of advertising in the digital economy. It’s not all about acquiring new buyers for an ecommerce shop or players for new game: it’s about underwriting the consumer experiences that make online (or onchain) an inviting place to be to begin with. In short, it’s really about paying for the Internet.
If Web3 consumer apps reject the ick of advertising, those apps may well amount to little more than a wall of thinly-veiled advertising, extracting more and more value from more and more ‘users’ who are themselves farming the arrangement. In high-mindedly rejecting advertising (while in fact embracing its more rudimentary forms), Web3 risks becoming nothing but a billboard for pumps and grifts of various flavors2. What would pay a creator more: a referral program that depends on viral organic distribution, or a proper ads system that shares revenue with a publisher or creator?
More practically, an ecosystem of builders and users cannot survive without a scalable machinery to turn money into attention, and that resulting attention back into yet more money via users paying for real products. It’s the biggest frustration we’ve heard from Web3 growth teams using Spindl for measurement: I’ve run the two or three basic growth playbooks—web2 ads, a referral program, ongoing quests—what do I do now to grow even faster? What exists now simply isn’t enough.
On the publisher side, the long-suffering mods of Discord and Telegram channels are finding that ‘community’ doesn’t pay the bills: they too deserve to monetize the audience they’ve attracted and curated. Wallet apps like MetaMask and Rainbow are also trying to monetize beyond mere swap fees. Once the trading apps of crypto, the wallets are fashioning themselves into portals of the onchain world, with both organic and paid discovery (AKA ads) featured in newly-launched ‘explore’ tabs and dapp ‘stores’ (Flywheel is powering some of them).
As revenue from swap fees plateau and wallets become more commoditized, their builders realize they must find other business models for the user attention they’re garnering. Similarly, clients building on social protocols like Farcaster are realizing it’s not cheap to maintain a free tier for their apps, both due to protocol fees and server costs. They too must make a buck from users.
This is an inverse coincidence of wants: publishers have attention but want money; developers have money but want attention. Thus far, nobody seems to be coordinating this natural two-sided market into an actual onchain protocol.
That’s why we’re building Flywheel.
From spindl(e) to flywheel
Just about every Web3 marketing trick is a reboot of a Web2 one: quests are the new ‘offerwalls’, points systems are the new frequent-flyer programs, and airdrops are rebate programs (if money were free).
Flywheel can similarly be analogized to the programmatic Web2 ads world, whose high-level contours look like this:
Simply put, publishers and advertisers exchange money for attention via intermediaries which represent the interests of each side, along with a neutral(ish) arbitrator known as ‘attribution’. Each intermediary provides value to their respective partner: the PubCo (or ‘SSP’) serves ranked ads and aggregates demand across advertisers3; the advertising partner (or ‘demand side partner’) provides an ads-management UI, targeting functionality, and reach across many publishers. In programmatic ads systems like Google’s, the market landscape is actually organized roughly into this configuration.
Let’s look at the protocol in more detail:
Flywheel mirrors the same functional relationships as Web2, but puts much of the necessary state onchain, though not most of the actual ad-serving logic (which is necessarily very real-time and client-side). Everything the publisher side needs to run an ad is contained in the advertiser smart contract that stipulates the desired onchain conversion rates, their value either in CPA or CPV, and ancillary configurations like which attribution provider to use.
In theory (if not fully in practice), a publisher can permissionlessly index the blockchain for Flywheel smart contracts and run whatever ads they like. The system is permissionless, and there’s little incentive to commit impression or click fraud as the advertiser will only pay for onchain actions.
The advertiser’s actual experience for running a campaign looks almost exactly like what it does in a conventional ads system; our growth marketers have compared the UI to that of The Trade Desk (a large public DSP) or even Facebook (shocking given the background of Spindl’s CEO and CTO).
What conversion event do you want to target?
How much are you willing to pay for it?
Who’s your ideal user to target?
Hit ‘go’ and (behind the scenes) the smart contract is written onchain and the flywheel (pun intended) starts spinning. The only sign the marketer is on the blockchain is adding funds to the ad budget (which are necessarily a wallet transaction). The Web3 marketer’s budget, like their users, are onchain and they need to use tokens to pay for ads: nobody here wants to shovel fiat at Google and Facebook (or even can; content policies often forbid crypto advertising).
The setup on the publisher side is sparser, as all the buy-side needs to know is the publisher’s wallet address for payment, as well as basics like acceptable ads formats. The offchain publisher setup with ad serving is a bit more involved, but irrelevant to the protocol. While publishers are theoretically incentivized to broadcast just how many high-value users open their app, in reality, user pushback will keep them from (likely) broadcasting much in the way of even aggregate ads delivery data like impressions counts (but, who knows?, the vibes here are already changing).
The publisher and advertiser setup is mostly a way of sharing the necessary state to run a performance-driven ads system. While some of that state is dynamic, e.g., the smart-contract balance is the campaign’s remaining budget, stateful information is mostly absent despite the dynamic nature of an ads campaign. The ‘what happened in the world?’ data lives exclusively inside the attribution data written onchain by the third third party in this triangle: the attribution partner. That data plays a critical role in joining the left and right-hand sides of our diagram above into a monetization flywheel (pun intended). Without it nothing works, and it’s worth pausing to discuss why.
Why attribution?
What is attribution exactly? There are almost as many definitions as companies who claim to do it in crypto, and yet the definition in the Web2 world is quite clear. Attribution is the logic around how you decide which of the various media a user interacted with led to revenue, and just how much revenue. A heuristic for telling if something is attribution is if it actually decides between which of two channels to pay for an acquired user (and how much). If it doesn’t do that, it’s some form of analytics or bookkeeping, but it isn’t attribution by the lights of most marketing practitioners.
Usually what’s actually going on (at best) is that a UTM-style parameter from the inbound URL is written onchain as a field in the transaction. This is how almost every referral program on Web3 works, but it’s not in fact ‘attribution’ by the traditional definition of the word. If the Web3 attribution problem were as simple as writing tags onchain, then simply looking at a referring UTM in a Web2 link would have been enough to solve the attribution problem there, but that sure isn’t how monetization in Web2 works.
Take for example an attribution study we did for quests run during the first Base Onchain Summer. Something like 63% of users who did quests, did both Layer3 and Galxe quests. Simple onchain attribution returns two sources for that user (some even did a Rabbithole quest, so now we’re at three).
Well? Who wins there? Because the marketer sure isn’t paying twice (or thrice) for the same user (not if they can avoid it).
Simple onchain attribution isn’t quite nuanced enough to handle the real-world Internet where users are constantly careening among social media clicks, mobile experiences, and browser sessions, while churning out (and back into) various apps with which they have long-term but erratic relationships. The simplistic forms of onchain attribution we have today are good enough for marketers running essentially a single acquisition channel, but most marketers are already well beyond that.
Once Web3 marketers run several channels at once—and that’s already happening—a Dune dashboard provided by the channel (which has no incentive to be truthful) simply won’t be good enough. It also doesn’t satisfy marketers who very much want to pay to acquire only new users in this campaign, and don’t really perceive their marketing goals as atomic transactions uncoupled to any larger user journey or lifetime value.
Lastly, the advertiser shouldn’t trust any attribution presented to them by the publisher or the marketing channel itself. The attribution platform ultimately works for the advertiser as their trusted oracle for the mess of data that results from multi-channel marketing; it’s the only party fully on their side who has no explicit stake in the success of a marketing campaign. They are there but to count and nothing more.
As a more practical matter, a single kickback on a single transaction—what goes on in the bounty-style referral fee of most programs—may not add up to much in the end. The juicy revenue model here is a fraction of the total lifetime value, the LTV, which in Defi can be north of a thousand dollars per user (see chart above).
In Web3, DAUs are low, but LTVs can be high: it would be remiss to not pass some of that value to publishers. For that reason, a publisher kickback as a function of the total lifetime value is a far more remunerative way to run an ads system than simply piecewise micro-bounties for every action. For that, you need sticky attribution that tabulates user value and accrues it to the correct source. This is how we pay the server fees for a billion people onchain.
Tomorrow we’re dropping part two of our litepaper, which discusses the headless nature of distribution mechanisms like airdrops and quests, as well as that ever-present question: user privacy.
If any publishers or advertisers (or ads buyers like agencies or marketing platforms) would like to discuss more: reach out!
For more Web3 marketing takes:
Some of these quests pay users $1 to do an action that costs users $2 to perform, which doesn’t exactly scream ‘scalable unit economics’. The only way any of this works is if users are effectively betting on receiving a token airdrop, a marketing budget conjured effectively out of thin air. Additionally, the users who are willing to do non-trivial things for small bounties are not in fact the ‘users’ most marketers wish to reach: Defi projects want to reach the top perps traders with million-dollar wallets, not the guy willing to jump through onchain hoops for a few bucks.
This simultaneous hate of ads along with wonderment at sluggish Web3 consumer adoption, reminds me of a joke Michael Caine makes to Clive Owen in the 2006 post-apocalypse film Children of Men, whose premise is humans can no longer reproduce:
Caine: The Human Project gives this great big dinner, with all the scientists and sages…tossing around theories around the ultimate mystery of why can’t we can’t make babies anymore?
Some say it’s a genetic experiment, gamma rays, pollution…same old, same old.
In the corner, there’s this Englishman sitting…hasn’t said a word, and is just tucking into his dinner.
They decide to ask him: Well, why do you think we can’t make babies anymore?
He looks up at them as he’s chewing on this great big wing, and says: “I haven’t the faintest idea, but this stork I’m eating is quite tasty.”
Current Spindl partners Collab.land and Daylight are good examples of this: Each of them serves ad creatives inside their respective publishers (Discord servers, or a series of wallets, respectively).
Best