logo

Credits & Usage

ConceptUpdated 2026-06-20

Credits are the unit of consumption in MultiCartAPI. Every item you scrape costs one credit, and your plan determines how many you receive each billing cycle.

What counts as one credit

Every billable operation deducts exactly 1 credit — regardless of how it was triggered:

TriggerCost
Playground scrape (single ASIN/SKU)1 credit
Collection run — per item scraped1 credit
Category metering — per product enumerated1 credit

One ASIN, one SKU, one product = one credit. Batch size does not change the per-item rate.

Where credits come from

Signup grant
Every new account receives 500 credits on registration (Starter plan quota). These are a one-time lifetime grant — they never auto-reset and are not re-granted if you cancel a paid plan and revert to Starter.
Plan quota
Paid plans (Basic through Pro) reset your credit pool to the plan's full scrape quota on each successful billing-cycle payment. The reset is triggered by PayPal's payment confirmation, not by a date.
Upgrade carryover
When you upgrade to a higher plan, any unused credits at the moment you switch are captured and added on top of the new plan's full quota after the first payment lands. You never lose credits you have already earned.

Downgrade carry-over too

When you downgrade to a lower plan, your existing credit balance carries into the new cycle unchanged — it is not reset to the lower quota. Only a same-plan renewal resets the counter.

Your credit balance — three fields

The platform tracks three numbers for your account at all times:

FieldMeaning
`available_credits`Total credits granted for your current cycle.
`used_credits`Credits fully consumed by completed scrapes.
`frozen_credits`Credits reserved for jobs that are currently in-flight but not yet finalised.

Spendable balance

The credits you can actually spend right now are:

spendable = available_credits − (used_credits + frozen_credits)

A database constraint enforces available_credits ≥ used_credits + frozen_credits at all times, so the spendable number is always ≥ 0.

Why frozen credits exist

When a scrape job starts, the platform reserves the credit before the work begins — this is frozen_credits. The reservation prevents two concurrent jobs from both believing they have the same credit available. Once the job completes, the frozen amount moves into used_credits and is released from the frozen pool.

If a job fails or is cancelled before finishing, the frozen credit is released back to your spendable balance automatically.

The credit gate — try_consume

Before any scrape starts, the platform runs a single atomic check-and-deduct operation (try_consume). It executes a conditional database update:

  • If spendable ≥ 1 — the credit is frozen and the job proceeds.
  • If spendable < 1 — the job is rejected immediately and no work is performed. You are not charged for a rejected request.

This gate eliminates race conditions under parallel workloads — with concurrent workers running at once, every reservation is serialised at the database level.

Out of credits stops jobs immediately

When your spendable balance hits zero, new scrape requests are refused at the gate — no partial batches, no silent failures. Top up by upgrading your plan or waiting for your next billing cycle to reset your quota.

Viewing your usage

The Usage page shows your live credit balance plus a 30-day rolling breakdown of how credits were spent across your collections.

Open Usage dashboard
Usage dashboard showing available, used and frozen credit counts plus a 30-day bar chart of daily credit consumption
Usage → Credits overview — spendable balance and 30-day consumption history.

Credit lifecycle at a glance

Signup → 500 credits granted (one-time, Starter plan)

Pay for plan → available_credits reset to plan quota, used_credits reset to 0
               frozen_credits are NOT reset (protects in-flight jobs)

Scrape starts → frozen_credits += 1 (try_consume gate)
Scrape ends   → frozen_credits -= 1, used_credits += 1

Upgrade       → carryover balance preserved; added on top after first payment
Downgrade     → balance carries forward unchanged into new cycle
Refund        → grant is clawed back; floor is max(used + frozen, available − grant)