voidly
Data

Asia / Southern Asia · IR

Iran.

A closer look at internet access.
The score, the signals, the source.

30-day index score

15/100

A dated sample-based score. Higher values indicate more interference in the index model.

Measurements in window
4,467
Original snapshot rank
#5

Snapshot fetched

Editorial context

Understand the backdrop.

Iran implements pervasive internet filtering, blocking social media and news sites. Filtering intensifies during protests and political events.

Severe editorial tierworsening editorial trend

This context is curated and undated. The trend is an editorial label, not a computed recent movement.

Country narrative, score basis and historical source

Iran implements pervasive internet filtering, blocking social media and news sites. Filtering intensifies during protests and political events.

Editorial text is preserved as source context. Product recommendations do not guarantee unrestricted access. The source tier may differ from the measured score because the two have different definitions.

Score window: 30 days. Snapshot fetched . Content first seen . Upstream serve-time . These timestamps do not date the all-time OONI observations.

All-time measurements accumulate from an older source file without an observation window or timestamp. The all-time blocked ratio is not the confidence-shrunk score. Zero counts and absent fields are kept distinct.

All-time measurement archive

Accumulated measurements
590,398
Flagged blocked in archive
266,692
All-time blocked / total
45.2%
Stored protocol counts · separate historical fields
Web567,777
Telegram11,260
WhatsApp11,361

No collection date or complete-country coverage claim is attached to this archive. Protocol fields can be incomplete and need not sum to the historical total.

Country incident records

Start with an observation.

All country records
253 source records · 10 returned hereGenerated
  1. Internet connectivity disruption in Iran

    ioda · IR-2026-2432

    1 source measurements · incident confidence 65.0%

    Record description

    IODA detected significant connectivity drop in Iran. 1 critical alerts recorded.

    Type disruptionStatus activeSeverity critical
  2. Internet connectivity disruption in Iran

    ioda · IR-2026-2429

    1 source measurements · incident confidence 65.0%

    Record description

    IODA detected significant connectivity drop in Iran. 1 critical alerts recorded.

    Type disruptionStatus activeSeverity critical
  3. Censorship detected in IR

    ooni · censoredplanet · IR-2026-2430

    16 source measurements · incident confidence 90.0%

    Type censorshipStatus suspectedSeverity critical
  4. Internet connectivity disruption in Iran

    ioda · IR-2026-2427

    5 source measurements · incident confidence 70.0%

    Record description

    IODA detected significant connectivity drop in Iran. 5 critical alerts recorded.

    Type disruptionStatus activeSeverity critical
  5. Censorship detected in IR

    ooni · IR-2026-2428

    16 source measurements · incident confidence 90.0%

    Type censorshipStatus suspectedSeverity critical
  6. Censorship detected in IR

    ooni · censoredplanet · IR-2026-2426

    16 source measurements · incident confidence 90.0%

    signal.org

    Type censorshipStatus suspectedSeverity critical
  7. Censorship detected in IR

    ooni · censoredplanet · IR-2026-2423

    16 source measurements · incident confidence 90.0%

    bbc.com · chat.openai.com · chatgpt.com · claude.ai · facebook.com · gemini.google.com · getlantern.org · google.com · huggingface.co · instagram.com · medium.com · nytimes.com · openai.com · protonvpn.com · psiphon.ca · reddit.com · signal.org · substack.com · telegram.org · theguardian.com · tiktok.com · tumblr.com · twitter.com · whatsapp.com · youtube.com

    Type censorshipStatus suspectedSeverity critical
  8. Internet connectivity disruption in Iran

    ioda · IR-2026-2420

    1 source measurements · incident confidence 65.0%

    Record description

    IODA detected significant connectivity drop in Iran. 1 critical alerts recorded.

    Type disruptionStatus activeSeverity critical
  9. Censorship detected in IR

    ooni · IR-2026-2421

    16 source measurements · incident confidence 90.0%

    Type censorshipStatus suspectedSeverity critical
  10. Internet connectivity disruption in Iran

    ioda · IR-2026-2418

    1 source measurements · incident confidence 65.0%

    Record description

    IODA detected significant connectivity drop in Iran. 1 critical alerts recorded.

    Type disruptionStatus activeSeverity critical

Statuses come from each record; “active” is not inferred from severity or an absent end date. Incident confidence is a source field, not independent certainty that censorship occurred.

Evidence sources, query scope and dates
  • ioda: named by 5 returned incident records
  • ooni: named by 5 returned incident records
  • censoredplanet: named by 3 returned incident records

This is the source mix in the latest returned incident sample, not independent corroboration of the country score. A record can name multiple sources; the counts can overlap.

Dataset version: 2026.09.11. Malformed rows omitted: 0. All readable returned records appear above; each links to its complete evidence and citation page.

Measurement context

Know what is observed.

Quality methods

Current country response

Source branch
OONI response
OONI measurements
5,489
Sample anomaly rate
15.4%
Source confirmed-rate field
27.6%
Measurement source updated

An anomaly is a measurement result requiring interpretation. These country API fields use a different basis from the dated, confidence-shrunk index score.

Services named by this API response
SignalTelegramTorWhatsApp

Names may be tests or services. Inclusion alone does not establish complete blocking.

Country API basis and complete response

Source generated: . This is a source timestamp, not proof that every underlying observation is current.

Open the source response

Complete returned record
{
  "@context": "https://schema.org",
  "@type": "Country",
  "name": "Iran",
  "identifier": "IR",
  "url": "https://voidly.ai/censorship-index/ir",
  "additionalProperty": [
    {
      "@type": "PropertyValue",
      "name": "Censorship Score",
      "value": 15,
      "description": "0-100 scale where 100 = total internet censorship"
    },
    {
      "@type": "PropertyValue",
      "name": "Anomaly Rate",
      "value": 0.1535798870468209
    },
    {
      "@type": "PropertyValue",
      "name": "Measurement Count",
      "value": 5489
    }
  ],
  "data": {
    "country": "IR",
    "name": "Iran",
    "flag": "🇮🇷",
    "region": "Middle East",
    "timestamp": "2026-09-11T04:03:35.723Z",
    "status": "low",
    "score": 15,
    "categoryScores": {},
    "blockedSites": [],
    "affectedServices": [
      "Signal",
      "Telegram",
      "Tor",
      "WhatsApp"
    ],
    "voidlyProbes": {
      "total": 0,
      "successful": 0,
      "blocked": 0
    },
    "ooni": {
      "status": "partial_outage",
      "anomalyRate": 0.1535798870468209,
      "confirmedRate": 0.2760065585716888,
      "measurementCount": 5489,
      "affectedServices": [
        "Signal",
        "Telegram",
        "Tor",
        "WhatsApp"
      ],
      "lastUpdated": "2026-09-11T03:15:37.698Z"
    },
    "activeIncidents": []
  },
  "dataSource": "live_ooni",
  "source": "Voidly Global Censorship Index",
  "lastUpdated": "2026-09-11T04:03:35.979Z"
}

Country measurement quality

Measurement confidence
84/100 · high
30-day source measurements
4,424
Distinct measured domains
1,204
Reported source count
3
Hours since measured
5.5

Quality measures evidence confidence, not censorship probability. A small or absent sample cannot establish country-wide access. Quality generated: .

Quality source
Country-origin probes and global network status

Country-origin probe records: Unavailable. Flagged in that sample: Unavailable (Unavailable).

Global core + community active nodes: 40. Core active nodes: 15. Global probes in the last 24 hours: 144,192. Network source updated: .

Global infrastructure totals do not prove that this country was tested from every location. A node’s reported status and country reflect network infrastructure, not national internet freedom.

No country-origin nodes were returned in this network response.

Model outlook

Read the horizon.

Drivers & similar episodes

7-day event probability

29.9%

A censorship or connectivity event within seven days of the model’s as-of date, relative to the country’s baseline. It does not predict an exact shutdown date or measure standing freedom.

Model: honest_forecast_v1
Model as-of date:
Source decision threshold: 62.5%

7-day model, legacy trajectory and full source

Source generated: . This is a source timestamp, not proof that every underlying observation is current.

fixed in-sample model confidence, NOT a per-forecast calibrated probability

Use for cross-country RISK RANKING, not precise within-country day-of-shutdown timing.

This forecast scores the ONSET of a new recorded incident, not how censored a country already is. A permanently and stably blocked network generates no new anomaly, so it scores LOW. Measured 2026-07-31: China 0.015 and India 0.023 both rank BELOW Denmark 0.062 — China is probed 30/30 days across 836 domains and has logged nothing for 71 days, while Denmark is probed 2/30 days. A low score here means 'no CHANGE expected', never 'this country is free'. For standing severity use /v1/atlas/score-v2 or the censorship index instead.

Training ROC AUC 0.954 came from a RANDOM stratified split (consecutive country-days in an incident window are near-duplicates, inflating it). No target leakage: features use [date-7,date], label uses [date+1,date+7].

~0.85-0.90 (dual-holdout temporal gate)

ML_LEAKAGE_AUDIT.md (forecast v1/7day row).

Open the source response

