Inspector setting
Proxy URL sits under Advanced on the Purchases component.
SDK
To use RevenueDot in a Unity game, open the GameObject with the Purchases component, set the Proxy URL field to https://api.revenuedot.app and set Entitlement Verification Mode to Disabled. Unity has no public SetProxyURL method, so the Inspector field is the only way. The component applies it before it configures the SDK, also when you configure from code.
Free up to $10,000 a month in tracked revenue. Works with the RevenueCat SDK you already ship.
Proxy URL sits under Advanced on the Purchases component.
The field still applies when you configure from a script.
Purchases run on a device or simulator. The Editor uses a no-op wrapper.
using RevenueCat; keeps working with the planned fork.
Steps
Start free on Cloud and add an App Store app and a Google Play app, or a Test Store app for a first run.
Add credentials (App Store, Google Play), then products, a pro entitlement and a current offering.
On the Purchases component set Proxy URL to https://api.revenuedot.app, Entitlement Verification Mode to Disabled, and the Apple and Google API keys to your appl_ and goog_ keys.
Check Use Runtime Setup and call Configure from a script that runs after Purchases.Start(), as in the code below.
Call PurchasePackage and read customerInfo.Entitlements.Active.
Inspector
// Inspector: Purchases component → Proxy URL
// https://api.revenuedot.app | Inspector field | Before | After |
|---|---|---|
| Proxy URL (under Advanced) | empty | https://api.revenuedot.app |
| Entitlement Verification Mode | Informational | Disabled |
| Revenue Cat API Key Apple and Google | your keys | appl_ and goog_ keys from RevenueDot, or your RevenueCat keys if the importer kept them |
C#
The script must run after Purchases.Start(), which creates the native wrapper. Calling Configure before it throws a NullReferenceException. [DefaultExecutionOrder(100)] makes Unity call your Start() after it.
using UnityEngine;
[DefaultExecutionOrder(100)]
[RequireComponent(typeof(Purchases))]
public class Store : MonoBehaviour
{
void Start()
{
var purchases = GetComponent<Purchases>();
purchases.Configure(Purchases.PurchasesConfiguration.Builder.Init("appl_...")
.SetEntitlementVerificationMode(Purchases.EntitlementVerificationMode.Disabled)
.Build());
purchases.GetOfferings((offerings, error) =>
{
if (error != null || offerings.Current == null) return;
purchases.PurchasePackage(offerings.Current.AvailablePackages[0], result =>
{
if (result.UserCancelled || result.Error != null) return;
bool nowPro = result.CustomerInfo.Entitlements.Active.ContainsKey("pro");
});
});
}
} Fork
The fork lives at github.com/revenuedot/purchases-unity. C# namespaces and assembly names stay the same. It is not published yet (checked October 2026), and it cannot build a working app until its native dependencies are published, so use the Inspector setting today.
// OpenUPM
openupm add com.revenuedot.purchases-unity Notes
GetComponent<Purchases>().SyncPurchases() once on the first launch of the update.FAQ
Add the RevenueCat Unity plugin, set your store keys on the Purchases component, then fetch offerings and call PurchasePackage. A backend checks the receipts. With RevenueDot you fill the Proxy URL field and set verification to Disabled.
In the Inspector, on the Purchases component, under Advanced. Unity has no public SetProxyURL method. The component applies the field before it configures the SDK, also when you use runtime setup.
Your script ran before Purchases.Start(), which creates the native wrapper. Add [DefaultExecutionOrder(100)] to your script so Unity calls your Start() after the Purchases component's.
No. In the Editor the SDK uses a no-op wrapper and makes no requests. Run on an iOS or Android device or simulator, with a Test Store key in a debug build if you have no store account.
Get started
Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue, or move an existing RevenueCat app with one line of code.
Already have an account? Sign in · Prefer your own servers? Self-host free