billing

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Bright Data - Billing

Bright Data - 计费

Two questions come up: what has this account already spent, and what will this job cost? The first has an exact answer from the account's own numbers. The second is always an estimate, so say so.
通常会出现两个问题:这个账户已经花了多少钱?这项任务将花费多少?第一个问题可以根据账户自身的数据得到准确答案;第二个问题始终只能估算,因此必须明确说明这一点。

Read-only, no exceptions

仅限读取,绝无例外

Read the numbers, report them, stop. Never add or change a payment method, never top up a balance, never set auto-recharge, never change a plan, never buy a dataset, never cancel anything. Those actions belong to the person, not the agent, even when the user asks the agent to do them. Send them to brightdata.com/cp/billing/settings and let them click it themselves.
Never run a real job to find out what the account can do or what something costs. A Web Unlocker request, a scraper trigger and a browser session all spend money. Every read below is free and starts nothing.
读取数据、报告结果,然后停止。绝不添加或更改支付方式,绝不充值余额,绝不设置自动充值,绝不更改套餐,绝不购买 dataset,绝不取消任何服务。即使用户要求 Agent 执行这些操作,它们也应由用户本人完成。将用户引导至 brightdata.com/cp/billing/settings,让其自行点击并完成操作。
绝不能为了查明账户能做什么或某项操作的费用而运行真实任务。Web Unlocker 请求、抓取器触发操作和浏览器会话都会产生费用。以下每项读取操作都是免费的,并且不会启动任何任务。

The reads

读取操作

The questionCommandEndpoint behind it
How much money is left
bdata budget balance
GET /customer/balance
What one zone cost
bdata budget zone <name> --from <date> --to <date>
GET /zone?zone=<name>
and
GET /zone/cost?zone=<name>
What all active zones cost
bdata budget zones --from <date> --to <date>
GET /zone/get_active_zones
, then one
/zone/cost
per zone
What each product, zone, dataset or domain costno CLI command, call it directly
POST /costs/export/json
What scraping costno CLI command, call it directly
POST /costs/export/json
with
dimension
web_apis
for Web Scraper API,
collectors
for Scraper Studio
Which zones exist, including deleted onesno CLI command, call it directly
GET /zone/get_all_zones
Which website ate the budgetno CLI command, call it directly
GET /domains/req
and
GET /domains/bw
, dates required
How many records a snapshot deliveredno CLI command, call it directly
GET /datasets/v3/snapshots?dataset_id=<id>
, read
dataset_size
Base host is
https://api.brightdata.com
and auth is the header
Authorization: Bearer <key>
. Read the key from the environment or the CLI's own store. The exact file path for each OS, and the safe way to read it without printing it, live in the
agent-onboarding
skill's auth reference. That reference also has the thing that trips agents here: after a CLI login,
BRIGHTDATA_API_KEY
is unset, and that is normal rather than a sign the machine is logged out, because login writes the key to the CLI's store and never to the environment. Never ask the user to paste a key into the conversation, and never print one: to check that a key exists, run
node scripts/check-auth.mjs
from the
agent-onboarding
skill, never
cat
,
echo
or
jq
the credentials file or the variable.
/zone/cost
only sees zone-backed products such as Web Unlocker, SERP, Browser API and the proxy networks. Web Scraper API and Scraper Studio spend is keyed by dataset id and collector rather than by zone name, so it never appears there. Those go to the cost export.
问题命令对应 Endpoint
账户还剩多少钱
bdata budget balance
GET /customer/balance
一个 zone 花了多少钱
bdata budget zone <name> --from <date> --to <date>
GET /zone?zone=<name>
和
GET /zone/cost?zone=<name>
所有活跃 zone 总共花了多少钱
bdata budget zones --from <date> --to <date>
GET /zone/get_active_zones
,然后为每个 zone 调用一次
/zone/cost
每项 product、zone、dataset 或 domain 分别花了多少钱无 CLI 命令,直接调用
POST /costs/export/json
抓取费用是多少无 CLI 命令,直接调用
POST /costs/export/json
;Web Scraper API 使用
dimension
web_apis
,Scraper Studio 使用
collectors
存在哪些 zone,包括已删除的 zone无 CLI 命令,直接调用
GET /zone/get_all_zones
哪个网站消耗了预算无 CLI 命令,直接调用
GET /domains/req
和
GET /domains/bw
,必须提供日期
一个 snapshot 交付了多少条记录无 CLI 命令,直接调用
GET /datasets/v3/snapshots?dataset_id=<id>
,读取
dataset_size
基础主机地址为
https://api.brightdata.com
,认证方式是在
Authorization
header 中使用
Bearer <key>
。从环境变量或 CLI 自身的存储中读取 key。各操作系统对应的文件路径,以及在不打印密钥的情况下安全读取它的方法,都记录在
agent-onboarding
skill 的 auth reference 中。该 reference 还说明了这里最容易让 Agent 踩坑的一点:执行 CLI 登录后,
BRIGHTDATA_API_KEY
会被取消设置。这是正常现象,并不表示机器已退出登录,因为登录会将 key 写入 CLI 的存储,而不会写入环境变量。绝不要要求用户将 key 粘贴到对话中,也绝不要打印 key。要检查 key 是否存在,应在
agent-onboarding
skill 中运行
node scripts/check-auth.mjs
;绝不要对凭据文件或该变量使用
cat
、
echo
或
jq
。
/zone/cost
只能查看基于 zone 计费的产品,例如 Web Unlocker、SERP、Browser API 和代理网络。Web Scraper API 与 Scraper Studio 的费用按 dataset id 和 collector 记录,而不是按 zone 名称记录,因此不会出现在这里。这些费用应从 cost export 中查询。

