ML‑driven ad unit optimization for MAX

We pick the best ad unit per user & context to maximize eCPM and ARPDAU. Plug‑in SDK. No changes to your ad request logic.

  • Works with AppLovin MAX
  • Android & Unity today
  • iOS coming soon
Performance pricing: No uplift, no fee.
Typical uplift (illustrative)
eCPM
ARPDAU
0
Engineering rework

Impact is app/geo dependent. We validate with a built‑in holdout.

How it works

1

Drop‑in SDK

Initialize Orivia after MAX and before requesting ads. Default ad unit IDs are your safe fallback.

2

Ad unit choice per init

Your app asks Orivia which ad unit to use. We return the best option based on context and our models.

3

Continuous learning

We run controlled experiments to learn what works. Roadmap includes direct floor optimization.

2‑step integration

Initialize MAX, then initialize Orivia. That's it. Load/show ads the same way you do today.

/* Initialize MAX */
val initConfig = AppLovinSdkInitializationConfiguration.builder(MAX_SDK_KEY)
    .setMediationProvider(AppLovinMediationProvider.MAX)
    .build()

AppLovinSdk.getInstance(context).initialize(initConfig) {
    // MAX SDK initialized
}

/* Initialize Orivia (any time after MAX init, but before requesting ads) */
OriviaSdk.getInstance(context).init(
    OriviaSdk.Config(
        publisherId = ORIVIA_PUBLISHER_ID,
        defaultBannerAdUnit = BANNER_AD_UNIT_ID,
        defaultInterstitialAdUnit = INTERSTITIAL_AD_UNIT_ID,
        defaultRewardedAdUnit = REWARDED_AD_UNIT_ID,
        dataCollectionOnly = false // optional, false by default
    ),
    initListener = object : OriviaSdk.InitListener {
        override fun onInitCompleted() {
            Log.d("OriviaSDK", "Orivia SDK initialized.")
        }

        override fun onInitFailed(exception: OriviaException) {
            Log.e("OriviaSDK", "Orivia init failed: ${exception.reason}")
        }
    }
)
// Orivia is ready immediately after calling init. If no config is loaded, default IDs are used.
/* Initialize MAX */
AppLovinSdkInitializationConfiguration initConfig = AppLovinSdkInitializationConfiguration.builder(MAX_SDK_KEY)
    .setMediationProvider(AppLovinMediationProvider.MAX)
    .build();

AppLovinSdk.getInstance(context).initialize(initConfig, config -> {
    // MAX SDK initialized
});

/* Initialize Orivia (any time after MAX init, but before requesting ads) */
OriviaSdk.getInstance(context).init(
    new OriviaSdk.Config(
        ORIVIA_PUBLISHER_ID,
        BANNER_AD_UNIT_ID,
        INTERSTITIAL_AD_UNIT_ID,
        REWARDED_AD_UNIT_ID,
        false // dataCollectionOnly
    ),
    new OriviaSdk.InitListener() {
        @Override
        public void onInitCompleted() {
            Log.d("OriviaSDK", "Orivia SDK initialized.");
        }

        @Override
        public void onInitFailed(@NonNull OriviaException exception) {
            Log.e("OriviaSDK", "Orivia init failed: " + exception.getReason());
        }
    }
);
// Orivia is ready immediately after calling init. If no config is loaded, default IDs are used.
// Unity
OriviaSdk.Init(
    publisherId: OriviaPublisherId,
    defaultBannerAdUnitId: BannerAdUnitId,
    defaultInterstitialAdUnitId: InterstitialAdUnitId,
    defaultRewardedAdUnitId: RewardedAdUnitId,
    dataCollectionOnly: false, // optional, false by default
    initListener: new SimpleInitListener() // optional
);

// ...

internal class SimpleInitListener : IInitListener
{
    public void OnInitCompleted() => Debug.Log("Orivia SDK initialized.");
    public void OnInitFailed(OriviaException ex) => Debug.LogError($"Orivia init failed: {ex.ErrorReason} — {ex.Message}");
}

Works with AppLovin MAX mediation. “MAX” is a trademark of AppLovin.

Why Orivia

Revenue first

We chase incremental revenue, not vanity metrics. If we don’t deliver uplift, you don’t pay.

Low‑risk rollout

Traffic splitting with a built‑in holdout makes impact measurable and reversions trivial.

Future‑proof

Built for a world of signal loss. Roadmap includes direct floor optimization once available.

Pricing

Performance
Pay from uplift only
  • No setup fees
  • No long‑term lock‑ins
  • Transparent reporting
Start a pilot

Translation of our promise: No uplift, no fee.

Team

SR
Co‑founder & CEO
LinkedIn →
DS
Co‑founder & CTO
LinkedIn →

FAQ

What formats do you support?

Interstitial, Rewarded, and Banner on Android & Unity today. iOS support is on our roadmap.

Is this safe for production?

Yes. If no config is returned, the SDK falls back to your default ad unit IDs. Your monetization logic for loading and showing ads does not change.

How do you measure uplift?

We recommend running with a built‑in control holdout, then comparing ARPDAU across comparable traffic slices (e.g., by country and format). We share transparent reports so you can validate the gain.

Do you change floors?

Today we optimize via ad unit selection. Direct floor optimization is in development and will be available once platform support allows.

Get in touch

Interested in a pilot? Reach out and we’ll set up a quick technical check and a launch plan.