{
  "slug": "app-download-link-sms",
  "title": "App download link SMS: template and code",
  "url": "https://www.courier.com/recipes/app-download-link-sms",
  "markdown": "https://www.courier.com/recipes/app-download-link-sms.md",
  "stage": "Onboarding",
  "purpose": "Move web signups onto your mobile app with a text, then an email, and skip anyone who already installed.",
  "summary": "An app download link SMS gets web signups onto your mobile app. Two days after signup it texts a link to your app, and on day 5 it emails App Store and Google Play buttons. People without a phone number get only the email, and installing the app stops the rest.",
  "channels": [
    "sms",
    "email"
  ],
  "shape": "journey",
  "shows": [
    "An SMS only for users with a phone number",
    "Cancel the journey once the app is installed",
    "Waits set as durations, not dates"
  ],
  "data": [
    {
      "name": "profile.first_name",
      "type": "string",
      "example": "Dana",
      "note": "From the profile. Write it when the user signs up. The emails say \"there\" when it's missing"
    }
  ],
  "steps": [
    {
      "step": "1",
      "when": "2 days after signup",
      "channels": "SMS",
      "templates": [
        "templates/app-link-sms.json"
      ]
    },
    {
      "step": "2",
      "when": "5 days after signup",
      "channels": "Email",
      "templates": [
        "templates/app-link-email.json"
      ]
    }
  ],
  "files": {
    "journey": "journey.json",
    "templates": [
      "templates/app-link-sms.json",
      "templates/app-link-email.json"
    ],
    "setup": [
      "setup.ts"
    ],
    "start": [
      "start.ts",
      "start.py"
    ],
    "stop": [
      "stop.ts",
      "stop.py"
    ]
  },
  "docs": [
    "https://www.courier.com/docs/journeys/nodes/delay",
    "https://www.courier.com/docs/journeys/nodes/send",
    "https://www.courier.com/docs/journeys/nodes/cancel",
    "https://www.courier.com/docs/journeys/invoke",
    "https://www.courier.com/docs/guides/send-your-first-sms"
  ],
  "related_recipes": [
    "https://www.courier.com/recipes/welcome-email-sequence",
    "https://www.courier.com/recipes/onboarding-incomplete-reminder-email",
    "https://www.courier.com/recipes/otp-sms-email-fallback"
  ],
  "agent_prompt": "Add an app download link sequence to this app, sent through Courier: an SMS with the download link 2 days after a web signup, then an email with App Store and Google Play buttons on day 5, both skipped once the user installs the app. Follow the steps at https://www.courier.com/recipes/app-download-link-sms.md and use the Courier skill for SDK details.\n\n1. Create the journey and its templates in my Courier workspace by replacing Acme and the download links in the template files with our own, then running setup.ts from that page with COURIER_API_KEY from our environment. Save the journey ID it prints as COURIER_APP_LINK_JOURNEY_ID.\n2. Find where this codebase creates a new web user and start the journey there. Pass only the user ID, and make sure first_name and phone_number are written to their Courier profile at signup.\n3. Find where a user first signs in on the mobile app and cancel the journey there with the token app-<user_id>. Cancel it the same way when an account is deleted.\n4. Match this codebase's language, file layout, and error handling. Never hardcode the API key.\n5. When you're done, start one run for a test user and show me the run's steps.",
  "status": {
    "state": "passing",
    "last_tested": "2026-10-19"
  }
}