Which key can read this

哪些 key 可以读取这些数据

API keys carry one of five permission levels: Admin, Finance, Ops, User and Limit. Billing and cost data needs Finance or Admin, and Finance is the least-privileged one that works, so prefer it. Use a Finance key directly in the
Authorization
header for these reads:
bdata login --api-key
expects a full-access key, so keep the CLI logged in with an Admin key and the Finance key for the API. Only account admins create or change keys, at brightdata.com/cp/setting/users. A 401 means the key is missing, revoked or wrong. A 403 means the key is real but under-privileged for billing, so name the missing access instead of retrying. A Finance key may not read product data such as snapshots or Studio jobs, and that split is fine: report the half you can read and say which access the other half needs. A 404 means a wrong or expired snapshot, job or dataset id, while a wrong zone name answers 422.
API key 携带以下五种权限级别之一:Admin、Finance、Ops、User 和 Limit。计费及成本数据需要 Finance 或 Admin 权限,而 Finance 是满足需求且权限最低的级别,因此应优先使用它。对于这些读取操作,可直接在
Authorization
header 中使用 Finance key;
bdata login --api-key
要求使用 full-access key,因此应让 CLI 保持使用 Admin key 登录,同时在 API 调用中使用 Finance key。只有账户管理员才能创建或更改 key,操作入口为 brightdata.com/cp/setting/users。401 表示 key 缺失、已被撤销或使用错误。403 表示 key 有效,但没有读取计费数据所需的权限;此时应明确指出缺少哪种权限,而不是重试。Finance key 可能无法读取 snapshot 或 Studio job 等产品数据;这种权限拆分是正常的:报告你能读取的那部分,并说明另一部分需要哪种访问权限。404 表示 snapshot、job 或 dataset id 错误或已过期,而 zone 名称错误会返回 422。

Using the budget commands well

正确使用预算命令

Three habits make the
bdata budget
output reliable. Always pass
--from
and
--to
to
budget zone
and
budget zones
, so the figure covers exactly the window you asked about. For the pending charge, read
pending_costs
from
GET /customer/balance
directly. And when you need machine-readable output, call the endpoint rather than the balance command.
Before writing any parsing code, read
references/cost-api.md
for the field lists and the live response samples, including how the date parameters behave (
to
is exclusive on these endpoints).
有三种做法可以确保
bdata budget
的输出可靠。调用
budget zone
和
budget zones
时始终传入
--from
和
--to
,确保数字恰好覆盖用户询问的时间范围。对于待收取的费用,直接从
GET /customer/balance
读取
pending_costs
。需要机器可读的输出时,应调用 endpoint,而不是使用 balance 命令。
在编写任何解析代码之前,先阅读
references/cost-api.md
,了解字段列表和实时响应示例,包括日期参数的行为方式(这些 endpoint 的
to
为排他结束日期)。

