React Native

Analytics for React Native

No SDK, no native module. Your app posts the same JSON the web tracker posts, and screens, conversions and revenue land beside your web traffic.

One function

import { Platform } from 'react-native';

export function track(path, name = 'pageview', props) {
  return fetch('https://app.stepmetrics.co/v1/collect', {
    method: 'POST',
    headers: { 'content-type': 'application/json' },
    body: JSON.stringify({
      siteId: YOUR_SITE_ID,
      name,
      path,
      client: { platform: Platform.OS, device: Platform.isPad ? 'tablet' : 'mobile' },
      props,
    }),
  });
}

Call track('/checkout') from your navigation listener and track('/checkout', 'purchase', { plan: 'pro' }) when something happens. Use the route as the path, never a display title, or the same screen splits across languages.

Why the client field matters

Send it. Bot filtering reads the user agent and assumes a browser wrote it; a mobile HTTP stack often sends none, which on the web is a crawler. Declaring client tells the server to judge the request as an app. Without it your traffic is filed as automated and disappears from every default view.

What is different from the web

Every field an app can send is in the docs.

Read it from your editor

Connect Claude Code, Cursor or any MCP client with a read-only key, and ask in words: which pages lost traffic this week, where mobile visitors drop out of signup, whether Tuesday's spike was a crawler. The agent gets the same numbers as the dashboard.

claude mcp add --transport http stepmetrics https://app.stepmetrics.co/mcp \
  --header "Authorization: Bearer dak_..."

Claude Code ยท Cursor

Try it on your site.

Add your first site for free. See where visitors come from, what they look at, and how many take the next step.

No credit card required.