Complete returned record
{
  "aci": {
    "active": true,
    "alpha": 0.078,
    "empirical_coverage": 0.8991,
    "last_updated": "2026-09-11T03:45:01.557851+00:00",
    "n_observations": 2518,
    "q_applied": 0.35,
    "q_raw": 0.95
  },
  "aci_alpha": 0.078,
  "confidence": 0.85,
  "country": "IR",
  "country_name": "Iran",
  "covered": true,
  "forecast": [
    {
      "date": "2026-09-11",
      "day": 0,
      "drivers": [
        "Mahsa Amini Anniversary 2026 in 5d"
      ],
      "risk": 0.047
    },
    {
      "date": "2026-09-12",
      "day": 1,
      "drivers": [
        "Mahsa Amini Anniversary 2026 in 4d"
      ],
      "risk": 0.047
    },
    {
      "date": "2026-09-13",
      "day": 2,
      "drivers": [
        "Mahsa Amini Anniversary 2026 in 3d"
      ],
      "risk": 0.06
    },
    {
      "date": "2026-09-14",
      "day": 3,
      "drivers": [
        "Mahsa Amini Anniversary 2026 in 2d"
      ],
      "risk": 0.081
    },
    {
      "date": "2026-09-15",
      "day": 4,
      "drivers": [
        "Mahsa Amini Anniversary 2026 in 1d"
      ],
      "risk": 0.096
    },
    {
      "date": "2026-09-16",
      "day": 5,
      "drivers": [
        "Mahsa Amini Anniversary 2026"
      ],
      "risk": 0.139
    },
    {
      "date": "2026-09-17",
      "day": 6,
      "drivers": [],
      "risk": 0.035
    },
    {
      "date": "2026-09-18",
      "day": 7,
      "drivers": [],
      "risk": 0.037
    }
  ],
  "forecast_trajectory_note": "summary.max_risk is now the independently-validated honest 7-day event probability. The per-day forecast[] trajectory is the legacy v1 illustrative shape (NOT independently validated) — use honest_forecast for the headline; the v1 value is kept as max_risk_v1_leaky.",
  "generated_at": "2026-09-11T04:03:36.015274",
  "honest_caveat": {
    "confidence_is": "fixed in-sample model confidence, NOT a per-forecast calibrated probability",
    "correct_use": "Use for cross-country RISK RANKING, not precise within-country day-of-shutdown timing.",
    "detects_change_not_state": "This forecast scores the ONSET of a new recorded incident, not how censored a country already is. A permanently and stably blocked network generates no new anomaly, so it scores LOW. Measured 2026-07-31: China 0.015 and India 0.023 both rank BELOW Denmark 0.062 — China is probed 30/30 days across 836 domains and has logged nothing for 71 days, while Denmark is probed 2/30 days. A low score here means 'no CHANGE expected', never 'this country is free'. For standing severity use /v1/atlas/score-v2 or the censorship index instead.",
    "headline_auc_note": "Training ROC AUC 0.954 came from a RANDOM stratified split (consecutive country-days in an incident window are near-duplicates, inflating it). No target leakage: features use [date-7,date], label uses [date+1,date+7].",
    "honest_temporal_holdout_auc": "~0.85-0.90 (dual-holdout temporal gate)",
    "live_forward_accountability": [
      "GET /v1/sentinel/accuracy (rolling 30-day precision/recall; currently self-reported degraded)",
      "GET /v1/forecast/onset-skill (honest onset / forward skill)"
    ],
    "source": "ML_LEAKAGE_AUDIT.md (forecast v1/7day row)."
  },
  "honest_forecast": {
    "as_of": "2026-09-09",
    "flag": false,
    "is_headline_source": true,
    "probability": 0.2993,
    "recommended_threshold": 0.625,
    "risk_band": "low",
    "semantics": "probability of a censorship/connectivity EVENT in the next 7 days (country-relative z-score label)",
    "validation": "Independent OONI-grounded + leakage-free. Rolling-origin AUC ~0.815, PR-AUC ~0.29; beats persistence/climatology in all 9 temporal folds; LOCO beats persistence 49/51 countries. See /v1/forecast/honest/info."
  },
  "interval_90": [
    0,
    0.489
  ],
  "model_version": "honest_forecast_v1",
  "summary": {
    "avg_risk": 0.068,
    "key_drivers": [
      "Mahsa Amini Anniversary 2026 in 2d",
      "Mahsa Amini Anniversary 2026 in 3d",
      "Mahsa Amini Anniversary 2026 in 5d",
      "Mahsa Amini Anniversary 2026",
      "Mahsa Amini Anniversary 2026 in 1d"
    ],
    "max_risk": 0.2993,
    "max_risk_day": 5,
    "max_risk_v1_leaky": 0.139
  },
  "top_features": [
    {
      "contribution": -0.0349,
      "direction": "down",
      "name": "risk_tier",
      "source": "model"
    },
    {
      "contribution": -0.024,
      "direction": "down",
      "name": "month",
      "source": "model"
    },
    {
      "contribution": 0.0187,
      "direction": "up",
      "name": "block_rate_roll30_mean",
      "source": "model"
    }
  ],
  "top_features_per_day": [
    {
      "base_prob": 0.0038,
      "date": "2026-09-11",
      "day": 0,
      "risk": 0.047,
      "top_features": [
        {
          "contribution": 0.04,
          "direction": "up",
          "name": "event:Mahsa Amini Anniversary 2026 in 5d",
          "source": "overlay"
        },
        {
          "contribution": -0.0349,
          "direction": "down",
          "name": "risk_tier",
          "source": "model"
        },
        {
          "contribution": -0.024,
          "direction": "down",
          "name": "month",
          "source": "model"
        }
      ]
    },
    {
      "base_prob": 0.0038,
      "date": "2026-09-12",
      "day": 1,
      "risk": 0.047,
      "top_features": [
        {
          "contribution": 0.0455,
          "direction": "up",
          "name": "event:Mahsa Amini Anniversary 2026 in 4d",
          "source": "overlay"
        },
        {
          "contribution": -0.0349,
          "direction": "down",
          "name": "risk_tier",
          "source": "model"
        },
        {
          "contribution": -0.024,
          "direction": "down",
          "name": "month",
          "source": "model"
        }
      ]
    },
    {
      "base_prob": 0.0038,
      "date": "2026-09-13",
      "day": 2,
      "risk": 0.06,
      "top_features": [
        {
          "contribution": 0.0526,
          "direction": "up",
          "name": "event:Mahsa Amini Anniversary 2026 in 3d",
          "source": "overlay"
        },
        {
          "contribution": -0.0349,
          "direction": "down",
          "name": "risk_tier",
          "source": "model"
        },
        {
          "contribution": -0.024,
          "direction": "down",
          "name": "month",
          "source": "model"
        }
      ]
    },
    {
      "base_prob": 0.0038,
      "date": "2026-09-14",
      "day": 3,
      "risk": 0.081,
      "top_features": [
        {
          "contribution": 0.0625,
          "direction": "up",
          "name": "event:Mahsa Amini Anniversary 2026 in 2d",
          "source": "overlay"
        },
        {
          "contribution": -0.0349,
          "direction": "down",
          "name": "risk_tier",
          "source": "model"
        },
        {
          "contribution": -0.024,
          "direction": "down",
          "name": "month",
          "source": "model"
        }
      ]
    },
    {
      "base_prob": 0.0038,
      "date": "2026-09-15",
      "day": 4,
      "risk": 0.096,
      "top_features": [
        {
          "contribution": 0.0769,
          "direction": "up",
          "name": "event:Mahsa Amini Anniversary 2026 in 1d",
          "source": "overlay"
        },
        {
          "contribution": -0.0349,
          "direction": "down",
          "name": "risk_tier",
          "source": "model"
        },
        {
          "contribution": -0.024,
          "direction": "down",
          "name": "month",
          "source": "model"
        }
      ]
    },
    {
      "base_prob": 0.0038,
      "date": "2026-09-16",
      "day": 5,
      "risk": 0.139,
      "top_features": [
        {
          "contribution": 0.1,
          "direction": "up",
          "name": "event:Mahsa Amini Anniversary 2026",
          "source": "overlay"
        },
        {
          "contribution": -0.0349,
          "direction": "down",
          "name": "risk_tier",
          "source": "model"
        },
        {
          "contribution": 0.025,
          "direction": "up",
          "name": "day_decay_t+5",
          "source": "overlay"
        }
      ]
    },
    {
      "base_prob": 0.0038,
      "date": "2026-09-17",
      "day": 6,
      "risk": 0.035,
      "top_features": [
        {
          "contribution": -0.0349,
          "direction": "down",
          "name": "risk_tier",
          "source": "model"
        },
        {
          "contribution": 0.03,
          "direction": "up",
          "name": "day_decay_t+6",
          "source": "overlay"
        },
        {
          "contribution": -0.024,
          "direction": "down",
          "name": "month",
          "source": "model"
        }
      ]
    },
    {
      "base_prob": 0.0038,
      "date": "2026-09-18",
      "day": 7,
      "risk": 0.037,
      "top_features": [
        {
          "contribution": 0.035,
          "direction": "up",
          "name": "day_decay_t+7",
          "source": "overlay"
        },
        {
          "contribution": -0.0349,
          "direction": "down",
          "name": "risk_tier",
          "source": "model"
        },
        {
          "contribution": -0.024,
          "direction": "down",
          "name": "month",
          "source": "model"
        }
      ]
    }
  ]
}
Legacy daily illustration · 8 points

The returned daily shape belongs to legacy v1. It is not independently validated and does not describe the honest 7-day headline model above. Its peak day, fixed confidence and interval must not be attached to that headline.

