# Quick start

Apparent shows how your app is doing in plain words: downloads, people, money, reviews. It takes about 10 minutes: add your app, send the first event, connect a store.

## 1. Add your app

Sign in at [app.apparent.fyi](https://app.apparent.fyi), then **Add app**: its name and what it runs on. You get an **app id** and a **key**. The key only adds events, so it's fine to ship inside the app.

## 2. Paste this into your AI

The fastest way. In Claude Code, Cursor or Codex, open your app's folder and paste the prompt from the **Add your app** page: it has your id and key in it already. Your AI finds the framework, installs the right SDK, starts it, tracks screens, suggests five events and runs the app.

The page turns green with **First event from your app ✓** when it works. Here's the whole prompt, with placeholders:

````text Prompt
Add Apparent analytics to this app (your app, on phones). Apparent is already waiting for it.

App id: <app id>
Key: <write key>
Intake URL: https://in.apparent.fyi

Do this, in order:
1. Find out what the app is built with: Expo, React Native, Swift, Kotlin, Flutter or a website. If the repo has more than one app (say iOS and Android), do each one.
2. Install the matching Apparent SDK from the list below. If the package can't be found, stop and tell me. Don't write your own.
3. Start it once, as early as the app starts, with the app id, key and intake URL above. Keep it on in debug builds: Apparent leaves simulators and test phones out of the numbers by itself.
4. Track screens the way the list says for this framework.
5. Read the code and propose these 5 events, each with the file and line where it would go:
   - sign_up: someone makes an account (skip if the app has no accounts)
   - paywall_view: the upgrade screen shows
   - purchase: a purchase goes through
   - <main_action>: the one thing people come for, named after it, like scan_completed or habit_completed
   - <thing>_failed: something the person tried didn't work, like purchase_failed or upload_failed
   Show me the list. When I say yes, add them. Small properties only, never emails, names or other personal data.
6. Run the app (simulator, emulator or browser) and open a couple of screens. Then tell me to look at Apparent: it turns green with "First event from your app". If nothing shows within 2 minutes, look for the request to https://in.apparent.fyi/i in the logs (it answers 200 with "accepted"; 401 means the app id or key is wrong) and fix it.

Keep the change small and don't touch anything else.

## The Apparent SDKs

### Expo
Looks like: app.json or app.config.* with expo, or expo in package.json
Install: npx expo install apparent-expo @react-native-async-storage/async-storage expo-application expo-localization
Start it in the root layout (app/_layout.tsx) or App.tsx:
```
import { Apparent } from "apparent-expo";

Apparent.init({ apiUrl: "https://in.apparent.fyi", app: "<app id>", key: "<write key>" });
```
Screens: // expo-router, in the root layout: import { useApparentScreens } from "apparent-expo/router"; useApparentScreens();
Events: Apparent.track("sign_up");

### React Native
Looks like: react-native in package.json without expo
Install: npm install apparent-expo @react-native-async-storage/async-storage && npx pod-install
Start it in index.js or App.tsx:
```
import { Apparent } from "apparent-expo";

Apparent.init({ apiUrl: "https://in.apparent.fyi", app: "<app id>", key: "<write key>" });
```
Screens: // React Navigation: import { apparentScreens } from "apparent-expo/navigation"; const ref = useNavigationContainerRef(); <NavigationContainer ref={ref} {...apparentScreens(ref)}>
Events: Apparent.track("sign_up");

### Swift
Looks like: an .xcodeproj, .xcworkspace or Package.swift with Swift sources
Install: Xcode › File › Add Package Dependencies… › https://github.com/AhmedAshour/apparent-swift
Start it in the App struct's init, or application(_:didFinishLaunchingWithOptions:):
```
import Apparent

Apparent.start(app: "<app id>", key: "<write key>")
```
Screens: // SwiftUI, on each screen's view: .apparentScreen("Home")
Events: Apparent.track("sign_up")

### Kotlin
Looks like: build.gradle(.kts) with com.android.application
Install: // app/build.gradle.kts
implementation("fyi.apparent:apparent-android:0.2.0")
Start it in your Application class's onCreate:
```
import fyi.apparent.Apparent

Apparent.start(this, app = "<app id>", key = "<write key>", apiUrl = "https://in.apparent.fyi")
```
Screens: // Compose (apparent-compose), in each screen: TrackScreen("home")
Events: Apparent.track("sign_up")

### Flutter
Looks like: pubspec.yaml with flutter
Install: flutter pub add apparent
Start it in main(), before runApp:
```
import 'package:apparent/apparent.dart';

await Apparent.start(app: '<app id>', key: '<write key>', apiUrl: 'https://in.apparent.fyi');
```
Screens: // MaterialApp: navigatorObservers: [ApparentNavigatorObserver()],
Events: Apparent.track('sign_up');

### Website
Looks like: an HTML site or a web framework (Next.js, Vite, Astro…)
Install: Nothing to install: one script tag.
Start it in the <head> of every page:
```
<script defer src="https://w.apparent.fyi/s.js" data-site="<app id>"></script>
```
Screens: Pages are counted by themselves.
Events: apparent("sign_up")
````

## 3. Or by hand

Pick your platform. Each page is one install line, one start line and screens.

| Platform | Package | Guide |
|---|---|---|
| React Native and Expo | apparent-expo | [React Native and Expo](https://apparent.fyi/docs/sdk/expo) |
| iOS (Swift) | Apparent (Swift Package) | [Swift](https://apparent.fyi/docs/sdk/swift) |
| Android (Kotlin) | fyi.apparent:apparent-android | [Kotlin](https://apparent.fyi/docs/sdk/kotlin) |
| Flutter | apparent (pub.dev) | [Flutter](https://apparent.fyi/docs/sdk/flutter) |
| Website | the Apparent script | [Website](https://apparent.fyi/docs/sdk/web) |

Expo, in short:

```sh
npx expo install apparent-expo @react-native-async-storage/async-storage expo-application expo-localization
```

```ts
import { Apparent } from "apparent-expo";

Apparent.init({ apiUrl: "https://in.apparent.fyi", app: "<app id>", key: "<write key>" });
```

## 4. Connect a store

Downloads, sales and reviews come from the stores, not the SDK. On the **Connect** page add App Store Connect, Google Play or RevenueCat: each is a read-only key, checked before it's saved. See [Stores and ads](https://apparent.fyi/docs/connect).

## What's next

- [Events and users](https://apparent.fyi/docs/events): the five events worth having, and signing people in.
- [RevenueCat](https://apparent.fyi/docs/revenuecat): every sale as it happens, joined to what people did.
- [Ask your numbers](https://apparent.fyi/docs/ask): ask Apparent from Claude Code, Cursor or the terminal.
- [Privacy answers](https://apparent.fyi/docs/privacy): what to fill in on Apple's and Google's forms.

> **For AI agents.** Every page is also plain Markdown: add `.md` to its address. All of the docs in one file: [/docs/llms-full.txt](https://apparent.fyi/docs/llms-full.txt).
