Skip to main content

Overview

Search for schools within a specified radius of a geographic coordinate. Results are ordered by distance from the search point.

Query Parameters

ParameterTypeRequiredDescription
latitudenumberYesLatitude coordinate
longitudenumberYesLongitude coordinate
radiusnumberNoSearch radius in metres (default: 1000, max: 10000)
unitstringNoDistance unit: meters or miles (default: meters)
statusstringNoSchool status: open, closed
typestringNoSchool type (e.g., Academy, Community)
phasestringNoEducation phase: Primary, Secondary
ratingstringNoOfsted rating: Outstanding, Good
limitnumberNoMaximum results (default: 20, max: 100)

Response

{
  "data": [
    {
      "id": "sch_abc123",
      "urn": "100000",
      "name": "Westminster Academy",
      "slug": "westminster-academy",
      "type": "Academy",
      "phase": "Secondary",
      "status": "Open",
      "address": {
        "line1": "123 School Street",
        "town": "London",
        "postcode": "SW1A 2AA"
      },
      "location": {
        "latitude": 51.5074,
        "longitude": -0.1278
      },
      "distance": {
        "meters": 450,
        "miles": 0.28
      },
      "ofstedRating": "Good",
      "numberOfPupils": 1200,
      "ageRange": {
        "from": 11,
        "to": 18
      }
    }
  ],
  "search": {
    "center": {
      "latitude": 51.5074,
      "longitude": -0.1278
    },
    "radius": {
      "meters": 2000,
      "miles": 1.24
    },
    "resultsCount": 8
  }
}

Example Requests

Find Schools Near Location

import { Vepler } from '@vepler/sdk';

const vepler = new Vepler({ apiKey: process.env.VEPLER_API_KEY });

const schools = await vepler.schools.searchNearby({
  latitude: 51.5074,
  longitude: -0.1278,
  radius: 2000,
  status: 'open'
});

schools.data.forEach(school => {
  console.log(`${school.name} - ${school.distance.meters}m away`);
});

Find Good Primary Schools

const primarySchools = await vepler.schools.searchNearby({
  latitude: 51.5074,
  longitude: -0.1278,
  radius: 1500,
  phase: 'Primary',
  rating: 'Good,Outstanding',
  limit: 10
});

Property Listing Enhancement

// Enhance property listings with nearby schools
const enhanceProperty = async (property) => {
  const nearbySchools = await vepler.schools.searchNearby({
    latitude: property.location.latitude,
    longitude: property.location.longitude,
    radius: 1000,
    rating: 'Good,Outstanding',
    status: 'open',
    limit: 5
  });

  return {
    ...property,
    nearbySchools: nearbySchools.data.map(school => ({
      name: school.name,
      distance: school.distance.meters,
      rating: school.ofstedRating,
      phase: school.phase
    }))
  };
};

Distance Calculation

Distances are calculated using the Haversine formula, providing accurate great-circle distances between coordinates. Results are always ordered by distance (nearest first).

Use Cases

Add school proximity data to property searches:
const property = await vepler.property.get('p_0x123');
const schools = await vepler.schools.searchNearby({
  latitude: property.location.latitude,
  longitude: property.location.longitude,
  radius: 1000,
  rating: 'Outstanding'
});
Help families find properties near preferred schools:
const school = await vepler.schools.get('sch_abc123');
const nearbyProperties = await vepler.property.query({
  filters: {
    location: {
      latitude: school.location.latitude,
      longitude: school.location.longitude,
      radius: 1000
    }
  }
});
Analyze competition and choice in an area:
const schoolDensity = await vepler.schools.searchNearby({
  latitude: 51.5074,
  longitude: -0.1278,
  radius: 3000,
  phase: 'Primary'
});

console.log(`${schoolDensity.search.resultsCount} primary schools within 3km`);