What a job will cost before it runs

任务运行前的预计费用

No endpoint returns a quote, so never present one as if it came from the API. Build the estimate in three steps and label it an estimate.
  1. Find the billing unit for the product. Web Unlocker and SERP bill per successful request, and failed requests are not charged, with one exception: enabling custom headers or cookies bills every request. A SERP request that returns several result pages is still one request. Web Scraper API bills per delivered record, and attempts that fail because of incorrect inputs still bill. Scraper Studio bills per page load, with file downloads charged separately per GB. Browser API and the proxy networks bill per GB of traffic, and some proxy plans are a fixed charge per IP instead.
  2. Count the units, not the inputs. One input is not one record. Five listing URLs that each hold twenty products produce a hundred records. A batch of ten URLs is ten separate billable requests. Pagination pages, detail pages and extra navigations each count as page loads in Scraper Studio.
  3. Use the account's own rate, not the public price list. Accounts on custom pay-as-you-go or pre-commit plans have their own rates, so the public list may not apply. For Web Unlocker and SERP you can compute the real rate: ask
    /zone/cost
    for a period with
    from
    and
    to
    , then divide the
    custom
    bucket's
    cost
    by its request count. When the bucket carries both
    reqs_unblocker
    and
    reqs_serp
    , divide by their sum, because the cost is one combined figure for the zone (live). For Web Scraper API the record count is a read (
    GET /datasets/v3/snapshots?dataset_id=<id>
    ,
    dataset_size
    ) and the dollars are in the cost export, per dataset under
    web_apis
    (live) or per snapshot under
    ws_api_snaps
    where attributed, so compute the real per-record rate when the reads return data. If the account has no past usage, read its own plan from
    GET /pricing_plans
    (Admin or Finance key; the plan with
    is_current: true
    , its
    product_prices
    , where
    req
    is per 1,000 requests). Only if that read is refused, open the public list at
    brightdata.com/pricing
    (for Web Scraper API,
    brightdata.com/pricing/web-scraper
    ) and say it is the list price, not this account's rate. Never quote a price from memory, since prices change. In the reply, name the source you read.
没有任何 endpoint 会返回报价,因此绝不能将估算结果描述为来自 API 的报价。估算分为三个步骤,并必须明确标注为估算。
  1. 确定产品的计费单位。 Web Unlocker 和 SERP 按成功请求计费,失败请求不收费,但有一个例外:启用自定义 headers 或 cookies 后,每个请求都会收费。即使一次 SERP 请求返回多个结果页,它仍然只算一个请求。Web Scraper API 按交付的记录数计费,因输入错误而失败的尝试仍会收费。Scraper Studio 按页面加载次数计费,文件下载则按 GB 单独收费。Browser API 和代理网络按流量 GB 计费,但部分代理套餐采用每个 IP 收取固定费用的方式。
  2. 计算计费单位,而不是输入数量。 一个输入不等于一条记录。五个 listing URL,每个包含 20 个 product,共产生 100 条记录。一批 10 个 URL 是 10 个独立的可计费请求。在 Scraper Studio 中,分页页面、详情页面和额外的导航操作都会分别计为页面加载。
  3. 使用账户自身的费率,而不是公开价格表。 使用自定义 pay-as-you-go 套餐或 pre-commit 套餐的账户拥有自己的费率,因此公开价格表可能并不适用。对于 Web Unlocker 和 SERP,可以计算实际费率:使用带有
    from
    和
    to
    的
    /zone/cost
    查询一个时间段,然后将
    custom
    bucket 的
    cost
    除以其请求数。当该 bucket 同时包含
    reqs_unblocker
    和
    reqs_serp
    时,应除以二者之和,因为该 cost 是 zone 的合并数值(实时)。对于 Web Scraper API,记录数可通过一次读取获得(
    GET /datasets/v3/snapshots?dataset_id=<id>
    ,读取
    dataset_size
    ),金额则位于 cost export 中:实时数据按
    web_apis
    下的 dataset 列出,或在可以归因时按
    ws_api_snaps
    下的 snapshot 列出。因此,当这些读取返回数据时,可以计算出真实的每条记录费率。如果账户没有历史用量,则从
    GET /pricing_plans
    读取其套餐(需要 Admin 或 Finance key);选择
    is_current: true
    的套餐,读取其
    product_prices
    ,其中
    req
    表示每 1,000 个请求的价格。只有当该读取被拒绝时,才打开 brightdata.com/pricing 上的公开价格表;对于 Web Scraper API,应打开 brightdata.com/pricing/web-scraper,并说明这是标价,而不是该账户的费率。绝不要凭记忆引用价格,因为价格会发生变化。在回复中必须说明所读取信息的来源。