summary.max_risk is now the independently-validated honest 7-day event probability. The per-day forecast[] trajectory is the legacy v1 illustrative shape (NOT independently validated) — use honest_forecast for the headline; the v1 value is kept as max_risk_v1_leaky.

DateLegacy valueSource drivers
2026-09-114.7%Mahsa Amini Anniversary 2026 in 5d
2026-09-124.7%Mahsa Amini Anniversary 2026 in 4d
2026-09-136.0%Mahsa Amini Anniversary 2026 in 3d
2026-09-148.1%Mahsa Amini Anniversary 2026 in 2d
2026-09-159.6%Mahsa Amini Anniversary 2026 in 1d
2026-09-1613.9%Mahsa Amini Anniversary 2026
2026-09-173.5%
2026-09-183.7%
Legacy forecast evaluation

Original display confidence field: 85.0%. The source describes this as fixed in-sample model confidence, not calibrated per-forecast certainty.

Three horizons. Visible uncertainty.

Separate multi-horizon model. Each mark is the point estimate; its bar is the source’s 90% conformal interval.

1d

36.4% · 90% interval 31.4%–41.4%

7d

35.6% · 90% interval 0.0%–85.6%

30d

95.2% · 90% interval 45.2%–100.0%

Model: multi-horizon-h-v1. Longer-horizon intervals can be very wide; these estimates do not support precise within-country timing.

Source consistency: within the model’s monotonicity tolerance.

Per-horizon breakdown
Multi-horizon limitations, features and source

Source generated: . This is a source timestamp, not proof that every underlying observation is current.

AUC (e.g. 1d ~0.91) OVERSTATES usefulness — per-horizon F1 is much lower (~0.45 at 1d) because shutdown-positive days are rare and the 7/30-day target is a sliding window that is highly autocorrelated day-to-day (a leakage-prone label).

Conformal bands widen sharply at 30d (often ~[0.45, 1.0]) — the 30d point estimate is low-confidence.

Use for cross-country RISK RANKING within the watched panel, NOT precise within-country day-of-shutdown timing. Data-backed for covered countries only (see the 'covered' flag).

This forecast scores the ONSET of a new recorded incident, not how censored a country already is. A permanently and stably blocked network generates no new anomaly, so it scores LOW. Measured 2026-07-31: China 0.015 and India 0.023 both rank BELOW Denmark 0.062 — China is probed 30/30 days across 836 domains and has logged nothing for 71 days, while Denmark is probed 2/30 days. A low score here means 'no CHANGE expected', never 'this country is free'. For standing severity use /v1/atlas/score-v2 or the censorship index instead.

Per-horizon AUC is leave-one-country-out on the SPOTLIGHT (watched) panel, NOT all 130 countries; see /v1/forecast/multi-horizon/info for the per-horizon F1.

Open the source response

Complete returned record
{
  "consistency": {
    "monotonic": true,
    "violations": []
  },
  "country": "IR",
  "country_name": "Iran",
  "covered": true,
  "generated_at": "2026-09-11T04:03:36.206802",
  "honest_caveat": {
    "auc_caveat": "AUC (e.g. 1d ~0.91) OVERSTATES usefulness — per-horizon F1 is much lower (~0.45 at 1d) because shutdown-positive days are rare and the 7/30-day target is a sliding window that is highly autocorrelated day-to-day (a leakage-prone label).",
    "conformal_caveat": "Conformal bands widen sharply at 30d (often ~[0.45, 1.0]) — the 30d point estimate is low-confidence.",
    "correct_use": "Use for cross-country RISK RANKING within the watched panel, NOT precise within-country day-of-shutdown timing. Data-backed for covered countries only (see the 'covered' flag).",
    "detects_change_not_state": "This forecast scores the ONSET of a new recorded incident, not how censored a country already is. A permanently and stably blocked network generates no new anomaly, so it scores LOW. Measured 2026-07-31: China 0.015 and India 0.023 both rank BELOW Denmark 0.062 — China is probed 30/30 days across 836 domains and has logged nothing for 71 days, while Denmark is probed 2/30 days. A low score here means 'no CHANGE expected', never 'this country is free'. For standing severity use /v1/atlas/score-v2 or the censorship index instead.",
    "metrics_are": "Per-horizon AUC is leave-one-country-out on the SPOTLIGHT (watched) panel, NOT all 130 countries; see /v1/forecast/multi-horizon/info for the per-horizon F1."
  },
  "honest_horizons": [
    "1d",
    "30d",
    "7d"
  ],
  "horizons": {
    "1d": {
      "conformal_90": {
        "halfwidth": 0.05,
        "lower": 0.314,
        "upper": 0.414
      },
      "horizon": "1d",
      "horizon_days": 1,
      "probability": 0.364,
      "top_features": [
        {
          "feature": "week_of_year",
          "shap_value": -0.7300894260406494
        },
        {
          "feature": "risk_tier",
          "shap_value": -0.33880749344825745
        },
        {
          "feature": "block_rate_roll14_mean",
          "shap_value": 0.16694492101669312
        },
        {
          "feature": "block_rate_roll7_mean",
          "shap_value": -0.1432398408651352
        },
        {
          "feature": "month",
          "shap_value": -0.10831057280302048
        }
      ]
    },
    "30d": {
      "conformal_90": {
        "halfwidth": 0.5,
        "lower": 0.4521,
        "upper": 1
      },
      "horizon": "30d",
      "horizon_days": 30,
      "probability": 0.9521,
      "top_features": [
        {
          "feature": "week_of_year",
          "shap_value": -0.7111629843711853
        },
        {
          "feature": "block_rate_roll14_mean",
          "shap_value": 0.5628354549407959
        },
        {
          "feature": "risk_tier",
          "shap_value": -0.23049543797969818
        },
        {
          "feature": "recent_shutdown",
          "shap_value": -0.15476694703102112
        },
        {
          "feature": "blocked_count_roll14_mean",
          "shap_value": 0.10707134753465652
        }
      ]
    },
    "7d": {
      "conformal_90": {
        "halfwidth": 0.5,
        "lower": 0,
        "upper": 0.8564
      },
      "horizon": "7d",
      "horizon_days": 7,
      "probability": 0.3564,
      "top_features": [
        {
          "feature": "risk_tier",
          "shap_value": -0.8031597137451172
        },
        {
          "feature": "week_of_year",
          "shap_value": -0.7068994641304016
        },
        {
          "feature": "block_rate_roll7_std",
          "shap_value": -0.1718563735485077
        },
        {
          "feature": "month",
          "shap_value": -0.14763525128364563
        },
        {
          "feature": "block_rate_roll14_mean",
          "shap_value": 0.10017592459917068
        }
      ]
    }
  },
  "model_version": "multi-horizon-h-v1"
}

Model evaluation and labels differ. Honest 7-day model · Multi-horizon evaluation. An API response date is not the date of the underlying training data.

Additional signals

More context. Separate models.

Model changelog

Each source answers a different question. Missing signals stay visible.

Voidly composite score

59.37 / 100

Separate from the index score. A weighted signal composite; sparse evidence can pull it toward zero.

+8.29 points vs source’s previous smoothed value.

Source marks its age within the stated freshness limit.

Score method
Source, dates and limitations

Source generated: . This is a source timestamp, not proof that every underlying observation is current.

  • Weights are hand-tuned, not learned end-to-end.
  • The seven components are correlated — the weighted sum is not a pure information-theoretic average.
  • 'Intensity' is editorial framing. The metric is a censorship-risk-weighted average across live signals, not a direct user-facing measurement.
  • Mobile-blocking skew is approximated from OONI test_name= URL params and gated to countries with at least 10 probes in the last 7 days.
  • The first 3 days after rollout the smoothed series equals the raw score (cold start); deltas stabilize after that.
  • Countries with sparse data (low OONI coverage, no recent incidents, no DBSCAN window) will float near 0 not because they are uncensored but because the signals collapse there.

Open the source response

