Skip to main content

Overview

Returns comprehensive metric profiles including historical trends, national comparisons, and detailed breakdowns. Provides a complete picture of school performance over time.

Query Parameters

ParameterTypeRequiredDescription
schoolIdsstringYesComma-separated list of school IDs
yearsnumberNoNumber of years of historical data (default: 3, max: 5)

Response

{
  "data": [
    {
      "schoolId": "sch_abc123",
      "urn": "100000",
      "name": "Westminster Academy",
      "phase": "Secondary",
      "profile": {
        "current": {
          "year": "2023",
          "progress8": 0.45,
          "attainment8": 52.3,
          "ebacc": {
            "entryRate": 0.42,
            "averagePointScore": 4.8
          }
        },
        "historical": [
          {
            "year": "2022",
            "progress8": 0.38,
            "attainment8": 50.1
          },
          {
            "year": "2021",
            "progress8": 0.35,
            "attainment8": 48.7
          }
        ],
        "trends": {
          "progress8": {
            "direction": "improving",
            "change": 0.10,
            "percentageChange": 28.6
          },
          "attainment8": {
            "direction": "improving",
            "change": 3.6,
            "percentageChange": 7.4
          }
        },
        "nationalComparison": {
          "progress8": {
            "difference": 0.42,
            "percentile": 78,
            "status": "above_average"
          },
          "attainment8": {
            "difference": 5.8,
            "percentile": 72,
            "status": "above_average"
          }
        },
        "localAuthorityComparison": {
          "rank": 5,
          "total": 28,
          "percentile": 82
        }
      }
    }
  ]
}

Trend Directions

DirectionDescription
improvingPerformance increasing over time
stablePerformance relatively stable
decliningPerformance decreasing over time

Status Values

StatusDescription
well_above_averageTop 10% nationally
above_averageTop 25% nationally
averageMiddle 50% nationally
below_averageBottom 25% nationally
well_below_averageBottom 10% nationally

Example Requests

Basic Profile

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

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

const profiles = await vepler.schools.getMetricProfiles({
  schoolIds: 'sch_abc123',
  years: 3
});

const profile = profiles.data[0].profile;

console.log(`Current Progress 8: ${profile.current.progress8}`);
console.log(`Trend: ${profile.trends.progress8.direction}`);
console.log(`National Percentile: ${profile.nationalComparison.progress8.percentile}`);

Compare School Trajectories

const profiles = await vepler.schools.getMetricProfiles({
  schoolIds: 'sch_abc123,sch_def456',
  years: 5
});

profiles.data.forEach(school => {
  console.log(`\n${school.name}`);
  console.log(`3-year change: ${school.profile.trends.progress8.change}`);
  console.log(`Direction: ${school.profile.trends.progress8.direction}`);
  console.log(`LA Rank: ${school.profile.localAuthorityComparison.rank}/${school.profile.localAuthorityComparison.total}`);
});

Identify Improving Schools

const analyseImprovement = async (schoolIds: string[]) => {
  const profiles = await vepler.schools.getMetricProfiles({
    schoolIds: schoolIds.join(','),
    years: 3
  });

  return profiles.data
    .filter(school =>
      school.profile.trends.progress8.direction === 'improving' &&
      school.profile.trends.progress8.percentageChange > 20
    )
    .map(school => ({
      name: school.name,
      improvement: school.profile.trends.progress8.percentageChange
    }))
    .sort((a, b) => b.improvement - a.improvement);
};

const improving = await analyseImprovement([
  'sch_abc123', 'sch_def456', 'sch_ghi789'
]);

console.log('Schools with significant improvement:');
console.table(improving);

Visualisation Example

const createPerformanceChart = async (schoolId: string) => {
  const profile = await vepler.schools.getMetricProfiles({
    schoolIds: schoolId,
    years: 5
  });

  const data = profile.data[0];
  const historical = data.profile.historical;

  // Prepare data for charting library
  return {
    labels: [...historical.map(h => h.year), data.profile.current.year],
    datasets: [{
      label: 'Progress 8',
      data: [
        ...historical.map(h => h.progress8),
        data.profile.current.progress8
      ]
    }]
  };
};

Use Cases

Identify schools with strong improvement trajectories for property investment:
const profiles = await vepler.schools.getMetricProfiles({
  schoolIds: nearbySchoolIds.join(','),
  years: 5
});

const strongSchools = profiles.data.filter(s =>
  s.profile.current.progress8 > 0 &&
  s.profile.trends.progress8.direction === 'improving'
);
Generate detailed comparison reports:
const generateReport = async (schoolIds: string[]) => {
  const profiles = await vepler.schools.getMetricProfiles({
    schoolIds: schoolIds.join(','),
    years: 3
  });

  return profiles.data.map(school => ({
    name: school.name,
    currentPerformance: school.profile.current,
    trend: school.profile.trends.progress8.direction,
    nationalStanding: school.profile.nationalComparison.progress8.percentile,
    localRank: school.profile.localAuthorityComparison.rank
  }));
};
Help parents understand school performance trends:
const schoolInsights = async (schoolId: string) => {
  const profile = await vepler.schools.getMetricProfiles({
    schoolIds: schoolId,
    years: 3
  });

  const p = profile.data[0].profile;

  return {
    summary: `${p.nationalComparison.progress8.status.replace('_', ' ')}`,
    trend: p.trends.progress8.direction,
    improvement: `${p.trends.progress8.percentageChange}% over 3 years`,
    standing: `Top ${100 - p.nationalComparison.progress8.percentile}% nationally`
  };
};

Data Notes

  • Historical data availability varies by school and metric
  • Some years may have missing data due to COVID-19 or other circumstances
  • Comparisons use the most recent complete national dataset
  • Local authority rankings only include schools within the same phase