Free credits

Free credits

Every eligible account gets 5,000 free credits a month from one shared pool. They reset on the first of the month and unused credits are forfeited rather than carried over. Web Unlocker, SERP and Web Scraper API spend one credit per request or record, and Scraper Studio spends one per page load. The Browser API draws on the same pool at 5 credits per MB of traffic (in effect from 2026-09-01), so the full monthly allowance covers close to 1 GB of browser traffic. Accounts on custom pay-as-you-go plans and on pre-commit plans get no monthly free credits.
The proxy networks are not covered. New accounts instead get a one-time $2 trial credit for the proxy products, valid 7 days, and a further $5 for adding a payment method, valid 30 days. All of these figures are from the docs. The registration completion call returns a brand-new account's
entitlements
(
monthly_credits
,
trial_credit_usd
,
trial_days
) once, at signup (the
agent-onboarding
skill, No account yet). None of the billing reads above return them.
Free credits are not in any billing API. No balance field counts them, and the
credit
field on
/customer/balance
is dollars, not a credit count. Free-tier and trial state live in the control panel at brightdata.com/cp/billing/overview under Free Tier Credits, which also shows the renewal date. Send the user there rather than guessing, and never read a money balance of zero as proof that the free credits are gone. They are separate pools.
每个符合条件的账户每月可获得 5,000 个 free credits,这些额度来自一个共享池。额度在每月 1 日重置,未使用的额度会作废,不能结转。Web Unlocker 和 SERP 每请求消耗 1 个 credit,Web Scraper API 每条记录消耗 1 个 credit,Scraper Studio 每次页面加载消耗 1 个 credit。Browser API 同样从该共享池扣减,每 MB 流量消耗 5 个 credits(自 2026-09-01 起生效),因此完整的月度额度可覆盖接近 1 GB 的浏览器流量。使用自定义 pay-as-you-go 套餐和 pre-commit 套餐的账户不会获得每月 free credits。
代理网络不在免费额度范围内。新账户会获得一次性 $2 的代理产品试用 credit,有效期为 7 天;添加支付方式后还会获得额外 $5,有效期为 30 天。以上数字均来自文档。注册完成调用会在注册时一次性返回全新账户的
entitlements
(
monthly_credits
、
trial_credit_usd
、
trial_days
),相关信息位于
agent-onboarding
skill 的 No account yet 部分。上述任何计费读取操作都不会返回这些字段。
Free credits 不包含在任何计费 API 中。 没有任何 balance 字段会计入这些额度,而且
/customer/balance
上的
credit
字段表示美元金额,而不是 credit 数量。Free tier 和 trial 状态位于控制面板 brightdata.com/cp/billing/overview 的 Free Tier Credits 部分,该处还会显示续期日期。应将用户引导到那里,而不是进行猜测;绝不能把金额余额为 0 当作 free credits 已用尽的证据。它们是彼此独立的额度池。

What an MCP tool call bills as

MCP 工具调用如何计费

