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

# Credits & limits

> Understanding API credits, rate limits, and usage monitoring for all ScrapeLLM scraper endpoints.

The ScrapeLLM API uses a credit-based billing system with per-account rate limits enforced at the API gateway.

## Credits system

### How credits work

* Each successful API request consumes credits based on the scraper used
* Credits are deducted when requests complete with HTTP 200
* Failed requests (4xx errors) do not consume credits
* Async jobs that fail after all retry attempts restore credits automatically
* Most scrapers cost **3 credits** per request

### Credit cost per scraper

| Scraper        | Credits |
| -------------- | ------- |
| ChatGPT        | 3       |
| Perplexity     | 3       |
| Grok           | 3       |
| Copilot        | 3       |
| Gemini         | 3       |
| Google AI Mode | 3       |
| Amazon Rufus   | 3       |

## Rate limits

Rate limits are enforced per API key. When you exceed a limit, you receive `HTTP 429`:

```json theme={null}
{
  "detail": "Rate limit exceeded. Retry after a moment."
}
```

Limits vary by plan. Implement retry with exponential backoff on `429` responses. See [Error handling](/guides/error-handling#retry-logic) for a code example.

## Monitoring usage

### Dashboard

Your [dashboard](https://scrapellm.com/dashboard) shows:

* Current credit balance
* Credits used this billing cycle
* Usage history and trends

### Track credit consumption in code

```python theme={null}
import requests

resp = requests.get(
    "https://api.scrapellm.com/scrapers/chatgpt",
    headers={"X-API-Key": "YOUR_API_KEY"},
    params={"prompt": "Best CRM?", "country": "US"},
)

data = resp.json()
credits_used = data.get("credits_used", 0)
print(f"Credits used for this request: {credits_used}")
```

## Handling credit exhaustion

When credits run out (`HTTP 429`), implement graceful handling:

```python theme={null}
import requests

resp = requests.get(
    "https://api.scrapellm.com/scrapers/chatgpt",
    headers={"X-API-Key": "YOUR_API_KEY"},
    params={"prompt": "Best CRM?"},
)

if resp.status_code == 429:
    print("Credit limit reached. Upgrade your plan or wait for next billing cycle.")
elif resp.status_code == 200:
    data = resp.json()
    print(data["result"])
```

## Common questions

### Why was I charged for a failed request?

You're only charged for successful requests (HTTP 200). `4xx` errors and async jobs that fail after all retries do not consume credits.

### How do I know how many credits I have left?

Check the `credits_used` field in each response, or log into your [dashboard](https://scrapellm.com/dashboard) for your current balance.

### What happens at the rate limit?

You receive `HTTP 429`. Implement exponential backoff and retry - the window resets shortly. For sustained high-volume workloads, use async job mode which handles queuing server-side.

### Can I get notified when credits are running low?

Contact [hello@scrapellm.com](mailto:hello@scrapellm.com) to discuss credit alerts. We'll notify you by email when you approach your limit.