Complete returned record
{
  "age_hours": 23.46,
  "components_normalized": {
    "agreement": 0.6726,
    "classifier": 0.626,
    "dbscan": 1,
    "domain_div": 1,
    "forecast": 0.3635,
    "incident_rate": 0,
    "mobile_skew": 0.7245
  },
  "components_points": {
    "agreement": 8.41,
    "classifier": 23.48,
    "dbscan": 18.75,
    "domain_div": 12.5,
    "incident_rate": 0,
    "mobile_skew": 4.53
  },
  "country": "IR",
  "country_name": "Iran",
  "delta_vs_yesterday": 8.29,
  "ema_status": "warm",
  "generated_at": "2026-09-10T04:35:58.851132+00:00",
  "honest_caveats": [
    "Weights are hand-tuned, not learned end-to-end.",
    "The seven components are correlated — the weighted sum is not a pure information-theoretic average.",
    "'Intensity' is editorial framing. The metric is a censorship-risk-weighted average across live signals, not a direct user-facing measurement.",
    "Mobile-blocking skew is approximated from OONI test_name= URL params and gated to countries with at least 10 probes in the last 7 days.",
    "The first 3 days after rollout the smoothed series equals the raw score (cold start); deltas stabilize after that.",
    "Countries with sparse data (low OONI coverage, no recent incidents, no DBSCAN window) will float near 0 not because they are uncensored but because the signals collapse there."
  ],
  "interpretation": "smoothed_score is what to put in a headline; raw_score is today's component sum before EMA. delta_vs_yesterday is the movement (positive = censorship intensifying).",
  "previous_raw_score": 56.74,
  "previous_smoothed_score": 51.08,
  "raw_score": 67.66,
  "raw_signals": {
    "agreement_n_sources": null,
    "agreement_rate_2plus": 0.6726,
    "classifier_date": null,
    "classifier_label": 1,
    "classifier_probability": 0.626,
    "classifier_threshold": 0.5457,
    "classifier_version": "v3.3",
    "dbscan_anomaly_score_raw": 9.3862,
    "dbscan_date": "2026-09-09",
    "dbscan_is_anomaly": true,
    "forecast_key_drivers": [
      "Mahsa Amini Anniversary 2026 in 2d",
      "Mahsa Amini Anniversary 2026 in 3d",
      "Mahsa Amini Anniversary 2026 in 5d"
    ],
    "forecast_max_day": 6,
    "forecast_max_risk": 0.3635,
    "incidents_24h_censorship": 0,
    "incidents_24h_disruption": 0,
    "incidents_24h_weighted": 0,
    "mobile_skew": 0.3623,
    "ooni_mobile_probes_7d": 96,
    "ooni_probes_7d": 265,
    "unique_blocked_domains_30d": 825
  },
  "run_date": "2026-09-10",
  "schema": "voidly-score-country/v1",
  "sidecar_age_hr": 23.46,
  "smoothed_score": 59.37,
  "stale": false,
  "stale_after_hours": 26,
  "stale_field_note": "`stale` is three-valued: true / false / \"unknown\". \"unknown\" means the age could not be determined (missing or unparseable timestamp) and is NOT an assertion of freshness -- it is truthy on purpose so that a consumer testing the field falls to the cautious side. Check `stale_known` for a strict boolean and `stale_reason` for how the verdict was reached.",
  "stale_known": true,
  "stale_reason": "generated_at is 23.46h old, within the 26.00h threshold.",
  "weights": {
    "agreement": 0.125,
    "classifier": 0.375,
    "dbscan": 0.1875,
    "domain_div": 0.125,
    "incident_rate": 0.125,
    "mobile_skew": 0.0625
  }
}

Conditional incident duration

5 median days

Scenario: a critical censorship incident in Iran. This is not a timer for an existing incident.

Source interquartile range: 313 days.

Exploratory · source model is below its promotion threshold.

Model trained: . Censoring in training data: 78.4%.

Duration assumptions, request and source

Source generated: Date unavailable. This is a source timestamp, not proof that every underlying observation is current.

  • model below promote floor (c=0.55, n=343) — treat as exploratory
  • censoring rate in training set: 78%

This read-only inference endpoint requires a POST request:

POST https://api.voidly.ai/v1/forecast/duration
Content-Type: application/json

{
  "country": "IR",
  "severity": "critical",
  "incident_type": "censorship"
}

API documentation

Complete returned record
{
  "country": "IR",
  "features_used": {
    "continent_Africa": 0,
    "continent_Americas": 0,
    "continent_Asia": 1,
    "continent_Europe": 0,
    "continent_Oceania": 0,
    "country_risk_tier": 1,
    "first_seen_month": 9,
    "first_seen_year": 2026,
    "prior_shutdowns_count_24mo": 161,
    "severity_critical": 1,
    "severity_warning": 0,
    "type_censorship": 1,
    "type_mixed": 0
  },
  "honest_caveats": [
    "model below promote floor (c=0.55, n=343) — treat as exploratory",
    "censoring rate in training set: 78%"
  ],
  "incident_type": "censorship",
  "iqr_days": 10,
  "median_days": 5,
  "median_hours": 120,
  "model": {
    "censoring_rate": 0.7842565597667639,
    "class": "RandomSurvivalForest",
    "feature_names": [
      "country_risk_tier",
      "first_seen_year",
      "first_seen_month",
      "prior_shutdowns_count_24mo",
      "continent_Africa",
      "continent_Americas",
      "continent_Asia",
      "continent_Europe",
      "continent_Oceania",
      "severity_critical",
      "severity_warning",
      "type_censorship",
      "type_mixed"
    ],
    "name": "shutdown_duration_rsf_v1",
    "trained_at": "2026-05-21T12:01:30.451711Z"
  },
  "model_c_index": 0.5455,
  "n_training_samples": 343,
  "p25_hours": 72,
  "p75_hours": 312,
  "promoted": false,
  "severity": "critical",
  "survival_curve_summary": [
    {
      "hours": 48,
      "survival_prob": 0.9
    },
    {
      "hours": 72,
      "survival_prob": 0.75
    },
    {
      "hours": 120,
      "survival_prob": 0.5
    },
    {
      "hours": 312,
      "survival_prob": 0.25
    },
    {
      "hours": 5952,
      "survival_prob": 0.1
    }
  ]
}

Contagion follow-risk

31.9% source ranking score

Trigger attribution is probabilistic, not causal. Noisy-OR aggregation can overstate risk when triggers share a cause.

Horizon: 3 days. Source baseline: 48.8%.

Source, dates and limitations

Source generated: . This is a source timestamp, not proof that every underlying observation is current.

  • Inherits contagion-chain v1 model uncertainty (primary horizon AUC ~0.67).
  • 24-48h is a TIGHT window. Most observed contagion patterns are 3-7d. This endpoint uses the shortest supported horizon (3d) as the closest proxy.
  • A country on the watchlist does NOT mean it WILL block. The score is a relative ranking; absolute calibration of the underlying pairwise classifier is moderate (Brier ~0.14 at 3d).
  • Trigger attribution is probabilistic (per-pair model output), not causal. Two countries spiking around the same time can also reflect shared upstream outages, regional politics, or coincidence.
  • Noisy-OR aggregation assumes triggers act independently — this overestimates risk when multiple triggers share an underlying driver.
  • Base-rate adjustment subtracts (base_daily * horizon) to discount countries that block every day anyway. This is a heuristic, not a matched counterfactual.
  • With zero active triggers in the last 48h, watchlist is empty by design.

Open the source response

Complete returned record
{
  "attribution": [
    {
      "p_follow_3d": 0.4945,
      "pair_coevents_365d": 72,
      "same_auth_cluster": false,
      "same_region": false,
      "trigger": "SG",
      "trigger_date": "2026-09-09T20:52:00"
    },
    {
      "p_follow_3d": 0.4652,
      "pair_coevents_365d": 61,
      "same_auth_cluster": false,
      "same_region": true,
      "trigger": "TR",
      "trigger_date": "2026-09-09T00:20:00"
    },
    {
      "p_follow_3d": 0.2854,
      "pair_coevents_365d": 82,
      "same_auth_cluster": false,
      "same_region": false,
      "trigger": "BD",
      "trigger_date": "2026-09-09T13:10:00"
    }
  ],
  "base_prior_3d": 0.4878,
  "base_rate_daily": 0.1626,
  "country": "IR",
  "follower_events_30d": 31,
  "generated_at": "2026-09-11T00:17:02.740601+00:00",
  "honest_caveats": [
    "Inherits contagion-chain v1 model uncertainty (primary horizon AUC ~0.67).",
    "24-48h is a TIGHT window. Most observed contagion patterns are 3-7d. This endpoint uses the shortest supported horizon (3d) as the closest proxy.",
    "A country on the watchlist does NOT mean it WILL block. The score is a relative ranking; absolute calibration of the underlying pairwise classifier is moderate (Brier ~0.14 at 3d).",
    "Trigger attribution is probabilistic (per-pair model output), not causal. Two countries spiking around the same time can also reflect shared upstream outages, regional politics, or coincidence.",
    "Noisy-OR aggregation assumes triggers act independently — this overestimates risk when multiple triggers share an underlying driver.",
    "Base-rate adjustment subtracts (base_daily * horizon) to discount countries that block every day anyway. This is a heuristic, not a matched counterfactual.",
    "With zero active triggers in the last 48h, watchlist is empty by design."
  ],
  "horizon_days": 3,
  "n_active_triggers": 3,
  "noisy_or": 0.8068,
  "rank": 22,
  "score": 0.319,
  "status": "on_watchlist",
  "trigger_window_hours": 48,
  "underlying_model": {
    "name": "contagion-chain-v1 (pairwise XGBoost)",
    "primary_horizon_auc_h7": 0.6696949571962517,
    "sidecar": "/opt/voidly-ai/ml-deploy/contagion_chain_v1.json"
  }
}

Behavioral neighbors

Similarity of measured blocking patterns, not governments or intent. Sparse feature coverage lowers confidence.

Source, dates and limitations

Source generated: . This is a source timestamp, not proof that every underlying observation is current.

Similarity here is BEHAVIORAL, not political. Two countries are near each other because they BLOCK in similar ways — comparable method mix, target categories and temporal shape — which does NOT imply comparable governments, laws or intent. A stable democracy with seasonal sports-piracy blocks can sit near an authoritarian state if their measured blocking footprints rhyme. Feature vectors are SPARSE for low-coverage countries (flagged sparse=true, <3 of 5 behavioral feature families populated) — their neighbors are dominated by regime/continent/cohort one-hots and should be read with low confidence. The 2D graph projection (UMAP or PCA) compresses a 32-dimensional space to 2 and loses information — use the cosine `neighbors` list, not pixel distance in the projection, for any quantitative claim.

Open the source response

