Developer platform

    Rank tracker API for your reporting and analysis stack

    A read-focused REST API for keyword rank checking: projects, current positions, up to 90 days of ranking history and stored SERP snapshot flags. Authenticate with an owner-scoped API key created inside your own workspace.

    Projects and keywords

    List owned projects and read current keyword positions with pagination.

    Ranking history

    Retrieve project ranking history for up to 90 days per request.

    SERP snapshots

    Read stored SERP snapshot flags for a keyword, including AI Overview, featured snippet and local pack presence.

    Owner-scoped access

    Every project request is checked against the owner attached to the API key.

    MCP server

    The same data over Model Context Protocol, so Claude, ChatGPT, Cursor and Claude Code can read your rankings directly. Uses the same API key.

    Authentication

    Create a key, send a header

    1. Open your workspace and go to Settings, then API keys.
    2. Create a key. It is shown once and stored only as a hash — copy it immediately.
    3. Send it on every request as the X-API-Key header.
    Base URL
    https://lemrank.com/api/public/v1
    First request
    curl -H "X-API-Key: YOUR_KEY" \
      https://lemrank.com/api/public/v1/projects

    Keys are scoped to the account that created them. Every project request is re-checked against that owner, so a key can never read another workspace.

    Reference

    Endpoints

    GET /projects

    List every project owned by the key holder.

    Example response

    {
      "projects": [
        {
          "id": "1f0c…",
          "name": "Acme",
          "domain": "acme.com",
          "tracking_frequency": "daily",
          "default_language": "en",
          "default_location": "United States",
          "created_at": "2026-01-14T09:12:04.118Z"
        }
      ]
    }

    GET /projects/:id

    Read a single project you own. Returns 404 for any project you do not own.

    Example response

    { "project": { "id": "1f0c…", "name": "Acme", "domain": "acme.com", … } }

    GET /projects/:id/keywords

    Current keyword positions, ordered best position first.

    Query parameters: limit (default 100, max 1000) · offset (default 0)

    Example response

    {
      "keywords": [
        {
          "id": "8ab2…",
          "keyword": "best seo tools",
          "current_position": 3,
          "previous_position": 5,
          "best_position": 2,
          "current_url": "https://acme.com/tools",
          "search_volume": 12100,
          "cpc": 4.5,
          "difficulty": 45,
          "engine": "google_organic",
          "location": "United States",
          "device": "desktop",
          "updated_at": "2026-09-17T06:02:11.904Z"
        }
      ],
      "total": 150,
      "limit": 100,
      "offset": 0
    }

    GET /projects/:id/rankings

    Position history for the project.

    Query parameters: days (default 30, max 90) · limit (default 1000, max 5000) · offset

    Example response

    {
      "rankings": [
        { "keyword_id": "8ab2…", "position": 3, "url": "https://acme.com/tools", "checked_at": "2026-09-17T05:58:02.331Z" }
      ],
      "total": 4120,
      "days": 30,
      "limit": 1000,
      "offset": 0
    }

    GET /projects/:id/snapshots

    Stored SERP feature flags for one keyword, newest first (50 most recent).

    Query parameters: keyword_id (required)

    Example response

    {
      "snapshots": [
        {
          "id": "c41d…",
          "keyword_id": "8ab2…",
          "captured_at": "2026-09-17T05:58:02.331Z",
          "has_ai_overview": true,
          "has_featured_snippet": false,
          "has_local_pack": false
        }
      ]
    }

    AI assistants

    Read the same data from Claude, ChatGPT or Cursor

    LemRank runs a remote MCP server over Streamable HTTP at https://lemrank.com/api/public/mcp. It authenticates with the same API key and exposes projects, keyword positions, ranking history, SERP snapshots, keyword tracking and URL intelligence as tools. Requests are scoped to the key's owner exactly as the REST API is.

    Operating limits

    Rate limits, pagination and errors

    60 requests per minute

    Per API key. Responses carry X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset; a 429 carries Retry-After.

    Cursor-free pagination

    limit and offset on keywords and rankings. Every paged response returns total so you know when to stop.

    90 days of history

    The rankings endpoint reads up to 90 days per request. Older history stays available inside the workspace.

    StatusErrorMeaning
    401Missing X-API-Key headerNo key was sent.
    401Invalid API keyThe key is unknown, revoked or deactivated.
    401API key expiredThe key passed its expiry date. Create a new one.
    400keyword_id query parameter is requiredA required parameter was missing.
    404Project not foundThe project does not exist, or the key's owner does not own it.
    429Rate limit exceededMore than 60 requests in one minute. Check the Retry-After header.

    What it costs

    API access is part of a paid workspace

    There is no separate API price list and no per-call metering on top of your plan — you read the data your workspace already tracks, within the rate limit above. Start on a free trial, or talk to us if you need a higher limit or a bulk extraction window.

    Related