How it works, and how you pay

The loop

  1. Discover POST /v1/discover with a natural-language query. Results come from two places: the first-party registry (ranked by name, tag, description and provider match) and a live search of the Apify Store. Each result carries status: live, needs_key or byok_only.
  2. Inspect POST /v1/inspect returns the JSON schema for the input, the price model, expected latency and the upstream docs link. Free, no balance needed.
  3. Run POST /v1/run executes. The response includes output, providerResponse.httpStatus, and a billing block with the exact charge.

Price models

TypeMeaningExample
PER_CALLFlat price per execution.Weather forecast $0.002
PER_RESULTflatFee per call plus amount per item returned. Items are counted from the actual output.Apify actor $0.005 + $0.002 per row
PER_UNITflatFee plus amount per unit consumed (1k tokens, minute, character). Units come from the provider's usage report.Claude $0.001 + $0.012 per 1k tokens

What you are charged

Every successful run costs provider price + $0.001 platform fee. Provider price on our master accounts is the upstream rate plus 25%. If you connected your own key for that provider, the provider portion is $0 and you pay only the fee.

Reading a run response

{
  "runId": "5b1c…", "provider": "open-meteo", "endpoint": "/forecast",
  "status": "COMPLETED",                       // COMPLETED | FAILED | BLOCKED | TIMED_OUT | STOPPED
  "output": { "current": { "temperature_2m": 93.4 }, ... },
  "providerResponse": { "httpStatus": 200, "error": null },
  "price": { "type": "PER_CALL", "amount": 0.002 },
  "billing": { "units": 1, "providerUsd": 0.002, "platformFeeUsd": 0.001,
               "totalUsd": 0.003, "byok": false, "balanceAfterUsd": 1.997 },
  "durationMs": 412, "createdAt": "…", "completedAt": "…"
}

Balance

Workspaces start with $2.00. Top up by card from the dashboard in $10 to $5,000 increments. Balance never expires. GET /v1/wallet/balance and GET /v1/wallet/activities expose the same numbers the dashboard shows; every debit row carries the runId.

Limits

How it works · Cracked