Complete returned record
{
  "country": "IR",
  "generated_at": "2026-09-07T05:10:09.714350+00:00",
  "honest_caveat": "Similarity here is BEHAVIORAL, not political. Two countries are near each other because they BLOCK in similar ways — comparable method mix, target categories and temporal shape — which does NOT imply comparable governments, laws or intent. A stable democracy with seasonal sports-piracy blocks can sit near an authoritarian state if their measured blocking footprints rhyme. Feature vectors are SPARSE for low-coverage countries (flagged sparse=true, <3 of 5 behavioral feature families populated) — their neighbors are dominated by regime/continent/cohort one-hots and should be read with low confidence. The 2D graph projection (UMAP or PCA) compresses a 32-dimensional space to 2 and loses information — use the cosine `neighbors` list, not pixel distance in the projection, for any quantitative claim.",
  "method": "standardized-cosine + pca",
  "nearest": [
    {
      "continent": "Asia",
      "country": "CN",
      "risk_tier": 1,
      "similarity": 0.8724,
      "sparse": false
    },
    {
      "continent": "Asia",
      "country": "PK",
      "risk_tier": 2,
      "similarity": 0.7978,
      "sparse": false
    },
    {
      "continent": "Asia",
      "country": "TR",
      "risk_tier": 2,
      "similarity": 0.7958,
      "sparse": false
    },
    {
      "continent": "Asia",
      "country": "MM",
      "risk_tier": 2,
      "similarity": 0.7772,
      "sparse": false
    },
    {
      "continent": "Asia",
      "country": "AE",
      "risk_tier": 2,
      "similarity": 0.7659,
      "sparse": false
    },
    {
      "continent": "Asia",
      "country": "TH",
      "risk_tier": 2,
      "similarity": 0.7647,
      "sparse": false
    },
    {
      "continent": "Asia",
      "country": "SA",
      "risk_tier": 2,
      "similarity": 0.7172,
      "sparse": false
    },
    {
      "continent": "Asia",
      "country": "BD",
      "risk_tier": 2,
      "similarity": 0.708,
      "sparse": false
    },
    {
      "continent": "Asia",
      "country": "VN",
      "risk_tier": 2,
      "similarity": 0.705,
      "sparse": false
    },
    {
      "continent": "Asia",
      "country": "KZ",
      "risk_tier": 2,
      "similarity": 0.6723,
      "sparse": false
    }
  ],
  "query_meta": {
    "continent": "Asia",
    "country": "IR",
    "dtw_cohort": 3,
    "evidence_count": 12430,
    "feature_families_present": 5,
    "feature_families_total": 5,
    "risk_tier": 1,
    "sparse": false
  },
  "version": "v1"
}

Evidence grade distribution

A: 76B: 136C: 30F: 3

Grades are source rubric categories. They do not independently establish deliberate blocking.

Grading rubric
Source, dates and limitations

Source generated: Date unavailable. This is a source timestamp, not proof that every underlying observation is current.

Open the source response

Complete returned record
{
  "distribution": {
    "A": 76,
    "B": 136,
    "C": 30,
    "F": 3
  },
  "filters": {
    "country": "IR",
    "incident_type": null
  },
  "rules": {
    "A": "else",
    "B": "n_sources >= 1 AND avg_confidence >= 0.7",
    "C": "n_sources >= 2 AND n_domains >= 3",
    "F": "duration_hours >= 24 AND n_sources >= 2"
  },
  "total": 253,
  "ungraded": 8
}

Measured circumvention results

Tor

78.0% probe success · 3,769 probes · 30-day source window.

Probe success is an upper bound on real-user success. “Try first” is not a safety guarantee; results can become stale within hours.

Source verdict: partial.

Full measurement table
Required caveats, tool notes and complete results

Source generated: . This is a source timestamp, not proof that every underlying observation is current.

  • PROBE SUCCESS != REAL-USER SUCCESS. DPI vendors increasingly rate-limit real client traffic while letting OONI / Voidly synthetic measurement probes through. Success rates here are an UPPER BOUND on what a real user will see.
  • Recommendations can become stale within hours. Censorship adapts. If a try_first tool stops working, the next probe rotation (cron daily 06:00 UTC) will catch it but you will see it before we do.
  • 'Try first' is NOT 'safe'. It means 'highest measured success rate, highest probe confidence.' Operational security (unique device, throwaway account, no SIM, no DNS leak, etc.) is the USER's responsibility — none of that is captured here.
  • Domain-fronted tools (Snowflake, Lantern, Psiphon) are SYSTEMATICALLY UNDER-ESTIMATED. Bootstrap-domain probes do not measure the rotating tunnel endpoints those tools actually use.
  • Self-hosted WireGuard / OpenVPN on a private IP is INVISIBLE to OONI probes and is not represented here. If you have one, trust it over any commercial recommendation.
  • Tor rows roll up vanilla / obfs4 / Snowflake / Meek transports. Per-transport granularity needs raw OONI nettests, out of scope for v1.
  • DO NOT share this recommendation as a forum-shareable card without the caveat block. The do_not_share_card_without_caveats flag in the response is on by design.

Open the source response

