---
title: "Account & billing · Scrape.ly Docs"
description: "Plans, credits, usage, limits, and your API key."
url: https://scrape.ly/docs/account
markdown: https://scrape.ly/docs/account.md
---

# Account & billing

> Plans, credits, usage, limits, and your API key.

Manage your Scrape.ly account: profile, plan and credits, usage, limits, and API key. Most of this lives under **Billing** and **Settings** in the [dashboard](https://my.scrape.ly); the matching endpoints are in the [Users API](https://scrape.ly/docs/api-users.md).

## Profile

Your public profile shows your username, avatar, bio, links, and published Actors. Edit it in **Settings → Profile**, or with the API:

```
GET /v2/users/me/profile
PUT /v2/users/me/profile
PUT /v2/users/me/profile/picture
DELETE /v2/users/me/profile/picture
GET /v2/users/{username}/public-profile
```

- Your username (max 20 characters: letters, digits, `.`, `_`, `-`) is the owner part of your Actor paths, such as `janedoe/my-actor`. Changing it renames that part for all your Actors; paths with the old username keep working, and your Actors stay published. You can change your username but not remove it.
- A username belongs to the first account that used it, for good: after you change it, or after an account is deleted, nobody else can take that name. See [Usernames](https://scrape.ly/docs/api-users.md#usernames).
- `PUT /v2/users/me/profile` accepts only the [profile fields](https://scrape.ly/docs/api-users.md#profile); any other field returns `400 invalid-input`.
- A profile must stay public while you have published Actors. While your profile is private, other users see a placeholder instead of your picture, for example next to your reviews and messages.
- Your email appears on the public profile only if you turn on **show email**.

## Plans and credits

Everything you do on the platform is paid from a prepaid credit balance in US dollars. Runs consume compute units (memory × duration), storage operations, data transfer, proxy traffic, and, for Actors that use the [Scrape.ly browser](https://scrape.ly/docs/browser.md), browser credits. Store Actors with a price also charge their own fees, which are added to your usage.

Your balance is made of credit packages:

| Package | Where it comes from |
| --- | --- |
| Free monthly credit | $5 of usage credit every month while you're on the free plan. It resets each month: unused free credit doesn't roll over. |
| Plan credit | Monthly prepaid usage included with a paid plan. At each renewal it's replaced by the new period's plan credit; what's left expires and isn't refunded. |
| Additional credit | Credit a paid plan can buy on top of its plan credit. It expires at the next renewal. |
| Prepaid credit | Pay-as-you-go credit, such as [x402](https://scrape.ly/docs/x402.md) top-ups. It doesn't expire. |
| Earnings | What you earn from your own paid Actors. Kept separate and never spent on runs. |

Free credit is always spent first. After that, paid credits are spent starting with the package that expires soonest, and packages without an expiry are used last. Expired packages drop out of your balance.

### Free plan

Every account starts on the free plan, with no card needed. It includes **$5 of free credit every month**. Your free month starts on the day you created your account and renews on the same day each month. At each renewal, whatever is left of last month's free credit expires and a fresh $5 is added. **Billing → Current period** and the dashboard show how much free credit is left and when it resets.

The free plan runs with these limits:

| Limit | Free plan |
| --- | --- |
| Concurrent runs | 2 |
| Memory per run | 4 GB |
| Total memory across running runs | 8 GB |
| Schedules | 5 |
| AI chat messages | 30 per day |

To get more credit or higher limits, subscribe to a paid plan in **Billing → Subscription**. While you're subscribed, your plan credits replace the monthly free credit and the free plan limits no longer apply. If your subscription ends, you're back on the free plan, and its monthly free credit resumes.

Free credit is for your own scraping: when you run a paid Store Actor with free credit, its creator earns nothing from that part of the fee (see [Earnings](https://scrape.ly/docs/publishing.md#earnings)).

Manage your plan in **Billing → Subscription**: compare plans, subscribe, upgrade, cancel or resume, buy additional credits on a paid plan, and manage payment methods. Past invoices are in **Billing → Invoices**. Purchases, payment methods, and invoices are console-only; the Scrape.ly API has no endpoints for them.

To read your plan and balance programmatically:

```
GET /v2/users/me/plan
GET /v2/plan-tiers
```

`GET /v2/users/me/plan` returns your plan, renewal date, this month's usage, and balance broken down by package. Its `billing.credit` object is what **Billing** shows as **Credit left**: the period, what you used, what is reserved for running work, what is available, and one entry in `sources` per kind of credit (`plan`, `additional`, `free`, `prepaid`) with its amount, what's left, and when it expires (`null` for prepaid credit). `GET /v2/plan-tiers` (no auth) lists every plan tier with its limits.

### What a paid plan changes

A plan tier sets your concurrency, memory, Actor/task/schedule/webhook counts, build limits, API rate limits, data retention, support level, and Store discount. Your plan counts as paid while its renewal date is in the future. When it lapses, your account falls back to free-plan retention: unnamed storages are kept 2 days instead of your plan's 31, 60 or 90 days, except your latest 10 runs, which are kept with their results and logs until you delete them.

The **Store discount** lowers the per-event price of Store Actors whose owners allow discounts.

### When credits run out

- Before a run starts, Scrape.ly reserves its estimated cost from your timeout, memory, and the Actor's event prices. If your balance can't cover it, the run is rejected with `402 payment-required`.
- When your spendable balance reaches zero, nothing is deleted at once. Unnamed storages are deleted 3 days later. Named storages are kept for 3 days or your plan's unnamed-storage retention (2 days free; 31, 60 or 90 days on Starter, Scale or Business), whichever is longer. Both count from when the balance first hit zero. Adding credits stops the clock.
- Standby Actors return `402 insufficient-funds` when you have no balance.

Set a **low balance alert** in **Settings → Notifications** to get an email, dashboard notification, or webhook before you run out. See [Notifications](https://scrape.ly/docs/notifications.md#billing-and-account).

There is no account-wide spending limit. To cap what a single run can cost, set its maximum total charge when you start it (see [Run Actors](https://scrape.ly/docs/run-actors.md)).

## Usage

See current and past spending in **Billing → Current period** and **Billing → Historical usage**. Current period lists **Browser credits** with the browser seconds and proxy traffic behind them, and **AI model tokens** under **Actors** for [LLM gateway](https://scrape.ly/docs/llm-gateway.md#pricing) requests. Under **Actors**, open **Pay per event** to see each Actor event you were charged for. You can search by Actor or event name, filter by Actor, sort by price, quantity, or name, and page through the list. **Billing → Pricing** shows your rate per credit.

| Endpoint | What it returns |
| --- | --- |
| `GET /v2/users/me/usage/monthly` | Usage and cost per service for a month, with a daily breakdown |
| `GET /v2/users/me/usage/daily` | Usage quantities for one day |
| `GET /v2/users/me/usage/actors` | Platform and Actor charges per Actor for a month |
| `GET /v2/users/me/usage/pay-per-event` | Pay-per-event charges for a month, paginated, with search, Actor filter, and sort |
| `GET /v2/users/me/stats` | Runs, success rate, results, and compute for the last 30 days |

## Limits

**Billing → Limits** shows your plan limits and what you're using now. The same data comes from `GET /v2/users/me/limits`:

- Concurrent runs and concurrent builds
- Total memory across running runs and builds
- Number of Actors, saved tasks, schedules, and webhooks
- Minimum and maximum run memory, maximum build memory, and build timeout
- API and storage API requests per minute
- [LLM gateway](https://scrape.ly/docs/llm-gateway.md#limits) requests per minute and requests running at the same time
- Data retention for unnamed storages

Your plan's **memory per run** applies to every run, however it starts: from the dashboard, the API, a task, a schedule or automation, Standby, or an automatic restart. A run that asks for more memory is refused with `400 invalid-memory`. A memory that comes from a stored default instead, such as an Actor's Standby setting or a restart, is lowered to the largest size your plan allows. An Actor whose `minMemoryMbytes` is above your plan's limit can't run on your plan (`400 actor-memory-minimum-not-allowed`). The limits of every plan are on the [pricing page](https://my.scrape.ly/pricing).

Runs are not queued when you hit one of your account limits. Starting a run past your concurrent-run limit returns `429 concurrency-limit-exceeded`, and going over your total memory returns `400 limit-exceeded`. Wait for runs to finish or upgrade your plan. (A run can still be queued with `202` when the platform itself is short on capacity; see [Run Actors](https://scrape.ly/docs/run-actors.md).)

## API key

Your API key authenticates the Scrape.ly API, CLI, SDKs, and API clients. Find it in **Settings → API & Integrations** under **Scrapely API Credentials**, together with your **Scrapely User ID**.

- This key is your account's **Default key**, and it has full access to your account. Treat it like a password.
- You can create more keys under **Settings → API keys**, each with its own name, expiry, and scopes, and revoke them one by one. Use a scoped key for CI, servers, MCP clients, and integrations. See [API keys & permissions](https://scrape.ly/docs/api-keys.md).
- To rotate it, call `POST /v2/api-keys/reset`. The old key stops working immediately, OAuth access tokens issued to MCP clients are revoked, and you get an **API key created** notification.
- `GET /v2/api-keys` shows only a masked prefix, never the full key.
- Actor runs get their own scoped tokens. Those tokens can't read or rotate your API key or change account settings.
- Never commit your key. Pass it through an environment variable (`SCRAPELY_TOKEN`; `APIFY_TOKEN` is also accepted) or store it with [CLI secrets](https://scrape.ly/docs/cli-webhooks-secrets.md).

> [!NOTE]
> The **API Settings** card at the top of **Settings → API & Integrations** shows a different key (your login account's key) with its own **Rotate your API Key** button. For the Scrape.ly API, use the key under **Scrapely API Credentials**.

## Notifications

Choose which events reach you by email or in the dashboard in **Settings → Notifications**, or with `GET` / `PUT /v2/users/me/notification-settings`. See [Notifications](https://scrape.ly/docs/notifications.md).

## Actor settings

**Settings → Preferences** has two account-wide Actor settings:

| Setting | API |
| --- | --- |
| **Skip permission approvals**: run full-permission Actors without approving each one first. | `GET` / `PUT /v2/users/me/permission-approval-skip` |
| **Transform actors**: adapt existing Actor source (SDK imports, base images) when you import an Actor from GitHub or a ZIP. | `GET` / `PUT /v2/users/me/transform-github-actors` |

Details are in the [Users API](https://scrape.ly/docs/api-users.md#permission-approval-skip).

---

- Previous: [Pay with x402](https://scrape.ly/docs/x402.md)
- Next: [API keys & permissions](https://scrape.ly/docs/api-keys.md)
- All docs: [Docs index](https://scrape.ly/docs.md), [llms.txt](https://scrape.ly/llms.txt)
