1,000 free checks every month · no card

A stolen password doesn't look stolen.
We can tell.

LoginLlama scores every login 0–10 for account takeover, credential stuffing, and bot traffic — so your app can block, step up to MFA, or allow. One API call. No ML team required.

Integrate in one prompt, or drop in the SDK. Free for 1,000 checks a month.

POST /api/v1/login/check
identity_key[email protected]
ip_address196.52.43.x
locationLagos, NG → was Austin, US
High risk
8/10
recommend: block
IMPOSSIBLE_TRAVELNEW_DEVICEKNOWN_VPN

One call, before you finalize the login. Sub-500ms. Fails open.

30,000+
logins scored
35,000+
malicious & anonymizing IPs tracked
<500ms
response, fail-open by design
Since 2023
protecting real login flows

Most breaches start with a valid password in the wrong hands.

Credential stuffing is automated, cheap, and relentless. Logs and 2FA tell you after. LoginLlama tells you at the moment of login, while you can still do something about it.

Try it — no signup

See how a login gets scored

Pick a scenario and watch the risk score and codes change — the same logic your app gets back from one API call.

risk_score
9/10
Critical
codes
IMPOSSIBLE_TRAVELNEW_DEVICEKNOWN_VPN
Your moveBlock

Not just a mockup — score your actual connection

Runs a real request against the live LoginLlama API and scores the login you're making right now. No signup.

Three steps to protect every login

Works with any auth system or framework. The API does the heavy lifting; you keep control of the decision.

01

Call one endpoint

After your auth check passes, send the login to LoginLlama with the user, IP, and user agent.

02

Get a risk score

Back comes a 0–10 score and the exact codes that triggered it.

03

Decide

Allow, step up to MFA, or block — on your own thresholds. You stay in control.

route.ts
// Install: npm install loginllama
import { LoginLlama } from 'loginllama';
import { NextRequest } from 'next/server';

const loginllama = new LoginLlama({
  apiKey: process.env.LOGINLLAMA_API_KEY!
});

export async function POST(req: NextRequest) {
  const { email, password } = await req.json();

  // Check with LoginLlama BEFORE authenticating
  const result = await loginllama.check(email, {
    request: req  // Auto-detects IP & User-Agent
  });

  if (result.risk_score > 5) {
    return Response.json(
      { error: 'Suspicious login detected' },
      { status: 403 }
    );
  }

  // Continue with your existing auth logic...
  return Response.json({ success: true });
}
The fastest way to try it

Install it in one prompt

Don't want to read docs? Hand the prompt to your coding agent. It installs the SDK, wires the risk check into your login, and asks you for an API key — so you can be testing in minutes, not an afternoon.

  • Detects your stack and installs the right SDK
  • Adds the check after auth, fails open by design
  • Prefer the manual path? The SDKs are one import away
Node.jsPythonPHP
Paste into your agent
Integrate LoginLlama (suspicious login detection) into this project.

1. Detect the language/framework and install the official SDK:
   - Node.js / Next.js / Express:  npm install loginllama
   - Python / Django / Flask:      pip install loginllama
   - PHP / Laravel:                 composer require loginllama/loginllama
2. Read the live API reference and examples from https://loginllama.app/docs (the machine-readable
   summary is at https://loginllama.app/llms.txt).
3. Add a LOGINLLAMA_API_KEY environment variable. If I don't have a key yet, tell
   me to grab one at https://loginllama.app/account/api (sign up free at https://loginllama.app/signup) and paste it.
   Never hard-code the key — load it from the environment.
4. After my auth step succeeds, call LoginLlama with the user's identity_key,
   email, IP address and user agent. Branch on the result:
     - risk_score > 5  -> require MFA / extra verification or block
     - otherwise        -> allow the login
   Always FAIL OPEN: if LoginLlama errors or times out, log it and let the user in.
5. Add a short comment linking to https://loginllama.app/docs and show me how to test it locally.
Works in Claude Code Cursor Codex

What goes into the score

Many signals, one number. Each risk code tells you exactly why a login looked off.

Impossible travel

Two logins too far apart to be the same person. Austin at 9:00, Lagos at 9:12.

Tor & VPN exit nodes

Traffic hiding behind anonymizing networks that legitimate users rarely need.

New device & browser

A device fingerprint this account has never used before.

New location

A first-time city or country for this specific user.

Bots & automation

Headless browsers and scripted traffic behind credential-stuffing runs.

Sub-500ms, fail-open

Fast enough to sit in the login path, and it never locks out real users if we are down.

New · MCP

Just ask your login data

Connect LoginLlama's MCP server to your agent and ask in plain language — “what's my average login risk score for Chrome?” or “show me the riskiest logins this week.” Read-only, scoped to your team.

A decision, not just an alert

Other tools email your users after the fact. LoginLlama gives your app a score it can act on — before the session is handed over.

Building it in-house

  • 6–12 months of engineering
  • Threat lists, geo data, device fingerprints to maintain
  • A distraction from your actual product
  • Still blind to patterns across other apps

LoginLlama

  • Live in minutes — one prompt or one import
  • Risk score + codes you can branch on
  • Cross-app threat signals, maintained for you
  • From $0/month, fails open by design

Simple, transparent pricing

Start free. Scale as you grow. No credit card to begin.

Built in the open by a developer who got tired of account takeovers

LoginLlama is an indie project, built and shipped in public. The SDKs are open source, the API fails open so it can never lock out your users, and you can try the whole thing on the free tier without talking to anyone.

Score your first login in the next five minutes

1,000 free checks every month. No credit card. Install in one prompt.