Integration Recipes
Copy-paste code examples to embed nursery and area data into property sites, parenting blogs, and comparison platforms. All public endpoints are free, keyless, and CORS-enabled.
Attribution required
Nursery data is from the Ofsted Early Years register under the Open Government Licence v3.0. Always include: "Contains Ofsted data © Crown copyright and database right" when displaying nursery grades.
Nurseries near this property
Property listing sites (Zoopla, Rightmove, estate agents) showing nearby nurseries on each listing page.
// Fetch nurseries within 2km of a postcode
const res = await fetch('https://nursery-finder-6u7r.onrender.com/api/v1/nurseries/search', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
postcode: 'SW11 1AA',
radius_km: 2,
limit: 5
})
});
const { data, meta } = await res.json();
// data = [{ urn, name, ofsted_overall_grade, distance_km, fee_avg_monthly,
// places_funded_2yr, places_funded_3_4yr, town, postcode, lat, lng }]
// Render results
data.forEach(n => {
console.log(`${n.name} — ${n.ofsted_overall_grade} — ${n.distance_km.toFixed(1)}km away`);
if (n.fee_avg_monthly) console.log(` Avg fee: £${n.fee_avg_monthly}/month`);
if (n.places_funded_2yr > 0) console.log(' Accepts 2yr funded hours');
});Example response:
{
"data": [
{
"urn": "EY123456",
"name": "Bright Stars Nursery",
"ofsted_overall_grade": "Outstanding",
"distance_km": 0.4,
"fee_avg_monthly": 1250,
"total_places": 45,
"places_funded_2yr": 10,
"places_funded_3_4yr": 15,
"lat": 51.4655,
"lng": -0.1631
}
],
"meta": { "total": 12, "page": 1, "limit": 5 }
}Family Score badge
Estate agent listings, property portals, and relocation services showing a single family-friendliness score for an area.
// Get family score for a postcode district
const res = await fetch('https://nursery-finder-6u7r.onrender.com/api/v1/areas/SW11');
const area = await res.json();
// area.family_score = 0-100 composite score
// area.nursery_count_total = number of nurseries
// area.nursery_outstanding_pct = % rated Outstanding
// area.avg_sale_price_all = average property price
// area.crime_rate_per_1000 = crime incidents per 1000 residents
// Render a badge
const badge = document.createElement('div');
badge.innerHTML = `
<div style="display:inline-flex;align-items:center;gap:8px;padding:8px 16px;
border-radius:24px;background:#f0fdf4;border:1px solid #bbf7d0;">
<span style="font-size:24px;font-weight:700;color:#15803d;">
${area.family_score}/100
</span>
<span style="font-size:13px;color:#166534;">
Family Score — ${area.nursery_count_total} nurseries nearby
</span>
</div>
`;Example response:
{
"postcode_district": "SW11",
"local_authority": "Wandsworth",
"region": "London",
"family_score": 78,
"nursery_count_total": 42,
"nursery_count_outstanding": 8,
"nursery_outstanding_pct": 19.0,
"avg_sale_price_all": 725000,
"crime_rate_per_1000": 85.2,
"imd_decile": 7,
"lat": 51.4619,
"lng": -0.1674
}Embeddable nursery widget
Parenting blogs, forums, and community sites that want to embed a nursery search widget with zero development effort.
<!-- Drop this into any HTML page -->
<div id="nursery-widget"
data-postcode="SW11 1AA"
data-limit="5"
data-radius="3">
</div>
<script src="https://nursery-finder-6u7r.onrender.com/embed.js"></script>
<!-- The widget will render a styled list of nearby nurseries
with Ofsted grades, fees, and links to full profiles.
OGL attribution is included automatically. -->Nursery pins on your map
Property search sites with interactive maps (Leaflet, Mapbox, Google Maps) that want to overlay nursery locations.
// Search nurseries and plot on a Leaflet map
const res = await fetch('https://nursery-finder-6u7r.onrender.com/api/v1/nurseries/search', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ postcode: 'SW11 1AA', radius_km: 5, limit: 50 })
});
const { data } = await res.json();
// Add markers to your Leaflet map
data.forEach(nursery => {
if (!nursery.lat || !nursery.lng) return;
const color = {
'Outstanding': '#16a34a',
'Good': '#2563eb',
'Requires improvement': '#d97706',
'Inadequate': '#dc2626'
}[nursery.ofsted_overall_grade] || '#6b7280';
L.circleMarker([nursery.lat, nursery.lng], {
radius: 8,
fillColor: color,
fillOpacity: 0.8,
color: '#fff',
weight: 2
})
.bindPopup(`
<strong>${nursery.name}</strong><br>
Ofsted: ${nursery.ofsted_overall_grade || 'Not yet inspected'}<br>
${nursery.distance_km ? nursery.distance_km.toFixed(1) + 'km away' : ''}
<br><a href="https://nurserymatch.com/nursery/${nursery.urn}" target="_blank">
View full profile
</a>
`)
.addTo(map);
});Schools + nurseries combined
Family relocation services and area guides showing the full childcare-to-school picture for a location.
// Fetch both nurseries and schools near a point
const lat = 51.4655, lng = -0.1631;
const [nurseries, schools] = await Promise.all([
fetch('https://nursery-finder-6u7r.onrender.com/api/v1/nurseries/search', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ postcode: 'SW11 1AA', radius_km: 2, limit: 10 })
}).then(r => r.json()),
fetch(`https://nursery-finder-6u7r.onrender.com/api/v1/schools/near?lat=${lat}&lng=${lng}&radius_km=2`)
.then(r => r.json())
]);
console.log(`${nurseries.meta.total} nurseries nearby`);
console.log(`${schools.data.length} primary schools nearby`);
// Combine for a full childcare picture
const childcareReport = {
nurseries: nurseries.data.map(n => ({
name: n.name, grade: n.ofsted_overall_grade, type: 'nursery'
})),
schools: schools.data.map(s => ({
name: s.name, phase: s.phase, type: 'school'
}))
};Rate limits & best practices
- 100 requests per 15 minutes per IP for all public endpoints.
- Cache responses on your side — nursery data updates weekly, area data monthly.
- Use the
limitparameter to fetch only what you need. - For high-volume integrations, contact us for a dedicated API key.