Limits, safety, and cost
Limits, safety, and cost
Makra accepts bounded public web work. The SDK validates request shape locally, while the API enforces URL admission, account capacity, request limits, page budgets, and credits.
URL safety boundary
Submit public websites with ordinary domain names. The service rejects local hosts, IP literals, user information embedded in URLs, unsupported ports, malformed hosts, control characters, and other forms that can target internal networks.
Do not use Makra to probe private services. Do not place secrets in a URL. Target pages are untrusted input even when you own the calling application.
Page access limits
Normal JavaScript rendering is supported. Arbitrary login flows, caller-supplied cookies, general click sequences, and form automation are outside the Python SDK contract.
CAPTCHAs, access-denied pages, site-generated error pages, navigation failures, and pages that never become ready can fail a URL. A proxy region can change egress location, but it does not grant permission or guarantee access.
Respect target-site terms, robots policies where applicable, copyright, privacy rules, and rate expectations. Technical reachability is not legal authorization.
Request and schema limits
The deployment controls maximum body size, unique URLs, hosts, query leaves, browser capacity, page work, and model spend. Some limits reject a request. A query with too many leaves can be truncated and reported as a warning.
Avoid designing one giant schema as a substitute for product decisions. Request the fields your application owns, keep descriptions precise, and split unrelated jobs when they have different failure or freshness policies.
Multi-URL execution
Concurrent mode is the default. Each unique URL has an isolated extraction pipeline, and failures remain scoped to that URL. Sequential mode is useful when your account or target should see one page at a time.
from makra import ExecutionModes, Makra
with Makra() as client:
response = client.extract(
[
"https://shop.example/products/atlas-lamp",
"https://shop.example/products/harbor-lamp",
],
{"price": "The current selling price"},
execution_mode=ExecutionModes.SEQUENTIAL,
)
Pagination
Pagination is bounded by additional_pages. It is not an open-ended crawl.
from makra import ExtractOptions, Makra
options = ExtractOptions(additional_pages=2)
with Makra() as client:
response = client.extract(
["https://shop.example/search?q=lamp"],
{"results": "Products listed on each result page"},
config=options,
)
Discovered follow pages can appear as separate URL keys. A failed follow page can remain present with None data.
Credits and usage
Workflows are billable. The gateway can reject admission when available credits cannot cover the required hold, and a run can end in budget_exhausted. Responses and run metadata can include credits charged, usage categories, and billing state.
Do not hard-code prices from documentation into application logic. Read current account and product pricing from the appropriate product surface. At runtime, persist the run's reported usage and billing fields beside your own job record.
Next, use Troubleshooting when a run does not behave as expected.