Complete returned record
{
  "country_code": "IR",
  "coverage_note": "1 tool(s) cleared the try_first bar in IR, 0 in fallback, 4 in avoid. Headline is the highest-ranked try_first tool.",
  "do_not_share_card_without_caveats": true,
  "endpoints": {
    "info": "/v1/atlas/circumvention/info",
    "leaderboard": "/v1/atlas/evasion/leaderboard",
    "upstream_evasion_table": "/v1/atlas/evasion/IR"
  },
  "generated_at": "2026-09-10T06:00:04.838214+00:00",
  "headline_basis": "try_first",
  "headline_recommendation": {
    "category": "anonymity-network",
    "confidence": 0.99,
    "n_total_probes": 3769,
    "rank_score": 0.7699,
    "success_rate": 0.7803,
    "tool_name": "Tor",
    "tool_note": "Tor uses obfs4 by default. If obfs4 fails, switch to the Snowflake bridge from inside the Tor Browser settings. The OONI tor test does NOT differentiate transports, so this row is the aggregate.",
    "tool_slug": "tor",
    "verdict": "partial"
  },
  "honest_caveats": [
    "PROBE SUCCESS != REAL-USER SUCCESS. DPI vendors increasingly rate-limit real client traffic while letting OONI / Voidly synthetic measurement probes through. Success rates here are an UPPER BOUND on what a real user will see.",
    "Recommendations can become stale within hours. Censorship adapts. If a try_first tool stops working, the next probe rotation (cron daily 06:00 UTC) will catch it but you will see it before we do.",
    "'Try first' is NOT 'safe'. It means 'highest measured success rate, highest probe confidence.' Operational security (unique device, throwaway account, no SIM, no DNS leak, etc.) is the USER's responsibility — none of that is captured here.",
    "Domain-fronted tools (Snowflake, Lantern, Psiphon) are SYSTEMATICALLY UNDER-ESTIMATED. Bootstrap-domain probes do not measure the rotating tunnel endpoints those tools actually use.",
    "Self-hosted WireGuard / OpenVPN on a private IP is INVISIBLE to OONI probes and is not represented here. If you have one, trust it over any commercial recommendation.",
    "Tor rows roll up vanilla / obfs4 / Snowflake / Meek transports. Per-transport granularity needs raw OONI nettests, out of scope for v1.",
    "DO NOT share this recommendation as a forum-shareable card without the caveat block. The do_not_share_card_without_caveats flag in the response is on by design."
  ],
  "informational_disclaimer": "This endpoint is INFORMATIONAL, not a safety guarantee. Probe success is an upper bound on real-user success. User assumes the risk of any tool selected from this ranking. 'Try first' does not mean 'safe' — it means 'highest measured success, highest probe confidence.'",
  "insufficient_coverage": false,
  "lookback_days": 30,
  "min_total_probes_floor": 100,
  "n_tools_measured": 5,
  "n_total_probes": 4568,
  "rank_formula": "success_rate * sqrt(confidence) * recency_decay",
  "schema": "voidly-circumvention-recommendation/v1",
  "tier_definitions": {
    "avoid": {
      "description": "High-confidence measurements show <10% probe success. Very likely blocked. Listed for transparency — do not trust the bootstrap path.",
      "label": "Avoid",
      "max_success_rate": 0.1,
      "min_confidence": 0.7
    },
    "fallback": {
      "description": "Either partial measured success (30%+) OR not enough probes to be sure. Worth trying if the try_first tools fail — but expect lower reliability.",
      "label": "Fallback",
      "max_confidence_for_uncertain": 0.5,
      "min_success_rate_lower": 0.3
    },
    "try_first": {
      "description": "High measured success rate AND high probe confidence. Still informational only — DPI vendors increasingly block real clients while letting measurement probes pass, so success_rate is an upper bound.",
      "label": "Try first",
      "min_confidence": 0.7,
      "min_success_rate": 0.7
    }
  },
  "tiers": {
    "avoid": [
      {
        "category": "vpn-proxy",
        "confidence": 0.99,
        "n_total_probes": 273,
        "rank_score": 0.0785,
        "success_rate": 0.0806,
        "tool_name": "Psiphon",
        "tool_note": "Psiphon ships a bundled server list — even if psiphon.ca is blocked, the app can usually bootstrap from cached entries.",
        "tool_slug": "psiphon",
        "verdict": "blocked"
      },
      {
        "category": "commercial-vpn-aggregate",
        "confidence": 0.99,
        "n_total_probes": 174,
        "rank_score": 0.0616,
        "success_rate": 0.0632,
        "tool_name": "Generic commercial VPN bootstrap",
        "tool_note": "Aggregate over ProtonVPN, ExpressVPN, Mullvad, VPN Gate. Hides per-vendor variation. Look at the per-tool rows to see which specific vendor passes if any.",
        "tool_slug": "generic-vpn",
        "verdict": "blocked"
      },
      {
        "category": "commercial-vpn",
        "confidence": 0.99,
        "n_total_probes": 174,
        "rank_score": 0.0616,
        "success_rate": 0.0632,
        "tool_name": "ProtonVPN",
        "tool_note": "Blocking protonvpn.com does NOT block all ProtonVPN tunnels. Individual WireGuard / OpenVPN endpoint IPs may stay reachable.",
        "tool_slug": "protonvpn",
        "verdict": "blocked"
      },
      {
        "category": "p2p-circumvention",
        "confidence": 0.99,
        "n_total_probes": 178,
        "rank_score": 0.0602,
        "success_rate": 0.0618,
        "tool_name": "Lantern",
        "tool_note": "Lantern bootstraps from getlantern.org but rotates endpoints aggressively after that. Bootstrap-domain block does not mean ongoing-connection block.",
        "tool_slug": "lantern",
        "verdict": "blocked"
      }
    ],
    "fallback": [],
    "try_first": [
      {
        "category": "anonymity-network",
        "confidence": 0.99,
        "n_total_probes": 3769,
        "rank_score": 0.7699,
        "success_rate": 0.7803,
        "tool_name": "Tor",
        "tool_note": "Tor uses obfs4 by default. If obfs4 fails, switch to the Snowflake bridge from inside the Tor Browser settings. The OONI tor test does NOT differentiate transports, so this row is the aggregate.",
        "tool_slug": "tor",
        "verdict": "partial"
      }
    ]
  },
  "tools_ranked": [
    {
      "block_rate": 0.2197,
      "blocking_methods": {
        "tor-blocking": 118
      },
      "category": "anonymity-network",
      "confidence": 0.99,
      "confidence_band": "high",
      "domains_observed": [],
      "first_observed": "2026-08-11T12:00:00Z",
      "last_observed": "2026-09-09T18:00:00Z",
      "n_blocked_probes": 828,
      "n_successful_probes": 2941,
      "n_total_probes": 3769,
      "n_unique_asns": 0,
      "rank_score": 0.7699,
      "recency_decay": 0.9917,
      "recency_decay_known": true,
      "recency_decay_note": null,
      "success_rate": 0.7803,
      "tier": "try_first",
      "tool_name": "Tor",
      "tool_note": "Tor uses obfs4 by default. If obfs4 fails, switch to the Snowflake bridge from inside the Tor Browser settings. The OONI tor test does NOT differentiate transports, so this row is the aggregate.",
      "tool_slug": "tor",
      "verdict": "partial"
    },
    {
      "block_rate": 0.9194,
      "blocking_methods": {
        "dns-blocking": 9,
        "http-blocking-tcp-reset": 9,
        "http-blocking-timeout": 3
      },
      "category": "vpn-proxy",
      "confidence": 0.99,
      "confidence_band": "high",
      "domains_observed": [
        "psiphon.ca"
      ],
      "first_observed": "2026-08-12T00:00:00Z",
      "last_observed": "2026-09-09T00:00:00Z",
      "n_blocked_probes": 251,
      "n_successful_probes": 22,
      "n_total_probes": 273,
      "n_unique_asns": 2,
      "rank_score": 0.0785,
      "recency_decay": 0.9792,
      "recency_decay_known": true,
      "recency_decay_note": null,
      "success_rate": 0.0806,
      "tier": "avoid",
      "tool_name": "Psiphon",
      "tool_note": "Psiphon ships a bundled server list — even if psiphon.ca is blocked, the app can usually bootstrap from cached entries.",
      "tool_slug": "psiphon",
      "verdict": "blocked"
    },
    {
      "block_rate": 0.9368,
      "blocking_methods": {
        "dns-blocking": 9,
        "http-blocking-tcp-reset": 9
      },
      "category": "commercial-vpn-aggregate",
      "confidence": 0.99,
      "confidence_band": "high",
      "domains_observed": [
        "protonvpn.com"
      ],
      "first_observed": "2026-08-12T00:00:00Z",
      "last_observed": "2026-09-09T00:00:00Z",
      "n_blocked_probes": 163,
      "n_successful_probes": 11,
      "n_total_probes": 174,
      "n_unique_asns": 2,
      "rank_score": 0.0616,
      "recency_decay": 0.9792,
      "recency_decay_known": true,
      "recency_decay_note": null,
      "success_rate": 0.0632,
      "tier": "avoid",
      "tool_name": "Generic commercial VPN bootstrap",
      "tool_note": "Aggregate over ProtonVPN, ExpressVPN, Mullvad, VPN Gate. Hides per-vendor variation. Look at the per-tool rows to see which specific vendor passes if any.",
      "tool_slug": "generic-vpn",
      "verdict": "blocked"
    },
    {
      "block_rate": 0.9368,
      "blocking_methods": {
        "dns-blocking": 9,
        "http-blocking-tcp-reset": 9
      },
      "category": "commercial-vpn",
      "confidence": 0.99,
      "confidence_band": "high",
      "domains_observed": [
        "protonvpn.com"
      ],
      "first_observed": "2026-08-12T00:00:00Z",
      "last_observed": "2026-09-09T00:00:00Z",
      "n_blocked_probes": 163,
      "n_successful_probes": 11,
      "n_total_probes": 174,
      "n_unique_asns": 2,
      "rank_score": 0.0616,
      "recency_decay": 0.9792,
      "recency_decay_known": true,
      "recency_decay_note": null,
      "success_rate": 0.0632,
      "tier": "avoid",
      "tool_name": "ProtonVPN",
      "tool_note": "Blocking protonvpn.com does NOT block all ProtonVPN tunnels. Individual WireGuard / OpenVPN endpoint IPs may stay reachable.",
      "tool_slug": "protonvpn",
      "verdict": "blocked"
    },
    {
      "block_rate": 0.9382,
      "blocking_methods": {
        "dns-blocking": 9,
        "http-blocking-tcp-reset": 9
      },
      "category": "p2p-circumvention",
      "confidence": 0.99,
      "confidence_band": "high",
      "domains_observed": [
        "getlantern.org"
      ],
      "first_observed": "2026-08-12T00:00:00Z",
      "last_observed": "2026-09-09T00:00:00Z",
      "n_blocked_probes": 167,
      "n_successful_probes": 11,
      "n_total_probes": 178,
      "n_unique_asns": 2,
      "rank_score": 0.0602,
      "recency_decay": 0.9792,
      "recency_decay_known": true,
      "recency_decay_note": null,
      "success_rate": 0.0618,
      "tier": "avoid",
      "tool_name": "Lantern",
      "tool_note": "Lantern bootstraps from getlantern.org but rotates endpoints aggressively after that. Bootstrap-domain block does not mean ongoing-connection block.",
      "tool_slug": "lantern",
      "verdict": "blocked"
    }
  ]
}

Network variation

Look inside the country.

Global ISP index

Network-level records add detail that a country score cannot show.

