App Store Connect's Biggest Overhaul Yet
On March 25, 2026, Apple released a sweeping update to App Store Connect's developer platform — adding over 100 new metrics and tools. This is one of the largest upgrades in App Store Connect's history, with implications for everyone from solo indie developers to large enterprise teams.
Before this update, App Store analytics were limited to basic indicators like impressions, downloads, and revenue. The new platform gives developers much deeper insight into user behavior, engagement, performance, and monetization.
What's New: A Look at the Major Metric Categories
The 100+ new metrics fall into four main categories, each addressing a different dimension of your app's health.
Engagement Metrics track exactly how users interact with your app — including session length, screen transition patterns, and feature adoption rates. These help you understand not just if users are using your app, but how.
Performance Metrics give you real-time visibility into technical health: crash rates, hang rates, memory usage, and battery impact. What's new is the granularity — you can now see performance broken down by device model and OS version.
Monetization Metrics expose your subscription churn rate, customer lifetime value (LTV), and the IAP conversion funnel in detail. For subscription-based apps, this is a game-changer.
Acquisition Metrics reveal how users discover your app — including the exact search keywords that led to your page, A/B test results from product page experiments, and drop-off rates during onboarding.
Alongside these metrics, Apple also added new App Store Connect API endpoints so all this data can be retrieved programmatically. That's where Antigravity comes in.
Setting Up the App Store Connect API with Antigravity
To access the new metrics programmatically, you'll need an API key from App Store Connect. Here's how to set it up, with Antigravity doing the heavy lifting.
API Key Configuration
Once you have your .p8 private key from App Store Connect, set it up securely in your project. Never commit the .p8 file to a Git repository. Always use environment variables.
// .env.local (Antigravity helps you set this up)
APP_STORE_CONNECT_KEY_ID=YOUR_KEY_ID
APP_STORE_CONNECT_ISSUER_ID=YOUR_ISSUER_ID
APP_STORE_CONNECT_PRIVATE_KEY_PATH=./AuthKey_XXXXXXXX.p8
// lib/appStoreConnect.ts
import jwt from 'jsonwebtoken';
import fs from 'fs';
export function generateASCToken(): string {
const privateKey = fs.readFileSync(
process.env.APP_STORE_CONNECT_PRIVATE_KEY_PATH!
);
// Generate JWT token (valid for 20 minutes)
const token = jwt.sign(
{},
privateKey,
{
algorithm: 'ES256',
expiresIn: '20m',
audience: 'appstoreconnect-v1',
issuer: process.env.APP_STORE_CONNECT_ISSUER_ID,
keyid: process.env.APP_STORE_CONNECT_KEY_ID,
}
);
return token;
}When asking Antigravity to write this, just say: "Implement JWT authentication for the App Store Connect API." It will install the necessary packages, write the types, and set up the helper function automatically.
Fetching New Metrics
Here's a script to request the new engagement metrics from the updated API:
// scripts/fetchAppMetrics.ts
import fetch from 'node-fetch';
import { generateASCToken } from '../lib/appStoreConnect';
const APP_ID = 'YOUR_APP_ID'; // Your app's numeric ID from App Store Connect
async function fetchEngagementMetrics(
startDate: string,
endDate: string
) {
const token = generateASCToken();
// New engagement metrics endpoint
const response = await fetch(
`https://api.appstoreconnect.apple.com/v1/analyticsReportRequests`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
data: {
type: 'analyticsReportRequests',
attributes: {
accessType: 'ONGOING',
},
relationships: {
app: {
data: { type: 'apps', id: APP_ID },
},
},
},
}),
}
);
const data = await response.json();
console.log('Metrics request created:', data);
return data;
}
// Fetch session analytics
async function fetchSessionMetrics() {
const token = generateASCToken();
const response = await fetch(
`https://api.appstoreconnect.apple.com/v1/apps/${APP_ID}/analyticsDetailData`,
{
headers: {
'Authorization': `Bearer ${token}`,
},
}
);
// Expected output:
// {
// avgSessionDuration: 4.2, // minutes
// sessionsPerActiveDevice: 3.1,
// activeDevices: 12450,
// crashRate: 0.12 // %
// }
return await response.json();
}
fetchSessionMetrics().catch(console.error);Building an Analytics Dashboard with Antigravity
Once you're pulling data from the API, you'll want to visualize it. Antigravity can scaffold a full Next.js dashboard from a single prompt: "Create a dashboard to display App Store Connect metrics."
Dashboard Component Structure
Here's a component layout to feed Antigravity:
// components/MetricsDashboard.tsx
'use client';
import { useEffect, useState } from 'react';
interface AppMetrics {
downloads: number;
activeUsers: number;
crashRate: number;
avgSessionDuration: number;
revenue: number;
subscriptionChurnRate: number;
}
export function MetricsDashboard() {
const [metrics, setMetrics] = useState<AppMetrics | null>(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
async function loadMetrics() {
try {
const res = await fetch('/api/app-metrics');
const data = await res.json();
setMetrics(data);
} catch (error) {
console.error('Failed to load metrics:', error);
} finally {
setLoading(false);
}
}
loadMetrics();
}, []);
if (loading) return <div>Loading metrics...</div>;
if (!metrics) return <div>No data available</div>;
return (
<div className="grid grid-cols-3 gap-4 p-6">
<MetricCard
title="Downloads"
value={metrics.downloads.toLocaleString()}
trend="+12%"
positive
/>
<MetricCard
title="Active Users"
value={metrics.activeUsers.toLocaleString()}
trend="+8%"
positive
/>
<MetricCard
title="Crash Rate"
value={`${metrics.crashRate}%`}
trend="-0.05%"
positive
/>
<MetricCard
title="Avg Session Duration"
value={`${metrics.avgSessionDuration} min`}
trend="+0.3 min"
positive
/>
<MetricCard
title="Monthly Revenue"
value={`$${metrics.revenue.toLocaleString()}`}
trend="+15%"
positive
/>
<MetricCard
title="Churn Rate"
value={`${metrics.subscriptionChurnRate}%`}
trend="-0.8%"
positive
/>
</div>
);
}
interface MetricCardProps {
title: string;
value: string;
trend: string;
positive: boolean;
}
function MetricCard({ title, value, trend, positive }: MetricCardProps) {
return (
<div className="bg-white rounded-xl p-4 shadow-sm border">
<p className="text-sm text-gray-500">{title}</p>
<p className="text-2xl font-bold mt-1">{value}</p>
<p className={`text-sm mt-1 ${positive ? 'text-green-600' : 'text-red-600'}`}>
{trend} vs. last week
</p>
</div>
);
}A key tip when working with Antigravity on a project like this: don't try to build everything at once. Break it down — "first, just create the TypeScript types for the API response", then "now build the card component", then "add the API route." This step-by-step approach gets consistently better results.
Turning Metrics Into Improvements
Collecting metrics is only half the battle. The real value comes from acting on them.
Crash Rate Reduction Workflow
Suppose the new performance metrics reveal that crashes are spiking on a specific screen. Here's an Antigravity-assisted response workflow:
First, ask Antigravity to analyze the crash logs: "Parse these App Store Connect crash logs and identify the most common root causes." Once the problematic code is identified, ask it to write a fix along with unit tests to prevent regressions. Then distribute via TestFlight and monitor the crash rate in the new real-time performance dashboard.
With Antigravity accelerating each step, a crash investigation that might have taken a full day can often be resolved in a few hours.
Reducing Subscription Churn
The new monetization metrics can reveal when churn tends to happen — for example, three days before a subscription renewal. Antigravity can help you build targeted push notification logic that triggers retention offers at exactly this moment.
For a deeper dive into in-app purchases and subscription monetization, check out Antigravity for App Monetization — Stripe Integration to Store Submission and Recurring Revenue.
Automating App Review Status Notifications
The 2026 update also improves the review status API, making it easier to track submission progress. Here's a script that checks review status and notifies your team via Slack:
// scripts/checkReviewStatus.ts
async function checkAppReviewStatus(appId: string): Promise<void> {
const token = generateASCToken();
const response = await fetch(
`https://api.appstoreconnect.apple.com/v1/apps/${appId}/appStoreVersions`,
{
headers: {
'Authorization': `Bearer ${token}`,
},
}
);
const data = await response.json();
const latestVersion = data.data[0];
const reviewState = latestVersion?.attributes?.appStoreState;
// Possible values:
// WAITING_FOR_REVIEW / IN_REVIEW / PENDING_DEVELOPER_RELEASE
// READY_FOR_SALE / REJECTED
console.log(`Current review status: ${reviewState}`);
if (reviewState === 'READY_FOR_SALE' || reviewState === 'REJECTED') {
await sendSlackNotification(`App review result: ${reviewState}`);
}
}
async function sendSlackNotification(message: string): Promise<void> {
const webhookUrl = process.env.SLACK_WEBHOOK_URL;
if (!webhookUrl) return;
await fetch(webhookUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text: message }),
});
}For automating the full submission pipeline including screenshots and metadata, Antigravity × Fastlane: Complete Guide to Automated App Store & Google Play Deployment has you covered.
Looking back
Apple's 2026 App Store Connect overhaul gives developers more actionable data than ever before — spanning engagement, performance, monetization, and acquisition. With 100+ new metrics accessible via API, the opportunity to build genuinely data-driven app development workflows is now within reach for any developer.
Antigravity makes it practical. From setting up API authentication to building a live dashboard, the process that once required days of boilerplate can now be accomplished in hours. Start small — get the API key configured and pull your first session metrics — then build from there.