AreaIQ API
Integrate UK area intelligence into your applications. Generate data-driven location reports powered by 7 government and open data sources.
Try the API
Test the AreaIQ API with real UK postcodes. No API key needed for the playground.
Quickstart
Subscribe to a Developer, Business, or Growth plan and generate a key from your dashboard.
Send a POST request with an area name and intent type.
Receive a scored report with 5 data-backed dimensions.
curl -X POST https://www.area-iq.co.uk/api/v1/report \
-H "Authorization: Bearer aiq_your_api_key" \
-H "Content-Type: application/json" \
-d '{"area": "Shoreditch", "intent": "business"}'Authentication
All API requests require a Bearer token in the Authorization header. Generate API keys from your dashboard. Requires a Developer, Business, or Growth plan (from £49/mo).
Authorization: Bearer aiq_your_api_key_here
API keys carry full account access. Do not expose them in client-side code or public repositories. Keys can be revoked instantly from your dashboard.
Endpoint
https://www.area-iq.co.uk/api/v1/reportAll requests must use HTTPS. HTTP requests will be rejected.
Request Body
Send a JSON body with the area to analyse and the intent type. The intent determines which scoring dimensions and weights are applied.
moving, business, investing, researchIntent Types & Scoring Dimensions
moving· Residential relocationbusiness· Commercial viabilityinvesting· Property investmentresearch· General area profileResponse
Successful requests return 200 OK with the report ID and full report object.
Response Schema
Example Response
{
"id": "rpt_1709834567_a1b2c3",
"report": {
"area": "Shoreditch, London",
"intent": "business",
"areaiq_score": 74,
"sub_scores": [
{
"label": "Foot Traffic & Demand",
"score": 82,
"summary": "45,000 daily commuters via Liverpool Street station. 23 restaurants within 500m suggests strong baseline footfall."
},
{
"label": "Competition Landscape",
"score": 68,
"summary": "High density of similar businesses in EC2A. 12 direct competitors identified within 1km radius."
},
{
"label": "Transport Accessibility",
"score": 79,
"summary": "4 tube/rail stations within 15-minute walk. Bus routes along Old Street and Shoreditch High Street."
},
{
"label": "Spending Power",
"score": 71,
"summary": "IMD decile 6 for income. Mixed demographic with high disposable income among tech workers."
},
{
"label": "Operating Costs",
"score": 62,
"summary": "Commercial rents averaging £55-70/sqft. Above London average but justified by footfall density."
}
],
"summary": "Shoreditch scores 74/100 for business viability. Strong foot traffic and transport links offset higher operating costs. The area's tech-driven economy creates consistent demand.",
"sections": [
{
"title": "Location & Demographics",
"content": "Shoreditch sits within the London Borough of Hackney...",
"data_points": [
{ "label": "Ward", "value": "Hoxton East & Shoreditch" },
{ "label": "Constituency", "value": "Hackney South and Shoreditch" },
{ "label": "IMD Decile", "value": "6 (mid-range)" }
]
},
{
"title": "Safety & Crime",
"content": "276 crimes recorded in the last 3 months within 1 mile...",
"data_points": [
{ "label": "Total crimes (3 months)", "value": "276" },
{ "label": "Most common", "value": "Theft (34%)" },
{ "label": "Trend", "value": "Stable" }
]
}
],
"recommendations": [
"Consider locations east of Shoreditch High Street for 15-20% lower rents with comparable footfall",
"Target the lunch trade: 45,000 weekday commuters create peak demand 12:00-14:00",
"Monitor the Bishopsgate Goodsyard redevelopment for potential uplift in foot traffic by 2027"
],
"data_sources": [
"postcodes.io",
"police.uk",
"IMD 2025",
"OpenStreetMap",
"Environment Agency",
"HM Land Registry",
"Ofsted"
],
"generated_at": "2026-03-07T12:34:56.789Z"
}
}Error Handling
Errors return a JSON object with an error field describing the issue.
// Error response format
{
"error": "Missing required field: area (string)"
}Data Sources
Every report is grounded in real UK government and open data, fetched live for each request. No cached or estimated data.
Rate Limits
Need higher volume? Contact hello@area-iq.co.uk for custom enterprise limits.
Embed Widget
Add area intelligence to any website with a single script tag. No API key required. The widget is rate limited and cached, designed for public-facing pages like property listings.
<!-- Add this where you want the widget to appear --> <div data-areaiq-postcode="SW1A 1AA" data-areaiq-intent="moving" ></div> <!-- Add this before </body> --> <script src="https://www.area-iq.co.uk/widget.js"></script>
data-areaiq-postcodeRequiredUK postcode or area namedata-areaiq-intentOptionalmoving (default), business, investing, or researchdata-areaiq-themeOptionaldark (default) or light<div data-areaiq-postcode="E1 6AN" data-areaiq-intent="investing"></div> <div data-areaiq-postcode="SW11 1AA" data-areaiq-intent="moving"></div> <div data-areaiq-postcode="M1 1AD" data-areaiq-intent="business" data-areaiq-theme="light"></div> <script src="https://www.area-iq.co.uk/widget.js"></script>
The widget endpoint allows 60 requests per hour per domain. Responses are cached for 24 hours, so repeated loads of the same postcode are served instantly at no cost.
Code Examples
The API returns standard JSON over HTTPS. No SDK required, use any HTTP client.
cURL
curl -X POST https://www.area-iq.co.uk/api/v1/report \
-H "Authorization: Bearer aiq_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"area": "Shoreditch",
"intent": "business"
}'Node.js / TypeScript
const response = await fetch("https://www.area-iq.co.uk/api/v1/report", {
method: "POST",
headers: {
"Authorization": "Bearer aiq_your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
area: "Camden",
intent: "investing",
}),
});
const { id, report } = await response.json();
console.log(report.areaiq_score); // 72
console.log(report.sub_scores.length); // 5
console.log(report.recommendations); // ["Consider...", ...]Python
import requests
response = requests.post(
"https://www.area-iq.co.uk/api/v1/report",
headers={"Authorization": "Bearer aiq_your_api_key"},
json={"area": "Camden", "intent": "investing"},
)
data = response.json()
report = data["report"]
print(f"Score: {report['areaiq_score']}/100")
print(f"Dimensions: {len(report['sub_scores'])}")
for sub in report["sub_scores"]:
print(f" {sub['label']}: {sub['score']}/100")Go
payload := map[string]string{
"area": "Manchester",
"intent": "moving",
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", "https://www.area-iq.co.uk/api/v1/report", bytes.NewBuffer(body))
req.Header.Set("Authorization", "Bearer aiq_your_api_key")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)