Web-to-app infrastructure

Forward app context
through install.

Create links that preserve campaign, referral, invite, and offer payloads from mobile web to app open — via iOS Smart App Banner, Android Install Referrer, and signed server tokens.

1
Campaign link
Link created with payload
2
iOS / Android
Smart App Banner or Play
3
App install
Token bound to session
Payload claimed
Deterministic · 340 ms
fs_01JABCD…
claimeddeterministic
willow.forwarded.link/walmart-mx · iOS Smart App Banner
{
  "campaign_id": "walmart_mx",
  "offer_id": "four_months_free",
  "partner_id": "walmart"
}
Session resolved · 2 min agoWebhook delivered ✓
The primitive

Server-backed Forwarded Sessions

A signed, expiring session carries developer-defined JSON through native install and open flows. Resolve it in your app — then claim it when you know the user.

Create a link

Attach any safe JSON payload to a generated landing page URL. Routing and forwarding mechanics stay protected.

Forward context

iOS Smart App Banner, Android Install Referrer, Universal Links, App Links, or explicit signed tokens.

Resolve and claim

The SDK resolves the payload after install or open. Claim the session once you know the user's identity.

Determinism is part of the API

Native paths. No fingerprinting.

Every session reports its forwarding method and confidence tier. Non-deterministic paths are never mislabeled.

deterministic

iOS

  • Native Safari Smart App Banner
  • app-argument carries session ID + token
  • Universal Links for already-installed apps
  • Custom URL scheme fallback
deterministic

Android

  • Google Play Install Referrer API
  • Encoded referrer in Play Store URL
  • Android App Links for installed apps
  • First app-open reads referrer data
high confidence

Fallbacks

  • QR code links to Forwarded Link
  • Manual code / explicit token paths
  • Determinism tier always reported
  • Unsupported browser detection + instructions
Developer-first

Your payload. Your routing logic.

The SDK resolves context and returns raw JSON. You decide what to do with it.

import SwiftUI
import Forwarded

@main
struct DemoApp: App {
  init() {
    Forwarded.configure(ForwardedConfig(
      apiKey: "fwd_live_xxx",
      appId: "app_123"
    ))
  }
  var body: some Scene {
    WindowGroup { ContentView()
      .onOpenURL { Forwarded.handleOpenURL($0) }
    }
  }
}

// On launch:
Task {
  if let session = try await Forwarded.resolvePending() {
    if session.payload["paywall_id"] as? String == "partner" {
      showPaywall("partner")
    }
    try await Forwarded.claim(externalUserId: user.id)
  }
}
Use cases

One primitive. Many flows.

Forwarded ships with templates for the most common contexts — or pass any JSON payload you like.

Subscription offers

Pass partner discount codes, free trial IDs, or paywall variants through install for immediate redemption.

{"offer_id": "four_months_free", "paywall_id": "partner"}

Referrals

Attribute installs to specific users. Pass referrer IDs and codes directly into the new user's onboarding.

{"referrer_id": "user_123", "code": "NHAN50"}

Invites

Team and workspace invitations survive app install. Route new users directly into the right team context.

{"team_id": "team_abc", "role": "member"}

QR campaigns

Posters, conferences, physical activations. Any QR code scan creates a session — even before install.

{"event_id": "expo_2026", "booth_id": "42"}

Partner campaigns

University programs, employee benefits, brand partnerships. Route users to the right paywall and flow.

{"partner_id": "walmart", "campaign": "mx"}

Custom payloads

Pass any developer-defined JSON. The platform is a context layer, not an opinionated offer system.

{"any": "payload", "you": "define"}
Start building

Pass trusted context through your next app install.

Create a Forwarded Link in minutes. Add the SDK. Ship with deterministic web-to-app context forwarding.

No credit card required · iOS + Android SDKs · Webhook delivery