Skip to content

Quickstart

BOOST renders each target in a real headless browser through a rotating proxy. Every session records the HTTP status, latency, fingerprint and a verdict; page content is scored for the ad markers you configured, and response bodies are not stored.

  1. 1Create an account and open /dashboard.
  2. 2Add your hostname under /dashboard/domains and publish the verification token.
  3. 3Queue a job with a session count inside your limit.
  4. 4Watch results land in /dashboard/tests; open any row for the full diagnostic.

Target authorization

Two mechanisms gate every job. Verified domains are checked first; the attestation is the fallback for one-off staging checks.

Domain verification

Add the hostname in the dashboard, then publish the generated token at a well-known path:

https://staging.example.com/.well-known/boost-verify.txt # file content boost-verify=<token from the dashboard>

Press Verify. The server fetches the file over HTTPS and compares the token. Subdomains of a verified host are covered.

Attestation

When no verified domain matches, the job form requires an explicit checkbox confirming you own or are authorized to test the target. The attestation is stored with your IP and the job id.

Creating a job

A job is a target plus a session count. Sessions are independent browser contexts issued by the worker with bounded concurrency, each with its own fingerprint and proxy from proxies.txt.

POST /api/v1/jobs Authorization: Bearer bst_live_<prefix>_<secret> Content-Type: application/json { "url": "https://staging.example.com/landing", "sessions": 25, "proxy_source": "pool", "authorized": true }

The response returns the job id and status. Poll GET /api/v1/jobs/<id> or read GET /api/v1/results?job_id=<id>.

Proxy diagnostics

Jobs rotate through data/proxies.txt by default; the file is hot-reloaded when it changes. You can also add pinned profiles with scheme, host, port and optional credentials. A check fetches a neutral sink through the proxy and reports the exit IP and latency.

POST /dashboard/proxies/12/check # dashboard form action; returns a flash with PASS/FAIL and latency

Credentials are stored server-side only and never rendered back into the page.

API reference

MethodPathPurpose
GET/api/v1/healthLiveness, queue depth, pause state
GET/api/v1/meResolve the key owner
POST/api/v1/jobsQueue a job
GET/api/v1/jobsList recent jobs
GET/api/v1/jobs/{id}Job status and result counts
GET/api/v1/resultsPaginated results, filterable
GET/api/v1/metricsCounts, pass rate, p95, 14-day series

Keys are created in /dashboard/api. The plaintext appears once; only a SHA-256 hash is stored. Requests are limited per key and every job is written to the audit log.

Pass reasons

ad-marker and iframe-src mean ad markup rendered in the page. ad-tag-served means the ad network delivered a .js loader. ad-link-served means a smartlink reached the network handoff; the final hop is often an API endpoint with no visible markup. The reason is stored on every result row.

Error categories

CategoryVerdictMeaning
okPASS2xx response, no blocking interstitial
challengeBLOCKEDChallenge page detected in the body
http_blockBLOCKED403, 429 or 503 from the target
timeoutFAILNavigation exceeded LOAD_TIMEOUT_MS
proxyFAILProxy refused, tunnel failed or DNS died at the proxy
tlsFAILCertificate validation failed
connectionFAILRefused, reset or unreachable host

Ad QA

/dashboard/adqa audits one authorised page in real browsers and reports what the ad stack actually did. Each session rotates a proxy and a device profile (desktop and mobile):

  • Tag fire — ad-host requests: count, status, resource type and first-arrival time.
  • Creative render — every iframe and ad container with rendered width, height and position.
  • Viewability — pixels visible ≥50% for ≥1000 ms, sampled at 200 ms.
  • Broken tags — tag-fired-no-creative, failed ad requests, HTTP errors.
  • Geo — exit IP and country per session, so delivery gaps are visible.

Ad link pool

Adsterra direct links and smartlinks live in a per-account rotation pool at /dashboard/ads. A job in mode=ads picks links by weight instead of targeting one URL, and every hit passes a rate-limit guard:

  • AD_MIN_INTERVAL_MS / AD_JITTER_MS — global spacing between session starts plus random jitter.
  • AD_LINK_COOLDOWN — seconds a link rests after a hit (per-link override on the pool page).
  • AD_PROXY_COOLDOWN — one exit IP is not reused against the same link inside this window.
  • AD_BURN_SECONDS — a proxy that drew 429/403/challenge is skipped for this long.
  • AD_BACKOFF_BASE / AD_BACKOFF_MAX — doubling bench time for repeat blocks on one link.
  • AD_REFERRERS — comma-separated referrer URLs, one picked per hit.

Limits

  • MAX_SESSIONS_PER_JOB — hard ceiling per job (default 250).
  • DAILY_SESSION_QUOTA — per-account sessions per day (default 20,000).
  • CONCURRENCY_PER_WORKER — parallel browser sessions per worker (default 4).
  • LOAD_TIMEOUT_MS — navigation timeout per session (default 35,000 ms).
  • SETTLE_AFTER_LOAD — seconds to wait after DOM ready (default 12).
  • REQUEST_TIMEOUT_SECONDS — timeout for proxy health checks (default 20).
  • API keys — 120 requests per minute per key; job creation 30 per minute per account.
Private, loopback and link-local targets are rejected unless the operator sets ALLOW_PRIVATE_TARGETS=1 for a local staging install.