All returned ISP records for IR
ISPComposite scoreSample block rateMethods / categoriesDomains / evidence
AS204213 (netmihan)
AS204,213
97.5100.0%tcp-reset · ip-blocked
NEWS · GRP · MMED · COMT · SRCH · HOST · PORN · ANON · AIML
28 domains
769 evidence items
AS61173 (GWSN-AS)
AS61,173
97.499.6%tcp-reset · ip-blocked
NEWS · GRP · SRCH · MMED · HOST · PORN · COMT · ANON · AIML
27 domains
269 evidence items
AS30058 (FDCSERVERS)
AS30,058
84100.0%tcp-reset
NEWS · GRP · ANON · COMT · MMED
13 domains
26 evidence items
AS203951
AS203,951
84100.0%tcp-reset
NEWS · GRP · ANON · COMT · MMED
13 domains
407 evidence items
AS205717
AS205,717
81100.0%ip-blocked · tcp-reset
NEWS · GRP · COMT · MMED · ANON
7 domains
67 evidence items
AS206065 (FDI)
AS206,065
80.498.5%ip-blocked · tcp-reset · http-403 · http-redirect
NEWS · GRP · COMT · MMED · ANON
7 domains
137 evidence items
AS56971 (CloudBackbone)
AS56,971
80100.0%tcp-reset · ip-blocked
NEWS · GRP · ANON · COMT · MMED
5 domains
15 evidence items
AS43965 (TUMS-IR-AS)
AS43,965
62.5100.0%ip-blocked
NEWS · ANON · GRP · AIML
15 domains
45 evidence items
AS58224 (TCI)
AS58,224
61100.0%ip-blocked
NEWS · GRP · AIML · ANON
12 domains
137 evidence items
AS15611
AS15,611
61100.0%ip-blocked
AIML · NEWS · ANON · GRP
12 domains
36 evidence items
AS43754 (ASIATECH)
AS43,754
50100.0%http-redirect · http-451 · http-403
0 domains
95 evidence items
AS42337 (RESPINA-AS)
AS42,337
49.498.4%http-redirect
0 domains
62 evidence items
AS31549 (RASANA)
AS31,549
47.994.7%http-redirect
0 domains
94 evidence items
AS39501 (NGSAS)
AS39,501
45100.0%http-403
0 domains
55 evidence items
AS44244 (IranCell-AS)
AS44,244
45100.0%http-403
0 domains
98 evidence items
AS49666
AS49,666
45100.0%http-403
0 domains
44 evidence items
AS50810 (Mobinnet-AS)
AS50,810
44.698.9%http-451
0 domains
93 evidence items
AS16322 (PARSONLINE)
AS16,322
40100.0%Methods unavailable
0 domains
58 evidence items
AS25124
AS25,124
40100.0%Methods unavailable
0 domains
9 evidence items
AS41881 (Fanava-AS)
AS41,881
40100.0%Methods unavailable
0 domains
62 evidence items
AS49100 (IR-THR-PTE)
AS49,100
40100.0%Methods unavailable
0 domains
89 evidence items
AS56548
AS56,548
40100.0%Methods unavailable
0 domains
22 evidence items
AS197207 (MCCI-AS)
AS197,207
40100.0%Methods unavailable
0 domains
98 evidence items
AS202468 (AbrArvan-AS)
AS202,468
40100.0%Methods unavailable
0 domains
97 evidence items
AS44285 (SEFROYEKPARDAZENG-AS)
AS44,285
40100.0%Methods unavailable
0 domains
8 evidence items
AS210392
AS210,392
40100.0%Methods unavailable
0 domains
16 evidence items
AS48715 (SEFROYEKPARDAZENG-AS)
AS48,715
40100.0%Methods unavailable
0 domains
8 evidence items
AS59962 (ShirazUniversity_ASN)
AS59,962
40100.0%Methods unavailable
0 domains
11 evidence items
AS44090 (MahanNet-AS)
AS44,090
40100.0%Methods unavailable
0 domains
6 evidence items
AS25184 (AFRANET)
AS25,184
40100.0%Methods unavailable
0 domains
13 evidence items
AS16235
AS16,235
40100.0%Methods unavailable
0 domains
11 evidence items
AS34369
AS34,369
40100.0%Methods unavailable
0 domains
18 evidence items
AS201540 (PJCO)
AS201,540
40100.0%Methods unavailable
0 domains
26 evidence items
AS205647 (AFAGH)
AS205,647
39.598.8%Methods unavailable
0 domains
85 evidence items
AS57218 (RighTel)
AS57,218
39.498.4%Methods unavailable
0 domains
64 evidence items
AS44208 (Farahoosh)
AS44,208
38.395.8%Methods unavailable
0 domains
72 evidence items
AS51074 (MABNA)
AS51,074
33.383.3%Methods unavailable
0 domains
6 evidence items
AS24631 (FANAPTELECOM-FCP)
AS24,631
30.977.3%Methods unavailable
0 domains
22 evidence items
AS201150 (Didehabnnet)
AS201,150
29.172.7%Methods unavailable
0 domains
22 evidence items
AS142578
AS142,578
6.516.3%Methods unavailable
0 domains
43 evidence items

Returned rows: 40; source ISP count: 40. Counts and percentages apply to the returned measurement sample.

ISP source, dates and complete evidence fields

Source generated: . This is a source timestamp, not proof that every underlying observation is current.

Open the source response

Complete returned record
{
  "country": "IR",
  "countryName": "Iran",
  "generated_at": "2026-09-11T04:03:37.494600Z",
  "ispCount": 40,
  "isps": [
    {
      "asn": 204213,
      "blockRate": 1,
      "blockedCategories": [
        "NEWS",
        "GRP",
        "MMED",
        "COMT",
        "SRCH",
        "HOST",
        "PORN",
        "ANON",
        "AIML"
      ],
      "blockedCount": 769,
      "categoryBreadth": 0.9,
      "compositeScore": 97.5,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 769,
      "methodAggressiveness": 1,
      "methods": [
        "tcp-reset",
        "ip-blocked"
      ],
      "name": "AS204213 (netmihan)",
      "uniqueDomains": 28
    },
    {
      "asn": 61173,
      "blockRate": 0.9963,
      "blockedCategories": [
        "NEWS",
        "GRP",
        "SRCH",
        "MMED",
        "HOST",
        "PORN",
        "COMT",
        "ANON",
        "AIML"
      ],
      "blockedCount": 268,
      "categoryBreadth": 0.9,
      "compositeScore": 97.4,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 269,
      "methodAggressiveness": 1,
      "methods": [
        "tcp-reset",
        "ip-blocked"
      ],
      "name": "AS61173 (GWSN-AS)",
      "uniqueDomains": 27
    },
    {
      "asn": 30058,
      "blockRate": 1,
      "blockedCategories": [
        "NEWS",
        "GRP",
        "ANON",
        "COMT",
        "MMED"
      ],
      "blockedCount": 26,
      "categoryBreadth": 0.5,
      "compositeScore": 84,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 26,
      "methodAggressiveness": 1,
      "methods": [
        "tcp-reset"
      ],
      "name": "AS30058 (FDCSERVERS)",
      "uniqueDomains": 13
    },
    {
      "asn": 203951,
      "blockRate": 1,
      "blockedCategories": [
        "NEWS",
        "GRP",
        "ANON",
        "COMT",
        "MMED"
      ],
      "blockedCount": 407,
      "categoryBreadth": 0.5,
      "compositeScore": 84,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 407,
      "methodAggressiveness": 1,
      "methods": [
        "tcp-reset"
      ],
      "name": "AS203951",
      "uniqueDomains": 13
    },
    {
      "asn": 205717,
      "blockRate": 1,
      "blockedCategories": [
        "NEWS",
        "GRP",
        "COMT",
        "MMED",
        "ANON"
      ],
      "blockedCount": 67,
      "categoryBreadth": 0.5,
      "compositeScore": 81,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 67,
      "methodAggressiveness": 1,
      "methods": [
        "ip-blocked",
        "tcp-reset"
      ],
      "name": "AS205717",
      "uniqueDomains": 7
    },
    {
      "asn": 206065,
      "blockRate": 0.9854,
      "blockedCategories": [
        "NEWS",
        "GRP",
        "COMT",
        "MMED",
        "ANON"
      ],
      "blockedCount": 135,
      "categoryBreadth": 0.5,
      "compositeScore": 80.4,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 137,
      "methodAggressiveness": 1,
      "methods": [
        "ip-blocked",
        "tcp-reset",
        "http-403",
        "http-redirect"
      ],
      "name": "AS206065 (FDI)",
      "uniqueDomains": 7
    },
    {
      "asn": 56971,
      "blockRate": 1,
      "blockedCategories": [
        "NEWS",
        "GRP",
        "ANON",
        "COMT",
        "MMED"
      ],
      "blockedCount": 15,
      "categoryBreadth": 0.5,
      "compositeScore": 80,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 15,
      "methodAggressiveness": 1,
      "methods": [
        "tcp-reset",
        "ip-blocked"
      ],
      "name": "AS56971 (CloudBackbone)",
      "uniqueDomains": 5
    },
    {
      "asn": 43965,
      "blockRate": 1,
      "blockedCategories": [
        "NEWS",
        "ANON",
        "GRP",
        "AIML"
      ],
      "blockedCount": 45,
      "categoryBreadth": 0.4,
      "compositeScore": 62.5,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 45,
      "methodAggressiveness": 0.2,
      "methods": [
        "ip-blocked"
      ],
      "name": "AS43965 (TUMS-IR-AS)",
      "uniqueDomains": 15
    },
    {
      "asn": 58224,
      "blockRate": 1,
      "blockedCategories": [
        "NEWS",
        "GRP",
        "AIML",
        "ANON"
      ],
      "blockedCount": 137,
      "categoryBreadth": 0.4,
      "compositeScore": 61,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 137,
      "methodAggressiveness": 0.2,
      "methods": [
        "ip-blocked"
      ],
      "name": "AS58224 (TCI)",
      "uniqueDomains": 12
    },
    {
      "asn": 15611,
      "blockRate": 1,
      "blockedCategories": [
        "AIML",
        "NEWS",
        "ANON",
        "GRP"
      ],
      "blockedCount": 36,
      "categoryBreadth": 0.4,
      "compositeScore": 61,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 36,
      "methodAggressiveness": 0.2,
      "methods": [
        "ip-blocked"
      ],
      "name": "AS15611",
      "uniqueDomains": 12
    },
    {
      "asn": 43754,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 95,
      "categoryBreadth": 0,
      "compositeScore": 50,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 95,
      "methodAggressiveness": 0.4,
      "methods": [
        "http-redirect",
        "http-451",
        "http-403"
      ],
      "name": "AS43754 (ASIATECH)",
      "uniqueDomains": 0
    },
    {
      "asn": 42337,
      "blockRate": 0.9839,
      "blockedCategories": [],
      "blockedCount": 61,
      "categoryBreadth": 0,
      "compositeScore": 49.4,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 62,
      "methodAggressiveness": 0.4,
      "methods": [
        "http-redirect"
      ],
      "name": "AS42337 (RESPINA-AS)",
      "uniqueDomains": 0
    },
    {
      "asn": 31549,
      "blockRate": 0.9468,
      "blockedCategories": [],
      "blockedCount": 89,
      "categoryBreadth": 0,
      "compositeScore": 47.9,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 94,
      "methodAggressiveness": 0.4,
      "methods": [
        "http-redirect"
      ],
      "name": "AS31549 (RASANA)",
      "uniqueDomains": 0
    },
    {
      "asn": 39501,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 55,
      "categoryBreadth": 0,
      "compositeScore": 45,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 55,
      "methodAggressiveness": 0.2,
      "methods": [
        "http-403"
      ],
      "name": "AS39501 (NGSAS)",
      "uniqueDomains": 0
    },
    {
      "asn": 44244,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 98,
      "categoryBreadth": 0,
      "compositeScore": 45,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 98,
      "methodAggressiveness": 0.2,
      "methods": [
        "http-403"
      ],
      "name": "AS44244 (IranCell-AS)",
      "uniqueDomains": 0
    },
    {
      "asn": 49666,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 44,
      "categoryBreadth": 0,
      "compositeScore": 45,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 44,
      "methodAggressiveness": 0.2,
      "methods": [
        "http-403"
      ],
      "name": "AS49666",
      "uniqueDomains": 0
    },
    {
      "asn": 50810,
      "blockRate": 0.9892,
      "blockedCategories": [],
      "blockedCount": 92,
      "categoryBreadth": 0,
      "compositeScore": 44.6,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 93,
      "methodAggressiveness": 0.2,
      "methods": [
        "http-451"
      ],
      "name": "AS50810 (Mobinnet-AS)",
      "uniqueDomains": 0
    },
    {
      "asn": 16322,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 58,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 58,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS16322 (PARSONLINE)",
      "uniqueDomains": 0
    },
    {
      "asn": 25124,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 9,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 9,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS25124",
      "uniqueDomains": 0
    },
    {
      "asn": 41881,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 62,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 62,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS41881 (Fanava-AS)",
      "uniqueDomains": 0
    },
    {
      "asn": 49100,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 89,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 89,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS49100 (IR-THR-PTE)",
      "uniqueDomains": 0
    },
    {
      "asn": 56548,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 22,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 22,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS56548",
      "uniqueDomains": 0
    },
    {
      "asn": 197207,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 98,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 98,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS197207 (MCCI-AS)",
      "uniqueDomains": 0
    },
    {
      "asn": 202468,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 97,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 97,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS202468 (AbrArvan-AS)",
      "uniqueDomains": 0
    },
    {
      "asn": 44285,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 8,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 8,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS44285 (SEFROYEKPARDAZENG-AS)",
      "uniqueDomains": 0
    },
    {
      "asn": 210392,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 16,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 16,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS210392",
      "uniqueDomains": 0
    },
    {
      "asn": 48715,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 8,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 8,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS48715 (SEFROYEKPARDAZENG-AS)",
      "uniqueDomains": 0
    },
    {
      "asn": 59962,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 11,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 11,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS59962 (ShirazUniversity_ASN)",
      "uniqueDomains": 0
    },
    {
      "asn": 44090,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 6,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 6,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS44090 (MahanNet-AS)",
      "uniqueDomains": 0
    },
    {
      "asn": 25184,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 13,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 13,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS25184 (AFRANET)",
      "uniqueDomains": 0
    },
    {
      "asn": 16235,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 11,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 11,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS16235",
      "uniqueDomains": 0
    },
    {
      "asn": 34369,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 18,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 18,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS34369",
      "uniqueDomains": 0
    },
    {
      "asn": 201540,
      "blockRate": 1,
      "blockedCategories": [],
      "blockedCount": 26,
      "categoryBreadth": 0,
      "compositeScore": 40,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 26,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS201540 (PJCO)",
      "uniqueDomains": 0
    },
    {
      "asn": 205647,
      "blockRate": 0.9882,
      "blockedCategories": [],
      "blockedCount": 84,
      "categoryBreadth": 0,
      "compositeScore": 39.5,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 85,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS205647 (AFAGH)",
      "uniqueDomains": 0
    },
    {
      "asn": 57218,
      "blockRate": 0.9844,
      "blockedCategories": [],
      "blockedCount": 63,
      "categoryBreadth": 0,
      "compositeScore": 39.4,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 64,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS57218 (RighTel)",
      "uniqueDomains": 0
    },
    {
      "asn": 44208,
      "blockRate": 0.9583,
      "blockedCategories": [],
      "blockedCount": 69,
      "categoryBreadth": 0,
      "compositeScore": 38.3,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 72,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS44208 (Farahoosh)",
      "uniqueDomains": 0
    },
    {
      "asn": 51074,
      "blockRate": 0.8333,
      "blockedCategories": [],
      "blockedCount": 5,
      "categoryBreadth": 0,
      "compositeScore": 33.3,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 6,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS51074 (MABNA)",
      "uniqueDomains": 0
    },
    {
      "asn": 24631,
      "blockRate": 0.7727,
      "blockedCategories": [],
      "blockedCount": 17,
      "categoryBreadth": 0,
      "compositeScore": 30.9,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 22,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS24631 (FANAPTELECOM-FCP)",
      "uniqueDomains": 0
    },
    {
      "asn": 201150,
      "blockRate": 0.7273,
      "blockedCategories": [],
      "blockedCount": 16,
      "categoryBreadth": 0,
      "compositeScore": 29.1,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 22,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS201150 (Didehabnnet)",
      "uniqueDomains": 0
    },
    {
      "asn": 142578,
      "blockRate": 0.1628,
      "blockedCategories": [],
      "blockedCount": 7,
      "categoryBreadth": 0,
      "compositeScore": 6.5,
      "country": "IR",
      "countryName": "Iran",
      "evidenceCount": 43,
      "methodAggressiveness": 0,
      "methods": [],
      "name": "AS142578",
      "uniqueDomains": 0
    }
  ],
  "methodology": "compositeScore (0-100) ranks ISPs by blockRate + category breadth + method aggressiveness - a RELATIVE ranking signal, NOT an absolute percent-blocked. blockRate is the share of an ISP MEASURED evidence that are blocking signals (OONI/CensoredPlanet probe censoring networks heavily, so ~1.0 is common for targeted ISPs), NOT the share of the internet the ISP blocks."
}