For "what did my agent's tool call cost". Which tools are turned on (
groups=
,
tools=
) never changes what anything costs.
search_engine
and its batch variant bill as one request per query,
scrape_as_markdown
,
scrape_as_html
and
scrape_batch
as one Web Unlocker request per URL,
run_scraper
as Web Scraper API records delivered, and
scraping_browser_*
as Browser API bandwidth. The credential makes no difference: a Remote client on
?token=
and one on OAuth 2.1 reach the same tools and draw on the same account credits, so an OAuth client spends the credits of whichever Bright Data account its user signed in to, which may not be this one.
对于“Agent 的工具调用花了多少钱”这类问题,需要了解哪些工具已启用(
groups=
、
tools=
)绝不会改变任何费用。
search_engine
及其 batch variant 按每次 query 计为 1 个请求;
scrape_as_markdown
、
scrape_as_html
和
scrape_batch
按每个 URL 计为 1 个 Web Unlocker 请求;
run_scraper
按 Web Scraper API 实际交付的记录数计费;
scraping_browser_*
按 Browser API 带宽计费。凭证本身没有区别:使用
?token=
的 Remote client 与使用 OAuth 2.1 的 client 会访问相同的工具,并扣除同一个账户的 credits。因此,OAuth client 消耗的是其登录用户所对应的 Bright Data 账户的 credits,该账户可能不是当前账户。

Read next

接下来阅读

  • Before calling any of these endpoints: references/cost-api.md - exact paths, parameters, real response shapes, the eleven cost dimensions, and which facts are verified live against an account rather than only read in the docs.
  • When a read is refused: the
    agent-onboarding
    skill. A missing or invalid key gives 401 with a short plain-text body on these endpoints, and
    No API key found
    from the CLI. Both mean log in.
  • 调用上述任何 endpoint 之前:references/cost-api.md——包含精确路径、参数、真实响应结构、11 个成本维度,以及哪些事实已针对账户进行实时验证,而不只是从文档中读取。
  • **读取操作被拒绝时:**使用
    agent-onboarding
    skill。在这些 endpoint 上,缺失或无效的 key 会返回 401 及一段简短的纯文本响应,而 CLI 会返回
    No API key found
    。两者都表示需要登录。

Red flags

危险信号

  • Adding a payment method, topping up, or changing a plan on the user's behalf
  • Running a real job, or a single test request, to find out what something costs
  • Reading
    pending_balance
    from a live balance response instead of
    pending_costs
  • Treating every key of a cost export as a date, so
    total
    gets added to the days
  • Reporting a zone cost without
    --from
    and
    --to
  • Adding
    back_m0
    to
    back_d0
    , or assuming
    bw
    is present in every bucket
  • Reporting an empty cost export as proof of no spend, without the
    products
    cross-check described in
    references/cost-api.md
  • Quoting public list prices as though they were this account's rate
  • Asking the user which plan or zone they use when
    /zone/get_all_zones
    and
    /zone?zone=
    answer it
  • Presenting an estimate as if it were a quote from the API, which has no estimate endpoint
  • Echoing a raw
    /zone?zone=
    response, which contains the zone password.
    bdata budget zone <name>
    prints only a summary without it (on CLI 0.4.1 its
    --json
    and
    --pretty
    are taken by the parent
    budget
    command and ignored); use it, or
    /zone/cost
    , for cost
  • Printing an API key, or asking the user to paste one into the chat
  • 代表用户添加支付方式、充值余额或更改套餐
  • 为查明费用而运行真实任务或单个测试请求
  • 从实时 balance 响应中读取
    pending_balance
    ,而不是
    pending_costs
  • 将 cost export 中的每个 key 都视为日期,从而把
    total
    加到各天之和上
  • 报告 zone cost 时未提供
    --from
    和
    --to
  • 将
    back_m0
    加到
    back_d0
    上,或假定每个 bucket 中都存在
    bw
  • 未按
    references/cost-api.md
    所述使用
    products
    进行交叉核对,就将空的 cost export 当作没有消费的证据
  • 将公开标价当作该账户的实际费率
  • 在
    /zone/get_all_zones
    和
    /zone?zone=
    可以回答问题时,仍询问用户使用哪个套餐或 zone
  • 将估算结果描述为来自 API 的报价,但该 API 并不提供估算 endpoint
  • 原样输出
    /zone?zone=
    响应,因为其中包含 zone password。
    bdata budget zone <name>
    只打印不包含密码的摘要(在 CLI 0.4.1 中,其
    --json
    和
    --pretty
    会被父级
    budget
    命令占用并忽略);查询费用时应使用该命令或
    /zone/cost
  • 打印 API key,或要求用户将 key 粘贴到聊天中