AIDEVELOPER TOOLS

UK Police Crime Statistics Search

Search street-level crime records from all 43 police forces across England, Wales, and Northern Ireland using the official UK Police API. Query by geographic coordinates, UK postcode, or police force ID and get structured crime data including category, location, outcome status, and date -- no API key required.

Try on Apify Store
$0.002per event
1
Users (30d)
34
Runs (30d)
90
Actively maintained
Maintenance Pulse
$0.002
Per event

Maintenance Pulse

90/100
Last Build
Today
Last Version
1d ago
Builds (30d)
8
Issue Response
N/A

Cost Estimate

How many results do you need?

crime-fetcheds
Estimated cost:$0.20

Pricing

Pay Per Event model. You only pay for what you use.

EventDescriptionPrice
crime-fetchedCharged per crime data record retrieved from UK Police API.$0.002

Example: 100 events = $0.20 · 1,000 events = $2.00

Documentation

Search street-level crime records from all 43 police forces across England, Wales, and Northern Ireland using the official UK Police API. Query by geographic coordinates, UK postcode, or police force ID and get structured crime data including category, location, outcome status, and date -- no API key required.


Why use UK Police Crime Data?

The UK Home Office publishes open crime data through the data.police.uk API, but working with it directly means handling multiple endpoints, understanding geographic parameters, managing 503 errors for recent months, and normalizing inconsistent response formats. This actor abstracts all of that behind a simple input form that runs on Apify's cloud infrastructure.

You get clean, structured JSON output from a single run -- ready for dashboards, spreadsheets, databases, or downstream pipelines. Because it runs on Apify, you can schedule recurring extractions, trigger runs via API, and pipe results into Google Sheets, Slack, webhooks, or any integration target without writing a line of code.

The UK Police API is completely free and open. No API key, no registration, no rate limit tokens. This actor simply provides a clean, reliable interface to that data with automatic postcode geocoding, error recovery, and structured output.


Key features

  • Street-level crime data from all 43 territorial police forces in England, Wales, and Northern Ireland
  • Three search modes -- query by latitude/longitude coordinates, UK postcode, or police force identifier
  • Automatic postcode geocoding -- enter any valid UK postcode and the actor resolves it to coordinates via Postcodes.io before querying crimes
  • 14 crime categories for filtering -- anti-social behaviour, bicycle theft, burglary, criminal damage and arson, drugs, other crime, other theft, possession of weapons, public order, robbery, shoplifting, theft from the person, vehicle crime, and violent crime
  • Outcome tracking -- each record includes the investigation outcome and the month it was resolved, where available
  • Monthly granularity -- query any available month in YYYY-MM format or default to the latest published data
  • Automatic retry on 503 -- if the API returns a server error for a specific date, the actor retries with the latest available month
  • Force discovery mode -- run with no parameters to retrieve a reference list of all 43 police force IDs and names
  • Configurable result limits -- return anywhere from 1 to 10,000 records per run
  • Category breakdown logging -- each run logs a summary of crime counts by category for quick insights

How to use

Apify Console

  1. Go to the UK Police Crime Data actor page on Apify
  2. Click Start
  3. Choose your search method:
    • Enter a UK postcode (e.g., SW1A 1AA) for the simplest experience
    • Enter latitude and longitude for precise coordinate-based search
    • Enter a police force ID (e.g., metropolitan) for force-wide data
  4. Optionally select a crime category to filter results
  5. Optionally set a date in YYYY-MM format
  6. Set max results to control the number of records returned (default: 100)
  7. Click Start and wait for the run to complete
  8. View or download results from the Dataset tab as JSON, CSV, or Excel

Apify API

Start a run programmatically by sending a POST request to the Apify API:

curl -X POST "https://api.apify.com/v2/acts/jiVktGAOz5rv108S2/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "postcode": "SW1A 1AA",
    "category": "burglary",
    "date": "2024-06",
    "maxResults": 200
  }'

Input parameters

