PakAlerts

How PakAlerts works

PakAlerts shows street crime and road alerts for Pakistani cities on one map: where snatchings and robberies are reported, which roads are closed, and which areas get risky at which hours. People in every city already know which streets go bad after dark; we put that knowledge, and the reports behind it, in one place so you can plan when and how you travel.

The risk level, in one line

Every area of about 700 m gets a risk level from 0 to 10 for each hour. Higher means riskier, like the UV index: 0 means nothing is known about the area, 10 is the highest risk we show.

LevelMeansOn the map
0–3Low little or nothing reported for this hourNo colour
4–5Elevated take normal careAmber
6–7High avoid if you can, or go with othersOrange-red
8–10Very high the riskiest places and hoursDeep red

No colour is not a promise of safety. It means low risk or that nothing has been reported yet. The map never calls a place "safe".

The city risk level

Next to every city and town's name is one number from 0 to 10: its city risk level. It comes from its areas. We take each area's risk level averaged over the whole day, then average the riskiest quarter of them, never fewer than five areas, so one bad corner can't make a small town a 9. News that names only the town ("a robbery in Hasan Abdal", with no street) counts toward the town's number as well, but never colours one area, since we don't know where in the town it was. It moves as new reports come in, and a small ↑ or ↓ shows when it changed by a level or more since last week.

Its colour is grey at 0 and green only at 1, then turns through yellow and orange to dark red at 10, a little darker with each level. That green is only for the city number; the map itself never colours an area green. A low city level is not a promise of safety. It can simply mean few reports from that place so far, which is often true for smaller towns. A grey dash (–) means there aren't enough reports yet to give a number.

What it's built from

1. Verified incidents. Crimes from trusted sources: police and CPLC, and newspapers such as Dawn, Express Tribune, Geo, ARY and The Nation. A story only counts when it says the crime happened, where and when; anything our rules aren't sure of is checked by a person first, and each incident links to its story. When a story gives the day but not the time, the incident counts evenly across that day instead of at a made-up hour. They count the most and fade slowly (half their weight after six months).
2. Our team's entries. Incidents our staff record from reliable local information: police stations, volunteers, traders' associations. Each one says where it came from. Half weight after four months.
3. Community reports. Anonymous, GPS-checked reports from people using the app. They only count once two different phones report the same area (or one phone with a strong track record), and on their own they can raise an area to 6 at most, so a few people can't paint a neighbourhood red. Half weight after a month.
4. Known hotspots. Areas that published reporting names as risky, with a typical pattern through the day (quiet shopping hours, riskier after closing). This baseline is how the map starts. As real incidents build up, they take over.

Serious crimes weigh more than minor ones (armed robbery and street shootings 1.0, kidnapping and sexual violence 0.8, snatching 0.7, theft 0.5, harassment 0.4). Sexual violence is counted in an area's level and shown only as a number, never as a pin, a story or a quote, so no one can be identified. An incident at 1am counts fully for 1am, partly for midnight and 2am, and a little for 11pm and 3am. Fridays count slightly more (×1.1). Every area's panel on the map shows "Why this level": how many incidents of each kind, from which sources, around which hours, and how recent.

The maths, for the curious

for each source (verified, team, community):
  evidence = Σ crime weight × source weight × ½^(age ÷ half-life) × hour closeness
  chance   = 1 − e^(−evidence ÷ 3)            (community: at most 0.6)
baseline = hotspot risk × hour pattern × weekday      (0 if not a known hotspot)
risk level = 10 × (1 − (1 − baseline)(1 − verified)(1 − team)(1 − community)), rounded

Combining the parts like probabilities means more evidence can only raise the level, and it can never pass 10. Example: three verified armed robberies at 1am a month ago, one snatching recorded by our team ten days ago, and two community theft reports today, all in an area that isn't a known hotspot, give risk 7 of 10 (High) at 1am, and less at other hours.

The grid

Cities are split into hexagons about 700 m across (H3 resolution 8). This is deliberately coarse, so the map can't be used to single out a street or a house.

Community reports

Reporter trust

Devices build an anonymous track record: New → Contributor (2+ reports confirmed by others) → Trusted (5+ confirmed, few flags). A Trusted device's crime report counts on its own, and its road alerts appear as confirmed straight away. "This looks wrong" flags count against the device that posted the alert. Clearing your browser data resets your device and its standing.

Road alerts (separate layer)

Jams, closures, dharnas, floods, accidents and events appear as pins, and they never change the risk level: they're about traffic, not crime.

Confidence & sources

Each area shows a confidence of Low, Medium or High, depending on how many independent kinds of evidence agree: published sources, verified incidents, our team's entries and corroborated community reports. Incidents come from police, CPLC and news reports, and from people's own reports; each one shows where it came from.

Privacy

Nothing about victims or reporters is stored: no name, no phone number and no account. Trip shares are deleted after 6 hours. We count visits with Google Analytics (no ads, addresses shortened); it never runs on trip links or email settings. Map data © OpenStreetMap contributors, map style by Protomaps. Routing uses the public OSRM demo server.

Contact

Questions, corrections or press: email pakalertsdotcom@gmail.com. We read every message.