The exchange rate
2on yours→1on theirs
Two on your screen, one on theirs.
One public rate for everyone, no auction and no bidding war. Earned promotions never expire. Stop showing cards tomorrow and what you’ve already earned is still waiting.
Cross-promotion for independent Apple-platform apps
Put a small card in your app that recommends another indie app. In return, yours gets recommended inside theirs, in front of people who already install apps like it.
iPhone, iPad, and Mac
Three first-class packages, one network. Configure once at launch, then drop it into the screens you already have. Placements are typed, so a mistyped one never ships.
// once, at launch
try CrossPromo.configure(appKey: "cp_live_…")
// once, on a screen that already exists
CrossPromoCard(placement: .postScan)
// once, at launch
CrossPromo.configure(appKey: 'cp_live_…');
// once, on a screen that already exists
const PromoCard(placement: CrossPromoPlacement.postScan)
// once, at launch
CrossPromo.configure({ appKey: 'cp_live_…' });
// once, on a screen that already exists
<PromoCard placement={CrossPromoPlacement.PostScan} />
Swift Package Manager · Git dependency in pubspec.yaml · npm
iOS 16+ · macOS 13+ for native Swift
Rather not do it by hand? Your dashboard hands you a ready-made prompt. Paste it into Claude Code, Codex, Cursor or Copilot and it wires the integration up for you.
How it works
You choose where a recommendation belongs in your product. CrossPromo handles the matching, the verification and the counting.
Paste your public App Store link. We check the listing and open your developer workspace. No contract, no card, no sales call.
Two lines in Swift, Flutter or React Native. Most apps have a few natural homes for it: a result, a success state, settings, an empty state.
Once your update is public on the App Store, every two verified recommendations you show earns one promotion of your own app.
Why it works
Paid acquisition asks for money you’d rather spend building. This asks for a corner of a screen, and gives you the same corner back in someone else’s app.
The exchange rate
2on yours→1on theirs
One public rate for everyone, no auction and no bidding war. Earned promotions never expire. Stop showing cards tomorrow and what you’ve already earned is still waiting.
Impressions and clicks are verified server-side against your live App Store release. Simulators, debug builds and TestFlight can’t inflate anyone’s numbers, including your competitors’.
Category and app-level filters decide what’s allowed to appear next to your brand. The card is the only surface there is: no interstitials, no takeovers, no autoplay.
Impressions received and served, clicks, CTR, the daily trend, and the exact list of apps sending users your way.
Privacy, deliberately boring
The SDK sends no identifier of any kind, so there’s nothing to join one event to the next. No cross-app profile, no device graph, no advertising ID. Nothing to leak, and nothing to explain to the people who trust your app.
Five small answers in App Store Connect and you’re done. No ATT prompt. No Device ID declaration. The dashboard walks you through each one.
Every event we store names two apps, and nothing else.
Questions, answered
Version 1 is intentionally narrow, so the rules stay short enough to read in full.
Add your appA reciprocal cross-promotion network for independent iPhone, iPad, and Mac apps. Participating apps show a compatible recommendation card for one another, creating a shared discovery channel that costs impressions instead of ad budget.
Nothing. No fee, no ad spend, no card on file. You pay in attention: every two verified recommendations your app shows earns one promotion of your own app.
Yes on iOS. Native Swift supports both iOS and macOS; Flutter gets a PromoCard widget on iOS, and React Native gets a <PromoCard /> component on iOS. All integrations use the same configuration and typed placements.
Public iPhone, iPad, and Mac apps on the Apple App Store. Native Swift apps target iOS 16 or macOS 13 or later; Flutter and React Native support is currently iOS-only.
No. Simulators, debug builds, StoreKit testing, TestFlight and sandbox activity are there to help you test the integration. Only activity from a public App Store release is verified and counted. That’s exactly why the numbers you receive are worth something.
No. Every event we store names two apps, and nothing else. CrossPromo does not store an installation ID, device ID, IP address, user agent or locale, and it never builds a profile that follows someone between apps.
Not yet. CrossPromo currently supports Apple App Store apps on iOS, iPadOS, and macOS, with the same signed App Store verification and privacy rules. Google Play support is planned.