Repository navigation
Cloaking
The Cloaking stream schema splits traffic into two branches: suspicious visitors (bots, moderators, data centers, VPNs) see the safe page, real people the money page. One module (core/CloakDetector.php) makes the decision for all entry points: the campaign URL (index.php), click.php, and Click API v3.
A detailed technical write-up in English: How the Orbitra Cloaker Works.
Built-in HTML, an external URL, a local landing, or a local offer. Landings and offers in the list are grouped by group, with a search.
Works like the "Landing + Offer" schema, including "before the click / after the click" offer selection.
The "Send clean visitors to the next stream" checkbox turns the cloak into an entry filter. Suspicious visitors get the safe page, while clean ones continue down the stream list — geo, devices, and languages are split up by regular streams. This stream's money page is not used in this mode. Put such a stream first or make it intercepting so that every visitor passes the check.
| Layer | Source | Does not work without |
|---|---|---|
| Data centers / hosting | An ASN blocklist (core/data/asn_blocklist.json), published cloud and crawler ranges, hosting keywords in the ISP name |
The ASN database (GeoLite2-ASN) |
| VPN / proxy | IP2Proxy PX12 (VPN, TOR, residential, threat, fraud score ≥ 80), a VPN-ASN list | IP2Proxy PX12 / the ASN database |
| Bot blacklists | IPs and User-Agent signatures from Settings → Bots | — |
| User-Agent heuristics | Crawlers and tools (facebookexternalhit, meta-externalagent, curl, python, headless…), an empty User-Agent, a missing Accept-Language
|
— |
If a required database is missing, the campaign editor shows a warning right in the cloak card.
Signals are either hard (an explicit hit in a blocklist or reputation database) or soft (individually noisy heuristics).
| Level | Safe page when |
|---|---|
| Low | only a hard signal |
| Medium (default) | a hard signal, or two soft ones |
| High | any single signal |
Applied after the passive layers; a mismatch means the safe page (TARGETING_SAFE):
-
Countries — allow or block a list. If the country cannot be determined, the reason is recorded as
geo_unknownrather thangeo_country. Without a geo database every visitor isUnknown, and the country filter will send 100% of traffic to the safe page; the editor warns about this. - Device types — only the selected ones, or all except the selected ones.
- Block bots and data-center providers — the visitor's ISP and ASN compared against a list: the stream's local list or, if it is empty, the global one from Settings → Bots.
Off by default. The visitor first receives the safe page and moves to the money page via a one-time signed link (TTL 5 minutes) only after executing JS. navigator.webdriver = true stays on the safe page. So does anything that does not execute JS. The price is one extra hop for every live visitor.
| Setting | Default | What it does |
|---|---|---|
| Record Safe Page clicks | on | Safe-page hits are written with is_safe_page = 1. Turn it off and they will not reach the database |
| Exclude Safe Page clicks from reports | on | Hits stay in the click log but do not count as visits or anything derived from them (uniques, bots, empty referers, cost, CPV). They never appear in "Clicks" |
Even when hits are not written, the suppressed-hit counter (cloak_suppressed_stats) counts them per campaign, stream, day, and verdict — "zero clicks" will not hide the real traffic.
- Bot IP addresses — IPs and CIDR, IPv4 and IPv6. Every entry has a source (manual or from a feed); cleanup can delete entries of one source only.
- Signatures (User-Agent) — substrings.
-
Global Bot ISP blacklist — one provider per line. Too-short and too-generic strings (
Inc,LLC) are ignored: they would match almost every ISP. -
Data-center and crawler IP ranges — published ranges of AWS, Google Cloud and Googlebot, Bing, Azure, Oracle, DigitalOcean, Facebook, Telegram, OpenAI, Cloudflare, Apple Private Relay, and others from lord-alfred/ipranges. Updated daily by the
ipranges_cron.phpcron (manually via the "Update now" button orphp ipranges_cron.php --force), stored invar/ipranges/. Until the lists are downloaded, the layer is inactive. - Treat VPN ASN as a bot signal — on by default. Turn it off if your audience widely sits behind a commercial VPN.
- The cloak card in the editor — how many hits went to money and to safe over the selected period, the top reasons, and a link into the click log with the same window. If almost all traffic goes to the safe page, the card warns.
- The click log — the "Route" and "Reason" columns appear automatically when there are cloak clicks on the page, with a filter by route and reason. The click card shows the verdict and reasons, but only for clicks the cloak actually judged.
-
The test link with
_dbg=1— a routing trace without recording a click;_geo=XXoverrides the country (Campaigns and streams). -
The PHP log — lines like
Orbitra cloak [campaign=12 stream=34]: stage=PASSIVE_SAFE ... reasons=[crawler_or_tool_ua].
Verdicts: money, passive_safe, targeting_safe, js_safe. Reasons are written to clicks.cloak_reasons; the main ones:
| Code | Meaning |
|---|---|
geo_country / geo_unknown
|
country not in the list / country could not be determined |
device_type |
device type not allowed |
bot_isp, isp_blocklist
|
ISP in the bot and data-center list |
datacenter_asn, asn_datacenter
|
data-center or hosting ASN |
vpn_proxy_asn |
VPN or proxy provider ASN |
iprange_datacenter |
IP in a published cloud or crawler range |
hosting_isp |
hosting keyword in the ISP name |
ip2proxy_* |
an IP2Proxy signal: vpn_proxy, datacenter, residential, tor, bot, threat, high_fraud
|
bot_blocklist |
IP in the bot list |
crawler_or_tool_ua, suspicious_ua, no_user_agent, missing_accept_language
|
User-Agent and header heuristics |
webdriver, js_missing, js_fingerprint
|
JavaScript verification |
| Symptom | What to check |
|---|---|
| The ad dashboard shows clicks, the tracker shows zero | Whether Safe Page click recording is off; the suppressed-hit counter |
| 100% of traffic on the safe page | Whether the geo database is installed (⚙ → Geo databases); geo_unknown reasons in the click log |
| Live mobile users on the safe page | Reason ip2proxy_vpn_proxy — remove the VPN/proxy layer (it is a hard signal; low sensitivity will not cancel it) |
| Meta or Telegram reviewers reach the offer | Their networks are not flagged as data centers by ASN; a single range hit at medium sensitivity is only a soft signal. Raise the sensitivity or add a "Bot" filter to an intercepting stream |
Вики собирается из папки docs/ репозитория. Правки — через pull request в docs/.
Getting started
Traffic
- Campaigns & streams
- Cloaking
- Landing pages
- Tracking Client (PHP)
- PWA & Web Push
- PWA Funnel
- Content gallery
Conversions & money
Analytics
Infrastructure
Management
For developers