Skip to content

Traffic API overview

The Traffic API delivers real human traffic — driven by genuine browsers through residential/mobile proxies — on the same prepaid balance as the SERP API. Two products:

ProductEndpointWhat it deliversPrice
Website trafficPOST /v1/traffic/visitsReal visits with a controlled referrer (organic/social/direct)$0.0002 / delivered visit
SEO traffic (CTR)POST /v1/traffic/clicksReal Google SERP searches that find and click your URL$0.04 / delivered click

Both create a campaign that runs asynchronously; you poll its status, watch it in app.serplify.io under Projects, or receive a completion webhook.

MethodPathPurpose
POST/v1/traffic/visitsCreate a website-traffic campaign
POST/v1/traffic/clicksCreate an SEO/CTR click campaign
GET/v1/traffic/campaigns/{id}Campaign status (delivered / failed / status)
POST/v1/traffic/campaigns/{id}/pausePause delivery
POST/v1/traffic/campaigns/{id}/resumeResume a paused campaign
POST/v1/traffic/campaigns/{id}/cancelStop and cancel remaining work

Under the hood each campaign becomes a queue of individual visit/click tasks that a pool of browser workers claims and executes with retries and lease-based recovery — so a large campaign delivers steadily over time, and worker restarts never lose or double-run work.

Pass webhook_url when creating a campaign and Serplify POSTs it for the events you subscribe to via webhook_events (default: ["completed"]):

EventWhenFrequency
completedthe whole campaign finishesonce (reliably retried)
deliveredeach successful visit/clickper delivery (best-effort)
pausedthe campaign auto-pauses (e.g. balance ran out)on pause (best-effort)
Create with all events
{
"url": "https://example.com",
"quantity": 1000,
"webhook_url": "https://you.example.com/hooks/serplify",
"webhook_events": ["delivered", "paused", "completed"]
}

Every callback body carries an event field:

completed
{ "event": "completed", "campaign_id": "", "product": "clicks", "status": "completed", "quantity": 200, "delivered": 187, "failed": 13 }
delivered
{ "event": "delivered", "campaign_id": "", "product": "visits", "status": "running", "quantity": 1000, "delivered": 42, "failed": 1, "result": { "target": "example.com", "duration_seconds": 63 } }
paused
{ "event": "paused", "campaign_id": "", "product": "clicks", "status": "paused", "quantity": 1000, "delivered": 120, "failed": 4, "reason": "insufficient_balance" }

Creating a campaign returns HTTP 202 with a campaign record:

{
"request_id": "req_…",
"status": "accepted",
"meta": { "api_version": "0.1.0", "time": 0.03, "cost": 0, "currency": "USD" },
"data": {
"campaign_id": "",
"product": "visits",
"quantity": 1000,
"delivered": 0,
"failed": 0,
"status": "running",
"status_url": "/v1/traffic/campaigns/…",
"created_at": "2026-07-02T12:00:00.000Z"
}
}

You are charged per delivered result (visit or click), never on the requested quantity up front and never on failed deliveries. Delivery draws down your prepaid balance as it happens; the campaign’s delivered count is the source of truth for what you paid.

If your balance runs out mid-campaign, delivery auto-pauses — the campaign goes to paused and stops spending. Top up and resume it (or it resumes on the next top-up) to finish the remaining work. You are never charged past your balance.

Serplify provides real signal and real data so you can test CTR, dwell time, referral behaviour, and search visibility at scale. It does not promise ranking manipulation, and you must own or be authorised to send traffic to the target URLs. See the Acceptable Use policy.