> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base44.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get SEO score

> <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>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json get /api/apps/{app_id}/seo/summary
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - ApiKeyAuth: []
paths:
  /api/apps/{app_id}/seo/summary:
    get:
      summary: Get SEO score
      description: >-
        <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>
      operationId: get_seo_scan_summary_api_apps__app_id__seo_summary_get
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app.
            title: App Id
          description: ID of the app.
          example: 6820f3a4e7b91d003c45a1f2
      responses:
        '200':
          description: The last scan's score, or `null` if the app has never been scanned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SEOScoreResponse'
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You don't have access to this app, or you used a workspace API key.
            These endpoints accept a user's credentials only.
        '404':
          description: App not found.
        '429':
          description: Rate limit exceeded (30 requests per minute).
components:
  schemas:
    SEOScoreResponse:
      properties:
        result:
          anyOf:
            - $ref: '#/components/schemas/SEOScoreRollup'
            - type: 'null'
          description: The last scan's score, or `null` if the app has never been scanned.
      type: object
      title: SEOScoreResponse
      description: The score rollup, wrapped in the field the endpoint returns it under.
    SEOScoreRollup:
      properties:
        overall:
          type: integer
          title: Overall
          description: Overall SEO score for the app, 0 to 100.
          example: 82
        grade:
          type: string
          title: Grade
          description: 'Letter grade for `overall`: `A`, `B`, `C`, `D` or `F`.'
          example: B
        failures:
          type: integer
          title: Failures
          description: How many checks failed in that scan.
          default: 0
          example: 2
        warnings:
          type: integer
          title: Warnings
          description: How many checks returned a warning in that scan.
          default: 0
          example: 3
        scanned_at:
          type: string
          title: Scanned At
          description: When the scan ran, as an ISO 8601 UTC timestamp.
          example: '2026-09-03T09:15:00+00:00'
      type: object
      required:
        - overall
        - grade
        - scanned_at
      title: SEOScoreRollup
      description: The last scan's score, without its checks.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: api_key
      description: Personal API key.

````