ParameterTypeRequiredDefaultDescription
latitudenumberNo--Latitude for location-based crime search (e.g., 51.5074 for London)
longitudenumberNo--Longitude for location-based crime search (e.g., -0.1278 for London)
postcodestringNo--UK postcode to search -- automatically geocoded to lat/lng (e.g., SW1A 1AA)
datestringNoLatestMonth to query in YYYY-MM format (e.g., 2024-06). Defaults to the latest available month
categorystringNoAll crimeCrime category filter. One of: anti-social-behaviour, bicycle-theft, burglary, criminal-damage-arson, drugs, other-crime, other-theft, possession-of-weapons, public-order, robbery, shoplifting, theft-from-the-person, vehicle-crime, violent-crime
forcestringNo--Police force identifier (e.g., metropolitan, west-midlands, greater-manchester)
maxResultsintegerNo100Maximum number of crime records to return (1 to 10,000)

You must provide at least one of: latitude/longitude, postcode, or force. If none are given, the actor returns a reference list of all 43 police forces with their IDs and names.

Example inputs

Search crimes near Westminster by postcode:

{
    "postcode": "SW1A 1AA",
    "category": "violent-crime",
    "date": "2024-06",
    "maxResults": 50
}

Search by coordinates in central Manchester:

{
    "latitude": 53.4808,
    "longitude": -2.2426,
    "category": "burglary",
    "maxResults": 200
}

Get force-wide data for the Metropolitan Police:

{
    "force": "metropolitan",
    "category": "shoplifting",
    "date": "2024-03",
    "maxResults": 500
}

Discover all available police force IDs (no parameters):

{}

Tips

  • Use postcode for the easiest experience -- the actor geocodes it automatically
  • Omit date to get the latest available data (avoids 503 errors from requesting too-recent months)
  • Omit category to retrieve all crime types in a single run
  • Run with an empty input {} to discover valid force IDs before running force-specific queries

Output

Each crime record in the output dataset has the following structure:

{
    "category": "burglary",
    "locationType": "Force",
    "latitude": 51.5133,
    "longitude": -0.0886,
    "streetName": "On or near High Street",
    "outcomeStatus": "Investigation complete; no suspect identified",
    "outcomeDate": "2024-08",
    "month": "2024-06",
    "persistentId": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2",
    "context": ""
}

Output fields

FieldTypeDescription
categorystringCrime category (e.g., burglary, violent-crime, shoplifting, anti-social-behaviour)
locationTypestringLocation type classification -- typically "Force" or "BTP" (British Transport Police)
latitudenumberLatitude of the anonymized crime location
longitudenumberLongitude of the anonymized crime location
streetNamestringNearest street or location description (e.g., "On or near High Street")
outcomeStatusstring or nullResolution status (e.g., "Under investigation", "Offender given a caution", "Unable to prosecute suspect"). Null if no outcome recorded
outcomeDatestring or nullMonth the outcome was recorded in YYYY-MM format. Null if no outcome
monthstringMonth the crime was reported in YYYY-MM format
persistentIdstringUnique persistent identifier for the crime record -- use this to track outcomes across snapshots
contextstringAdditional context provided by the police force (usually empty)

When running in force discovery mode (no search parameters), each record represents a police force with the force name in streetName and the force ID in persistentId.


Use cases

  • Property investment analysis -- assess crime levels around a prospective buy-to-let property or commercial premises before committing capital
  • Insurance risk assessment -- evaluate street-level crime density for underwriting decisions or premium calculations
  • Local authority reporting -- generate monthly crime breakdowns by category for council meetings and community safety partnerships
  • Journalism and investigations -- identify crime hotspots, track trends over time, and create data-driven news stories
  • Academic research -- feed structured crime data into criminology, urban planning, or socioeconomic studies
  • Estate agent and lettings intelligence -- provide prospective tenants or buyers with objective crime statistics for specific streets or postcodes
  • Business location planning -- compare crime profiles across candidate locations for new retail stores, offices, or hospitality venues
  • Community safety monitoring -- schedule monthly runs to track whether anti-social behaviour, burglary, or vehicle crime is rising or falling in your neighbourhood
  • Security consultancy -- build evidence-based risk assessments for corporate clients using official police data
  • Cross-referencing with other datasets -- combine crime data with food hygiene ratings, land registry prices, or flood risk data to build comprehensive area profiles

API & Integration

Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("jiVktGAOz5rv108S2").call(run_input={
    "postcode": "EC2R 8AH",
    "category": "robbery",
    "date": "2024-06",
    "maxResults": 100,
})

