---
title: "Get SEO score"
method: GET
path: "/api/apps/{app_id}/seo/summary"
---

# Get SEO score

`GET /api/apps/{app_id}/seo/summary`

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Returns the score from the app's last SEO scan, without the checks behind it.

This is the cheap read: five numbers off the app's stored settings, with no live fetch and no scan. It returns `null` until the app is scanned at least once, so run [Run SEO scan](/api-reference/run-seo-scan) first. Use [Get last SEO scan](/api-reference/get-last-seo-scan) when you need the individual checks.

`failures` and `warnings` count the checks in that scan, so they agree both with the checklist [Get last SEO scan](/api-reference/get-last-seo-scan) returns and with the per-category counts inside it. Only `score` is weighted.

This score is stored separately from the checklist, so compare `scanned_at` with the one [Get last SEO scan](/api-reference/get-last-seo-scan) returns before reading the two together. Two scans running at once can leave the pair on different scans until the next scan settles them.

This endpoint is limited to 30 requests per minute per app, and that budget is shared with the app's other SEO endpoints.

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>

## Path parameters

- `app_id` string, required — ID of the app.

## Response `200`

The last scan's score, or `null` if the app has never been scanned.

- SEOScoreResponse — The score rollup, wrapped in the field the endpoint returns it under.
  - `result` SEOScoreRollup — The last scan's score, without its checks.
    - `overall` integer, required — Overall SEO score for the app, 0 to 100.
    - `grade` string, required — Letter grade for `overall`: `A`, `B`, `C`, `D` or `F`.
    - `failures` integer — How many checks failed in that scan.
    - `warnings` integer — How many checks returned a warning in that scan.
    - `scanned_at` string, required — When the scan ran, as an ISO 8601 UTC timestamp.

## Other responses

- `401` — Missing or invalid credentials.
- `403` — You don't have access to this app, or you used a workspace API key. These endpoints accept a user's credentials only.
- `404` — App not found.
- `429` — Rate limit exceeded (30 requests per minute).

---

[API](https://skmtc.dev/base44/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/base44/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/base44/base44-app-management-api/revisions/173e4e9c63c2/schema)
