← All news

Advertising on Seldeo: how we think about it

Why we advertise

Seldeo is a private company with a small team and a large ambition — a calmer social network that persists for decades, not one that flips in three years. Getting to that future means having a durable revenue model that doesn't require selling out the reasons the product exists.

Advertising is one part of that revenue model. We chose it over the two main alternatives — a paid subscription and data-brokerage — for pragmatic reasons:

  • A paid subscription works well for a small, technical audience but fails as a growth strategy for a mass-market social product. The people we most want on Seldeo are the ones least likely to pay a monthly fee.
  • Data-brokerage is the fastest way to lose your users' trust and, in most jurisdictions where we care about our legal footing, is not actually available to us. Selling personal data was never on the table.

Ads it is. The rest of this post is how we make sure ads work on Seldeo without turning Seldeo into the thing we're trying not to be.

Where ads appear

Ads on Seldeo appear in exactly three places, all inside the mobile app:

  • Native feed cards. Between organic posts in the friend feed. Six per 21-post scroll segment, at fixed indices. Every one is labelled "Sponsored" with an AdChoices control.
  • Story ad slides. Between story bundles in the story viewer. No more than one per eight organic slides. Shaped like organic slides — full-screen, portrait, tap to advance — with a persistent "Sponsored" chrome.
  • In-stream video ads. Before video posts longer than 60 seconds. Skippable per VAST skipoffset (typically 5 seconds for our own line items). Pre-roll only; no mid-roll ads on user-generated video. Companion end cards when the advertiser provides one.

That is the whole list.

Where ads do not appear

  • On the corporate website. seldeo.com is ad-free. The advertising described in this post is only inside the mobile app.
  • On memorial pages. No ads render on any page associated with a memorialised account. Ever.
  • On under-18 accounts. Ads served to under-18 accounts are personalisation-off and use age-appropriate inventory categories.
  • In direct messages. No ads in the DM UI. Not a banner, not a card, not a promoted contact suggestion.
  • In the notification channel. No promotional pushes. See Notifications, restrained.
  • On the login screen or the sign-up flow. No prompt for a product recommendation before the user is even signed in.
  • As "recommended posts" that blend into the feed. No algorithmic surfacing of sponsored content dressed up as organic.

Consent, region, and identifiers

Advertising on Seldeo runs through Google's Ad Manager, Google's AdMob (as a mediation source), and Google's IMA SDK for in-stream video. That stack is gated by a consent layer:

  • In the EEA, UK, and Switzerland, the Google User Messaging Platform (UMP) prompt runs on first launch. No personalised ads fire until UMP resolves. If consent is denied, ads still fire but with npa=1 (non-personalised).
  • In the US, personalised ads default to on for accounts 18 or older. The "Do Not Sell or Share" (California) and equivalent state signals are honoured.
  • On iOS, Apple's App Tracking Transparency prompt applies. Declining the ATT prompt removes the IDFA from the ad request; ads continue with a device-scoped signal only.
  • Under-18 accounts everywhere, ads are non-personalised and use age-appropriate inventory categories with tfua=1 (tag for users under the age of consent).
  • In every region, users can turn off personalised ads from Settings → Privacy → Personalised ads at any time. Turning them off makes the account behave as if UMP consent had been declined.

Full detail lives in Regional privacy and the Privacy Policy.

Frequency capping

Ad frequency on Seldeo is capped through server-side rules in Remote Config. The floor values are:

  • Feed native cards. No more than 6 per 21 organic posts. This is enforced by the paginator, not the ad server.
  • Story ad slides. No more than 1 per 8 organic story slides.
  • In-stream video ads. No more than 2 pre-roll ads per 30 minutes per account.
  • Bumper ads. Non-skippable video ads (≤6 seconds) are used sparingly, no more than 1 per 60 minutes per account.

These caps are not the maximum we could serve. They're the maximum we're willing to serve. They can be tightened at runtime via the kill-switch layer if the numbers stop making sense.

The kill switch

Every ad surface has a runtime kill switch. Turning off _config/ads.enabled in Remote Config shuts down every ad surface — feed cards, story slides, video pre-rolls — within 60 seconds of the config push. Individual surfaces can be killed separately (_config/ads.feedEnabled, _config/ads.storyEnabled, _config/ads.videoEnabled).

We don't advertise this as a "you can turn ads off" feature. It's an operational backstop for the moment when we need to pull the whole thing down without a code deploy — a compliance incident, a policy failure, a wave of unusual inventory.

Ads inside the paginator

For readers who care about the mechanics: the friend feed already has an "ad slot" placeholder in its query layer. The paginator interleaves organic posts with ad-slot placeholders at deterministic positions. The renderer sees "this is an ad slot" and asks the ads package for a native ad widget. If the ads package returns nothing (no ad available, no consent, killed by config), the slot collapses and the feed re-flows. This means the feed never shows an empty ad card and never has a "loading" placeholder where an ad should be.

The story viewer follows the same pattern.

Attribution to creators

Currently, revenue accrues 100% to Seldeo Inc. There is no creator monetization layer on Seldeo yet. When we add one, the numbers will be reported publicly (in the Transparency Report or its ads-specific equivalent) and the payout mechanics will be documented before the first payout runs. The analytics pipeline is being built with per-video attribution as a first-class column so that creator payouts, when they arrive, are attributable and auditable.

The line we don't cross

Ads on Seldeo have a specific shape and stay in it. If we ever cross a line — a full-screen interstitial, an ad in the DM UI, a promoted post that blends into organic, an under-18 account served personalised inventory — that would be a bug, and advertising@seldeo.com is the right address to report it.

Full details on how the advertising SDKs are wired, including the specific SDKs and consent layers, are in the architecture posts on this feed and, once shipped, in the Help Center.