dataset = client.dataset(run["defaultDatasetId"])
for item in dataset.iterate_items():
    print(f"{item['month']} | {item['category']} | {item['streetName']} | {item['outcomeStatus']}")

JavaScript

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("jiVktGAOz5rv108S2").call({
    postcode: "M1 1AA",
    category: "vehicle-crime",
    maxResults: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.log(`${item.month} | ${item.category} | ${item.streetName}`);
});

cURL

# Start a run
curl -X POST "https://api.apify.com/v2/acts/jiVktGAOz5rv108S2/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"postcode": "B1 1BB", "maxResults": 50}'

# Fetch results from the default dataset
curl "https://api.apify.com/v2/acts/jiVktGAOz5rv108S2/runs/last/dataset/items?token=YOUR_API_TOKEN"

Integrations

UK Police Crime Data outputs standard Apify datasets that work with all built-in integrations:

  • Google Sheets -- export crime data directly to a spreadsheet for collaborative reporting
  • Slack / Email -- receive notifications when new crime data is available for your monitored area
  • Webhooks -- trigger downstream processing pipelines when a run completes
  • Zapier / Make -- connect to thousands of apps for automated crime data workflows
  • Amazon S3 / Google Cloud Storage -- archive crime datasets for long-term trend analysis

How it works

UK Police Crime Data follows a straightforward pipeline to fetch, transform, and output crime records:

Input parameters
       |
       v
 +-----------------+
 | Postcode given?  |--Yes--> Geocode via Postcodes.io --> lat/lng
 +-----------------+
       |No
       v
 +-------------------+
 | Lat/lng provided?  |--Yes--> Query data.police.uk/api/crimes-street
 +-------------------+
       |No
       v
 +------------------+
 | Force provided?   |--Yes--> Query data.police.uk/api/crimes-no-location
 +------------------+
       |No
       v
 List all 43 police forces (discovery mode)
       |
       v
 Transform raw API response --> flat CrimeResult schema
       |
       v
 Apply maxResults limit
       |
       v
 Push to Apify dataset + log category breakdown
  1. Input resolution -- if a postcode is provided, the actor geocodes it to latitude/longitude using the Postcodes.io API. If coordinates are already given, geocoding is skipped.
  2. API query -- depending on which parameters are available, the actor calls either the street-level crimes endpoint (/crimes-street/{category}) for coordinate-based searches or the no-location crimes endpoint (/crimes-no-location) for force-based searches.
  3. Error recovery -- if the API returns a 503 (typically because the requested month is not yet published), the actor retries without the date parameter to fetch the latest available data.
  4. Transformation -- raw API responses with snake_case fields and nested objects are flattened into a clean camelCase schema with ten consistent fields.
  5. Output -- results are trimmed to the configured maxResults limit and pushed to the Apify dataset. A category breakdown is logged for quick reference.

Performance & cost

ScenarioRecordsMemoryDurationEstimated cost
Single postcode, default 100 results~100256 MB5-15 sec< $0.005
Coordinate search, 500 results~500256 MB10-20 sec< $0.005
Force-wide query, 1,000 results~1,000256 MB15-30 sec< $0.01
Force-wide query, 5,000 results~5,000256 MB20-45 sec< $0.01
Force discovery (list all forces)43256 MB3-5 sec< $0.001

The actor is extremely lightweight -- it makes 1-2 HTTP requests per run and processes JSON in memory. The underlying UK Police API is completely free with no API key required, so there are no external data costs. Apify's free tier ($5/month in platform credits) supports hundreds of runs.


Limitations

  • Geographic coverage -- data covers England, Wales, and Northern Ireland only. Scotland uses a separate police data system and is not included in the UK Police API.
  • Data lag -- crime data is typically published 2-3 months after the reporting month. Requesting a very recent month may return a 503 error, in which case the actor falls back to the latest available data.
  • Street-level anonymization -- crime locations are snapped to the nearest point on a street, not exact addresses. Multiple crimes may share identical coordinates and street names.
  • Single location per run -- each run queries one geographic point or one police force. To search multiple areas, trigger separate runs via the Apify API or set up multiple schedules.
  • No-location crimes -- when searching by force ID, the actor retrieves crimes that have no specific location attached (e.g., online fraud). These results will not have meaningful latitude/longitude values.
  • API availability -- the UK Police API occasionally experiences downtime or slow responses. The actor includes retry logic for 503 errors but cannot recover from extended outages.
  • Historical depth -- the API provides data from approximately 2010 onwards, but availability varies by police force. Very old months may have incomplete data.

