/v1/apps/:id/... and use your admin token instead of an Appeeky API key.
Self-hosting covers the analytics server and its own dashboard. Features that live in Appeeky, such as ROAS with Apple Search Ads spend, the Appeeky Alerts bot and the reuse of your Appeeky RevenueCat webhook, are only part of the hosted service.
Requirements
- Node 20 or later
- A Cloudflare account. The Workers free plan is enough to start.
Deploy
1
Create the database
database_id that d1 create prints into apps/worker/wrangler.toml.2
Set secrets and deploy
https://appeeky-analytics.<you>.workers.dev. You can put it on your own domain under Workers → Settings → Domains & Routes.3
Open the dashboard
Open
https://<worker>/ and sign in with your ADMIN_TOKEN. The token is kept in that browser’s local storage until you sign out.4
Add an app
publishableKey (apk_pub_…). Use "platform": "google" for a Play Store app.5
Point the SDK at your server
6
Connect RevenueCat
In RevenueCat, open Integrations → Webhooks and add a webhook:
- URL:
https://<worker>/v1/webhooks/revenuecat - Authorization header: your
REVENUECAT_WEBHOOK_SECRET - Environment: production
Appeeky.identify(await Purchases.getAppUserID()).App Settings
Change an app withPATCH /v1/apps/:id and your admin token:
POST /v1/apps/:id/rotate-key issues a new publishable key, and DELETE /v1/apps/:id deletes the app and all of its data.
Telegram Sale Messages
- Create a bot with @BotFather and copy its token.
- Send the bot a message, or add it to a group or channel.
- Find the chat id: open
https://api.telegram.org/bot<token>/getUpdatesand readmessage.chat.id.
SKAdNetwork Postback Copies
iOS sends postback copies to the registrable domain named in the app’s Info.plist, at/.well-known/skadnetwork/report-attribution/ and /.well-known/appattribution/report-attribution/.
- Set the config plugin’s endpoint to your domain:
["@appeeky/analytics-react-native", { "attributionEndpoint": "https://example.com" }]. - Serve those two paths from the worker on that domain, with a Workers route or a rewrite on your site.
- Set the app’s
storeAppIdto its Apple ID.
Limits
Ingest is limited to 600 batches per minute per publishable key ([[ratelimits]] in wrangler.toml). The SDK keeps the batch and retries when it gets 429.