Editorial service list

Know the named targets.

Undated editorial context. Check current evidence before treating a service as blocked.

YouTubeFacebookTwitterTelegramInstagram
Check a specific domain

Country guidance

Keep alternatives ready.

The original country recommendations are preserved below. They are undated guidance, not a guarantee of access or safety.

  • Voidly VPN is WireGuard over UDP; no bridge or alternate transport is offered yet.
  • Use encrypted DNS.
  • Keep a second circumvention tool for the periods when WireGuard UDP is blocked.

Questions, answered

Iran, in context.

Is the internet censored in Iran?

The dated 30-day index score is 15/100. That describes the source sample, not every person, network or domain in Iran.

Iran implements pervasive internet filtering, blocking social media and news sites. Filtering intensifies during protests and political events.

Use the recent records and their original sources to investigate a particular restriction. Disruption alone does not establish intentional censorship.

Which websites and services are affected in Iran?

The editorial list names: YouTube, Facebook, Twitter, Telegram, Instagram. It is undated context, not a current availability check.

Results can differ between networks, measurement times and targets. Country incident records and the country API preserve source details.

How does Iran compare with other countries?

Original snapshot rank: #5. Editorial risk tier: Severe. Editorial trend: worsening. The tier and trend are curated context; they are not a measured change between recent dates.

The index includes a dated score window and a separate all-time measurement corpus. Compare like-for-like windows and inspect sample coverage before drawing a national comparison. Compare the index.

Which blocking methods appear in Iran?

The pipeline can record DNS interference, TCP resets, HTTP block pages, TLS/SNI failures and network-level outages. This list describes possible mechanisms; it does not claim every mechanism was observed in Iran.

Each incident and ISP record below retains its reported mechanism and evidence. Inspect the country evidence query before attributing a failure to deliberate blocking.

How recent is the data?

The index score snapshot was fetched . Its source serve-time can advance without changes in the underlying scores. The accumulating historical OONI file has no dated observation window.

Current country data, incidents, network state and models have independent source dates. The page requested those sources . It does not continuously refresh. Missing, stale and uncovered responses remain labeled.

Subscribe to source feeds
How can I check a specific domain in Iran?

Open the accessibility checker. For a source query, use the country code with the domain you are investigating:

GET https://api.voidly.ai/v1/accessibility/check?domain=twitter.com&country=IR

MCP server: npx @voidly/mcp-server
Tool: check_domain_blocked
Arguments: domain="twitter.com", country="IR"

CLI: npx @voidly/cli check twitter.com IR

Inspect the returned timestamp, measurement coverage and method. A sampled result is not a guarantee for every user. API documentation · MCP tools.

Can a VPN help with restrictions in Iran?

Results depend on local networks and the transport used. The source’s complete country guidance is preserved in the recommendations section. Voidly’s current product details belong on the VPN page; a measured probe result is not a safety or success guarantee.

How do I cite this Iran profile?

Use the canonical country URL, https://voidly.ai/ir, with your access date and the date of any source snapshot you quote. The citation below supports plain text and BibTeX copy/download. A model generation or page access date is not a publication date.

Voidly-original analysis is CC BY 4.0. Upstream records keep their own attribution and licenses.

Open evidence

Keep the citation attached.

Country JSON
Download .txt
Voidly Research. (n.d.). Iran Internet Censorship Profile. https://voidly.ai/ir (accessed 2026-09-11).

Citations use the public /ir URL. Access date is not publication date. Cite the individual source, observation time and model version when using a number.

Voidly-original analysis and annotations are CC BY 4.0. Upstream OONI, IODA and Censored Planet records retain their own licenses. Read and attribute the underlying evidence.