Responsible use

  • Privacy -- crime locations are anonymized by the Home Office before publication. Do not attempt to de-anonymize locations or identify individuals from this data.
  • Context matters -- raw crime counts do not account for population density, reporting rates, or policing priorities. Always provide appropriate context when publishing or sharing crime statistics.
  • No real-time data -- this is historical, aggregated data with a 2-3 month lag. Do not use it as a real-time safety indicator or for emergency decision-making.
  • Attribution -- when publishing analysis based on this data, credit the source as the UK Home Office via data.police.uk.
  • Fair representation -- avoid cherry-picking data to misrepresent the safety of specific areas, communities, or demographics.

FAQ

What geographic areas does this actor cover? England, Wales, and Northern Ireland. Scotland has a separate police data system (Police Scotland) and is not included in the UK Police API.

How current is the crime data? Data is typically published with a 2-3 month delay. For example, in March 2025 the latest available data might be for December 2024 or January 2025.

What does "street-level" mean? Crime locations are anonymized to the nearest point on a street, not exact addresses. This means multiple crimes may share the same GPS coordinates and street name.

Do I need an API key? No. The UK Police API is completely open and free. No authentication, registration, or API key is required.

How many police forces are covered? All 43 territorial police forces in England, Wales, and Northern Ireland, including the British Transport Police and other specialist forces.

What happens if I request a month that is not available yet? The API returns a 503 error. The actor automatically retries without the date parameter to fetch the latest available month instead.

Can I search multiple postcodes in one run? No. Each run queries a single location or force. To search multiple areas, use the Apify API to start separate runs for each postcode, or set up multiple scheduled tasks.

What is the persistentId field? A unique identifier assigned to each crime record by the Home Office. Use it to track the same crime across different monthly snapshots and check whether its outcome has been updated.

Why do some crimes have null outcome values? Not all crimes have a recorded outcome. This can mean the investigation is ongoing, the crime was recently reported, or no resolution was logged by the police force.

What is force discovery mode? Run the actor with no input parameters (empty {}) and it returns a list of all 43 police forces with their IDs and names. Use these IDs in the force field for subsequent searches.

Can I filter by multiple crime categories at once? No. The API supports filtering by one category at a time, or returning all categories. To get data for multiple specific categories, run the actor once for each category or use "all-crime" and filter the results after export.

How does postcode geocoding work? The actor sends the postcode to the Postcodes.io API, which returns the latitude and longitude of the postcode centroid. These coordinates are then used to query the UK Police crimes-street endpoint.


Related actors

ActorDescriptionLink
UK Food Hygiene RatingsSearch food hygiene inspection ratings for restaurants and businesses across England, Wales, and Northern Irelandryanclinton/uk-food-hygiene
Interpol Red Notice SearchSearch Interpol's international wanted persons database for red noticesryanclinton/interpol-red-notices
FBI Most Wanted SearchSearch the FBI's most wanted fugitives, terrorists, and missing persons listsryanclinton/fbi-wanted-search
UK Environment Agency Flood WarningsMonitor active flood warnings and alerts across Englandryanclinton/uk-flood-warnings
UK Companies House SearchLook up registered UK companies, directors, and filing historyryanclinton/uk-companies-house
UK Land Registry SearchSearch UK property price paid data and transaction recordsryanclinton/uk-land-registry

How it works

01

Configure

Set your parameters in the Apify Console or pass them via API.

02

Run

Click Start, trigger via API, webhook, or set up a schedule.

03

Get results

Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.

Use cases

Sales Teams

Build targeted lead lists with verified contact data.

Marketing

Research competitors and identify outreach opportunities.

Data Teams

Automate data collection pipelines with scheduled runs.

Developers

Integrate via REST API or use as an MCP tool in AI workflows.

Ready to try UK Police Crime Statistics Search?

Start for free on Apify. No credit card required.

Open on Apify Store